• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16function assert (expr: unknown, msg?: string): asserts expr {
17    if (!expr) throw new Error(msg);
18}
19
20
21// support fastcall
22class Car {
23};
24
25// support fastcall
26class Base {
27  constructor() {
28  }
29};
30
31// donot support fastcall: CALLRUNTIME_SUPERCALLFORWARDALLARGS_PREF_V8
32class SuperCallForwordAllArgs extends Base {
33}
34
35// donot support fastcall: SUPERCALLTHISRANGE_IMM8_IMM8_V8
36class SuperCallThisRange extends Base {
37    constructor() {
38        super()
39    }
40}
41
42// donot support fastcall: WIDE_SUPERCALLTHISRANGE_PREF_IMM16_V8
43class WideSuperCallThisRange extends Base {
44    constructor() {
45        super(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,arg24,arg25,arg26,arg27,arg28,arg29,arg30,arg31,arg32,arg33,arg34,arg35,arg36,arg37,arg38,arg39,arg40,arg41,arg42,arg43,arg44,arg45,arg46,arg47,arg48,arg49,arg50,arg51,arg52,arg53,arg54,arg55,arg56,arg57,arg58,arg59,arg60,arg61,arg62,arg63,arg64,arg65,arg66,arg67,arg68,arg69,arg70,arg71,arg72,arg73,arg74,arg75,arg76,arg77,arg78,arg79,arg80,arg81,arg82,arg83,arg84,arg85,arg86,arg87,arg88,arg89,arg90,arg91,arg92,arg93,arg94,arg95,arg96,arg97,arg98,arg99,arg100,arg101,arg102,arg103,arg104,arg105,arg106,arg107,arg108,arg109,arg110,arg111,arg112,arg113,arg114,arg115,arg116,arg117,arg118,arg119,arg120,arg121,arg122,arg123,arg124,arg125,arg126,arg127,arg128,arg129,arg130,arg131,arg132,arg133,arg134,arg135,arg136,arg137,arg138,arg139,arg140,arg141,arg142,arg143,arg144,arg145,arg146,arg147,arg148,arg149,arg150,arg151,arg152,arg153,arg154,arg155,arg156,arg157,arg158,arg159,arg160,arg161,arg162,arg163,arg164,arg165,arg166,arg167,arg168,arg169,arg170,arg171,arg172,arg173,arg174,arg175,arg176,arg177,arg178,arg179,arg180,arg181,arg182,arg183,arg184,arg185,arg186,arg187,arg188,arg189,arg190,arg191,arg192,arg193,arg194,arg195,arg196,arg197,arg198,arg199,arg200,arg201,arg202,arg203,arg204,arg205,arg206,arg207,arg208,arg209,arg210,arg211,arg212,arg213,arg214,arg215,arg216,arg217,arg218,arg219,arg220,arg221,arg222,arg223,arg224,arg225,arg226,arg227,arg228,arg229,arg230,arg231,arg232,arg233,arg234,arg235,arg236,arg237,arg238,arg239,arg240,arg241,arg242,arg243,arg244,arg245,arg246,arg247,arg248,arg249,arg250,arg251,arg252,arg253,arg254,arg255,arg256)
46    }
47}
48
49// donot support fastcall: SUPERCALLSPREAD_IMM8_V8
50class SuperCallSpread extends Base {
51    constructor() {
52        super(...args)
53    }
54}
55
56// donot support fastcall: COPYRESTARGS_IMM8
57function CopyRestArgs(x, ...theArgs) {
58    return x + theArgs.length;
59}
60
61// donot support fastcall: WIDE_COPYRESTARGS_PREF_IMM16
62function WideCopyRestArgs(x, arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,arg24,arg25,arg26,arg27,arg28,arg29,arg30,arg31,arg32,arg33,arg34,arg35,arg36,arg37,arg38,arg39,arg40,arg41,arg42,arg43,arg44,arg45,arg46,arg47,arg48,arg49,arg50,arg51,arg52,arg53,arg54,arg55,arg56,arg57,arg58,arg59,arg60,arg61,arg62,arg63,arg64,arg65,arg66,arg67,arg68,arg69,arg70,arg71,arg72,arg73,arg74,arg75,arg76,arg77,arg78,arg79,arg80,arg81,arg82,arg83,arg84,arg85,arg86,arg87,arg88,arg89,arg90,arg91,arg92,arg93,arg94,arg95,arg96,arg97,arg98,arg99,arg100,arg101,arg102,arg103,arg104,arg105,arg106,arg107,arg108,arg109,arg110,arg111,arg112,arg113,arg114,arg115,arg116,arg117,arg118,arg119,arg120,arg121,arg122,arg123,arg124,arg125,arg126,arg127,arg128,arg129,arg130,arg131,arg132,arg133,arg134,arg135,arg136,arg137,arg138,arg139,arg140,arg141,arg142,arg143,arg144,arg145,arg146,arg147,arg148,arg149,arg150,arg151,arg152,arg153,arg154,arg155,arg156,arg157,arg158,arg159,arg160,arg161,arg162,arg163,arg164,arg165,arg166,arg167,arg168,arg169,arg170,arg171,arg172,arg173,arg174,arg175,arg176,arg177,arg178,arg179,arg180,arg181,arg182,arg183,arg184,arg185,arg186,arg187,arg188,arg189,arg190,arg191,arg192,arg193,arg194,arg195,arg196,arg197,arg198,arg199,arg200,arg201,arg202,arg203,arg204,arg205,arg206,arg207,arg208,arg209,arg210,arg211,arg212,arg213,arg214,arg215,arg216,arg217,arg218,arg219,arg220,arg221,arg222,arg223,arg224,arg225,arg226,arg227,arg228,arg229,arg230,arg231,arg232,arg233,arg234,arg235,arg236,arg237,arg238,arg239,arg240,arg241,arg242,arg243,arg244,arg245,arg246,arg247,arg248,arg249,arg250,arg251,arg252,arg253,arg254,arg255,arg256,...theArgs) {
63    return x + theArgs.length;
64}
65
66// donot support fastcall: RESUMEGENERATOR\SUSPENDGENERATOR_V8
67export class DsHelper {
68    private dsHelper: object
69    async getDsHelper(): Promise<object> {
70        await 1
71        return new Promise((resolve) => {
72            resolve(this.dsHelper)
73        })
74    }
75}
76var x = new DsHelper()
77
78// donot support fastcall: GETUNMAPPEDARGS
79function GetUnmappedArgs() {
80    return arguments.length;
81}
82
83class SuperCallArrow extends Base {
84  af;
85  constructor() {
86    super();
87    // donot support fastcall: SUPERCALLARROWRANGE_IMM8_IMM8_V8
88    this.af = _ => super();
89  }
90}
91var supercallarrow = new SuperCallArrow();
92
93class WideSuperCallArrow extends Base {
94  af;
95  constructor() {
96    super();
97    // donot support fastcall: WIDE_SUPERCALLARROWRANGE_PREF_IMM16_V8
98    this.af = _ => super(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,arg24,arg25,arg26,arg27,arg28,arg29,arg30,arg31,arg32,arg33,arg34,arg35,arg36,arg37,arg38,arg39,arg40,arg41,arg42,arg43,arg44,arg45,arg46,arg47,arg48,arg49,arg50,arg51,arg52,arg53,arg54,arg55,arg56,arg57,arg58,arg59,arg60,arg61,arg62,arg63,arg64,arg65,arg66,arg67,arg68,arg69,arg70,arg71,arg72,arg73,arg74,arg75,arg76,arg77,arg78,arg79,arg80,arg81,arg82,arg83,arg84,arg85,arg86,arg87,arg88,arg89,arg90,arg91,arg92,arg93,arg94,arg95,arg96,arg97,arg98,arg99,arg100,arg101,arg102,arg103,arg104,arg105,arg106,arg107,arg108,arg109,arg110,arg111,arg112,arg113,arg114,arg115,arg116,arg117,arg118,arg119,arg120,arg121,arg122,arg123,arg124,arg125,arg126,arg127,arg128,arg129,arg130,arg131,arg132,arg133,arg134,arg135,arg136,arg137,arg138,arg139,arg140,arg141,arg142,arg143,arg144,arg145,arg146,arg147,arg148,arg149,arg150,arg151,arg152,arg153,arg154,arg155,arg156,arg157,arg158,arg159,arg160,arg161,arg162,arg163,arg164,arg165,arg166,arg167,arg168,arg169,arg170,arg171,arg172,arg173,arg174,arg175,arg176,arg177,arg178,arg179,arg180,arg181,arg182,arg183,arg184,arg185,arg186,arg187,arg188,arg189,arg190,arg191,arg192,arg193,arg194,arg195,arg196,arg197,arg198,arg199,arg200,arg201,arg202,arg203,arg204,arg205,arg206,arg207,arg208,arg209,arg210,arg211,arg212,arg213,arg214,arg215,arg216,arg217,arg218,arg219,arg220,arg221,arg222,arg223,arg224,arg225,arg226,arg227,arg228,arg229,arg230,arg231,arg232,arg233,arg234,arg235,arg236,arg237,arg238,arg239,arg240,arg241,arg242,arg243,arg244,arg245,arg246,arg247,arg248,arg249,arg250,arg251,arg252,arg253,arg254,arg255,arg256);
99  }
100}
101var widesupercallarrow = new WideSuperCallArrow();
102
103assert(ArkTools.isAOTCompiled(Car))
104assert(ArkTools.isAOTCompiled(Base))
105assert(ArkTools.isAOTCompiled(SuperCallForwordAllArgs))
106assert(ArkTools.isAOTCompiled(SuperCallThisRange))
107assert(ArkTools.isAOTCompiled(WideSuperCallThisRange))
108assert(ArkTools.isAOTCompiled(SuperCallSpread))
109assert(ArkTools.isAOTCompiled(CopyRestArgs))
110assert(ArkTools.isAOTCompiled(WideCopyRestArgs))
111assert(ArkTools.isAOTCompiled(x.getDsHelper))
112assert(ArkTools.isAOTCompiled(GetUnmappedArgs))
113assert(ArkTools.isAOTCompiled(supercallarrow.af))
114assert(ArkTools.isAOTCompiled(widesupercallarrow.af))
115
116assert(ArkTools.isFastCall(Car))
117assert(ArkTools.isFastCall(Base))
118assert(!ArkTools.isFastCall(SuperCallForwordAllArgs))
119assert(!ArkTools.isFastCall(SuperCallThisRange))
120assert(!ArkTools.isFastCall(WideSuperCallThisRange))
121assert(!ArkTools.isFastCall(SuperCallSpread))
122assert(!ArkTools.isFastCall(CopyRestArgs))
123assert(!ArkTools.isFastCall(WideCopyRestArgs))
124assert(!ArkTools.isFastCall(x.getDsHelper))
125assert(!ArkTools.isFastCall(GetUnmappedArgs))
126assert(!ArkTools.isFastCall(supercallarrow.af))
127assert(!ArkTools.isFastCall(widesupercallarrow.af))
128