OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --harmony-proxies --allow-natives-syntax --expose-debug-as debug | 5 // Flags: --harmony-proxies --allow-natives-syntax --expose-debug-as debug |
6 | 6 |
7 "use strict"; | 7 "use strict"; |
8 | 8 |
9 // Test non-JSObject receiver. | 9 // Test non-JSObject receiver. |
10 function f(o) { | 10 function f(o) { |
(...skipping 10 matching lines...) Expand all Loading... |
21 %OptimizeFunctionOnNextCall(f); | 21 %OptimizeFunctionOnNextCall(f); |
22 assertEquals(["0","1","2"], f("bla")); | 22 assertEquals(["0","1","2"], f("bla")); |
23 | 23 |
24 // Test the lazy deopt points. | 24 // Test the lazy deopt points. |
25 var keys = ["a", "b", "c", "d"]; | 25 var keys = ["a", "b", "c", "d"]; |
26 var has_keys = []; | 26 var has_keys = []; |
27 var deopt_has = false; | 27 var deopt_has = false; |
28 var deopt_enum = false; | 28 var deopt_enum = false; |
29 | 29 |
30 var handler = { | 30 var handler = { |
31 enumerate(target) { | 31 ownKeys() { |
32 if (deopt_enum) { | 32 if (deopt_enum) { |
33 %DeoptimizeFunction(f2); | 33 %DeoptimizeFunction(f2); |
34 deopt_enum = false; | 34 deopt_enum = false; |
35 } | 35 } |
36 return keys[Symbol.iterator](); | 36 return keys; |
37 }, | 37 }, |
| 38 getOwnPropertyDescriptor() { return { enumerable: true, configurable: true }}, |
38 | 39 |
39 has(target, k) { | 40 has(target, k) { |
40 if (deopt_has) { | 41 if (deopt_has) { |
41 %DeoptimizeFunction(f2); | 42 %DeoptimizeFunction(f2); |
42 deopt_has = false; | 43 deopt_has = false; |
43 } | 44 } |
44 has_keys.push(k); | 45 has_keys.push(k); |
45 return {value: 10, configurable: true, writable: false, enumerable: true}; | 46 return true; |
46 } | 47 } |
47 }; | 48 }; |
48 | 49 |
49 | 50 |
50 var proxy = new Proxy({}, handler); | 51 var proxy = new Proxy({}, handler); |
51 var o = {__proto__: proxy}; | 52 var o = {__proto__: proxy}; |
52 | 53 |
53 function f2(o) { | 54 function f2(o) { |
54 var result = []; | 55 var result = []; |
55 for (var i in o) { | 56 for (var i in o) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 | 130 |
130 var Debug = debug.Debug; | 131 var Debug = debug.Debug; |
131 | 132 |
132 function listener(event, exec_state, event_data, data) { | 133 function listener(event, exec_state, event_data, data) { |
133 if (event == Debug.DebugEvent.Break) { | 134 if (event == Debug.DebugEvent.Break) { |
134 %DeoptimizeFunction(f5); | 135 %DeoptimizeFunction(f5); |
135 } | 136 } |
136 } | 137 } |
137 | 138 |
138 var handler3 = { | 139 var handler3 = { |
139 enumerate(target) { | 140 ownKeys() { return ["a", "b"] }, |
140 return ["a", "b"][Symbol.iterator](); | 141 getOwnPropertyDescriptor() { return { enumerable: true, configurable: true }}, |
141 }, | |
142 | 142 |
143 has(target, k) { | 143 has(target, k) { |
144 if (k == "a") count++; | 144 if (k == "a") count++; |
145 if (x) %ScheduleBreak(); | 145 if (x) %ScheduleBreak(); |
146 return {value: 10, configurable: true, writable: false, enumerable: true}; | 146 return true; |
147 } | 147 } |
148 }; | 148 }; |
149 | 149 |
150 var proxy3 = new Proxy({}, handler3); | 150 var proxy3 = new Proxy({}, handler3); |
151 var o3 = {__proto__: proxy3}; | 151 var o3 = {__proto__: proxy3}; |
152 | 152 |
153 function f5() { | 153 function f5() { |
154 for (var p in o3) { | 154 for (var p in o3) { |
155 print(p); | 155 print(p); |
156 } | 156 } |
157 } | 157 } |
158 | 158 |
159 x = false; | 159 x = false; |
160 | 160 |
161 f5(); f5(); f5(); | 161 f5(); f5(); f5(); |
162 %OptimizeFunctionOnNextCall(f5); | 162 %OptimizeFunctionOnNextCall(f5); |
163 x = true; | 163 x = true; |
164 count = 0; | 164 count = 0; |
165 Debug.setListener(listener); | 165 Debug.setListener(listener); |
166 f5(); | 166 f5(); |
167 Debug.setListener(null); | 167 Debug.setListener(null); |
168 assertEquals(1, count); | 168 assertEquals(1, count); |
OLD | NEW |