Index: src/debug/debug.cc |
diff --git a/src/debug/debug.cc b/src/debug/debug.cc |
index 9bb27516e825327f6f28f6c9b3193ecd35a16903..d3f3b905151a02ab82f5d626353ad30b487522db 100644 |
--- a/src/debug/debug.cc |
+++ b/src/debug/debug.cc |
@@ -336,6 +336,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; |
} |
@@ -928,6 +929,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 |
@@ -1510,11 +1522,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; |
} |