1var niters = 100000; 2 3// proxy -> target -> x 4function cacheOnTarget() { 5 var target = {x:42}; 6 var proxy = createProxy(target); 7 8 var getX = function(o) { return o.x; }; 9 noInline(getX); 10 11 var sum = 0; 12 for (var i = 0; i < niters; ++i) 13 sum += getX(proxy); 14 15 if (sum != 42 * niters) 16 throw new Error("Incorrect result"); 17}; 18 19// proxy -> target -> proto -> x 20function cacheOnPrototypeOfTarget() { 21 var proto = {x:42}; 22 var target = Object.create(proto); 23 var proxy = createProxy(target); 24 25 var getX = function(o) { return o.x; }; 26 noInline(getX); 27 28 var sum = 0; 29 for (var i = 0; i < niters; ++i) 30 sum += getX(proxy); 31 32 if (sum != 42 * niters) 33 throw new Error("Incorrect result"); 34}; 35 36// base -> proto (proxy) -> target -> x 37function dontCacheOnProxyInPrototypeChain() { 38 var target = {x:42}; 39 var protoProxy = createProxy(target); 40 var base = Object.create(protoProxy); 41 42 var getX = function(o) { return o.x; }; 43 noInline(getX); 44 45 var sum = 0; 46 for (var i = 0; i < niters; ++i) 47 sum += getX(base); 48 49 if (sum != 42 * niters) 50 throw new Error("Incorrect result"); 51}; 52 53// proxy -> target 1 -> proto (proxy) -> target 2 -> x 54function dontCacheOnTargetOfProxyInPrototypeChainOfTarget() { 55 var target2 = {x:42}; 56 var protoProxy = createProxy(target2); 57 var target1 = Object.create(protoProxy); 58 var proxy = createProxy(target1); 59 60 var getX = function(o) { return o.x; }; 61 noInline(getX); 62 63 var sum = 0; 64 for (var i = 0; i < niters; ++i) 65 sum += getX(proxy); 66 67 if (sum != 42 * niters) 68 throw new Error("Incorrect result"); 69}; 70 71cacheOnTarget(); 72cacheOnPrototypeOfTarget(); 73dontCacheOnProxyInPrototypeChain(); 74dontCacheOnTargetOfProxyInPrototypeChainOfTarget(); 75