description(
"This test checks that implicit reentry to global code through a getter does not clobber the calling register file."
);
var testVar = "FAIL";
function testGlobalCode(test) {
document.write("<script>"+test+"<"+"/script>");
}
var testObject = {
get getterTest(){ testGlobalCode("var a, b, c, d; testVar = 'PASS';"); },
set setterTest(_){ testGlobalCode("var e, f, g, h; testVar = 'PASS';"); },
toString: function() { testGlobalCode("var i, j, k, l; testVar = 'PASS';"); return ''; },
valueOf: function() { testGlobalCode("var m, n, o, p; testVar = 'PASS';"); return 0; },
toStringTest: function() { "" + this; },
valueOfTest: function() { 0 * this; }
};
shouldBe("testObject.getterTest; testVar;", '"PASS"');
var testVar = "FAIL";
shouldBe("testObject.setterTest = 1; testVar;", '"PASS"');
var testVar = "FAIL";
shouldBe("testObject.toStringTest(); testVar;", '"PASS"');
var testVar = "FAIL";
shouldBe("testObject.valueOfTest(); testVar;", '"PASS"');