blob: e8a95fd850677a310fc8ed2f373e8370966af6ac [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.
//-------------------------------------------------------------------------------------------------------
// -maxInterpretCount:1 -maxSimpleJitRunCount:1 -dump:lowerer:4 -debug -debugbreak:4 -trace:bailout spread.js
if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in
// jc/jshost
this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
}
function transform(a,b,c,d) {
return a + b + c + d;
}
function fooApply()
{
return this.transform.apply(this, arguments);
}
fooApply.prototype.transform = transform;
function fooSpread(arglist) {
return transform(...arglist);
}
function inlinetest() {
// No bailouts expected
spreadResult = fooSpread(["1","2","a","4"]);
applyResult = fooApply("1","2","a","4");
assert.areEqual(applyResult, spreadResult, "Matching number of args");
spreadResult = fooSpread([1,"a"]);
applyResult = fooApply(1,"a");
assert.areEqual(applyResult, spreadResult, "Not all args");
spreadResult = fooSpread(["xyzzy"]);
applyResult = fooApply("xyzzy");
assert.areEqual(applyResult, spreadResult, "One arg (non-X86 corner case)");
spreadResult = fooSpread([]);
applyResult = fooApply();
assert.areEqual(applyResult, spreadResult, "No args");
spreadResult = fooSpread(["1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4"]);
applyResult = fooApply("1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4");
assert.areEqual(applyResult, spreadResult, "Max number of args (16)");
// Bailouts expected
spreadResult = fooSpread(["1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4","bailout"]);
applyResult = fooApply("1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4", "bailout");
assert.areEqual(applyResult, spreadResult, "Max + 1 number of args bailout recovery");
spreadResult = fooSpread([1,2,3,4,5]);
applyResult = fooApply(1,2,3,4,5);
assert.areEqual(applyResult, spreadResult, "Native int array bailout recovery");
spreadResult = fooSpread([1.1,2.2,3.3,2.2,1.9]);
applyResult = fooApply(1.1,2.2,3.3,2.2,1.9);
assert.areEqual(applyResult, spreadResult, "Native float array bailout recovery");
var missingValues = ["a","b","c",,"d","e"];
spreadResult = fooSpread(["a","b","c",,"d","e"]);
applyResult = fooApply(...missingValues);
assert.areEqual(applyResult, spreadResult, "Missing values array bailout recovery");
}
inlinetest();
inlinetest(); // Force inlinee
// BLUE 592700
function blue592700() {
(function() { /*sStart*/ ;
while ((new Array([1, , ])) && 0) {
yrfgkc(...[1]);
var yrfgkc = (u3056) => [z1];
};; /*sEnd*/
})();
}
blue592700();
blue592700();
// BLUE 592004
function blue592004() {
function foo() {};
for (var loopVar2 = 0; loopVar2 < 3; loopVar2++) {
(function() {
if (foo) {
if (foo("w", encodeURIComponent));
} else lzfqei(...y);
})();
}
}
blue592004();
blue592004();
// BLUE 592718
function blue592718() {
Object.prototype['createFunction'] = function() {};
var addPropertyName = function() {};
var y = function() {};
(function() {
for (let dkewui = 0; dkewui < 1; ++dkewui) {
if (dkewui % 10 == 3) { /*hhh*/
qgjctn(...testForm);
} else {
for (var p in y) {
addPropertyName(p);
}
}
};; /*sEnd*/
})();
}
blue592718();
blue592718();
// BLUE 592729
function blue592729() {
((encodeURIComponent).bind(..."u")());
}
blue592729();
blue592729();
// BLUE 602272
function test0() {
var obj1 = {};
var func1 = function(argStr4) {}
var func2 = function(argMath8) {
func1(...[1, arguments[((ui8[1033265332]) >= 0 ? (obj0.length, ui8[1033265332]) : 0)],]);
}
obj1.method0 = func2;
var ui8 = new Uint8Array(256);
obj1.method0(...[1, 1], 1);
};
test0();
test0();
test0();
test0();
test0();
test0();
test0();
test0();
test0();
test0();
test0();
test0();
WScript.Echo("PASS");