blob: 39cdfb5e465db623deb0d4dddf956fdbb34f71dd [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// 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 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 test0(){
var obj0 = {};
var obj1 = {};
var arrObj0 = {};
var func0 = function(argMath0){
(ary[((shouldBailout ? (ary[5] = "x") : undefined ), 5)]);
}
var func2 = function(argArr3,argArr4,argFunc5,argArr6){
// Snippet: Array check hoist where we set an index property to an accessor.
function v274686(o)
{
for (var v274687 = 0 ; v274687 < 8 ; v274687++)
{
obj0.prop0 = o[v274687];
o[v274687] = v274687;
}
WScript.Echo(o[3]);
}
v274686(argArr3);
if(shouldBailout) {
try {
Object.defineProperty(argArr3,"5",{set: function(x){ WScript.Echo("inside");this[3] = -3;}, configurable: true})
}
catch(e) {
}
v274686(argArr3);
}
func0.call(obj0 , 1);
}
obj0.method0 = func2;
var ary = new Array(10);
function bar0 (){
}
function bar1 (){
}
function bar2 (){
return 1.1;
}
InitPolymorphicFunctionArray(bar0,bar1,bar2);
var __polyobj = GetObjectwithPolymorphicFunction();
obj1.prop0 = (__polyobj.polyfunc.call(arrObj0 ) ? Math.pow(1, obj0.method0.call(obj1 , ary, 1, 1, 1)) : 1);
func2(1, 1, 1, 1);
};
// generate profile
test0();
test0();
test0();
// run JITted code
runningJITtedCode = true;
test0();
test0();
test0();
// run code with bailouts enabled
shouldBailout = true;
test0();
// Test output:
// undefined
// undefined
// 3
// undefined
// undefined
// undefined
// undefined
// 3
// inside
// -3
// inside
// inside
// undefined
// JavaScript runtime error: Object.defineProperty: argument is not an Object