]> git.saurik.com Git - apple/javascriptcore.git/blame - tests/stress/proxy-inline-cache.js
JavaScriptCore-7600.1.4.15.12.tar.gz
[apple/javascriptcore.git] / tests / stress / proxy-inline-cache.js
CommitLineData
81345200
A
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();