testDirectProxyGet10.js (939B)
1 load(libdir + "asserts.js"); 2 3 var target = {x:5}; 4 var magic = false; 5 var returnValue = 42; 6 var handler = { 7 get(t, p, a, b) { 8 assertEq(a, proxy); 9 assertEq(b, undefined); 10 assertEq(arguments.length, 3); 11 if (magic) { 12 Object.defineProperty(target, 'x', { 13 value: 42, 14 writable: false, 15 configurable: false 16 }); 17 if (returnValue != 42) { 18 gc(testGet, "shrinking"); 19 } 20 } 21 return returnValue; 22 } 23 }; 24 var proxy = new Proxy(target, handler); 25 26 // Use an array that sometimes has a proxy and sometimes not, to get to 27 // the Ion IC path. 28 var maybeProxies = [ 29 {x: returnValue}, 30 proxy, 31 ]; 32 33 function testGet(p) { 34 return p.x; 35 } 36 37 for (i = 0; i < 200; i++) { 38 assertEq(testGet(maybeProxies[i % maybeProxies.length]), returnValue); 39 } 40 magic = true; 41 assertEq(testGet(proxy), returnValue); 42 returnValue = 41; 43 assertThrowsInstanceOf(function () { testGet(proxy) }, TypeError);