var isConstructing = getSelfHostedValue("IsConstructing"); function testBasic() { var f = function(expected) { with(this) {}; // Don't inline. assertEq(isConstructing(), expected); }; for (var i=0; i<40; i++) { f(false); new f(true); } } testBasic(); function testGeneric() { var f1 = function(expected) { with(this) {}; assertEq(isConstructing(), expected); }; var f2 = function(expected) { assertEq(isConstructing(), expected); } var funs = [f1, f2]; for (var i=0; i<40; i++) { var f = funs[i % 2]; f(false); new f(true); } } testGeneric(); function testArgsRectifier() { var f = function(x) { with(this) {}; assertEq(isConstructing(), true); }; for (var i=0; i<40; i++) new f(); } testArgsRectifier(); function testBailout() { var f1 = function(x, expected) { if (x > 20) { bailout(); assertEq(isConstructing(), expected); } }; var f2 = function(x) { return new f1(x, true); }; var f3 = function(x) { return f1(x, false); }; for (var i=0; i<40; i++) { f2(i); f3(i); } for (var i=0; i<40; i++) f1(i, false); } testBailout();