loop.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. function Ctor()
  6. {
  7. }
  8. Ctor.prototype.blah = function()
  9. {
  10. for (var i = 0; i < 10; i++)
  11. {
  12. eval("this.blahnum= 1000; ");
  13. }
  14. }
  15. var a = new Ctor();
  16. a.blah();
  17. WScript.Echo(a.blahnum);
  18. var o = {
  19. f: function(a,b,c) {
  20. WScript.Echo(a,b,c);
  21. },
  22. g: function() {
  23. for(var i = 0; i < 1; ++i)
  24. this.f.apply(this, arguments);
  25. }
  26. };
  27. o.g(1,2,3);
  28. function f() {
  29. for (var i = 0; i < 1; i++) {
  30. var g_args = g.arguments;
  31. WScript.Echo(g_args === f.caller.arguments);
  32. WScript.Echo(g_args.callee === f.caller);
  33. }
  34. }
  35. function g() {
  36. for (var i = 0; i < 1; i++) {
  37. f();
  38. }
  39. }
  40. g('hi');
  41. function test()
  42. {
  43. with({x:"x"})
  44. {
  45. while((function(){ return x; })())
  46. {
  47. WScript.Echo(x);
  48. break;
  49. }
  50. }
  51. }
  52. test();
  53. function retval()
  54. {
  55. for (var i = 0; i < 1; i++)
  56. {
  57. if (i > 1)
  58. {
  59. return i;
  60. }
  61. }
  62. return 0;
  63. }
  64. retval();
  65. function testForInWithPrototype()
  66. {
  67. function LoopResultsOfObject(o, methodName)
  68. {
  69. WScript.Echo(methodName);
  70. var method = eval("Object." + methodName);
  71. var r = method(o);
  72. WScript.Echo("Length: " + r.length);
  73. for (var i in r) {
  74. WScript.Echo(i + " => " + r[i]);
  75. }
  76. }
  77. var protoObject = {}
  78. protoObject.prop1 = "p1";
  79. function MyClass()
  80. {
  81. this.prop2 = "p2";
  82. }
  83. MyClass.prototype = protoObject;
  84. var instance = new MyClass;
  85. LoopResultsOfObject(instance, "getOwnPropertyNames");
  86. LoopResultsOfObject(instance, "keys");
  87. }
  88. testForInWithPrototype();
  89. // Test loop that shouldn't execute and has a side-effect in the loop body
  90. for (var z = 0; z < 0; ++z) {
  91. 1 in 2;
  92. }
  93. try {
  94. eval('for (var a, b in z) {}');
  95. }
  96. catch(e) {
  97. WScript.Echo(e.message);
  98. }
  99. try {
  100. Function("for (var a, b in z) {}")();
  101. }
  102. catch(e) {
  103. WScript.Echo(e.message);
  104. }
  105. try {
  106. eval('for (a, b in z) {}');
  107. }
  108. catch(e) {
  109. WScript.Echo(e.message);
  110. }
  111. try {
  112. Function("for (a, b in z) {}")();
  113. }
  114. catch(e) {
  115. WScript.Echo(e.message);
  116. }
  117. // Test loop that has bailout in the loop header and must have vars initialized
  118. // (or bailout may try to box garbage values).
  119. function test_bail(){
  120. var obj0 = {};
  121. var obj1 = {};
  122. var func0 = function(){
  123. }
  124. var func1 = function(p0,p1,p2){
  125. var __loopvar2 = 0;
  126. for(; __loopvar2 < 3 && p2 < (1); __loopvar2++, 14) {
  127. var __loopvar3 = 0;
  128. do {
  129. __loopvar3++;
  130. obj0.prop0 <<=(ary[(8)] - ((obj2.prop3 ^= (++ obj1.prop1)) ? 1701746938.1 : this.prop2));
  131. var obj4 = 1;
  132. } while((1) && __loopvar3 < 3)
  133. }
  134. var obj4 = func0(2147483647, (new RegExp("xyz")), 1.1, 1, (7 ? -970342005 : 1));
  135. }
  136. var func2 = function(){
  137. if(ui8[1073741824]) {
  138. -2;
  139. var __loopvar3 = 0;
  140. for(var strvar0 in obj0 ) {
  141. if(__loopvar3++ > 3) break;
  142. var fPolyProp = function (o) {
  143. if (o!==undefined) {
  144. WScript.Echo(o.prop0 + ' ' + o.prop1 + ' ' + o.prop2);
  145. }
  146. }
  147. fPolyProp(litObj0); fPolyProp(litObj1); fPolyProp(litObj2);
  148. obj2.prop5 = 2147483647;
  149. }
  150. }
  151. for(var __loopvar2 = 0; __loopvar2 < 3; __loopvar2++) {
  152. }
  153. }
  154. obj0.method0 = func2;
  155. var ui8 = new Uint8Array(256);
  156. var __loopvar1 = 0;
  157. do {
  158. __loopvar1++;
  159. (function(p0, p1, p2, p3){
  160. var obj5 = obj0;
  161. obj4 = (new obj5.method0());
  162. })();
  163. } while((1) && __loopvar1 < 3)
  164. if(func1(1, 1)) {
  165. }
  166. };
  167. // generate profile
  168. test_bail();
  169. // run JITted code
  170. test_bail();
  171. WScript.Echo('done')