1/* 2 * Copyright (c) 2022 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 16/* 17 * @tc.name:stubbuilder 18 * @tc.desc:test stubbuilder 19 * @tc.type: FUNC 20 * @tc.require: issueI5NO8G 21 */ 22 23/* 24* ZExtInt8ToPtr(); IntPtr(); Int8(); PtrMul(); Int8LSR(); Int8And(); Store(); Load(); 25* ReadInst4_0(); ReadInst4_1(); GetVregValue(); SetVregValue(); 26*/ 27 /**************HandleMovV4V4****************/ 28 29{ 30 var fun = function(parameter) { 31 return parameter; 32 } 33 34 var call = fun(100); 35 print(call); 36} 37 38/* 39* ZExtInt16ToPtr(); Int16(); ZExtInt8ToInt16(); Int16LSL(); Int16Add(); 40* 41* ReadInst16_0(); ReadInst16_2(); GetVregValue(); SetVregValue(); ReadInst8_0(); ReadInst8_1(); ReadInst8_2(); ReadInst8_3(); 42*/ 43 /**************HandleMovV16V16****************/ 44 45{ 46 var fun = function(pmt1, pmt2, pmt3, pmt4, pmt5, pmt6, pmt7, pmt8, pmt9, pmt10) { 47 let sum = pmt1 + pmt2 + pmt3 + pmt4 + pmt5 + pmt6 + pmt7 + pmt8 + pmt9 + pmt10; 48 return sum; 49 } 50 51 var call = fun(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 52 print(call); 53} 54 55/* 56* IntToTaggedPtr(); ZExtInt8ToInt32(); Int32LSL(); Int32(); Int32Add(); 57* ReadInst32_0(); 58*/ 59 /**************HandleLdaiImm32****************/ 60{ 61 var fun = function() { 62 let a = 20; 63 return a; 64 } 65 var iter = fun(); 66 print(iter); 67} 68 69/* 70* SExtInt32ToPtr(); SExtInt1ToInt32(); 71* ReadInstSigned8_0(); 72*/ 73 /**************HandleJmpImm8****************/ 74{ 75 var fun = function() { 76 try { 77 print("foo"); 78 } finally { 79 print("bar"); 80 } 81 } 82 var iter = fun(); 83} 84 85/* 86* CastInt64ToFloat64(); DoubleToTaggedDoublePtr(); ZExtInt8ToInt64(); Int64(); Int64LSL(); Int64Add(); 87* CastDoubleToInt64(); Int64ToTaggedPtr(); 88* ReadInst64_0(); ReadInst8_7(); ReadInst8_6(); ReadInst8_5(); ReadInst8_4(); ReadInst8_3(); ReadInst8_2(); ReadInst8_1(); 89* ReadInst8_0(); 90*/ 91 /**************HandleFldaiImm64****************/ 92{ 93 { 94 var fun = function() { 95 let a = 2.55; 96 return a; 97 } 98 var iter = fun(); 99 print(iter); 100 } 101} 102 103/* 104* TaggedIsInt(); TaggedCastToInt32(); Int32Equal(); TaggedIsDouble(); TaggedCastToDouble(); Double(); DoubleAdd(); 105* CallRuntime(); Int64And(); Int64Equal(); TaggedCastToInt64(); ChangeInt64ToInt32(); BoolNot(); TaggedIsNumber(); 106* BoolAnd(); ChangeTaggedPointerToInt64(); Int64Sub(); SavePcIfNeeded(); TaggedIsObject(); Argument(); PtrSub(); 107*/ 108 /**************HandleIncImm8****************/ 109{ 110 var fun = function() { 111 let a = 10; 112 return ++a; 113 } 114 var iter = fun(); 115 print(iter); 116} 117 118/* 119* TaggedIsException(); TaggedIsUndefined(); Int32Not(); TruncPtrToInt32(); IntPtrEqual(); CallNGCRuntime(); Equal(); 120* TruncInt64ToInt32(); 121*/ 122 /**************HandleSuspendgeneratorV8****************/ 123{ 124 var fun = function *() { 125 yield 888; 126 } 127 128 let iter = fun(); 129 print(iter.next().value); 130} 131 132/* 133* ZExtInt16ToInt32(); Int16Sub(); TaggedIsHeapObject(); IsBase(); IsJSFunction(); IsConstructor(); IsJSHClass(); GetObjectType(); 134* JSCallDispatch(); ChangeInt32ToIntPtr(); Int16ToTaggedInt(); HasPendingException(); GetMethodFromJSFunction(); 135* Int32LessThanOrEqual(); Int32LSR(); Int32And(); Int32GreaterThanOrEqual(); LoadHClass(); Int32NotEqual(); ZExtInt32ToInt64(); 136* SExtInt16ToInt64(); Int64Or(); Int64NotEqual(); IsJSFunctionBase(); 137* 138*/ 139 /**************HandleNewobjrangeImm8Imm8V8****************/ 140{ 141 class Parent { 142 constructor(name, age) { 143 this.name = name; 144 this.age = age; 145 } 146 sayName() { 147 print(this.name); 148 print(this.age); 149 } 150 }; 151 const child = new Parent('echo', 26); 152 child.sayName(); //echo 153} 154 155/* 156* Int32Sub(); DoubleSub(); 157* 158*/ 159 /**************HandleDecImm8****************/ 160{ 161 var fun = function() { 162 let a = 10; 163 return --a; 164 } 165 var iter = fun(); 166 print(iter); 167} 168 169/* 170* FastStrictEqual(); ChangeInt32ToFloat64(); DoubleIsNAN(); BoolOr(); DoubleEqual(); BothAreString(); IsUtf16String(); 171* ZExtInt1ToInt32(); GetLengthFromString(); GetHashcodeFromString(); CallNGCRuntime(); TaggedIsBigInt(); 172* BothAreString(); 173*/ 174 /**************HandleStrictnoteqImm8V8****************/ 175{ 176 var fun = function(parameter1, parameter2) { 177 if (parameter1 === parameter2) { 178 return parameter2; 179 } 180 return parameter1; 181 } 182 var iter = fun(10n, 5); 183 print(iter); 184} 185 186/* 187* DoubleToInt(); Int32Xor(); ChangeFloat64ToInt32(); Int64LSR(); Int32LessThan(); 188* 189*/ 190 /**************HandleXor2Imm8V8****************/ 191{ 192 var fun = function(parameter1, parameter2) { 193 if (parameter1 != parameter2) { 194 return parameter1^parameter2; 195 } 196 return parameter2; 197 } 198 var iter = fun(10, 5); 199 print(iter); 200} 201 202/* 203* Int32ASR(); 204* 205*/ 206 /**************HandleAshr2Imm8V8****************/ 207{ 208 var fun = function(parameter1, parameter2) { 209 if (parameter1 != parameter2) { 210 return parameter1 >> parameter2; 211 } 212 return parameter2; 213 } 214 var iter = fun(10, 1); 215 print(iter); 216} 217 218/* 219* TaggedIsNumeric(); 220* 221*/ 222 /**************HandleTonumericImm8****************/ 223{ 224 var fun = function() { 225 let parameter = 5n; 226 return parameter++; 227 } 228 var iter = fun(); 229 print(iter); 230} 231 232/* 233* FastMul(); TaggedIsHole(); FastAddSubAndMul(); Int64GreaterThan(); Int64LessThan(); FastBinaryOp(); 234* 235*/ 236 /**************HandleMul2Imm8V8****************/ 237{ 238 var fun = function() { 239 let parameter1 = 5.5; 240 let parameter2 = 2; 241 return parameter1 * parameter2; 242 } 243 var iter = fun(); 244 print(iter); 245} 246 247/* 248* GetPropertyByIndex(); IntToTaggedInt(); TaggedFalse(); Undefined(); IsSpecialIndexedObj(); IsFastTypeArray(); 249* IsSpecialContainer(); GetContainerProperty(); GetElementsArray(); IsDictionaryElement(); GetLengthOfTaggedArray(); 250* Int32UnsignedLessThan(); GetValueFromTaggedArray(); TaggedIsNotHole(); FindElementFromNumberDictionary(); 251* CallGetterHelper(); GetPrototypeFromHClass(); SExtInt32ToInt64(); Int32GreaterThan(); IsAccessor(); JSAPIContainerGet(); 252*/ 253 /**************HandleLdobjbyindexImm8Imm16****************/ 254{ 255 var fun = function() { 256 let array = new Array(2); 257 array[0] = 12; 258 array[1] = 18; 259 return array[1]; 260 } 261 var iter = fun(); 262 print(iter); 263} 264 265/* 266* FastEqual(); TaggedIsUndefinedOrNull(); TaggedIsBoolean(); TaggedIsSpecial(); 267* 268*/ 269 /**************HandleEqImm8V8****************/ 270{ 271 var fun = function(parameter1, parameter2) { 272 if (parameter1 == parameter2) { 273 return parameter1; 274 } 275 return parameter2; 276 } 277 var iter = fun(10, 10); 278 print(iter); 279} 280 281/* 282* FastMod(); Int32Mod(); DoubleIsINF(); 283* 284*/ 285 /**************HandleMod2Imm8V8****************/ 286{ 287 var fun = function(parameter1, parameter2) { 288 let result = parameter1 % parameter2; 289 return result; 290 } 291 var iter = fun(55, 10); 292 print(iter); 293} 294 295/* 296* FastTypeOf(); GetGlobalConstantString(); TaggedIsTrue(); TaggedIsFalse(); TaggedIsNull(); IsString(); IsSymbol(); IsCallable(); 297* TaggedObjectIsBigInt(); Int32Mul(); Int64Mul(); 298*/ 299 /**************HandleTypeofImm8****************/ 300{ 301 var fun = function(parameter1, parameter2) { 302 let result = parameter1 % parameter2; 303 return typeof(result); 304 } 305 var iter = fun(55, 10); 306 print(iter); 307} 308 309/* 310* TaggedGetInt(); DoubleLessThan(); TaggedTrue(); 311* 312*/ 313 /**************HandleLessImm8V8****************/ 314{ 315 var fun = function(parameter1, parameter2) { 316 if (parameter1 < parameter2) { 317 return parameter1; 318 }; 319 return parameter2; 320 } 321 var iter = fun(55, 11); 322 print(iter); 323} 324 325/* 326* DoubleLessThanOrEqual(); 327* 328*/ 329 /**************HandleLesseqImm8V8****************/ 330{ 331 var fun = function(parameter1, parameter2) { 332 if (parameter1 <= parameter2) { 333 return parameter1; 334 }; 335 return parameter2; 336 } 337 var iter = fun(5, 11); 338 print(iter); 339} 340 341/* 342* DoubleGreaterThan(); 343* 344*/ 345 /**************HandleGreaterImm8V8****************/ 346{ 347 var fun = function(parameter1, parameter2) { 348 if (parameter1 > parameter2) { 349 return parameter1; 350 }; 351 return parameter2; 352 } 353 var iter = fun(5, 11); 354 print(iter); 355} 356 357/* 358* DoubleGreaterThanOrEqual(); 359* 360*/ 361 /**************HandleGreatereqImm8V8****************/ 362{ 363 var fun = function(parameter1, parameter2) { 364 if (parameter1 >= parameter2) { 365 return parameter1; 366 }; 367 return parameter2; 368 } 369 var iter = fun(5, 9); 370 print(iter); 371} 372 373/* 374* Int32UnsignedGreaterThan(); ChangeUInt32ToFloat64(); 375* 376*/ 377 /**************HandleShr2Imm8V8****************/ 378{ 379 var fun = function(parameter1, parameter2) { 380 if (parameter1 >> parameter2) { 381 return parameter1; 382 }; 383 return parameter2; 384 } 385 var iter = fun(5, 1); 386 print(iter); 387} 388 389/* 390* SetPropertyByIndex(); LoopBegin(); Hole(); SetValueToTaggedArray(); IsExtensible(); Exception(); 391* 392*/ 393 /**************HandleStobjbyindexImm8V8Imm16****************/ 394{ 395 var fun = function() { 396 397 var myarray=new Array(); 398 return myarray[0]=66; 399 } 400 var iter = fun(); 401 print(iter); 402} 403 404/* 405* FastDiv(); Int64Xor(); DoubleDiv(); 406* 407*/ 408 /**************HandleDiv2Imm8V8****************/ 409{ 410 var fun = function(parameter1, parameter2) { 411 let result = parameter1 / parameter2; 412 return result; 413 } 414 var iter = fun(55, 10); 415 print(iter); 416} 417 418/* 419* IsCallableFromBitField(); GetCallFieldFromMethod(); DispatchBuiltins(); IsClassConstructorFromBitField(); ConstructorCheck(); 420* SaveJumpSizeIfNeeded(); TaggedObjectIsEcmaObject(); 421*/ 422 /**************HandleNewobjrangeImm8Imm8V8****************/ 423{ 424 var fun = function() { 425 let func = new Object(); 426 func.name = "don"; 427 return func.name; 428 } 429 var iter = fun(); 430 print(iter); 431} 432 433/* 434* FastAdd(); 435* 436*/ 437 /**************HandleAdd2Imm8V8****************/ 438{ 439 var fun = function(parameter1, parameter2) { 440 441 return parameter1 + parameter2; 442 } 443 var iter = fun(10, 10); 444 print(iter); 445} 446 447/* 448* FastSub(); 449* 450*/ 451 /**************HandleSub2Imm8V8****************/ 452{ 453 var fun = function(parameter1, parameter2) { 454 455 return parameter1 - parameter2; 456 } 457 var iter = fun(10, 10); 458 print(iter); 459} 460 461/* 462* FastToBoolean(); 463* 464*/ 465 /**************HandleIsfalse****************/ 466{ 467 var fun = function(parameter1, parameter2) { 468 469 if ((parameter1 == 0) || (parameter2 > 0)) { 470 return parameter1; 471 } 472 return parameter2; 473 } 474 var iter = fun(1, 10); 475 print(iter); 476} 477 478/* 479* Null(); 480* 481*/ 482 /**************HandleLdnull****************/ 483{ 484 var fun = function() { 485 486 let par = null; 487 return undefined; 488 } 489 var iter = fun(); 490 print(iter); 491} 492 493/* 494* LoopEnd(); GetPropertiesFromLexicalEnv(); 495* 496*/ 497 /**************HandleLdlexvarImm4Imm4****************/ 498{ 499 function Module() { 500 function f(a) { 501 a = a | 0; 502 a = funTable[a & 0](a | 0) | 0; 503 return a | 0; 504 } 505 function g() { 506 return 2.3; 507 } 508 var funTable = [ g ]; 509 return { f:f }; 510 } 511 print(Module().f()); 512} 513 514/* 515* Int32Or(); 516* 517*/ 518 /**************HandleOr2Imm8V8****************/ 519{ 520 function Module() { 521 function f(a) { 522 a = a | 0; 523 var b = 0; 524 b = (a + 23) | 0; 525 return b; 526 } 527 return { f:f }; 528 } 529 print(Module().f()); 530} 531 532/* 533* PtrAdd(); IntPtrSize(); 534* DispatchWithId(); 535*/ 536 /**************HandleThrow****************/ 537{ 538 var fun = function() { 539 print("boom"); 540 throw "boom"; 541 } 542 var a = fun(); 543}