Index: src/debug/debug.cc |
diff --git a/src/debug/debug.cc b/src/debug/debug.cc |
index 1cdaf56741383cc3cb4b92021538c6390b1685ae..55b4a839e23478e3d7288b6fd5c616b2caca62a4 100644 |
--- a/src/debug/debug.cc |
+++ b/src/debug/debug.cc |
@@ -342,6 +342,7 @@ |
// TODO(isolates): frames_are_dropped_? |
base::NoBarrier_Store(&thread_local_.current_debug_scope_, |
static_cast<base::AtomicWord>(0)); |
+ thread_local_.restarter_frame_function_pointer_ = NULL; |
} |
@@ -934,6 +935,17 @@ |
thread_local_.step_in_enabled_ = false; |
} |
return; |
+ } |
+ |
+ STATIC_ASSERT(StepFrame > StepIn); |
+ if (step_action >= StepIn) { |
+ // If there's restarter frame on top of the stack, just get the pointer |
+ // to function which is going to be restarted. |
+ if (thread_local_.restarter_frame_function_pointer_ != NULL) { |
+ Handle<JSFunction> restarted_function( |
+ JSFunction::cast(*thread_local_.restarter_frame_function_pointer_)); |
+ FloodWithOneShot(restarted_function); |
+ } |
} |
// Fill the current function with one-shot break points even for step in on |
@@ -1516,11 +1528,14 @@ |
void Debug::FramesHaveBeenDropped(StackFrame::Id new_break_frame_id, |
- LiveEdit::FrameDropMode mode) { |
+ LiveEdit::FrameDropMode mode, |
+ Object** restarter_frame_function_pointer) { |
if (mode != LiveEdit::CURRENTLY_SET_MODE) { |
thread_local_.frame_drop_mode_ = mode; |
} |
thread_local_.break_frame_id_ = new_break_frame_id; |
+ thread_local_.restarter_frame_function_pointer_ = |
+ restarter_frame_function_pointer; |
} |