14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_cideclare function print(str:any):string;
174514f5e3Sopenharmony_citry {
184514f5e3Sopenharmony_ci    throw "Throw Test";
194514f5e3Sopenharmony_ci}
204514f5e3Sopenharmony_cicatch (ex) {
214514f5e3Sopenharmony_ci    print(ex);
224514f5e3Sopenharmony_ci}
234514f5e3Sopenharmony_ci
244514f5e3Sopenharmony_citry {
254514f5e3Sopenharmony_ci    throw 123;
264514f5e3Sopenharmony_ci}
274514f5e3Sopenharmony_cicatch (ex) {
284514f5e3Sopenharmony_ci    print(ex);
294514f5e3Sopenharmony_ci}
304514f5e3Sopenharmony_ci
314514f5e3Sopenharmony_ci// throw an exception when superCall case1: supercallspread
324514f5e3Sopenharmony_cifunction testError(message) {
334514f5e3Sopenharmony_ci    this.message = message || "";
344514f5e3Sopenharmony_ci  }
354514f5e3Sopenharmony_ci  
364514f5e3Sopenharmony_ci  testError.prototype.toString = function () {
374514f5e3Sopenharmony_ci    return "testError: " + this.message;
384514f5e3Sopenharmony_ci  };
394514f5e3Sopenharmony_ci  
404514f5e3Sopenharmony_ci  testError.thrower = (message) => {
414514f5e3Sopenharmony_ci    throw new testError(message);
424514f5e3Sopenharmony_ci  };
434514f5e3Sopenharmony_ci
444514f5e3Sopenharmony_cilet thrown1 = new testError("throw from A1");
454514f5e3Sopenharmony_cilet caught1;
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_ciclass A1 {
484514f5e3Sopenharmony_ci  constructor(name, value) {
494514f5e3Sopenharmony_ci    throw thrown1;
504514f5e3Sopenharmony_ci  }
514514f5e3Sopenharmony_ci};
524514f5e3Sopenharmony_ciclass B1 extends A1{
534514f5e3Sopenharmony_ci  constructor(...b: ConstructorParameters<typeof A1>) {
544514f5e3Sopenharmony_ci    try {
554514f5e3Sopenharmony_ci      super(...b);
564514f5e3Sopenharmony_ci    } catch (err) {
574514f5e3Sopenharmony_ci      caught1 = err;
584514f5e3Sopenharmony_ci    }
594514f5e3Sopenharmony_ci  }
604514f5e3Sopenharmony_ci};
614514f5e3Sopenharmony_ci
624514f5e3Sopenharmony_citry {
634514f5e3Sopenharmony_ci  new B1("test1", 11);
644514f5e3Sopenharmony_ci} catch (_) {};
654514f5e3Sopenharmony_ciprint(caught1);
664514f5e3Sopenharmony_ciprint(thrown1);
674514f5e3Sopenharmony_ci
684514f5e3Sopenharmony_ci// throw an exception when superCall case2: supercallthisrange
694514f5e3Sopenharmony_cilet thrown2 = new testError("throw from A2");
704514f5e3Sopenharmony_cilet caught2;
714514f5e3Sopenharmony_ciclass A2 {
724514f5e3Sopenharmony_ci  constructor() {
734514f5e3Sopenharmony_ci    throw thrown2;
744514f5e3Sopenharmony_ci  }
754514f5e3Sopenharmony_ci};
764514f5e3Sopenharmony_ci
774514f5e3Sopenharmony_ciclass B2 extends A2 {
784514f5e3Sopenharmony_ci  constructor() {
794514f5e3Sopenharmony_ci    try {
804514f5e3Sopenharmony_ci      super();
814514f5e3Sopenharmony_ci    } catch (err) {
824514f5e3Sopenharmony_ci      caught2 = err;
834514f5e3Sopenharmony_ci    }
844514f5e3Sopenharmony_ci  }
854514f5e3Sopenharmony_ci};
864514f5e3Sopenharmony_ci
874514f5e3Sopenharmony_citry {
884514f5e3Sopenharmony_ci  new B2();
894514f5e3Sopenharmony_ci} catch (_) {};
904514f5e3Sopenharmony_ciprint(caught2);
914514f5e3Sopenharmony_ciprint(thrown2);
924514f5e3Sopenharmony_ci
934514f5e3Sopenharmony_ci//aot: when open inline mode, internal error should be throw correctly
944514f5e3Sopenharmony_ciclass B {
954514f5e3Sopenharmony_ci  p(arg) {
964514f5e3Sopenharmony_ci      throw new Error('internal error') // internal error
974514f5e3Sopenharmony_ci  }
984514f5e3Sopenharmony_ci}
994514f5e3Sopenharmony_ciconst v1 = new B()
1004514f5e3Sopenharmony_cilet x = v1.p
1014514f5e3Sopenharmony_cilet y = [111]
1024514f5e3Sopenharmony_citry{
1034514f5e3Sopenharmony_ci  Reflect.apply(x, "111", y); // inline mode, error shold be throw here
1044514f5e3Sopenharmony_ci  [11] // createarraywithbuffer, not here
1054514f5e3Sopenharmony_ci} catch (e) {
1064514f5e3Sopenharmony_ci  print(e)
1074514f5e3Sopenharmony_ci};