es5array_push.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. var shouldBailout = false;
  6. var GiantPrintArray = [];
  7. var reuseObjects = false;
  8. var PolymorphicFuncObjArr = [];
  9. var PolyFuncArr = [];
  10. function GetPolymorphicFunction() {
  11. if (PolyFuncArr.length > 1) {
  12. var myFunc = PolyFuncArr.shift();
  13. PolyFuncArr.push(myFunc);
  14. return myFunc;
  15. }
  16. else {
  17. return PolyFuncArr[0];
  18. }
  19. }
  20. function GetObjectwithPolymorphicFunction() {
  21. if (reuseObjects) {
  22. if (PolymorphicFuncObjArr.length > 1) {
  23. var myFunc = PolymorphicFuncObjArr.shift();
  24. PolymorphicFuncObjArr.push(myFunc);
  25. return myFunc
  26. }
  27. else {
  28. return PolymorphicFuncObjArr[0];
  29. }
  30. }
  31. else {
  32. var obj = {};
  33. obj.polyfunc = GetPolymorphicFunction();
  34. PolymorphicFuncObjArr.push(obj)
  35. return obj
  36. }
  37. };
  38. function InitPolymorphicFunctionArray(args) {
  39. PolyFuncArr = [];
  40. for (var i = 0; i < args.length; i++) {
  41. PolyFuncArr.push(args[i])
  42. }
  43. }
  44. ;
  45. function test0() {
  46. var obj0 = {};
  47. var arrObj0 = {};
  48. var ary = new Array(10);
  49. var FloatArr0 = 1;
  50. var h = 1;
  51. var __loopvar0 = 0;
  52. do {
  53. __loopvar0++;
  54. // Snippet: Array Check hoist for nested loop where bailout happens before 2nd loop.
  55. var v4916 = 0;
  56. arrObj0[5] = "temp";
  57. for (var v4917 = 0 ; v4917 < 3 ; v4917++) {
  58. for (var v4918 = 0 ; v4918 < 3 ; v4918++) {
  59. v4916 += arrObj0[v4918 + v4917];
  60. }
  61. if (shouldBailout) {
  62. Object.defineProperty(arrObj0, "5", { get: function () { GiantPrintArray.push("getter"); return 5; }, configurable: true });
  63. }
  64. for (var v4919 = 0 ; v4919 < 3 ; v4919++) {
  65. v4916 += arrObj0[v4919 + v4917];
  66. }
  67. 1
  68. }
  69. GiantPrintArray.push(v4916);
  70. var __loopvar3 = 0;
  71. do {
  72. __loopvar3++;
  73. litObj4 = { prop0: 1, prop1: (ary.shift()), prop2: (ary.pop()), prop3: 1, prop4: 1, prop5: 1, prop6: 1, prop7: 1 };
  74. var uniqobj2 = { prop0: (ary[((shouldBailout ? (ary[1] = 'x') : undefined), 1)], 1, 1, 1), prop1: 1 };
  75. } while ((1) && __loopvar3 < 3)
  76. arrObj0 = Object.prototype;
  77. var id29 = (ary.push((h ^= -4.00753612819473E+18), FloatArr0[(((174 >= 0 ? 174 : 0)) & 0XF)], obj0.prop2))
  78. ;
  79. } while ((1) && __loopvar0 < 3)
  80. for (var i = 0; i < GiantPrintArray.length; i++) {
  81. WScript.Echo(GiantPrintArray[i]);
  82. };
  83. };
  84. // generate profile
  85. test0();
  86. // Run Simple JIT
  87. test0();
  88. // run JITted code
  89. runningJITtedCode = true;
  90. test0();
  91. // run code with bailouts enabled
  92. shouldBailout = true;
  93. test0();