| Index: src/debug/debug.cc
|
| diff --git a/src/debug/debug.cc b/src/debug/debug.cc
|
| index c69b04b0c8327f5dd95a90a8b8ddb945b2ecbe07..631a6fdbc58e29faac969b2d6a105fad01c0fb86 100644
|
| --- a/src/debug/debug.cc
|
| +++ b/src/debug/debug.cc
|
| @@ -22,12 +22,25 @@
|
| #include "src/log.h"
|
| #include "src/messages.h"
|
| #include "src/snapshot/natives.h"
|
| +#include "src/wasm/wasm-debug.h"
|
| +#include "src/wasm/wasm-module.h"
|
|
|
| #include "include/v8-debug.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +namespace {
|
| +
|
| +inline int CallOffsetFromCodeOffset(int code_offset, bool is_interpreted) {
|
| + // Code offset points to the instruction after the call. Subtract 1 to
|
| + // exclude that instruction from the search. For bytecode, the code offset
|
| + // still points to the call.
|
| + return is_interpreted ? code_offset : code_offset - 1;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| Debug::Debug(Isolate* isolate)
|
| : debug_context_(Handle<Context>()),
|
| event_listener_(Handle<Object>()),
|
| @@ -260,18 +273,11 @@ BreakLocation BreakLocation::FromCodeOffset(Handle<DebugInfo> debug_info,
|
| return it->GetBreakLocation();
|
| }
|
|
|
| -int CallOffsetFromCodeOffset(int code_offset, bool is_interpreted) {
|
| - // Code offset points to the instruction after the call. Subtract 1 to
|
| - // exclude that instruction from the search. For bytecode, the code offset
|
| - // still points to the call.
|
| - return is_interpreted ? code_offset : code_offset - 1;
|
| -}
|
| -
|
| BreakLocation BreakLocation::FromFrame(Handle<DebugInfo> debug_info,
|
| JavaScriptFrame* frame) {
|
| - FrameSummary summary = FrameSummary::GetFirst(frame);
|
| + int code_offset = FrameSummary::GetFirst(frame).code_offset();
|
| int call_offset =
|
| - CallOffsetFromCodeOffset(summary.code_offset(), frame->is_interpreted());
|
| + CallOffsetFromCodeOffset(code_offset, frame->is_interpreted());
|
| return FromCodeOffset(debug_info, call_offset);
|
| }
|
|
|
| @@ -793,6 +799,10 @@ bool Debug::SetBreakPointForScript(Handle<Script> script,
|
| Handle<Object> break_point_object,
|
| int* source_position,
|
| BreakPositionAlignment alignment) {
|
| + if (script->type() == Script::TYPE_WASM) {
|
| + // TODO(clemensh): set breakpoint for wasm.
|
| + return false;
|
| + }
|
| HandleScope scope(isolate_);
|
|
|
| // Obtain shared function info for the function.
|
| @@ -1601,23 +1611,20 @@ void Debug::SetAfterBreakTarget(JavaScriptFrame* frame) {
|
| }
|
| }
|
|
|
| -
|
| bool Debug::IsBreakAtReturn(JavaScriptFrame* frame) {
|
| HandleScope scope(isolate_);
|
|
|
| // Get the executing function in which the debug break occurred.
|
| - Handle<JSFunction> function(JSFunction::cast(frame->function()));
|
| - Handle<SharedFunctionInfo> shared(function->shared());
|
| + Handle<SharedFunctionInfo> shared(frame->function()->shared());
|
|
|
| // With no debug info there are no break points, so we can't be at a return.
|
| if (!shared->HasDebugInfo()) return false;
|
|
|
| DCHECK(!frame->is_optimized());
|
| - FrameSummary summary = FrameSummary::GetFirst(frame);
|
| -
|
| + int code_offset = FrameSummary::GetFirst(frame).code_offset();
|
| Handle<DebugInfo> debug_info(shared->GetDebugInfo());
|
| BreakLocation location =
|
| - BreakLocation::FromCodeOffset(debug_info, summary.code_offset());
|
| + BreakLocation::FromCodeOffset(debug_info, code_offset);
|
| return location.IsReturn() || location.IsTailCall();
|
| }
|
|
|
| @@ -2303,12 +2310,14 @@ DebugScope::DebugScope(Debug* debug)
|
| break_frame_id_ = debug_->break_frame_id();
|
| return_value_ = debug_->return_value();
|
|
|
| - // Create the new break info. If there is no JavaScript frames there is no
|
| - // break frame id.
|
| - JavaScriptFrameIterator it(isolate());
|
| - bool has_js_frames = !it.done();
|
| - debug_->thread_local_.break_frame_id_ = has_js_frames ? it.frame()->id()
|
| - : StackFrame::NO_ID;
|
| + // Create the new break info. If there is no proper frames there is no break
|
| + // frame id.
|
| + StackTraceFrameIterator it(isolate());
|
| + bool has_frames = !it.done();
|
| + // We don't currently support breaking inside wasm framess.
|
| + DCHECK(!has_frames || !it.is_wasm());
|
| + debug_->thread_local_.break_frame_id_ =
|
| + has_frames ? it.frame()->id() : StackFrame::NO_ID;
|
| debug_->SetNextBreakId();
|
|
|
| debug_->UpdateState();
|
|
|