test118.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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() {
  39. for(var i = 0; i < arguments.length; i++) {
  40. PolyFuncArr.push(arguments[i])
  41. }
  42. }
  43. ;
  44. function getFirst23Elements(value, index, array) {
  45. return index < 23;
  46. }
  47. function sumOfArrayElements(prev, curr, index, array) {
  48. return prev + curr;
  49. }
  50. ;
  51. function test0() {
  52. var obj0 = {};
  53. var obj1 = {};
  54. var arrObj0 = {};
  55. var func2 = function() {
  56. var __loopvar3 = 0;
  57. for(var strvar0 in i16) {
  58. if(strvar0.indexOf('method') != -1) continue;
  59. if(__loopvar3++ > 3) break;
  60. c = 1;
  61. obj1 = obj0;
  62. arrObj0 = obj0;
  63. }
  64. e = (ary.unshift(f, c, arrObj0.length, arrObj0.length, c, f, g, f, a, h, __loopvar3, h, this.prop0, arrObj0.prop0, obj1.length));
  65. }
  66. obj0.method0 = func2;
  67. arrObj0.method0 = func2;
  68. var ary = new Array(10);
  69. var i16 = new Int16Array(256);
  70. var a = 1;
  71. var e = 1;
  72. var f = 1;
  73. var g = 1;
  74. var h = 1;
  75. obj0.length = 1;
  76. function bar0() {
  77. (h /= (((~arrObj0.method0.call(obj1)) * (1 instanceof ((typeof Number == 'function') ? Number : Object)) - (obj1.prop0 &= 1)) + (-(1 & obj0.prop1))));
  78. }
  79. function bar1() {
  80. e <<= bar0.call(obj0);
  81. bar0.call(obj0);
  82. }
  83. var __protoObj2_proto = {};
  84. __protoObj2_proto.x = Math.pow(bar1(), 1);
  85. var __protoObj1__proto = Object.create(__protoObj2_proto);;
  86. var __protoinstanceobj__proto = Object.create(__protoObj1__proto);
  87. var __varforproto = __protoinstanceobj__proto.x + __protoinstanceobj__proto.x;
  88. __varforproto += __protoinstanceobj__proto.x + __protoinstanceobj__proto.x;
  89. __varforproto += __protoinstanceobj__proto.x + __protoinstanceobj__proto.x;
  90. GiantPrintArray.push(__varforproto);
  91. if(shouldBailout)
  92. __protoObj1__proto.__proto__ = { x: "hello" };
  93. __varforproto += __protoinstanceobj__proto.x + __protoinstanceobj__proto.x;
  94. GiantPrintArray.push(__varforproto);
  95. WScript.Echo('sumOfary = ' + ary.filter(getFirst23Elements).reduce(sumOfArrayElements, 0));;
  96. };
  97. // generate profile
  98. test0();
  99. test0();
  100. // Run Simple JIT
  101. test0();
  102. test0();
  103. // run JITted code
  104. runningJITtedCode = true;
  105. test0();
  106. // run code with bailouts enabled
  107. shouldBailout = true;
  108. test0();
  109. // Baseline output:
  110. // sumOfary = -Infinity
  111. // sumOfary = -Infinity
  112. // sumOfary = -Infinity
  113. // sumOfary = -Infinity
  114. // sumOfary = -Infinity
  115. // sumOfary = -Infinity
  116. //
  117. //
  118. // Test output:
  119. // sumOfary = -Infinity
  120. // sumOfary = -Infinity
  121. // sumOfary = -Infinity
  122. // sumOfary = -Infinity
  123. // sumOfary = Infinity
  124. // sumOfary = Infinity
  125. //