| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- //-------------------------------------------------------------------------------------------------------
- // 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");
|