Index: test/mjsunit/for-in-opt.js |
diff --git a/test/mjsunit/for-in-opt.js b/test/mjsunit/for-in-opt.js |
deleted file mode 100644 |
index bc59a1b0877e0ebd687d4698ac4b32ab724d7869..0000000000000000000000000000000000000000 |
--- a/test/mjsunit/for-in-opt.js |
+++ /dev/null |
@@ -1,157 +0,0 @@ |
-// Copyright 2015 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// Flags: --allow-natives-syntax --expose-debug-as debug |
- |
-"use strict"; |
- |
-// Test non-JSObject receiver. |
-function f(o) { |
- var result = []; |
- for (var i in o) { |
- result.push(i); |
- } |
- return result; |
-} |
- |
-assertEquals(["0"], f("a")); |
-assertEquals(["0"], f("a")); |
- |
-%OptimizeFunctionOnNextCall(f); |
-assertEquals(["0","1","2"], f("bla")); |
- |
-// Test the lazy deopt points. |
-var keys = ["a", "b", "c", "d"]; |
-var property_descriptor_keys = []; |
-var deopt_enum = false; |
-var deopt_property_descriptor = false; |
- |
-var handler = { |
- ownKeys() { |
- if (deopt_enum) { |
- %DeoptimizeFunction(f2); |
- deopt_enum = false; |
- } |
- return keys; |
- }, |
- getOwnPropertyDescriptor(target, k) { |
- if (deopt_property_descriptor) { |
- %DeoptimizeFunction(f2); |
- deopt_property_descriptor = false; |
- } |
- property_descriptor_keys.push(k); |
- return { enumerable: true, configurable: true } |
- }, |
-}; |
- |
- |
-var proxy = new Proxy({}, handler); |
-var o = {__proto__: proxy}; |
- |
-function f2(o) { |
- var result = []; |
- for (var i in o) { |
- result.push(i); |
- } |
- return result; |
-} |
- |
-function check_f2() { |
- assertEquals(keys, f2(o)); |
- assertEquals(keys, property_descriptor_keys); |
- property_descriptor_keys.length = 0; |
-} |
- |
-check_f2(); |
-check_f2(); |
- |
-// Test lazy deopt after ForInEnumerate |
-%OptimizeFunctionOnNextCall(f2); |
-deopt_enum = true; |
-check_f2(); |
- |
-// Test lazy deopt after FILTER_KEY |
-%OptimizeFunctionOnNextCall(f2); |
-deopt_property_descriptor = true; |
-check_f2(); |
- |
- |
-function f3(o) { |
- for (var i in o) { |
- } |
-} |
- |
-f3({__proto__:{x:1}}); |
-f3({__proto__:{x:1}}); |
- |
-%OptimizeFunctionOnNextCall(f3); |
-f3(undefined); |
-f3(null); |
- |
-// Reliable repro for an issue previously flushed out by GC stress. |
-var p = {x: "x"} |
- |
-function f4(o, p) { |
- var result = []; |
- for (var i in o) { |
- var j = p.x + "str"; |
- result.push(i); |
- } |
- return result; |
-} |
- |
-function check_f4() { |
- assertEquals(keys, f4(o, p)); |
- assertEquals(keys, property_descriptor_keys); |
- property_descriptor_keys.length = 0; |
-} |
- |
-check_f4(); |
-check_f4(); |
- |
-%OptimizeFunctionOnNextCall(f4); |
- |
-p.y = "y"; // Change map, cause eager deopt. |
-check_f4(); |
- |
-// Repro for Turbofan equivalent. |
-var x; |
-var count = 0; |
- |
-var Debug = debug.Debug; |
- |
-function listener(event, exec_state, event_data, data) { |
- if (event == Debug.DebugEvent.Break) { |
- %DeoptimizeFunction(f5); |
- } |
-} |
- |
-var handler3 = { |
- ownKeys() { return ["a", "b"] }, |
- getOwnPropertyDescriptor(target, k) { |
- if (k == "a") count++; |
- if (x) %ScheduleBreak() |
- return { enumerable: true, configurable: true } |
- } |
-}; |
- |
-var proxy3 = new Proxy({}, handler3); |
-var o3 = {__proto__: proxy3}; |
- |
-function f5() { |
- for (var p in o3) { |
- print(p); |
- } |
-} |
- |
-x = false; |
- |
-f5(); f5(); f5(); |
-%OptimizeFunctionOnNextCall(f5); |
-x = true; |
-count = 0; |
-Debug.setListener(listener); |
-f5(); |
-Debug.setListener(null); |
-assertEquals(1, count); |