14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 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(function StoreToSuper () {
164514f5e3Sopenharmony_ci  "use strict";
174514f5e3Sopenharmony_ci  class A {
184514f5e3Sopenharmony_ci    s() {
194514f5e3Sopenharmony_ci      super.bla = 10;
204514f5e3Sopenharmony_ci    }
214514f5e3Sopenharmony_ci  };
224514f5e3Sopenharmony_ci
234514f5e3Sopenharmony_ci  let a = new A();
244514f5e3Sopenharmony_ci  (new A).s.call(a);
254514f5e3Sopenharmony_ci  print(10 == a.bla);
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_ci  try {
284514f5e3Sopenharmony_ci    (new A).s.call(undefined);
294514f5e3Sopenharmony_ci  } catch (error) {
304514f5e3Sopenharmony_ci    print(error instanceof TypeError);
314514f5e3Sopenharmony_ci  }
324514f5e3Sopenharmony_ci
334514f5e3Sopenharmony_ci  try {
344514f5e3Sopenharmony_ci    (new A).s.call(42);
354514f5e3Sopenharmony_ci  } catch (error) {
364514f5e3Sopenharmony_ci    print(error instanceof TypeError);
374514f5e3Sopenharmony_ci  }
384514f5e3Sopenharmony_ci
394514f5e3Sopenharmony_ci  try {
404514f5e3Sopenharmony_ci    (new A).s.call(null);
414514f5e3Sopenharmony_ci  } catch (error) {
424514f5e3Sopenharmony_ci    print(error instanceof TypeError);
434514f5e3Sopenharmony_ci  }
444514f5e3Sopenharmony_ci
454514f5e3Sopenharmony_ci  try {
464514f5e3Sopenharmony_ci    (new A).s.call("abc");
474514f5e3Sopenharmony_ci  } catch (error) {
484514f5e3Sopenharmony_ci    print(error instanceof TypeError);
494514f5e3Sopenharmony_ci  }
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_ci})();
524514f5e3Sopenharmony_ci
534514f5e3Sopenharmony_ci
544514f5e3Sopenharmony_ci(function LoadFromSuper () {
554514f5e3Sopenharmony_ci  "use strict";
564514f5e3Sopenharmony_ci  class A {
574514f5e3Sopenharmony_ci    s() {
584514f5e3Sopenharmony_ci      return super.bla;
594514f5e3Sopenharmony_ci    }
604514f5e3Sopenharmony_ci  };
614514f5e3Sopenharmony_ci
624514f5e3Sopenharmony_ci  let a = new A();
634514f5e3Sopenharmony_ci  print(undefined == (new A).s.call(a));
644514f5e3Sopenharmony_ci  print(undefined == (new A).s.call(undefined));
654514f5e3Sopenharmony_ci  print(undefined == (new A).s.call(42));
664514f5e3Sopenharmony_ci  print(undefined == (new A).s.call(null));
674514f5e3Sopenharmony_ci  print(undefined == (new A).s.call("abc"));
684514f5e3Sopenharmony_ci})();
694514f5e3Sopenharmony_ci
704514f5e3Sopenharmony_ciclass TestA {
714514f5e3Sopenharmony_ci  constructor() {
724514f5e3Sopenharmony_ci      print("TestA", this.constructor.name, new.target.name);
734514f5e3Sopenharmony_ci  }
744514f5e3Sopenharmony_ci}
754514f5e3Sopenharmony_ciclass TestB extends TestA {
764514f5e3Sopenharmony_ci  constructor() {
774514f5e3Sopenharmony_ci      super();
784514f5e3Sopenharmony_ci      print("TestB", this.constructor.name, new.target.name);
794514f5e3Sopenharmony_ci      this.test();
804514f5e3Sopenharmony_ci  }
814514f5e3Sopenharmony_ci}
824514f5e3Sopenharmony_ciclass TestC {
834514f5e3Sopenharmony_ci  constructor() {
844514f5e3Sopenharmony_ci      print("TestC", this.constructor.name, new.target.name);
854514f5e3Sopenharmony_ci  }
864514f5e3Sopenharmony_ci  test() {
874514f5e3Sopenharmony_ci      print("TestC");
884514f5e3Sopenharmony_ci  }
894514f5e3Sopenharmony_ci}
904514f5e3Sopenharmony_cilet c1 = Reflect.construct(TestB, [], TestC.prototype.constructor);
914514f5e3Sopenharmony_cilet c2 = Reflect.construct(TestB, [], c1.constructor);
92