From 67b76ebaea9ec66d52b032ee80490e9bf9256ef2 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Wed, 29 Oct 2014 09:22:40 +0000 Subject: [PATCH] Revert "In PrepareForBreakPoints, also purge shared function info not referenced by functions." This reverts commit r24964. TBR=machenbach@chromium.org Review URL: https://codereview.chromium.org/687163002 Cr-Commit-Position: refs/heads/master@{#24966} git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24966 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/debug.cc | 57 ++++++++++++---------------- test/mjsunit/regress/regress-crbug-424142.js | 36 ------------------ 2 files changed, 24 insertions(+), 69 deletions(-) delete mode 100644 test/mjsunit/regress/regress-crbug-424142.js diff --git a/src/debug.cc b/src/debug.cc index 9d31bee..6521110 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -1894,23 +1894,6 @@ static void RecompileAndRelocateSuspendedGenerators( } -static bool SkipSharedFunctionInfo(SharedFunctionInfo* shared, - Object* active_code_marker) { - if (!shared->allows_lazy_compilation()) return true; - if (!shared->script()->IsScript()) return true; - Object* script = shared->script(); - if (!script->IsScript()) return true; - if (Script::cast(script)->type()->value() == Script::TYPE_NATIVE) return true; - Code* shared_code = shared->code(); - return shared_code->gc_metadata() == active_code_marker; -} - - -static inline bool HasDebugBreakSlots(Code* code) { - return code->kind() == Code::FUNCTION && code->has_debug_break_slots(); -} - - void Debug::PrepareForBreakPoints() { // If preparing for the first break point make sure to deoptimize all // functions as debugging does not work with optimized code. @@ -1976,21 +1959,35 @@ void Debug::PrepareForBreakPoints() { if (obj->IsJSFunction()) { JSFunction* function = JSFunction::cast(obj); SharedFunctionInfo* shared = function->shared(); - if (SkipSharedFunctionInfo(shared, active_code_marker)) continue; + + if (!shared->allows_lazy_compilation()) continue; + if (!shared->script()->IsScript()) continue; + if (function->IsFromNativeScript()) continue; + if (shared->code()->gc_metadata() == active_code_marker) continue; + if (shared->is_generator()) { generator_functions.Add(Handle(function, isolate_)); continue; } - if (HasDebugBreakSlots(function->code())) continue; - Code* fallback = HasDebugBreakSlots(shared->code()) ? shared->code() - : *lazy_compile; + Code::Kind kind = function->code()->kind(); - if (kind == Code::FUNCTION || - (kind == Code::BUILTIN && // Abort in-flight compilation. - (function->IsInOptimizationQueue() || - function->IsMarkedForOptimization() || - function->IsMarkedForConcurrentOptimization()))) { - function->ReplaceCode(fallback); + if (kind == Code::FUNCTION && + !function->code()->has_debug_break_slots()) { + function->ReplaceCode(*lazy_compile); + function->shared()->ReplaceCode(*lazy_compile); + } else if (kind == Code::BUILTIN && + (function->IsInOptimizationQueue() || + function->IsMarkedForOptimization() || + function->IsMarkedForConcurrentOptimization())) { + // Abort in-flight compilation. + Code* shared_code = function->shared()->code(); + if (shared_code->kind() == Code::FUNCTION && + shared_code->has_debug_break_slots()) { + function->ReplaceCode(shared_code); + } else { + function->ReplaceCode(*lazy_compile); + function->shared()->ReplaceCode(*lazy_compile); + } } } else if (obj->IsJSGeneratorObject()) { JSGeneratorObject* gen = JSGeneratorObject::cast(obj); @@ -2010,12 +2007,6 @@ void Debug::PrepareForBreakPoints() { gen->set_continuation(code_offset); suspended_generators.Add(Handle(gen, isolate_)); - } else if (obj->IsSharedFunctionInfo()) { - SharedFunctionInfo* shared = SharedFunctionInfo::cast(obj); - if (SkipSharedFunctionInfo(shared, active_code_marker)) continue; - if (shared->is_generator()) continue; - if (HasDebugBreakSlots(shared->code())) continue; - shared->ReplaceCode(*lazy_compile); } } diff --git a/test/mjsunit/regress/regress-crbug-424142.js b/test/mjsunit/regress/regress-crbug-424142.js deleted file mode 100644 index 0a370d4..0000000 --- a/test/mjsunit/regress/regress-crbug-424142.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 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: --expose-debug-as debug - -(function outer() { - var C = (function C_() { - var y = 1; - function CC() { - this.x = 0; - } - CC.prototype.f = function CCf() { - this.x += y; - return this.x; - }; - return CC; - })(); - - var c = new C(0); -}) - -function sentinel() {} - -Debug = debug.Debug; - -var script = Debug.findScript(sentinel); -var line = 14; -var line_start = Debug.findScriptSourcePosition(script, line, 0); -var line_end = Debug.findScriptSourcePosition(script, line + 1, 0) - 1; -var actual = Debug.setBreakPointByScriptIdAndPosition( - script.id, line_start).actual_position; -// Make sure the actual break position is within the line where we set -// the break point. -assertTrue(line_start <= actual); -assertTrue(actual <= line_end); -- 2.7.4