summaryrefslogtreecommitdiff
path: root/libdeno/exceptions.cc
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2019-02-09 13:55:40 -0800
committerRyan Dahl <ry@tinyclouds.org>2019-02-09 16:55:40 -0500
commit1d36eb47eb882cb9305a6338019fa2a2b375d7b1 (patch)
tree4584aff9da784f3e05c4fb5314d5911772b4d655 /libdeno/exceptions.cc
parent1502051453bf16787a59f43004b24d553d39bd26 (diff)
Support scoped variables, unblock REPL async op, and REPL error colors (#1721)
Diffstat (limited to 'libdeno/exceptions.cc')
-rw-r--r--libdeno/exceptions.cc28
1 files changed, 24 insertions, 4 deletions
diff --git a/libdeno/exceptions.cc b/libdeno/exceptions.cc
index 0d7bbed8b..51f81bfce 100644
--- a/libdeno/exceptions.cc
+++ b/libdeno/exceptions.cc
@@ -4,10 +4,10 @@
namespace deno {
-std::string EncodeMessageAsJSON(v8::Local<v8::Context> context,
- v8::Local<v8::Message> message) {
+v8::Local<v8::Object> EncodeMessageAsObject(v8::Local<v8::Context> context,
+ v8::Local<v8::Message> message) {
auto* isolate = context->GetIsolate();
- v8::HandleScope handle_scope(isolate);
+ v8::EscapableHandleScope handle_scope(isolate);
v8::Context::Scope context_scope(context);
auto stack_trace = message->GetStackTrace();
@@ -134,12 +134,33 @@ std::string EncodeMessageAsJSON(v8::Local<v8::Context> context,
}
CHECK(json_obj->Set(context, v8_str("frames"), frames).FromJust());
+ json_obj = handle_scope.Escape(json_obj);
+ return json_obj;
+}
+std::string EncodeMessageAsJSON(v8::Local<v8::Context> context,
+ v8::Local<v8::Message> message) {
+ auto* isolate = context->GetIsolate();
+ v8::HandleScope handle_scope(isolate);
+ v8::Context::Scope context_scope(context);
+ auto json_obj = EncodeMessageAsObject(context, message);
auto json_string = v8::JSON::Stringify(context, json_obj).ToLocalChecked();
v8::String::Utf8Value json_string_(isolate, json_string);
return std::string(ToCString(json_string_));
}
+v8::Local<v8::Object> EncodeExceptionAsObject(v8::Local<v8::Context> context,
+ v8::Local<v8::Value> exception) {
+ auto* isolate = context->GetIsolate();
+ v8::EscapableHandleScope handle_scope(isolate);
+ v8::Context::Scope context_scope(context);
+
+ auto message = v8::Exception::CreateMessage(isolate, exception);
+ auto json_obj = EncodeMessageAsObject(context, message);
+ json_obj = handle_scope.Escape(json_obj);
+ return json_obj;
+}
+
std::string EncodeExceptionAsJSON(v8::Local<v8::Context> context,
v8::Local<v8::Value> exception) {
auto* isolate = context->GetIsolate();
@@ -167,5 +188,4 @@ void HandleExceptionMessage(v8::Local<v8::Context> context,
CHECK_NOT_NULL(d);
d->last_exception_ = json_str;
}
-
} // namespace deno