X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/4be4e30906bcb8ee30b4d189205cb70bad6707ce..81345200c95645a1b0d2635520f96ad55dfde63f:/tests/stress/proxy-inline-cache.js diff --git a/tests/stress/proxy-inline-cache.js b/tests/stress/proxy-inline-cache.js new file mode 100644 index 0000000..faeabcc --- /dev/null +++ b/tests/stress/proxy-inline-cache.js @@ -0,0 +1,74 @@ +var niters = 100000; + +// proxy -> target -> x +function cacheOnTarget() { + var target = {x:42}; + var proxy = createProxy(target); + + var getX = function(o) { return o.x; }; + noInline(getX); + + var sum = 0; + for (var i = 0; i < niters; ++i) + sum += getX(proxy); + + if (sum != 42 * niters) + throw new Error("Incorrect result"); +}; + +// proxy -> target -> proto -> x +function cacheOnPrototypeOfTarget() { + var proto = {x:42}; + var target = Object.create(proto); + var proxy = createProxy(target); + + var getX = function(o) { return o.x; }; + noInline(getX); + + var sum = 0; + for (var i = 0; i < niters; ++i) + sum += getX(proxy); + + if (sum != 42 * niters) + throw new Error("Incorrect result"); +}; + +// base -> proto (proxy) -> target -> x +function dontCacheOnProxyInPrototypeChain() { + var target = {x:42}; + var protoProxy = createProxy(target); + var base = Object.create(protoProxy); + + var getX = function(o) { return o.x; }; + noInline(getX); + + var sum = 0; + for (var i = 0; i < niters; ++i) + sum += getX(base); + + if (sum != 42 * niters) + throw new Error("Incorrect result"); +}; + +// proxy -> target 1 -> proto (proxy) -> target 2 -> x +function dontCacheOnTargetOfProxyInPrototypeChainOfTarget() { + var target2 = {x:42}; + var protoProxy = createProxy(target2); + var target1 = Object.create(protoProxy); + var proxy = createProxy(target1); + + var getX = function(o) { return o.x; }; + noInline(getX); + + var sum = 0; + for (var i = 0; i < niters; ++i) + sum += getX(proxy); + + if (sum != 42 * niters) + throw new Error("Incorrect result"); +}; + +cacheOnTarget(); +cacheOnPrototypeOfTarget(); +dontCacheOnProxyInPrototypeChain(); +dontCacheOnTargetOfProxyInPrototypeChainOfTarget();