@@ -72,105 +72,89 @@ void Console::sendToDevToolsFrontEnd(v8::Isolate* isolate, const std::string& me
7272 }
7373}
7474
75- const v8::Local<v8::String> transformJSObject (v8::Isolate* isolate, v8::Local<v8::Object> object) {
75+ std::string transformJSObject (v8::Isolate* isolate, v8::Local<v8::Object> object) {
7676 auto context = isolate->GetCurrentContext ();
7777 auto objToString = object->ToString (context).ToLocalChecked ();
78- v8::Local<v8::String> resultString ;
78+ auto objToCppString = ArgConverter::ConvertToString (objToString) ;
7979
80- auto hasCustomToStringImplementation = ArgConverter::ConvertToString (objToString) .find (" [object Object]" ) == std::string::npos;
80+ auto hasCustomToStringImplementation = objToCppString .find (" [object Object]" ) == std::string::npos;
8181
8282 if (hasCustomToStringImplementation) {
83- resultString = objToString ;
83+ return objToCppString ;
8484 } else {
85- v8::HandleScope scope (isolate);
86- resultString = JsonStringifyObject (isolate, object);
85+ return JsonStringifyObject (isolate, object);
8786 }
88-
89- return resultString;
9087}
9188
92- const v8::Local<v8::String> buildStringFromArg (v8::Isolate* isolate, const v8::Local<v8::Value>& val) {
93- v8::Local<v8::String> argString;
89+ std::string buildStringFromArg (v8::Isolate* isolate, const v8::Local<v8::Value>& val) {
9490 if (val->IsFunction ()) {
95- val->ToDetailString (isolate->GetCurrentContext ()).ToLocal (&argString);
91+ auto v8FunctionString = val->ToDetailString (isolate->GetCurrentContext ()).ToLocalChecked ();
92+ return ArgConverter::ConvertToString (v8FunctionString);
9693 } else if (val->IsArray ()) {
9794 auto context = isolate->GetCurrentContext ();
9895 auto cachedSelf = val;
9996 auto array = val->ToObject (context).ToLocalChecked ();
10097 auto arrayEntryKeys = array->GetPropertyNames (isolate->GetCurrentContext ()).ToLocalChecked ();
10198
10299 auto arrayLength = arrayEntryKeys->Length ();
103-
104- argString = ArgConverter::ConvertToV8String (isolate, " [" );
100+ std::string argString = " [" ;
105101
106102 for (int i = 0 ; i < arrayLength; i++) {
107103 auto propertyName = arrayEntryKeys->Get (context, i).ToLocalChecked ();
108-
109104 auto propertyValue = array->Get (context, propertyName).ToLocalChecked ();
110105
111106 // avoid bottomless recursion with cyclic reference to the same array
112107 if (propertyValue->StrictEquals (cachedSelf)) {
113- argString = v8::String::Concat (isolate, argString, ArgConverter::ConvertToV8String (isolate, " [Circular]" ) );
108+ argString. append ( " [Circular]" );
114109 continue ;
115110 }
116111
117112 auto objectString = buildStringFromArg (isolate, propertyValue);
118-
119- argString = v8::String::Concat (isolate, argString, objectString);
113+ argString.append (objectString);
120114
121115 if (i != arrayLength - 1 ) {
122- argString = v8::String::Concat (isolate, argString, ArgConverter::ConvertToV8String (isolate, " , " ) );
116+ argString. append ( " , " );
123117 }
124118 }
125119
126- argString = v8::String::Concat (isolate, argString, ArgConverter::ConvertToV8String (isolate, " ]" ) );
120+ return argString. append ( " ]" );
127121 } else if (val->IsObject ()) {
128122 v8::Local<v8::Object> obj = val.As <v8::Object>();
129-
130- argString = transformJSObject (isolate, obj);
123+ return transformJSObject (isolate, obj);
131124 } else {
132- val->ToDetailString (isolate->GetCurrentContext ()).ToLocal (&argString);
125+ auto v8DefaultToString = val->ToDetailString (isolate->GetCurrentContext ()).ToLocalChecked ();
126+ return ArgConverter::ConvertToString (v8DefaultToString);
133127 }
134-
135- return argString;
136128}
137129
138- const std::string buildLogString (const v8::FunctionCallbackInfo<v8::Value>& info, int startingIndex = 0 ) {
130+ std::string buildLogString (const v8::FunctionCallbackInfo<v8::Value>& info, int startingIndex = 0 ) {
139131 auto isolate = info.GetIsolate ();
140-
141132 v8::HandleScope scope (isolate);
142-
143133 std::stringstream ss;
144134
145135 auto argLen = info.Length ();
146136 if (argLen) {
147137 for (int i = startingIndex; i < argLen; i++) {
148- v8::Local<v8::String> argString;
149-
150- argString = buildStringFromArg (isolate, info[i]);
151-
152138 // separate args with a space
153139 if (i != 0 ) {
154140 ss << " " ;
155141 }
156-
157- ss << ArgConverter::ConvertToString (argString);
142+
143+ std::string argString = buildStringFromArg (isolate, info[i]);
144+ ss << argString;
158145 }
159146 } else {
160147 ss << std::endl;
161148 }
162149
163- std::string stringResult = ss.str ();
164-
165- return stringResult;
150+ return ss.str ();
166151}
167152
168153void Console::assertCallback (const v8::FunctionCallbackInfo<v8::Value>& info) {
169154 try {
170155 auto isolate = info.GetIsolate ();
171156
172157 auto argLen = info.Length ();
173- auto context = isolate->GetCurrentContext ();
174158 auto expressionPasses = argLen && info[0 ]->BooleanValue (isolate);
175159
176160 if (!expressionPasses) {
@@ -307,13 +291,11 @@ void Console::dirCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
307291 if (propIsFunction) {
308292 ss << " ()" ;
309293 } else if (propertyValue->IsArray ()) {
310- auto stringResult = buildStringFromArg (isolate, propertyValue);
311- std::string jsonStringifiedArray = ArgConverter::ConvertToString (stringResult);
294+ std::string jsonStringifiedArray = buildStringFromArg (isolate, propertyValue);
312295 ss << " : " << jsonStringifiedArray;
313296 } else if (propertyValue->IsObject ()) {
314297 auto obj = propertyValue->ToObject (context).ToLocalChecked ();
315- auto objString = transformJSObject (isolate, obj);
316- std::string jsonStringifiedObject = ArgConverter::ConvertToString (objString);
298+ auto jsonStringifiedObject = transformJSObject (isolate, obj);
317299 // if object prints out as the error string for circular references, replace with #CR instead for brevity
318300 if (jsonStringifiedObject.find (" circular structure" ) != std::string::npos) {
319301 jsonStringifiedObject = " #CR" ;
0 commit comments