| //------------------------------------------------------------------------------------------------------- | |
| // Copyright (C) Microsoft. All rights reserved. | |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | |
| //------------------------------------------------------------------------------------------------------- | |
| function Ctor() | |
| { | |
| } | |
| Ctor.prototype.blah = function() | |
| { | |
| for (var i = 0; i < 10; i++) | |
| { | |
| eval("this.blahnum= 1000; "); | |
| } | |
| } | |
| var a = new Ctor(); | |
| a.blah(); | |
| WScript.Echo(a.blahnum); | |
| var o = { | |
| f: function(a,b,c) { | |
| WScript.Echo(a,b,c); | |
| }, | |
| g: function() { | |
| for(var i = 0; i < 1; ++i) | |
| this.f.apply(this, arguments); | |
| } | |
| }; | |
| o.g(1,2,3); | |
| function f() { | |
| for (var i = 0; i < 1; i++) { | |
| var g_args = g.arguments; | |
| WScript.Echo(g_args === f.caller.arguments); | |
| WScript.Echo(g_args.callee === f.caller); | |
| } | |
| } | |
| function g() { | |
| for (var i = 0; i < 1; i++) { | |
| f(); | |
| } | |
| } | |
| g('hi'); | |
| function test() | |
| { | |
| with({x:"x"}) | |
| { | |
| while((function(){ return x; })()) | |
| { | |
| WScript.Echo(x); | |
| break; | |
| } | |
| } | |
| } | |
| test(); | |
| function retval() | |
| { | |
| for (var i = 0; i < 1; i++) | |
| { | |
| if (i > 1) | |
| { | |
| return i; | |
| } | |
| } | |
| return 0; | |
| } | |
| retval(); | |
| function testForInWithPrototype() | |
| { | |
| function LoopResultsOfObject(o, methodName) | |
| { | |
| WScript.Echo(methodName); | |
| var method = eval("Object." + methodName); | |
| var r = method(o); | |
| WScript.Echo("Length: " + r.length); | |
| for (var i in r) { | |
| WScript.Echo(i + " => " + r[i]); | |
| } | |
| } | |
| var protoObject = {} | |
| protoObject.prop1 = "p1"; | |
| function MyClass() | |
| { | |
| this.prop2 = "p2"; | |
| } | |
| MyClass.prototype = protoObject; | |
| var instance = new MyClass; | |
| LoopResultsOfObject(instance, "getOwnPropertyNames"); | |
| LoopResultsOfObject(instance, "keys"); | |
| } | |
| testForInWithPrototype(); | |
| // Test loop that shouldn't execute and has a side-effect in the loop body | |
| for (var z = 0; z < 0; ++z) { | |
| 1 in 2; | |
| } | |
| try { | |
| eval('for (var a, b in z) {}'); | |
| } | |
| catch(e) { | |
| WScript.Echo(e.message); | |
| } | |
| try { | |
| Function("for (var a, b in z) {}")(); | |
| } | |
| catch(e) { | |
| WScript.Echo(e.message); | |
| } | |
| try { | |
| eval('for (a, b in z) {}'); | |
| } | |
| catch(e) { | |
| WScript.Echo(e.message); | |
| } | |
| try { | |
| Function("for (a, b in z) {}")(); | |
| } | |
| catch(e) { | |
| WScript.Echo(e.message); | |
| } | |
| // Test loop that has bailout in the loop header and must have vars initialized | |
| // (or bailout may try to box garbage values). | |
| function test_bail(){ | |
| var obj0 = {}; | |
| var obj1 = {}; | |
| var func0 = function(){ | |
| } | |
| var func1 = function(p0,p1,p2){ | |
| var __loopvar2 = 0; | |
| for(; __loopvar2 < 3 && p2 < (1); __loopvar2++, 14) { | |
| var __loopvar3 = 0; | |
| do { | |
| __loopvar3++; | |
| obj0.prop0 <<=(ary[(8)] - ((obj2.prop3 ^= (++ obj1.prop1)) ? 1701746938.1 : this.prop2)); | |
| var obj4 = 1; | |
| } while((1) && __loopvar3 < 3) | |
| } | |
| var obj4 = func0(2147483647, (new RegExp("xyz")), 1.1, 1, (7 ? -970342005 : 1)); | |
| } | |
| var func2 = function(){ | |
| if(ui8[1073741824]) { | |
| -2; | |
| var __loopvar3 = 0; | |
| for(var strvar0 in obj0 ) { | |
| if(__loopvar3++ > 3) break; | |
| var fPolyProp = function (o) { | |
| if (o!==undefined) { | |
| WScript.Echo(o.prop0 + ' ' + o.prop1 + ' ' + o.prop2); | |
| } | |
| } | |
| fPolyProp(litObj0); fPolyProp(litObj1); fPolyProp(litObj2); | |
| obj2.prop5 = 2147483647; | |
| } | |
| } | |
| for(var __loopvar2 = 0; __loopvar2 < 3; __loopvar2++) { | |
| } | |
| } | |
| obj0.method0 = func2; | |
| var ui8 = new Uint8Array(256); | |
| var __loopvar1 = 0; | |
| do { | |
| __loopvar1++; | |
| (function(p0, p1, p2, p3){ | |
| var obj5 = obj0; | |
| obj4 = (new obj5.method0()); | |
| })(); | |
| } while((1) && __loopvar1 < 3) | |
| if(func1(1, 1)) { | |
| } | |
| }; | |
| // generate profile | |
| test_bail(); | |
| // run JITted code | |
| test_bail(); | |
| WScript.Echo('done') |