|
1 function get_value_undefined(o) { |
|
2 return o.value |
|
3 } |
|
4 |
|
5 function get_value_null(o) { |
|
6 return o.value |
|
7 } |
|
8 |
|
9 function get_value_int(o) { |
|
10 return o.value |
|
11 } |
|
12 |
|
13 function get_value_effectfull(o) { |
|
14 return o.value |
|
15 } |
|
16 |
|
17 var count = 0 |
|
18 var o_undefined = {value: undefined} |
|
19 var o_null = {value: null} |
|
20 var o_int = {value: 3} |
|
21 var o_effectfull = {} |
|
22 Object.defineProperty(o_effectfull, "value", { get: function () { count++; return undefined; } }); |
|
23 |
|
24 // compiled as undefined |
|
25 for(var i=0; i<42; i++) |
|
26 get_value_undefined(o_undefined) |
|
27 |
|
28 // compiled as null |
|
29 for(var i=0; i<42; i++) |
|
30 get_value_null(o_null) |
|
31 |
|
32 // compiled as int |
|
33 for(var i=0; i<42; i++) |
|
34 get_value_int(o_int) |
|
35 |
|
36 // compiled as effectfull property access |
|
37 for(var i=0; i<42; i++) |
|
38 get_value_effectfull(o_effectfull) |
|
39 |
|
40 // Note: |
|
41 // because of bug 715111 when there is an invalidation we have bogus values on the stack. |
|
42 // So we get wrong values. Therefor I run them twice. On as 'warmup'. Second time to test |
|
43 |
|
44 count = 0 |
|
45 assertEq(get_value_undefined(o_undefined), undefined); |
|
46 get_value_undefined(o_null) |
|
47 assertEq(get_value_undefined(o_null), null); |
|
48 get_value_undefined(o_int) |
|
49 assertEq(get_value_undefined(o_int), 3); |
|
50 get_value_undefined(o_effectfull) |
|
51 assertEq(get_value_undefined(o_effectfull), undefined); |
|
52 assertEq(get_value_undefined(o_undefined), undefined); |
|
53 assertEq(count, 2); |
|
54 |
|
55 count = 0 |
|
56 assertEq(get_value_null(o_null), null); |
|
57 get_value_null(o_undefined) |
|
58 assertEq(get_value_null(o_undefined), undefined); |
|
59 get_value_null(o_int) |
|
60 assertEq(get_value_null(o_int), 3); |
|
61 get_value_null(o_effectfull) |
|
62 assertEq(get_value_null(o_effectfull), undefined); |
|
63 assertEq(get_value_null(o_null), null); |
|
64 assertEq(count, 2); |
|
65 |
|
66 count = 0 |
|
67 |
|
68 assertEq(get_value_int(o_int), 3); |
|
69 get_value_int(o_null) |
|
70 assertEq(get_value_int(o_null), null); |
|
71 get_value_int(o_undefined) |
|
72 assertEq(get_value_int(o_undefined), undefined); |
|
73 get_value_int(o_effectfull) |
|
74 assertEq(get_value_int(o_effectfull), undefined); |
|
75 assertEq(get_value_int(o_int), 3); |
|
76 assertEq(count, 2); |
|
77 |
|
78 count = 0 |
|
79 |
|
80 assertEq(get_value_effectfull(o_effectfull), undefined); |
|
81 get_value_effectfull(o_null) |
|
82 assertEq(get_value_effectfull(o_null), null); |
|
83 get_value_effectfull(o_undefined) |
|
84 assertEq(get_value_effectfull(o_undefined), undefined); |
|
85 get_value_effectfull(o_int) |
|
86 assertEq(get_value_effectfull(o_int), 3); |
|
87 assertEq(get_value_effectfull(o_effectfull), undefined); |
|
88 assertEq(count, 2); |