Skip to content

Commit 1ca3f08

Browse files
authored
Merge pull request #957 from NativeScript/pete/fix-console
fix(console): use toString implementation if object has provided one
2 parents fbdbd5b + fdec13b commit 1ca3f08

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,21 @@ void Console::sendToDevToolsFrontEnd(v8::Isolate* isolate, const std::string& me
7272
v8_inspector::V8LogAgentImpl::EntryAdded(message, logLevel, ArgConverter::ConvertToString(frame->GetScriptNameOrSourceURL()), frame->GetLineNumber());
7373
}
7474

75+
const v8::Local<v8::String> transformJSObject(v8::Isolate* isolate, v8::Local<v8::Object> object) {
76+
auto objToString = object->ToString(isolate);
77+
v8::Local<v8::String> resultString;
78+
79+
auto hasCustomToStringImplementation = !objToString->SameValue(ArgConverter::ConvertToV8String(isolate, "[object Object]"));
80+
81+
if (hasCustomToStringImplementation) {
82+
resultString = objToString;
83+
} else {
84+
resultString = JsonStringifyObject(isolate, object);
85+
}
86+
87+
return resultString;
88+
}
89+
7590
const std::string buildLogString(const v8::FunctionCallbackInfo<v8::Value>& info, int startingIndex = 0) {
7691
auto isolate = info.GetIsolate();
7792

@@ -87,7 +102,8 @@ const std::string buildLogString(const v8::FunctionCallbackInfo<v8::Value>& info
87102
info[i]->ToDetailString(isolate->GetCurrentContext()).ToLocal(&argString);
88103
} else if (info[i]->IsObject()) {
89104
v8::Local<v8::Object> obj = info[i].As<v8::Object>();
90-
argString = JsonStringifyObject(isolate, obj);
105+
106+
argString = transformJSObject(isolate, obj);
91107
} else {
92108
info[i]->ToDetailString(isolate->GetCurrentContext()).ToLocal(&argString);
93109
}
@@ -188,7 +204,9 @@ void Console::dirCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
188204
if (propIsFunction) {
189205
ss << "()";
190206
} else if (propertyValue->IsObject()) {
191-
std::string jsonStringifiedObject = ArgConverter::ConvertToString(JsonStringifyObject(isolate, propertyValue));
207+
auto obj = propertyValue->ToObject(isolate);
208+
auto objString = transformJSObject(isolate, obj);
209+
std::string jsonStringifiedObject = ArgConverter::ConvertToString(objString);
192210
// if object prints out as the error string for circular references, replace with #CR instead for brevity
193211
if (jsonStringifiedObject.find("circular structure") != std::string::npos) {
194212
jsonStringifiedObject = "#CR";

0 commit comments

Comments
 (0)