sbarati@apple.com | 9aacac4 | 2015-10-08 19:37:28 +0000 | [diff] [blame] | 1 | function assert(b) { |
2 | if (!b) throw new Error("b"); | ||||
3 | } | ||||
4 | noInline(assert); | ||||
5 | |||||
6 | |||||
7 | let i; | ||||
8 | var o1 = { | ||||
9 | get f() { | ||||
10 | if (i === -1000) | ||||
11 | throw new Error("hello"); | ||||
12 | return 20; | ||||
13 | } | ||||
14 | }; | ||||
15 | |||||
16 | var o2 = { | ||||
17 | f: 40 | ||||
18 | } | ||||
19 | |||||
20 | var o3 = { | ||||
21 | x: 100, | ||||
22 | f: 50 | ||||
23 | } | ||||
24 | |||||
25 | function bar(i) { | ||||
26 | if (i === -1000) | ||||
27 | return o1; | ||||
28 | |||||
29 | if (i % 2) | ||||
30 | return o3; | ||||
31 | else | ||||
32 | return o2; | ||||
33 | } | ||||
34 | noInline(bar); | ||||
35 | |||||
36 | function foo(i) { | ||||
37 | var o = bar(i); | ||||
38 | var v; | ||||
39 | try { | ||||
40 | v = o.f | ||||
41 | } catch(e) { | ||||
42 | assert(o === o1); | ||||
43 | } | ||||
44 | } | ||||
45 | noInline(foo); | ||||
46 | |||||
47 | foo(i); | ||||
48 | for (i = 0; i < 1000; i++) | ||||
49 | foo(i); | ||||
50 | |||||
51 | i = -1000; | ||||
52 | for (let j = 0; j < 1000; j++) | ||||
53 | foo(i); |