Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 6ab8c72d8c05fa530d7f1c86fe6b3c3d5c17f112..b8210986f6a00540fcd3c4d20e3b966e268f93ec 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -8734,7 +8734,9 @@ bool Debug::CheckDebugBreak(Isolate* isolate) { |
void Debug::SetMessageHandler(Isolate* isolate, |
v8::Debug::MessageHandler handler) { |
- UNIMPLEMENTED(); |
+ i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ ENTER_V8(i_isolate); |
+ i_isolate->debug()->SetMessageHandler(handler); |
} |
@@ -8742,7 +8744,9 @@ void Debug::SendCommand(Isolate* isolate, |
const uint16_t* command, |
int length, |
ClientData* client_data) { |
- UNIMPLEMENTED(); |
+ i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ internal_isolate->debug()->EnqueueCommandMessage( |
+ i::Vector<const uint16_t>(command, length), client_data); |
} |
@@ -8767,11 +8771,28 @@ MaybeLocal<Value> Debug::Call(Local<Context> context, |
MaybeLocal<Value> Debug::GetMirror(Local<Context> context, |
v8::Local<v8::Value> obj) { |
- UNIMPLEMENTED(); |
- return MaybeLocal<Value>(); |
+ PREPARE_FOR_EXECUTION(context, Debug, GetMirror, Value); |
+ i::Debug* isolate_debug = isolate->debug(); |
+ has_pending_exception = !isolate_debug->Load(); |
+ RETURN_ON_FAILED_EXECUTION(Value); |
+ i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); |
+ auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror"); |
+ auto fun_obj = i::JSReceiver::GetProperty(debug, name).ToHandleChecked(); |
+ auto v8_fun = Utils::CallableToLocal(i::Handle<i::JSFunction>::cast(fun_obj)); |
+ const int kArgc = 1; |
+ v8::Local<v8::Value> argv[kArgc] = {obj}; |
+ Local<Value> result; |
+ has_pending_exception = |
+ !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, argv) |
+ .ToLocal(&result); |
+ RETURN_ON_FAILED_EXECUTION(Value); |
+ RETURN_ESCAPED(result); |
+} |
+ |
+void Debug::ProcessDebugMessages(Isolate* isolate) { |
+ reinterpret_cast<i::Isolate*>(isolate)->debug()->ProcessDebugMessages(true); |
} |
-void Debug::ProcessDebugMessages(Isolate* isolate) { UNIMPLEMENTED(); } |
Local<Context> Debug::GetDebugContext(Isolate* isolate) { |
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
@@ -8781,8 +8802,12 @@ Local<Context> Debug::GetDebugContext(Isolate* isolate) { |
MaybeLocal<Context> Debug::GetDebuggedContext(Isolate* isolate) { |
- UNIMPLEMENTED(); |
- return MaybeLocal<Context>(); |
+ i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
+ ENTER_V8(i_isolate); |
+ if (!i_isolate->debug()->in_debug_scope()) return MaybeLocal<Context>(); |
+ i::Handle<i::Object> calling = i_isolate->GetCallingNativeContext(); |
+ if (calling.is_null()) return MaybeLocal<Context>(); |
+ return Utils::ToLocal(i::Handle<i::Context>::cast(calling)); |
} |
void Debug::SetLiveEditEnabled(Isolate* isolate, bool enable) { |