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