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(); GetGlobalConstantOffset(); 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* GetPropertyByValue(); 534*/ 535 /**************HandleLdobjbyvalueImm16V8****************/ 536{ 537 var obj = {name1:"bom", 2:"arm"}; 538 var v1 = obj.name1; 539 var v3 = obj[2]; 540 var key = "name1"; 541 var v4 = obj.key; 542 var v5 = obj[key]; 543 print(v1); 544 print(v3); 545 print(v4); 546 print(v5); 547} 548 549/* 550* Int8ToTaggedInt(); SExtInt8ToInt64(); 551*/ 552 /**************HandleThrowIfsupernotcorrectcallPrefImm16****************/ 553{ 554 class A { 555 constructor() { 556 } 557 } 558 559 class B extends A { 560 constructor(name, age) { 561 super(); 562 this.name = name; 563 this.age = age; 564 } 565 sayName() { 566 print(this.name); 567 print(this.age); 568 } 569 } 570 new A(); 571 const people = new B("echo", 19); 572 people.sayName(); 573} 574 575/* 576* SetPropertyByName(); SetTypeArrayPropertyByName(); CallSetterHelper(); ShouldCallSetter(); IsWritable(); UpdateValueInDict(); 577* AddPropertyByName(); SetHasConstructorCondition(); SetHasConstructorToHClass(); SetPropertyInlinedProps(); SetOffsetFieldInPropAttr(); 578* SetIsInlinePropsFieldInPropAttr(); JSHClassAddProperty(); IsDictionaryMode(); SetPropertiesArray(); SetDictionaryOrderFieldInPropAttr(); 579* ComputeNonInlinedFastPropsCapacity; 580*/ 581 /**************HandleStobjbynameImm8Id16V8****************/ 582{ 583 var obj1 = {"qq":10}; 584 var obj2={"mm":2,"nn":3}; 585 var obj3={"xx":1,"yy":5}; 586 obj1.field1 = obj2; 587 obj1.field2 = obj3; 588 print(obj1) 589} 590 591/**************HandleGetnextpropnameV8****************/ 592{ 593 var fun = function() { 594 let array = [1, 8, 6, 9], arr; 595 for (arr in array) { 596 print(array[arr]); 597 }; 598 return undefined; 599 } 600 var iter = fun(); 601 print(iter); 602} 603 604/**************HandleDeprecatedTonumberPrefV8****************/ 605{ 606 function Module(stdlib, foreign, heap) { 607 var x = +stdlib.x; 608 } 609 print(Module(this, { x:0 })); 610} 611 612/**************HandleIsinImm8V8****************/ 613{ 614 function Person() { 615 }; 616 Person.prototype.name = "hello"; 617 Person.prototype.age = "12"; 618 Person.prototype.sayName = function(){alert(this.name);}; 619 620 function hasPrototypeProperty(object, name){ 621 return !object.hasOwnProperty(name) && (name in object); 622 }; 623 var p1 = new Person(); 624 print(hasPrototypeProperty(p1,"name")); 625 p1.name = "nn"; 626 print(hasPrototypeProperty(p1,"name")); 627} 628 629/**************HandleInstanceofImm8V8****************/ 630{ 631 function MyInstanceOf(left, right) { 632 let proto = Object.getPrototypeOf(left); 633 let prototype = right.prototype; 634 while (true) { 635 if (!proto) return false; 636 if (proto === prototype) { 637 return true; 638 } 639 proto = Object.getPrototypeOf(proto) 640 } 641 } 642 643 class Person { 644 } 645 646 class Student extends Person{ 647 } 648 649 let p1 = new Person(); 650 let stu1 = new Student(); 651 print(p1 instanceof Person); 652 print(MyInstanceOf(p1, Person)); 653 print(stu1 instanceof Person); 654 print(MyInstanceOf(stu1, Person)); 655 print(stu1 instanceof Student); 656 print(MyInstanceOf(stu1, Student)); 657 print(p1 instanceof Student); 658 print(MyInstanceOf(p1, Student)); 659} 660 661/**************HandleThrowUndefinedifholePrefV8V8****************/ 662{ 663 var array = [11, 8, 19]; 664 665 function distinct(arr) { 666 const obj = {} 667 const result = arr.reduce((pre, cur) => { 668 if (!obj[cur.stuId]) { 669 obj[cur.stuId] = true; 670 return [...pre, cur]; 671 } 672 return pre; 673 }, []) 674 print(result); 675 return result; 676 } 677 distinct(array); 678} 679 680/**************HandleThrowIfnotobjectPrefV8****************/ 681{ 682 var array = [168, 168, 19]; 683 684 function process(arr) { 685 const cache = []; 686 for (const t of arr) { 687 if (cache.find(c => c.maxDeptCode === t.maxDeptCode && c.minDeptCode === t.minDeptCode)) { 688 continue; 689 } 690 cache.push(t); 691 } 692 693 return cache; 694 } 695 print(process(array)); 696} 697 698/**************HandleCreateemptyobject****************/ 699{ 700 let str = 'baobfabobodabfodao'; 701 let num = str.split("").reduce((pre, cur) => { 702 if (cur in pre) { 703 pre[cur]++; 704 } else { 705 pre[cur] = 1; 706 } 707 return pre; 708 }, {}) 709 print('frequency'); 710} 711 712/**************HandleCreateemptyarrayImm8****************/ 713{ 714 let array1 = [ 715 { id: "50", active: "a", value: 12 }, 716 { id: "51", active: "a", value: 15 } 717 ]; 718 let array2 = [ 719 { id: "50", active: "a", value: 10 }, 720 { id: "51", active: "a", value: 11 }, 721 { id: "52", active: "a", value: 13 } 722 ]; 723 724 let arr = []; 725 array1.map(id => 726 arr.push({ 727 id: id.id, 728 newValue: array2.find(o => o.id === id.id).value + 2 729 }) 730 ); 731 print("2", JSON.stringify(arr)); 732} 733 734/**************HandleGetnextpropnameV8****************/ 735{ 736 let obj1 = { 737 name: "bob", 738 age: 18, 739 sex: "man", 740 } 741 let obj2 = {} 742 743 for (let key in obj1) { 744 obj2[key] = obj1[key]; 745 } 746 obj1.name = "Tom" 747 print(obj1.name); 748} 749 750/**************HandleGetunmappedargs****************/ 751{ 752 function abs() { 753 if (arguments.length === 0) { 754 return 0; 755 } 756 var x = arguments[0]; 757 return x >= 0 ? x : -x; 758 } 759 760 print(abs()); 761 print(abs(10)); 762 print(abs(-9)); 763} 764 765/**************HandleCopyrestargsImm8****************/ 766{ 767 function add(...theArgs) { 768 theArgs.push(31); 769 var result = 0; 770 for (let i = 0; i < theArgs.length; i++) { 771 result = result + theArgs[i]; 772 } 773 var lastItem = theArgs.pop(); 774 print(lastItem); 775 return result; 776 } 777 778 add(); 779} 780 781/**************HandleStarrayspreadV8V8****************/ 782{ 783 class Parent { 784 static myMethod(msg) { 785 print('static', msg); 786 } 787 myMethod(msg) { 788 print('instance', msg); 789 } 790 } 791 792 class Child extends Parent { 793 static myMethod(msg) { 794 super.myMethod(msg); 795 } 796 myMethod(msg) { 797 super.myMethod(msg); 798 } 799 } 800 801 Child.myMethod(1); 802 var child = new Child(); 803 child.myMethod(2); 804} 805 806/**************HandleSupercallspreadImm8V8****************/ 807{ 808 class Demo { 809 constructor(x) { 810 this.x = x; 811 } 812 } 813 814 class Demo2 extends Demo{} 815 816 let d = new Demo2('hello'); 817 print(d.x); 818} 819 820/**************HandleDeprecatedLdsuperbynamePrefId32V8****************/ 821{ 822 class Demo { 823 constructor(x,y) { 824 this.x = x; 825 this.y = y; 826 } 827 customSplit(){ 828 return [...this.y] 829 } 830 } 831 832 class Demo2 extends Demo { 833 constructor(x, y) { 834 super(x, y); 835 } 836 customSplit(){ 837 return [...this.x] 838 } 839 task1(){ 840 return super.customSplit(); 841 } 842 task2(){ 843 return this.customSplit(); 844 } 845 } 846 847 let d = new Demo2('hello','world'); 848 print(d.task1()); 849 print(d.task2()); 850} 851 852/**************HandleCreateregexpwithliteralImm8Id16Imm8****************/ 853{ 854 function filterParams(obj) { 855 let _newPar = {}; 856 for (let key in obj) { 857 if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') { 858 _newPar[key] = obj[key]; 859 } 860 } 861 return _newPar; 862 } 863 var func = filterParams({a:"", b:null, c:"010", d:123}); 864 print(func); 865} 866 867/**************HandleTryldglobalbynameImm8Id16****************/ 868{ 869 function randomNumber(n1, n2) { 870 if (arguments.length === 2) { 871 return Math.round(n1 + Math.random() * (n2 - n1)); 872 } else if (arguments.length === 1) { 873 return Math.round(Math.random() * n1) 874 } else { 875 return Math.round(Math.random() * 255) 876 } 877 } 878 879 var func = randomNumber(5, 10); 880 print("succ"); 881} 882 883/**************HandleLdaStrId16****************/ 884{ 885 let promise = new Promise((resolve, reject) => { 886 print('Promise'); 887 resolve(); 888 }); 889 promise.then(function() { 890 }); 891} 892 893/**************HandleDeprecatedCreatearraywithbufferPrefImm16****************/ 894{ 895 function Change() { 896 var newArr = []; 897 for (var i = arguments.length - 1; i >= 0; i--) { 898 newArr[newArr.length] = arguments[i] 899 } 900 return newArr; 901 } 902 903 Change(1, 2345, 6, 8, 89, 5, 9); 904 var arr = [1, 2345, 6, 8, 89, 5, 9]; 905 print(arr.reverse()); 906} 907 908/**************HandleDeprecatedNegPrefV8****************/ 909{ 910 var arr = ['red', 'blue', 'red', 'green', 'pink', 'red', 'red']; 911 var index = arr.indexOf('red'); 912 913 var number = 0; 914 while (index != -1) { 915 print(index); 916 var index = arr.indexOf('red', index + 1); 917 number++; 918 } 919 print(number); 920} 921 922/**************HandleJeqzImm8****************/ 923{ 924 var str5 = 'abaaudffgggghhhhjkkkgfddduuuuuu23444343434'; 925 do { 926 var index = str5.indexOf('s'); 927 str5 = str5.replace('s', 'u'); 928 } while (index !== -1) 929 930 print(str5); 931} 932 933/**************HandleStobjbyvalueImm8V8V8****************/ 934{ 935 var str = "abcoefoxyozzopp"; 936 var o = {}; 937 for (var i = 0; i < str.length; i++) { 938 var chars = str.charAt(i); 939 if (o[chars]) { 940 o[chars]++; 941 } else { 942 o[chars] = 1; 943 } 944 } 945 print(o); 946} 947 948/**************HandleNoteqImm8V8****************/ 949{ 950 var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7]; 951 var newArr = []; 952 for (var i = 0; i < arr.length; i++) { 953 if (arr[i] != 0) { 954 newArr[newArr.length] = arr[i]; 955 } 956 } 957 print(newArr); 958} 959 960/**************HandleStricteqImm8V8****************/ 961{ 962 function unique(arr) { 963 var newArr = [] 964 for (var i = 0; i < arr.length; i++) { 965 if (newArr.indexOf(arr[i]) === -1) { 966 newArr.push(arr[i]) 967 } 968 } 969 return newArr; 970 } 971 var demo = unique(['blue', 'green', 'blue']); 972 print(demo); 973} 974 975/**************HandleDeprecatedCallthisrangePrefImm16V8****************/ 976{ 977 978 function countDown(time) { 979 var nowTime = +new Date(); 980 var inputTime = +new Date(time); 981 var times = (inputTime - nowTime) / 1000; 982 var d = parseInt(times / 60 / 60 / 24); 983 d = d < 10 ? '0' + d : d; 984 var h = parseInt((times / 60 / 60) % 24); 985 h = h < 10 ? '0' + h : h; 986 var m = parseInt((times / 60) % 60); 987 m = m < 10 ? '0' + m : m; 988 var s = parseInt(times % 60); 989 s = s < 10 ? '0' + s : s; 990 return d + '天' + h + '时' + m + '分' + s + '秒'; 991 } 992 (countDown('2022-10-10 18:00:00')); 993 var date = new Date(); 994 var date1 = +new Date(); 995 print("blue"); 996} 997 998/**************HandleStownbyindexImm8V8Imm16****************/ 999{ 1000 function doMath(data) { 1001 let min = data[0]; 1002 let max = data[0]; 1003 let sum = 0; 1004 data.sort(function(a, b) { 1005 return a - b; 1006 }) 1007 min = data[0]; 1008 max = data[data.length - 1]; 1009 for (let i = 0; i < data.length; i++) { 1010 sum += data[i]; 1011 } 1012 return [min, max, sum]; 1013 } 1014 print(doMath([23, 54, 34, 2, 7, 8, 1, 77, 43])); 1015} 1016 1017/**************HandleWideNewobjrangePrefImm16V8****************/ 1018{ 1019 function Person(name, age) { 1020 this.name = name; 1021 this.age = age; 1022 this.say = function () { 1023 return "name : " + this.name + " age: " + this.age; 1024 }; 1025 } 1026 1027 var o = new Object(); 1028 Person.call(o, "zhangsan", 20); 1029 print(o.say()); 1030} 1031 1032/**************HandleWideLdobjbyindexPrefImm32****************/ 1033{ 1034 function maxValue() { 1035 var max = arguments[0]; 1036 for (var i = 0; i < arguments.length; i++) { 1037 if (max < arguments[i]) { 1038 max = arguments[i]; 1039 } 1040 } 1041 return max; 1042 } 1043 print(maxValue(2, 4, 5, 9)); 1044 print(maxValue(12, 4, 9)); 1045} 1046 1047/**************HandleDeprecatedLdobjbynamePrefId32V8****************/ 1048{ 1049 var obj = {}; 1050 Object.defineProperty(obj, "x", { 1051 value : 1, 1052 writable : true, 1053 enumerable : true, 1054 configurable : true 1055 }); 1056 print(obj.x); 1057} 1058 1059/* 1060* PtrAdd(); IntPtrSize(); 1061* DispatchWithId(); 1062*/ 1063 /**************HandleThrow****************/ 1064{ 1065 var fun = function() { 1066 print("boom"); 1067 throw "boom"; 1068 } 1069 try { 1070 var a = fun(); 1071 } catch (e) {} 1072}