Skip to content

Commit ee00593

Browse files
committed
fix console logging implementation to print out a message on circular references JSON.stringify fails to resolve
1 parent 8780bad commit ee00593

File tree

4 files changed

+17
-18
lines changed

4 files changed

+17
-18
lines changed

test-app/runtime/src/main/cpp/CallbackHandlers.cpp

-9
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,6 @@ void CallbackHandlers::Init(Isolate* isolate) {
5858

5959
assert(INIT_WORKER_METHOD_ID != nullptr);
6060

61-
Local<Object> json = isolate->GetCurrentContext()->Global()->Get(String::NewFromUtf8(isolate, "JSON"))->ToObject();
62-
Local<Function> stringify = json->Get(String::NewFromUtf8(isolate, "stringify")).As<Function>();
63-
64-
auto persistentStringify = new Persistent<Function>(isolate, stringify);
65-
66-
isolateToJsonStringify.insert({isolate, persistentStringify});
67-
6861
MetadataNode::Init(isolate);
6962

7063
MethodCache::Init();
@@ -1381,8 +1374,6 @@ void CallbackHandlers::TerminateWorkerThread(Isolate* isolate) {
13811374
int CallbackHandlers::nextWorkerId = 0;
13821375
std::map<int, Persistent<Object>*> CallbackHandlers::id2WorkerMap;
13831376

1384-
std::map<Isolate*, Persistent<Function>*> CallbackHandlers::isolateToJsonStringify;
1385-
13861377
short CallbackHandlers::MAX_JAVA_STRING_ARRAY_LENGTH = 100;
13871378
jclass CallbackHandlers::RUNTIME_CLASS = nullptr;
13881379
jclass CallbackHandlers::JAVA_LANG_STRING = nullptr;

test-app/runtime/src/main/cpp/CallbackHandlers.h

-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ class CallbackHandlers {
2626
*/
2727
static std::map<int, v8::Persistent<v8::Object>*> id2WorkerMap;
2828

29-
static std::map<v8::Isolate*, v8::Persistent<v8::Function>*> isolateToJsonStringify;
30-
3129
static int nextWorkerId;
3230

3331
static void Init(v8::Isolate* isolate);

test-app/runtime/src/main/cpp/V8GlobalHelpers.cpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,22 @@ string tns::ConvertToString(const Local<v8::String>& s) {
1919
}
2020

2121
Local<String> tns::JsonStringifyObject(Isolate* isolate, Handle<v8::Value> value) {
22+
v8::HandleScope scope(isolate);
23+
2224
if (value.IsEmpty()) {
2325
return String::Empty(isolate);
2426
}
2527

26-
auto stringifyFunction = CallbackHandlers::isolateToJsonStringify.find(isolate)->second;
27-
auto func = Local<Function>::New(isolate, *stringifyFunction);
28-
Local<Value> args[] = { value };
28+
v8::Local<v8::String> resultString;
29+
v8::TryCatch tc;
30+
auto success = v8::JSON::Stringify(isolate->GetCurrentContext(), value->ToObject(isolate)).ToLocal(&resultString);
2931

30-
auto result = func->Call(Undefined(isolate), 1, args);
32+
if (!success && tc.HasCaught()) {
33+
auto message = tc.Message()->Get();
34+
resultString = v8::String::Concat(ArgConverter::ConvertToV8String(isolate, "Couldn't convert object to a JSON string: "), message);
35+
}
3136

32-
return result->ToString(isolate);
37+
return resultString;
3338
}
3439

3540
jstring tns::ConvertToJavaString(const Local<Value>& value) {

test-app/runtime/src/main/cpp/console/Console.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,14 @@ void Console::dirCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
188188
if (propIsFunction) {
189189
ss << "()";
190190
} else if (propertyValue->IsObject()) {
191-
ss << ": " << ArgConverter::ConvertToString(JsonStringifyObject(isolate, propertyValue));
191+
std::string jsonStringifiedObject = ArgConverter::ConvertToString(JsonStringifyObject(isolate, propertyValue));
192+
// if object prints out as the error string for circular references, replace with #CR instead for brevity
193+
if (jsonStringifiedObject.find("circular structure") != std::string::npos) {
194+
jsonStringifiedObject = "#CR";
195+
}
196+
ss << ": " << jsonStringifiedObject;
192197
} else {
193-
ss << ": " << ArgConverter::ConvertToString(propertyValue->ToDetailString(isolate));
198+
ss << ": \"" << ArgConverter::ConvertToString(propertyValue->ToDetailString(isolate)) << "\"";
194199
}
195200

196201
ss << std::endl;

0 commit comments

Comments
 (0)