| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| var shouldBailout = false; |
| |
| var GiantPrintArray = []; |
| var reuseObjects = false; |
| var PolymorphicFuncObjArr = []; |
| var PolyFuncArr = []; |
| function GetPolymorphicFunction() { |
| if(PolyFuncArr.length > 1) { |
| var myFunc = PolyFuncArr.shift(); |
| PolyFuncArr.push(myFunc); |
| return myFunc; |
| } |
| else { |
| return PolyFuncArr[0]; |
| } |
| } |
| function GetObjectwithPolymorphicFunction() { |
| if(reuseObjects) { |
| if(PolymorphicFuncObjArr.length > 1) { |
| var myFunc = PolymorphicFuncObjArr.shift(); |
| PolymorphicFuncObjArr.push(myFunc); |
| return myFunc |
| } |
| else { |
| return PolymorphicFuncObjArr[0]; |
| } |
| } |
| else { |
| var obj = {}; |
| obj.polyfunc = GetPolymorphicFunction(); |
| PolymorphicFuncObjArr.push(obj) |
| return obj |
| } |
| }; |
| function InitPolymorphicFunctionArray() { |
| for(var i = 0; i < arguments.length; i++) { |
| PolyFuncArr.push(arguments[i]) |
| } |
| } |
| ; |
| function getFirst23Elements(value, index, array) { |
| return index < 23; |
| } |
| function sumOfArrayElements(prev, curr, index, array) { |
| return prev + curr; |
| } |
| ; |
| function test0() { |
| var obj0 = {}; |
| var obj1 = {}; |
| var arrObj0 = {}; |
| var func2 = function() { |
| var __loopvar3 = 0; |
| for(var strvar0 in i16) { |
| if(strvar0.indexOf('method') != -1) continue; |
| if(__loopvar3++ > 3) break; |
| c = 1; |
| obj1 = obj0; |
| arrObj0 = obj0; |
| } |
| e = (ary.unshift(f, c, arrObj0.length, arrObj0.length, c, f, g, f, a, h, __loopvar3, h, this.prop0, arrObj0.prop0, obj1.length)); |
| } |
| obj0.method0 = func2; |
| arrObj0.method0 = func2; |
| var ary = new Array(10); |
| var i16 = new Int16Array(256); |
| var a = 1; |
| var e = 1; |
| var f = 1; |
| var g = 1; |
| var h = 1; |
| obj0.length = 1; |
| function bar0() { |
| (h /= (((~arrObj0.method0.call(obj1)) * (1 instanceof ((typeof Number == 'function') ? Number : Object)) - (obj1.prop0 &= 1)) + (-(1 & obj0.prop1)))); |
| } |
| function bar1() { |
| e <<= bar0.call(obj0); |
| bar0.call(obj0); |
| } |
| |
| var __protoObj2_proto = {}; |
| __protoObj2_proto.x = Math.pow(bar1(), 1); |
| var __protoObj1__proto = Object.create(__protoObj2_proto);; |
| var __protoinstanceobj__proto = Object.create(__protoObj1__proto); |
| var __varforproto = __protoinstanceobj__proto.x + __protoinstanceobj__proto.x; |
| __varforproto += __protoinstanceobj__proto.x + __protoinstanceobj__proto.x; |
| __varforproto += __protoinstanceobj__proto.x + __protoinstanceobj__proto.x; |
| GiantPrintArray.push(__varforproto); |
| if(shouldBailout) |
| __protoObj1__proto.__proto__ = { x: "hello" }; |
| __varforproto += __protoinstanceobj__proto.x + __protoinstanceobj__proto.x; |
| GiantPrintArray.push(__varforproto); |
| WScript.Echo('sumOfary = ' + ary.filter(getFirst23Elements).reduce(sumOfArrayElements, 0));; |
| }; |
| |
| // generate profile |
| test0(); |
| test0(); |
| // Run Simple JIT |
| test0(); |
| test0(); |
| |
| // run JITted code |
| runningJITtedCode = true; |
| test0(); |
| |
| // run code with bailouts enabled |
| shouldBailout = true; |
| test0(); |
| |
| |
| // Baseline output: |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // |
| // |
| // Test output: |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = -Infinity |
| // sumOfary = Infinity |
| // sumOfary = Infinity |
| // |