]>
Commit | Line | Data |
---|---|---|
81345200 A |
1 | var niters = 100000; |
2 | ||
3 | // proxy -> target -> x | |
4 | function 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 | |
20 | function 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 | |
37 | function 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 | |
54 | function 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 | ||
71 | cacheOnTarget(); | |
72 | cacheOnPrototypeOfTarget(); | |
73 | dontCacheOnProxyInPrototypeChain(); | |
74 | dontCacheOnTargetOfProxyInPrototypeChainOfTarget(); |