Index: src/debug/debug.cc |
diff --git a/src/debug/debug.cc b/src/debug/debug.cc |
index b255bb81a1dd80db2b46599382491d05d74a2b99..c8bd707d31c5106d6a14b86f71cf239f78c59f58 100644 |
--- a/src/debug/debug.cc |
+++ b/src/debug/debug.cc |
@@ -474,6 +474,7 @@ void Debug::ThreadInit() { |
thread_local_.last_fp_ = 0; |
thread_local_.target_fp_ = 0; |
thread_local_.step_in_enabled_ = false; |
+ thread_local_.return_value_ = Handle<Object>(); |
// TODO(isolates): frames_are_dropped_? |
base::NoBarrier_Store(&thread_local_.current_debug_scope_, |
static_cast<base::AtomicWord>(0)); |
@@ -563,7 +564,11 @@ void Debug::Unload() { |
void Debug::Break(Arguments args, JavaScriptFrame* frame) { |
HandleScope scope(isolate_); |
- DCHECK(args.length() == 0); |
+ DCHECK(args.length() == 1); |
+ |
+ // args[0] contains the return value (eax/rax/r0/accumulator) if we break |
+ // on return. |
+ thread_local_.return_value_ = args.at<Object>(0); |
Yang
2016/03/22 12:22:57
Please introduce a method to set and retrieve the
|
// Initialize LiveEdit. |
LiveEdit::InitializeThreadLocal(this); |
@@ -1586,7 +1591,7 @@ Object* Debug::SetAfterBreakTarget(JavaScriptFrame* frame) { |
// Continue just after the slot. |
after_break_target_ = frame->pc(); |
} |
- return isolate_->heap()->undefined_value(); |
+ return *thread_local_.return_value_; |
mythria
2016/03/21 16:24:29
Returns the actual return value to avoid pushing a
Yang
2016/03/22 12:22:58
I forgot about this part. For the interpreter, the
mythria
2016/03/22 15:11:44
Done.
|
} |
} |
@@ -2327,9 +2332,10 @@ DebugScope::DebugScope(Debug* debug) |
base::NoBarrier_Store(&debug_->thread_local_.current_debug_scope_, |
reinterpret_cast<base::AtomicWord>(this)); |
- // Store the previous break id and frame id. |
+ // Store the previous break id, frame id and return value. |
break_id_ = debug_->break_id(); |
break_frame_id_ = debug_->break_frame_id(); |
+ return_value_ = debug_->get_return_value(); |
// Create the new break info. If there is no JavaScript frames there is no |
// break frame id. |
@@ -2367,6 +2373,7 @@ DebugScope::~DebugScope() { |
// Restore to the previous break state. |
debug_->thread_local_.break_frame_id_ = break_frame_id_; |
debug_->thread_local_.break_id_ = break_id_; |
+ debug_->thread_local_.return_value_ = return_value_; |
debug_->UpdateState(); |
} |