| Index: src/debug.cc
|
| diff --git a/src/debug.cc b/src/debug.cc
|
| index 9efb5c37aae3fb6983c95cdfccaa989734a040a9..286882e8d36bd135d324009b93c8bc74318e9c93 100644
|
| --- a/src/debug.cc
|
| +++ b/src/debug.cc
|
| @@ -1784,20 +1784,19 @@ void Debug::ClearStepNext() {
|
|
|
|
|
| // Helper function to compile full code for debugging. This code will
|
| -// have debug break slots and deoptimization
|
| -// information. Deoptimization information is required in case that an
|
| -// optimized version of this function is still activated on the
|
| -// stack. It will also make sure that the full code is compiled with
|
| -// the same flags as the previous version - that is flags which can
|
| -// change the code generated. The current method of mapping from
|
| -// already compiled full code without debug break slots to full code
|
| -// with debug break slots depends on the generated code is otherwise
|
| -// exactly the same.
|
| -static bool CompileFullCodeForDebugging(Handle<SharedFunctionInfo> shared,
|
| +// have debug break slots and deoptimization information. Deoptimization
|
| +// information is required in case that an optimized version of this
|
| +// function is still activated on the stack. It will also make sure that
|
| +// the full code is compiled with the same flags as the previous version,
|
| +// that is flags which can change the code generated. The current method
|
| +// of mapping from already compiled full code without debug break slots
|
| +// to full code with debug break slots depends on the generated code is
|
| +// otherwise exactly the same.
|
| +static bool CompileFullCodeForDebugging(Handle<JSFunction> function,
|
| Handle<Code> current_code) {
|
| ASSERT(!current_code->has_debug_break_slots());
|
|
|
| - CompilationInfo info(shared);
|
| + CompilationInfo info(function);
|
| info.MarkCompilingForDebugging(current_code);
|
| ASSERT(!info.shared_info()->is_compiled());
|
| ASSERT(!info.isolate()->has_pending_exception());
|
| @@ -1809,7 +1808,7 @@ static bool CompileFullCodeForDebugging(Handle<SharedFunctionInfo> shared,
|
| info.isolate()->clear_pending_exception();
|
| #if DEBUG
|
| if (result) {
|
| - Handle<Code> new_code(shared->code());
|
| + Handle<Code> new_code(function->shared()->code());
|
| ASSERT(new_code->has_debug_break_slots());
|
| ASSERT(current_code->is_compiled_optimizable() ==
|
| new_code->is_compiled_optimizable());
|
| @@ -2013,6 +2012,7 @@ void Debug::PrepareForBreakPoints() {
|
| // patch the return address to run in the new compiled code.
|
| for (int i = 0; i < active_functions.length(); i++) {
|
| Handle<JSFunction> function = active_functions[i];
|
| + Handle<SharedFunctionInfo> shared(function->shared());
|
|
|
| if (function->code()->kind() == Code::FUNCTION &&
|
| function->code()->has_debug_break_slots()) {
|
| @@ -2020,7 +2020,6 @@ void Debug::PrepareForBreakPoints() {
|
| continue;
|
| }
|
|
|
| - Handle<SharedFunctionInfo> shared(function->shared());
|
| // If recompilation is not possible just skip it.
|
| if (shared->is_toplevel() ||
|
| !shared->allows_lazy_compilation() ||
|
| @@ -2040,7 +2039,7 @@ void Debug::PrepareForBreakPoints() {
|
| isolate_->debugger()->force_debugger_active();
|
| isolate_->debugger()->set_force_debugger_active(true);
|
| ASSERT(current_code->kind() == Code::FUNCTION);
|
| - CompileFullCodeForDebugging(shared, current_code);
|
| + CompileFullCodeForDebugging(function, current_code);
|
| isolate_->debugger()->set_force_debugger_active(
|
| prev_force_debugger_active);
|
| if (!shared->is_compiled()) {
|
|
|