14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2024 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 interface ArkTools { 174514f5e3Sopenharmony_ci isAOTCompiled(args: any): boolean; 184514f5e3Sopenharmony_ci} 194514f5e3Sopenharmony_cideclare function print(arg:any):string; 204514f5e3Sopenharmony_ci//int array 214514f5e3Sopenharmony_cilet literalIntArrayWithHole = [0,,2,,4,,] 224514f5e3Sopenharmony_cilet literalIntArrayNoHole = [0,1,2,3,4,5,6] 234514f5e3Sopenharmony_cilet nIntArray = new Array(6) 244514f5e3Sopenharmony_cinIntArray[0] = 0 254514f5e3Sopenharmony_cinIntArray[2] = 2 264514f5e3Sopenharmony_cinIntArray[4] = 4 274514f5e3Sopenharmony_cifunction returnDoubleTypeIntNotConstant(x){ 284514f5e3Sopenharmony_ci if (x>0){ 294514f5e3Sopenharmony_ci return 3.5+0.5 304514f5e3Sopenharmony_ci } else { 314514f5e3Sopenharmony_ci return 1.5+0.5 324514f5e3Sopenharmony_ci } 334514f5e3Sopenharmony_ci} 344514f5e3Sopenharmony_ci//double array 354514f5e3Sopenharmony_cilet literalDoubleArrayWithHole = [0.5,,2.5,,4.5,,NaN,,] 364514f5e3Sopenharmony_cifunction returnNotConstantDouble(x){ 374514f5e3Sopenharmony_ci if (x>0){ 384514f5e3Sopenharmony_ci return 4+0.5 394514f5e3Sopenharmony_ci } else { 404514f5e3Sopenharmony_ci return 2+0.5 414514f5e3Sopenharmony_ci } 424514f5e3Sopenharmony_ci} 434514f5e3Sopenharmony_cilet nDoubleArray = new Array(7) 444514f5e3Sopenharmony_cinDoubleArray[1] = 1.5 454514f5e3Sopenharmony_cinDoubleArray[4] = 4.5 464514f5e3Sopenharmony_cinDoubleArray[6] = NaN 474514f5e3Sopenharmony_ci//string array 484514f5e3Sopenharmony_cilet literalStringArrayWithHole = ["string1",,"string2",,"string4",,] 494514f5e3Sopenharmony_cilet nStringArray = new Array(5) 504514f5e3Sopenharmony_cinStringArray[1] = "1" 514514f5e3Sopenharmony_cinStringArray[4] = "4" 524514f5e3Sopenharmony_cifunction returnNotLitaralString(x){ 534514f5e3Sopenharmony_ci if (x>0){ 544514f5e3Sopenharmony_ci return "string" + "4" 554514f5e3Sopenharmony_ci } else { 564514f5e3Sopenharmony_ci return "string4" 574514f5e3Sopenharmony_ci } 584514f5e3Sopenharmony_ci} 594514f5e3Sopenharmony_ci//object array 604514f5e3Sopenharmony_cilet find1 = {1:1} 614514f5e3Sopenharmony_ciclass findClass{ 624514f5e3Sopenharmony_ci x; 634514f5e3Sopenharmony_ci constructor(x){ 644514f5e3Sopenharmony_ci this.x = x 654514f5e3Sopenharmony_ci } 664514f5e3Sopenharmony_ci} 674514f5e3Sopenharmony_cilet find3 = new findClass(3) 684514f5e3Sopenharmony_cilet find5 = new Date() 694514f5e3Sopenharmony_cilet objArrayWithHoleNeverFind = [{0:0},,{2:2},,{4:4},,] 704514f5e3Sopenharmony_cilet objnewArraywithHoleNeverFind = new Array(7) 714514f5e3Sopenharmony_ciobjnewArraywithHoleNeverFind[0] = {0:0} 724514f5e3Sopenharmony_ciobjnewArraywithHoleNeverFind[2] = {2:2} 734514f5e3Sopenharmony_ciobjnewArraywithHoleNeverFind[4] = {4:4} 744514f5e3Sopenharmony_ci 754514f5e3Sopenharmony_cilet objArrayWithHoleCanFind = [,find1,,find3,,find5,] 764514f5e3Sopenharmony_cilet objnewArraywithHoleCanFind = new Array(7) 774514f5e3Sopenharmony_ciobjnewArraywithHoleCanFind[1] = find1 784514f5e3Sopenharmony_ciobjnewArraywithHoleCanFind[3] = find3 794514f5e3Sopenharmony_ciobjnewArraywithHoleCanFind[5] = find5 804514f5e3Sopenharmony_ci//====================start nomarl kind test=================// 814514f5e3Sopenharmony_ci//includes int 824514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 834514f5e3Sopenharmony_ciprint(literalIntArrayWithHole.includes(4)) //: true 844514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#returnDoubleTypeIntNotConstant@builtinArrayIncludes caller function name: func_main_0@builtinArrayIncludes 854514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 864514f5e3Sopenharmony_ciprint(literalIntArrayWithHole.includes(returnDoubleTypeIntNotConstant(1))) //: true 874514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#returnDoubleTypeIntNotConstant@builtinArrayIncludes caller function name: func_main_0@builtinArrayIncludes 884514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 894514f5e3Sopenharmony_ciprint(literalIntArrayWithHole.includes(returnDoubleTypeIntNotConstant(0))) //: true 904514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 914514f5e3Sopenharmony_ciprint(nIntArray.includes(4)) //: true 924514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 934514f5e3Sopenharmony_ciprint(nIntArray.includes(undefined)) //: true 944514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 954514f5e3Sopenharmony_ciprint(literalIntArrayWithHole.includes(undefined)) //: true 964514f5e3Sopenharmony_ci//nohole hole 974514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 984514f5e3Sopenharmony_ciprint(literalIntArrayNoHole.includes(4)) //: true 994514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#returnDoubleTypeIntNotConstant@builtinArrayIncludes caller function name: func_main_0@builtinArrayIncludes 1004514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1014514f5e3Sopenharmony_ciprint(literalIntArrayNoHole.includes(returnDoubleTypeIntNotConstant(1))) //: true 1024514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#returnDoubleTypeIntNotConstant@builtinArrayIncludes caller function name: func_main_0@builtinArrayIncludes 1034514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1044514f5e3Sopenharmony_ciprint(literalIntArrayNoHole.includes(returnDoubleTypeIntNotConstant(0))) //: true 1054514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1064514f5e3Sopenharmony_ciprint(literalIntArrayNoHole.includes(undefined)) //: false 1074514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1084514f5e3Sopenharmony_ciprint(literalIntArrayNoHole.includes(NaN)) //: false 1094514f5e3Sopenharmony_ci//includes double 1104514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1114514f5e3Sopenharmony_ciprint(literalDoubleArrayWithHole.includes(4.5)) //: true 1124514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#returnNotConstantDouble@builtinArrayIncludes caller function name: func_main_0@builtinArrayIncludes 1134514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1144514f5e3Sopenharmony_ciprint(literalDoubleArrayWithHole.includes(returnNotConstantDouble(1))) //: true 1154514f5e3Sopenharmony_ci//aot: [trace] aot inline function name: #*#returnNotConstantDouble@builtinArrayIncludes caller function name: func_main_0@builtinArrayIncludes 1164514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1174514f5e3Sopenharmony_ciprint(literalDoubleArrayWithHole.includes(returnNotConstantDouble(0))) //: true 1184514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1194514f5e3Sopenharmony_ciprint(nDoubleArray.includes(4.5)) //: true 1204514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1214514f5e3Sopenharmony_ciprint(nDoubleArray.includes(NaN)) //: true 1224514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1234514f5e3Sopenharmony_ciprint(literalDoubleArrayWithHole.includes(undefined)) //: true 1244514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1254514f5e3Sopenharmony_ciprint(literalIntArrayNoHole.includes(literalIntArrayNoHole.length)) //: false 1264514f5e3Sopenharmony_ci 1274514f5e3Sopenharmony_ci//includes string 1284514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1294514f5e3Sopenharmony_ciprint(literalStringArrayWithHole.includes("string4")) //: true 1304514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1314514f5e3Sopenharmony_ciprint(literalStringArrayWithHole.includes(returnNotLitaralString(1))) //: true 1324514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1334514f5e3Sopenharmony_ciprint(literalStringArrayWithHole.includes(returnNotLitaralString(0))) //: true 1344514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1354514f5e3Sopenharmony_ciprint(nStringArray.includes("4")) //: true 1364514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1374514f5e3Sopenharmony_ciprint(nStringArray.includes(undefined)) //: true 1384514f5e3Sopenharmony_ci 1394514f5e3Sopenharmony_ci//neverequal 1404514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1414514f5e3Sopenharmony_ciprint(objArrayWithHoleNeverFind.includes({4:4})) //: false 1424514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1434514f5e3Sopenharmony_ciprint(objnewArraywithHoleNeverFind.includes({4:4})) //: false 1444514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1454514f5e3Sopenharmony_ciprint(objnewArraywithHoleNeverFind.includes(undefined)) //: true 1464514f5e3Sopenharmony_ci//can find 1474514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1484514f5e3Sopenharmony_ciprint(objArrayWithHoleCanFind.includes(find1)) //: true 1494514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1504514f5e3Sopenharmony_ciprint(objArrayWithHoleCanFind.includes(find3)) //: true 1514514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1524514f5e3Sopenharmony_ciprint(objArrayWithHoleCanFind.includes(find5)) //: true 1534514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1544514f5e3Sopenharmony_ciprint(objnewArraywithHoleCanFind.includes(find1)) //: true 1554514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1564514f5e3Sopenharmony_ciprint(objnewArraywithHoleCanFind.includes(find3)) //: true 1574514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1584514f5e3Sopenharmony_ciprint(objnewArraywithHoleCanFind.includes(find5)) //: true 1594514f5e3Sopenharmony_ci 1604514f5e3Sopenharmony_ci//============special test 1614514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: BigInt, caller function name:func_main_0@builtinArrayIncludes 1624514f5e3Sopenharmony_cilet specialArray = [null, , false, true, undefined, +0, -0, BigInt(123456), NaN, 5, 5.5] 1634514f5e3Sopenharmony_ci//includes use samevaluezero 1644514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1654514f5e3Sopenharmony_ciprint(specialArray.includes(NaN)) //: true 1664514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1674514f5e3Sopenharmony_ciprint(specialArray.includes(undefined, 3)) //: true 1684514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1694514f5e3Sopenharmony_ciprint(specialArray.includes(undefined)) //: true 1704514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1714514f5e3Sopenharmony_ciprint(specialArray.includes(NaN)) //: true 1724514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1734514f5e3Sopenharmony_ciprint(specialArray.includes(+0)) //: true 1744514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1754514f5e3Sopenharmony_ciprint(specialArray.includes(-0)) //: true 1764514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1774514f5e3Sopenharmony_ciprint(specialArray.includes(false)) //: true 1784514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1794514f5e3Sopenharmony_ciprint(specialArray.includes(true)) //: true 1804514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1814514f5e3Sopenharmony_ciprint(specialArray.includes(null)) //: true 1824514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: BigInt, caller function name:func_main_0@builtinArrayIncludes 1834514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1844514f5e3Sopenharmony_ciprint(specialArray.includes(BigInt(123456))) //: true 1854514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1864514f5e3Sopenharmony_ciprint(specialArray.includes(5)) //: true 1874514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1884514f5e3Sopenharmony_ciprint(specialArray.includes(5.5)) //: true 1894514f5e3Sopenharmony_ci 1904514f5e3Sopenharmony_ciprint('unusual cases') //: unusual cases 1914514f5e3Sopenharmony_ciprint(specialArray.includes()) //: true 1924514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1934514f5e3Sopenharmony_ciprint(specialArray.includes(() => {})) //: false 1944514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1954514f5e3Sopenharmony_ciprint(specialArray.includes(NaN, 0)) //: true 1964514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1974514f5e3Sopenharmony_ciprint(specialArray.includes(NaN, 2000000)) //: false 1984514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 1994514f5e3Sopenharmony_ciprint(specialArray.includes(NaN, -2000000)) //: true 2004514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 2014514f5e3Sopenharmony_ciprint(specialArray.includes(NaN, -1)) //: false 2024514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 2034514f5e3Sopenharmony_ciprint(specialArray.includes(5, 5, 78)) //: true 2044514f5e3Sopenharmony_ci 2054514f5e3Sopenharmony_cifunction notIntIndex() { 2064514f5e3Sopenharmony_ci let specialArray = [1, 2, NaN] 2074514f5e3Sopenharmony_ci //aot: [trace] Check Type: IndexNotInt 2084514f5e3Sopenharmony_ci print(specialArray.includes(false, "str")) //: false 2094514f5e3Sopenharmony_ci} 2104514f5e3Sopenharmony_cinotIntIndex() 2114514f5e3Sopenharmony_ci 2124514f5e3Sopenharmony_ci// Check inside try-block 2134514f5e3Sopenharmony_citry { 2144514f5e3Sopenharmony_ci //aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 2154514f5e3Sopenharmony_ci print(specialArray.includes(null)) //: true 2164514f5e3Sopenharmony_ci} catch(e) { 2174514f5e3Sopenharmony_ci} 2184514f5e3Sopenharmony_ci 2194514f5e3Sopenharmony_cilet obj = {}; 2204514f5e3Sopenharmony_ciobj.valueOf = (() => { return 5; }) 2214514f5e3Sopenharmony_ci//aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 2224514f5e3Sopenharmony_ciprint(specialArray.includes(obj)); //: false 2234514f5e3Sopenharmony_ci 2244514f5e3Sopenharmony_cifunction Throwing() { 2254514f5e3Sopenharmony_ci this.value = 2; 2264514f5e3Sopenharmony_ci Throwing.prototype.valueOf = function() { 2274514f5e3Sopenharmony_ci if (this.value > 0) { 2284514f5e3Sopenharmony_ci throw new Error("positive"); 2294514f5e3Sopenharmony_ci } 2304514f5e3Sopenharmony_ci return this.value; 2314514f5e3Sopenharmony_ci } 2324514f5e3Sopenharmony_ci} 2334514f5e3Sopenharmony_cilet throwingObj = new Throwing(); 2344514f5e3Sopenharmony_citry { 2354514f5e3Sopenharmony_ci //aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 2364514f5e3Sopenharmony_ci print(specialArray.includes(throwingObj)); //: false 2374514f5e3Sopenharmony_ci} catch(e) { 2384514f5e3Sopenharmony_ci print(e); 2394514f5e3Sopenharmony_ci} finally { 2404514f5e3Sopenharmony_ci //aot: [trace] aot inline builtin: Array.prototype.includes, caller function name:func_main_0@builtinArrayIncludes 2414514f5e3Sopenharmony_ci print(specialArray.includes(obj)); //: false 2424514f5e3Sopenharmony_ci} 2434514f5e3Sopenharmony_ci 2444514f5e3Sopenharmony_ci//===========deopt type 2454514f5e3Sopenharmony_cifunction prototypeChange(){ 2464514f5e3Sopenharmony_ci let tArray = [1,,3] 2474514f5e3Sopenharmony_ci Array.prototype[1] = 2 2484514f5e3Sopenharmony_ci print(tArray.includes(2)) 2494514f5e3Sopenharmony_ci} 2504514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotStableArray1 2514514f5e3Sopenharmony_ciprototypeChange() //: true 2524514f5e3Sopenharmony_cifunction lengthChange(){ 2534514f5e3Sopenharmony_ci let tArray = [1,,3] 2544514f5e3Sopenharmony_ci tArray.length = 2 2554514f5e3Sopenharmony_ci print(tArray.includes(3)) 2564514f5e3Sopenharmony_ci} 2574514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotStableArray1 2584514f5e3Sopenharmony_cilengthChange() //: false 2594514f5e3Sopenharmony_ci 2604514f5e3Sopenharmony_ci 2614514f5e3Sopenharmony_ci// Replace standard builtin 2624514f5e3Sopenharmony_cifunction replace(a : any) { 2634514f5e3Sopenharmony_ci return a; 2644514f5e3Sopenharmony_ci} 2654514f5e3Sopenharmony_ci 2664514f5e3Sopenharmony_cilet newArr = [1, 2, NaN] 2674514f5e3Sopenharmony_cilet true_includes = newArr.includes 2684514f5e3Sopenharmony_cinewArr.includes = replace 2694514f5e3Sopenharmony_ci 2704514f5e3Sopenharmony_ciprint(newArr.includes(undefined)); //: undefined 2714514f5e3Sopenharmony_cinewArr.includes = true_includes 2724514f5e3Sopenharmony_ciprint(newArr.includes(undefined)); //: false 2734514f5e3Sopenharmony_ci 2744514f5e3Sopenharmony_ci 2754514f5e3Sopenharmony_cifunction doIncludes(x: any): any { 2764514f5e3Sopenharmony_ci return newArr.includes(x); 2774514f5e3Sopenharmony_ci} 2784514f5e3Sopenharmony_ci 2794514f5e3Sopenharmony_cifunction printIncludes(x: any) { 2804514f5e3Sopenharmony_ci try { 2814514f5e3Sopenharmony_ci print(doIncludes(x)); 2824514f5e3Sopenharmony_ci } finally { 2834514f5e3Sopenharmony_ci } 2844514f5e3Sopenharmony_ci} 2854514f5e3Sopenharmony_ci 2864514f5e3Sopenharmony_ciif (ArkTools.isAOTCompiled(printIncludes)) { 2874514f5e3Sopenharmony_ci // Replace standard builtin after call to standard builtin was profiled 2884514f5e3Sopenharmony_ci newArr.includes = replace 2894514f5e3Sopenharmony_ci} 2904514f5e3Sopenharmony_ciprintIncludes(2.5); //pgo: false 2914514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotCallTarget1 2924514f5e3Sopenharmony_ci//aot: 2.5 2934514f5e3Sopenharmony_ci 2944514f5e3Sopenharmony_ciprintIncludes("abc"); //pgo: false 2954514f5e3Sopenharmony_ci//aot: [trace] Check Type: NotCallTarget1 2964514f5e3Sopenharmony_ci//aot: abc 2974514f5e3Sopenharmony_ci 2984514f5e3Sopenharmony_cinewArr.includes = true_includes 2994514f5e3Sopenharmony_ci 3004514f5e3Sopenharmony_cifunction includesCase1() { 3014514f5e3Sopenharmony_ci print('case 1 includes') //: case 1 includes 3024514f5e3Sopenharmony_ci let arr1 = [1, 2] 3034514f5e3Sopenharmony_ci let arr2 = [1, 2] 3044514f5e3Sopenharmony_ci arr2.garbage = function(x: any): any { 3054514f5e3Sopenharmony_ci return undefined; 3064514f5e3Sopenharmony_ci } 3074514f5e3Sopenharmony_ci //aot: [trace] Check Type: NotStableArray1 3084514f5e3Sopenharmony_ci print(arr1.includes(1)); //: true 3094514f5e3Sopenharmony_ci print(arr2.includes(2)); //: true 3104514f5e3Sopenharmony_ci} 3114514f5e3Sopenharmony_ciincludesCase1() 3124514f5e3Sopenharmony_ci 3134514f5e3Sopenharmony_ci 3144514f5e3Sopenharmony_cifunction includesCase2() { 3154514f5e3Sopenharmony_ci print('case 2 includes') //: case 2 includes 3164514f5e3Sopenharmony_ci let arr1 = [1, 2] 3174514f5e3Sopenharmony_ci let arr2 = [1, 2] 3184514f5e3Sopenharmony_ci arr2.includes = function(x: any) { 3194514f5e3Sopenharmony_ci return x 3204514f5e3Sopenharmony_ci } 3214514f5e3Sopenharmony_ci 3224514f5e3Sopenharmony_ci //aot: [trace] aot inline builtin: Object.getPrototypeOf, caller function name:#*#includesCase2@builtinArrayIncludes 3234514f5e3Sopenharmony_ci print(Object.getPrototypeOf(arr2) === Array.prototype) //: true 3244514f5e3Sopenharmony_ci 3254514f5e3Sopenharmony_ci //aot: [trace] Check Type: NotStableArray1 3264514f5e3Sopenharmony_ci print(arr1.includes(1)); //: true 3274514f5e3Sopenharmony_ci print(arr2.includes(1)); //: 1 3284514f5e3Sopenharmony_ci} 3294514f5e3Sopenharmony_ciincludesCase2() 3304514f5e3Sopenharmony_ci 3314514f5e3Sopenharmony_ci 3324514f5e3Sopenharmony_cifunction includesCase3() { 3334514f5e3Sopenharmony_ci print('case 3 includes') //: case 3 includes 3344514f5e3Sopenharmony_ci let marr = [1, 2] 3354514f5e3Sopenharmony_ci let true_includes = marr.includes 3364514f5e3Sopenharmony_ci let mimicArray = { 3374514f5e3Sopenharmony_ci includes: true_includes, 3384514f5e3Sopenharmony_ci } 3394514f5e3Sopenharmony_ci 3404514f5e3Sopenharmony_ci //aot: [trace] Check Type: NotStableArray1 3414514f5e3Sopenharmony_ci print(marr.includes(500)); //: false 3424514f5e3Sopenharmony_ci Object.setPrototypeOf(marr, mimicArray) 3434514f5e3Sopenharmony_ci 3444514f5e3Sopenharmony_ci print(marr.includes(500)); //: false 3454514f5e3Sopenharmony_ci} 3464514f5e3Sopenharmony_ciincludesCase3() 3474514f5e3Sopenharmony_ci 3484514f5e3Sopenharmony_ci 3494514f5e3Sopenharmony_cifunction includesCase4() { 3504514f5e3Sopenharmony_ci print('case 4 includes') //: case 4 includes 3514514f5e3Sopenharmony_ci let arr1 = [1, 2] 3524514f5e3Sopenharmony_ci let arr2 = [1, 2] 3534514f5e3Sopenharmony_ci let notArray = { 3544514f5e3Sopenharmony_ci includes(x: any) { 3554514f5e3Sopenharmony_ci return -100 3564514f5e3Sopenharmony_ci } 3574514f5e3Sopenharmony_ci } 3584514f5e3Sopenharmony_ci Object.setPrototypeOf(arr2, notArray) 3594514f5e3Sopenharmony_ci 3604514f5e3Sopenharmony_ci //aot: [trace] Check Type: NotStableArray1 3614514f5e3Sopenharmony_ci print(arr1.includes(1)); //: true 3624514f5e3Sopenharmony_ci print(arr2.includes(1)); //: -100 3634514f5e3Sopenharmony_ci} 3644514f5e3Sopenharmony_ciincludesCase4() 3654514f5e3Sopenharmony_ci 3664514f5e3Sopenharmony_ci 3674514f5e3Sopenharmony_cifunction includesCase5() { 3684514f5e3Sopenharmony_ci print('case 5 includes') //: case 5 includes 3694514f5e3Sopenharmony_ci let arr1 = [1, 2] 3704514f5e3Sopenharmony_ci Array.prototype.includes = function(x: any) { 3714514f5e3Sopenharmony_ci return x 3724514f5e3Sopenharmony_ci } 3734514f5e3Sopenharmony_ci 3744514f5e3Sopenharmony_ci //aot: [trace] Check Type: NotStableArray1 3754514f5e3Sopenharmony_ci print(arr1.includes(1)); //: 1 3764514f5e3Sopenharmony_ci} 3774514f5e3Sopenharmony_ciincludesCase5() 378