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}