spread.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. // -maxInterpretCount:1 -maxSimpleJitRunCount:1 -dump:lowerer:4 -debug -debugbreak:4 -trace:bailout spread.js
  6. if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in
  7. // jc/jshost
  8. this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  9. }
  10. function transform(a,b,c,d) {
  11. return a + b + c + d;
  12. }
  13. function fooApply()
  14. {
  15. return this.transform.apply(this, arguments);
  16. }
  17. fooApply.prototype.transform = transform;
  18. function fooSpread(arglist) {
  19. return transform(...arglist);
  20. }
  21. function inlinetest() {
  22. // No bailouts expected
  23. spreadResult = fooSpread(["1","2","a","4"]);
  24. applyResult = fooApply("1","2","a","4");
  25. assert.areEqual(applyResult, spreadResult, "Matching number of args");
  26. spreadResult = fooSpread([1,"a"]);
  27. applyResult = fooApply(1,"a");
  28. assert.areEqual(applyResult, spreadResult, "Not all args");
  29. spreadResult = fooSpread(["xyzzy"]);
  30. applyResult = fooApply("xyzzy");
  31. assert.areEqual(applyResult, spreadResult, "One arg (non-X86 corner case)");
  32. spreadResult = fooSpread([]);
  33. applyResult = fooApply();
  34. assert.areEqual(applyResult, spreadResult, "No args");
  35. spreadResult = fooSpread(["1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4"]);
  36. applyResult = fooApply("1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4");
  37. assert.areEqual(applyResult, spreadResult, "Max number of args (16)");
  38. // Bailouts expected
  39. spreadResult = fooSpread(["1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4","bailout"]);
  40. applyResult = fooApply("1","2","a","4","1","2","a","4","1","2","a","4","1","2","a","4", "bailout");
  41. assert.areEqual(applyResult, spreadResult, "Max + 1 number of args bailout recovery");
  42. spreadResult = fooSpread([1,2,3,4,5]);
  43. applyResult = fooApply(1,2,3,4,5);
  44. assert.areEqual(applyResult, spreadResult, "Native int array bailout recovery");
  45. spreadResult = fooSpread([1.1,2.2,3.3,2.2,1.9]);
  46. applyResult = fooApply(1.1,2.2,3.3,2.2,1.9);
  47. assert.areEqual(applyResult, spreadResult, "Native float array bailout recovery");
  48. var missingValues = ["a","b","c",,"d","e"];
  49. spreadResult = fooSpread(["a","b","c",,"d","e"]);
  50. applyResult = fooApply(...missingValues);
  51. assert.areEqual(applyResult, spreadResult, "Missing values array bailout recovery");
  52. }
  53. inlinetest();
  54. inlinetest(); // Force inlinee
  55. // BLUE 592700
  56. function blue592700() {
  57. (function() { /*sStart*/ ;
  58. while ((new Array([1, , ])) && 0) {
  59. yrfgkc(...[1]);
  60. var yrfgkc = (u3056) => [z1];
  61. };; /*sEnd*/
  62. })();
  63. }
  64. blue592700();
  65. blue592700();
  66. // BLUE 592004
  67. function blue592004() {
  68. function foo() {};
  69. for (var loopVar2 = 0; loopVar2 < 3; loopVar2++) {
  70. (function() {
  71. if (foo) {
  72. if (foo("w", encodeURIComponent));
  73. } else lzfqei(...y);
  74. })();
  75. }
  76. }
  77. blue592004();
  78. blue592004();
  79. // BLUE 592718
  80. function blue592718() {
  81. Object.prototype['createFunction'] = function() {};
  82. var addPropertyName = function() {};
  83. var y = function() {};
  84. (function() {
  85. for (let dkewui = 0; dkewui < 1; ++dkewui) {
  86. if (dkewui % 10 == 3) { /*hhh*/
  87. qgjctn(...testForm);
  88. } else {
  89. for (var p in y) {
  90. addPropertyName(p);
  91. }
  92. }
  93. };; /*sEnd*/
  94. })();
  95. }
  96. blue592718();
  97. blue592718();
  98. // BLUE 592729
  99. function blue592729() {
  100. ((encodeURIComponent).bind(..."u")());
  101. }
  102. blue592729();
  103. blue592729();
  104. // BLUE 602272
  105. function test0() {
  106. var obj1 = {};
  107. var func1 = function(argStr4) {}
  108. var func2 = function(argMath8) {
  109. func1(...[1, arguments[((ui8[1033265332]) >= 0 ? (obj0.length, ui8[1033265332]) : 0)],]);
  110. }
  111. obj1.method0 = func2;
  112. var ui8 = new Uint8Array(256);
  113. obj1.method0(...[1, 1], 1);
  114. };
  115. test0();
  116. test0();
  117. test0();
  118. test0();
  119. test0();
  120. test0();
  121. test0();
  122. test0();
  123. test0();
  124. test0();
  125. test0();
  126. test0();
  127. WScript.Echo("PASS");