Index: src/debug.cc |
diff --git a/src/debug.cc b/src/debug.cc |
index 6ec7ad695bb3a6cd1836dfa4bef742d34bd31049..4e633c91cfa867cffada2363a956b1c5fe780c81 100644 |
--- a/src/debug.cc |
+++ b/src/debug.cc |
@@ -2037,18 +2037,25 @@ class ForceDebuggerActive { |
}; |
-void Debug::MaybeRecompileFunctionForDebugging(Handle<JSFunction> function) { |
- ASSERT_EQ(Code::FUNCTION, function->code()->kind()); |
- ASSERT_EQ(function->code(), function->shared()->code()); |
+void Debug::EnsureFunctionHasDebugBreakSlots(Handle<JSFunction> function) { |
+ if (function->code()->kind() == Code::FUNCTION && |
+ function->code()->has_debug_break_slots()) { |
+ // Nothing to do. Function code already had debug break slots. |
+ return; |
+ } |
- if (function->code()->has_debug_break_slots()) return; |
+ // Make sure that the shared full code is compiled with debug |
+ // break slots. |
+ if (!function->shared()->code()->has_debug_break_slots()) { |
+ ForceDebuggerActive force_debugger_active(isolate_); |
+ MaybeHandle<Code> code = Compiler::GetCodeForDebugging(function); |
+ // Recompilation can fail. In that case leave the code as it was. |
+ if (!code.is_null()) |
+ function->ReplaceCode(*code.ToHandleChecked()); |
+ } |
- ForceDebuggerActive force_debugger_active(isolate_); |
- MaybeHandle<Code> code = Compiler::GetCodeForDebugging(function); |
- // Recompilation can fail. In that case leave the code as it was. |
- if (!code.is_null()) |
- function->ReplaceCode(*code.ToHandleChecked()); |
- ASSERT_EQ(function->code(), function->shared()->code()); |
+ // Keep function code in sync with shared function info. |
+ function->ReplaceCode(function->shared()->code()); |
} |
@@ -2057,7 +2064,7 @@ void Debug::RecompileAndRelocateSuspendedGenerators( |
for (int i = 0; i < generators.length(); i++) { |
Handle<JSFunction> fun(generators[i]->function()); |
- MaybeRecompileFunctionForDebugging(fun); |
+ EnsureFunctionHasDebugBreakSlots(fun); |
int code_offset = generators[i]->continuation(); |
int pc_offset = ComputePcOffsetFromCodeOffset(fun->code(), code_offset); |
@@ -2217,7 +2224,7 @@ void Debug::PrepareForBreakPoints() { |
if (!shared->allows_lazy_compilation()) continue; |
if (shared->code()->kind() == Code::BUILTIN) continue; |
- MaybeRecompileFunctionForDebugging(function); |
+ EnsureFunctionHasDebugBreakSlots(function); |
} |
RedirectActivationsToRecompiledCodeOnThread(isolate_, |