Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 9544a0e32ccda78f9e5d949890ec07bcd121c29a..15219b10e82abe924b0b4e857b6e54ccd84a2a47 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -3781,63 +3781,13 @@ Local<Array> v8::Object::GetOwnPropertyNames() { |
MaybeLocal<String> v8::Object::ObjectProtoToString(Local<Context> context) { |
- auto self = Utils::OpenHandle(this); |
- auto isolate = self->GetIsolate(); |
- auto v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
- i::Handle<i::Object> name(self->class_name(), isolate); |
- i::Handle<i::Object> tag; |
- |
- // Native implementation of Object.prototype.toString (v8natives.js): |
- // var c = %_ClassOf(this); |
- // if (c === 'Arguments') c = 'Object'; |
- // return "[object " + c + "]"; |
- |
- if (!name->IsString()) { |
- return v8::String::NewFromUtf8(v8_isolate, "[object ]", |
- NewStringType::kNormal); |
- } |
- auto class_name = i::Handle<i::String>::cast(name); |
- if (i::String::Equals(class_name, isolate->factory()->Arguments_string())) { |
- return v8::String::NewFromUtf8(v8_isolate, "[object Object]", |
- NewStringType::kNormal); |
- } |
- if (internal::FLAG_harmony_tostring) { |
- PREPARE_FOR_EXECUTION(context, "v8::Object::ObjectProtoToString()", String); |
- auto toStringTag = isolate->factory()->to_string_tag_symbol(); |
- has_pending_exception = !i::Runtime::GetObjectProperty( |
- isolate, self, toStringTag).ToHandle(&tag); |
- RETURN_ON_FAILED_EXECUTION(String); |
- if (tag->IsString()) { |
- class_name = Utils::OpenHandle(*handle_scope.Escape( |
- Utils::ToLocal(i::Handle<i::String>::cast(tag)))); |
- } |
- } |
- const char* prefix = "[object "; |
- Local<String> str = Utils::ToLocal(class_name); |
- const char* postfix = "]"; |
- |
- int prefix_len = i::StrLength(prefix); |
- int str_len = str->Utf8Length(); |
- int postfix_len = i::StrLength(postfix); |
- |
- int buf_len = prefix_len + str_len + postfix_len; |
- i::ScopedVector<char> buf(buf_len); |
- |
- // Write prefix. |
- char* ptr = buf.start(); |
- i::MemCopy(ptr, prefix, prefix_len * v8::internal::kCharSize); |
- ptr += prefix_len; |
- |
- // Write real content. |
- str->WriteUtf8(ptr, str_len); |
- ptr += str_len; |
- |
- // Write postfix. |
- i::MemCopy(ptr, postfix, postfix_len * v8::internal::kCharSize); |
- |
- // Copy the buffer into a heap-allocated string and return it. |
- return v8::String::NewFromUtf8(v8_isolate, buf.start(), |
- NewStringType::kNormal, buf_len); |
+ PREPARE_FOR_EXECUTION(context, "v8::Object::ObjectProtoToString", String); |
+ auto obj = Utils::OpenHandle(this); |
+ Local<String> result; |
+ has_pending_exception = |
+ !ToLocal<String>(i::JSObject::ObjectProtoToString(isolate, obj), &result); |
+ RETURN_ON_FAILED_EXECUTION(String); |
+ RETURN_ESCAPED(result); |
} |