// Regression test for bug 179212 | |
var p = { "a": {} }; | |
var flag = 0; | |
var data = []; | |
var copy = []; | |
var z = new Proxy({}, { | |
getPrototypeOf: function() { | |
if (flag == 2) { | |
data[0] = { "x": "I changed" }; | |
} | |
if (flag == 1) { | |
flag = 2; | |
} | |
return {"a": 1, "b": 2} | |
} | |
}); | |
p.__proto__ = z; | |
function reset() | |
{ | |
flag = 0; | |
data = [1.1, 2.2, 3.3]; | |
copy = []; | |
} | |
function runTest(func) | |
{ | |
reset(); | |
for (var i = 0; i < 0x10000; i++) | |
func(); | |
flag = 1; | |
func(); | |
if (copy[0].x != "I changed") | |
throw "Expected updated value for copy[0]"; | |
} | |
function testWithoutFTL() | |
{ | |
function f() | |
{ | |
data[0] = 2.2; | |
for(var d in p) { | |
copy[0] = data[0]; | |
copy[1] = data[1]; | |
copy[2] = data[2]; | |
} | |
} | |
noFTL(f); | |
runTest(f); | |
} | |
function testWithFTL() | |
{ | |
function f() | |
{ | |
data[0] = 2.2; | |
for(var d in p) { | |
copy[0] = data[0]; | |
copy[1] = data[1]; | |
copy[2] = data[2]; | |
} | |
} | |
runTest(f); | |
} | |
testWithoutFTL(); | |
testWithFTL(); |