| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 9e242382c3fec54e159b723aa51c516dc8cee6f1..5946c237a70aa7b5fc7ac74e7320e137226d6f5f 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -9085,6 +9085,39 @@ bool debug::HasNonBlackboxedFrameOnStack(Isolate* v8_isolate) {
|
| return false;
|
| }
|
|
|
| +Local<debug::BreakPoint> debug::BreakPoint::New(Isolate* v8_isolate,
|
| + Local<String> condition,
|
| + Local<Value> data) {
|
| + i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
|
| + ENTER_V8(isolate);
|
| + i::HandleScope handle_scope(isolate);
|
| + i::Handle<i::BreakPoint> break_point = isolate->factory()->NewBreakPoint(
|
| + Utils::OpenHandle(*condition), Utils::OpenHandle(*data));
|
| + return ToApiHandle<debug::BreakPoint>(
|
| + handle_scope.CloseAndEscape(break_point));
|
| +}
|
| +
|
| +MaybeLocal<debug::BreakPoint> debug::BreakPoint::Cast(
|
| + Isolate* v8_isolate, v8::Local<v8::Value> value) {
|
| + i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
|
| + ENTER_V8(isolate);
|
| + i::HandleScope handle_scope(isolate);
|
| + i::Handle<i::Object> break_point_obj = Utils::OpenHandle(*value);
|
| + if (!break_point_obj->IsBreakPoint()) return MaybeLocal<debug::BreakPoint>();
|
| + i::Handle<i::BreakPoint> break_point(i::BreakPoint::cast(*break_point_obj),
|
| + isolate);
|
| + return ToApiHandle<debug::BreakPoint>(
|
| + handle_scope.CloseAndEscape(break_point));
|
| +}
|
| +
|
| +v8::Local<v8::Value> debug::BreakPoint::Data() const {
|
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| + i::HandleScope handle_scope(isolate);
|
| + i::Handle<i::BreakPoint> break_point = Utils::OpenHandle(this);
|
| + i::Handle<i::Object> data_obj(break_point->data(), isolate);
|
| + return Utils::ToLocal(handle_scope.CloseAndEscape(data_obj));
|
| +}
|
| +
|
| v8::Isolate* debug::Script::GetIsolate() const {
|
| return reinterpret_cast<v8::Isolate*>(Utils::OpenHandle(this)->GetIsolate());
|
| }
|
| @@ -9239,11 +9272,30 @@ bool debug::Script::GetPossibleBreakpoints(
|
| return true;
|
| }
|
|
|
| +debug::Location debug::Script::SetBreakPoint(
|
| + const debug::Location& position,
|
| + Local<debug::BreakPoint> break_point) const {
|
| + i::Handle<i::Script> script = Utils::OpenHandle(this);
|
| + i::Isolate* isolate = script->GetIsolate();
|
| + int offset = GetSourcePosition(position);
|
| + i::Handle<i::BreakPoint> break_point_obj = Utils::OpenHandle(*break_point);
|
| + int result_offset = offset;
|
| + if (!isolate->debug()->SetBreakPointForScript(
|
| + script, break_point_obj, &result_offset, i::BREAK_POSITION_ALIGNED)) {
|
| + return debug::Location();
|
| + }
|
| + i::Script::PositionInfo info;
|
| + i::Script::GetPositionInfo(script, result_offset, &info,
|
| + i::Script::WITH_OFFSET);
|
| + return debug::Location(info.line, info.column);
|
| +}
|
| +
|
| int debug::Script::GetSourcePosition(const debug::Location& location) const {
|
| i::Handle<i::Script> script = Utils::OpenHandle(this);
|
| if (script->type() == i::Script::TYPE_WASM) {
|
| - // TODO(clemensh): Return the proper thing for wasm.
|
| - return 0;
|
| + return i::WasmCompiledModule::cast(script->wasm_compiled_module())
|
| + ->GetFunctionOffset(location.GetLineNumber()) +
|
| + location.GetColumnNumber();
|
| }
|
|
|
| int line = std::max(location.GetLineNumber() - script->line_offset(), 0);
|
| @@ -9317,6 +9369,14 @@ debug::WasmDisassembly debug::WasmScript::DisassembleFunction(
|
| return compiled_module->DisassembleFunction(function_index);
|
| }
|
|
|
| +void debug::ClearBreakPoint(v8::Isolate* v8_isolate,
|
| + Local<BreakPoint> break_point) {
|
| + i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
|
| + ENTER_V8(isolate);
|
| + i::Handle<i::Object> break_point_obj = Utils::OpenHandle(*break_point);
|
| + isolate->debug()->ClearBreakPoint(break_point_obj);
|
| +}
|
| +
|
| debug::Location::Location(int line_number, int column_number)
|
| : line_number_(line_number), column_number_(column_number) {
|
| CHECK(line_number >= 0);
|
| @@ -9338,7 +9398,8 @@ int debug::Location::GetColumnNumber() const {
|
| }
|
|
|
| bool debug::Location::IsEmpty() const {
|
| - return line_number_ == -1 && column_number_ == -1;
|
| + return line_number_ == v8::Function::kLineOffsetNotFound &&
|
| + column_number_ == v8::Function::kLineOffsetNotFound;
|
| }
|
|
|
| void debug::GetLoadedScripts(v8::Isolate* v8_isolate,
|
|
|