From 1dc711f2464efa8484025b6aebac55ada530d255 Mon Sep 17 00:00:00 2001 From: mstarzinger Date: Thu, 27 Aug 2015 05:50:31 -0700 Subject: [PATCH] Move runtime helper for ToName conversion onto Object. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1306043003 Cr-Commit-Position: refs/heads/master@{#30409} --- src/api.cc | 4 ++-- src/objects.cc | 12 ++++++++++++ src/objects.h | 9 ++++++--- src/runtime/runtime-classes.cc | 4 ++-- src/runtime/runtime-forin.cc | 4 ++-- src/runtime/runtime-object.cc | 21 ++++++--------------- src/runtime/runtime.h | 3 --- 7 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/api.cc b/src/api.cc index 05a7c48c9..0fb4154b6 100644 --- a/src/api.cc +++ b/src/api.cc @@ -3531,7 +3531,7 @@ static i::MaybeHandle DefineObjectProperty( i::Handle name; ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, name, - i::Runtime::ToName(isolate, key), + i::Object::ToName(isolate, key), i::MaybeHandle()); return i::JSObject::DefinePropertyOrElementIgnoreAttributes(js_object, name, @@ -3855,7 +3855,7 @@ Maybe v8::Object::Has(Local context, Local key) { } else { // Convert the key to a name - possibly by calling back into JavaScript. i::Handle name; - if (i::Runtime::ToName(isolate, key_obj).ToHandle(&name)) { + if (i::Object::ToName(isolate, key_obj).ToHandle(&name)) { maybe = i::JSReceiver::HasProperty(self, name); } } diff --git a/src/objects.cc b/src/objects.cc index 4cb34470c..fc461887c 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -90,6 +90,18 @@ MaybeHandle Object::ToObject(Isolate* isolate, } +MaybeHandle Object::ToName(Isolate* isolate, Handle object) { + if (object->IsName()) { + return Handle::cast(object); + } else { + Handle converted; + ASSIGN_RETURN_ON_EXCEPTION(isolate, converted, + Execution::ToString(isolate, object), Name); + return Handle::cast(converted); + } +} + + bool Object::BooleanValue() { if (IsBoolean()) return IsTrue(); if (IsSmi()) return Smi::cast(this)->value() != 0; diff --git a/src/objects.h b/src/objects.h index 202300dc4..f7492ebb0 100644 --- a/src/objects.h +++ b/src/objects.h @@ -1074,9 +1074,12 @@ class Object { // native_context is used when creating wrapper object. static inline MaybeHandle ToObject(Isolate* isolate, Handle object); - static MaybeHandle ToObject(Isolate* isolate, - Handle object, - Handle context); + MUST_USE_RESULT static MaybeHandle ToObject( + Isolate* isolate, Handle object, Handle context); + + // Convert to a Name if needed. + MUST_USE_RESULT static MaybeHandle ToName(Isolate* isolate, + Handle object); MUST_USE_RESULT static MaybeHandle GetProperty( LookupIterator* it, LanguageMode language_mode = SLOPPY); diff --git a/src/runtime/runtime-classes.cc b/src/runtime/runtime-classes.cc index c485759a1..97661113a 100644 --- a/src/runtime/runtime-classes.cc +++ b/src/runtime/runtime-classes.cc @@ -380,7 +380,7 @@ RUNTIME_FUNCTION(Runtime_LoadKeyedFromSuper) { Handle name; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, - Runtime::ToName(isolate, key)); + Object::ToName(isolate, key)); // TODO(verwaest): Unify using LookupIterator. if (name->AsArrayIndex(&index)) { ASSIGN_RETURN_FAILURE_ON_EXCEPTION( @@ -477,7 +477,7 @@ static Object* StoreKeyedToSuper(Isolate* isolate, Handle home_object, } Handle name; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, - Runtime::ToName(isolate, key)); + Object::ToName(isolate, key)); // TODO(verwaest): Unify using LookupIterator. if (name->AsArrayIndex(&index)) { return StoreElementToSuper(isolate, home_object, receiver, index, value, diff --git a/src/runtime/runtime-forin.cc b/src/runtime/runtime-forin.cc index ecd55d172..ff6804c8f 100644 --- a/src/runtime/runtime-forin.cc +++ b/src/runtime/runtime-forin.cc @@ -28,7 +28,7 @@ RUNTIME_FUNCTION(Runtime_ForInFilter) { CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); // TODO(turbofan): Fast case for array indices. Handle name; - if (!Runtime::ToName(isolate, key).ToHandle(&name)) { + if (!Object::ToName(isolate, key).ToHandle(&name)) { return isolate->heap()->exception(); } Maybe result = JSReceiver::HasProperty(receiver, name); @@ -53,7 +53,7 @@ RUNTIME_FUNCTION(Runtime_ForInNext) { } // TODO(turbofan): Fast case for array indices. Handle name; - if (!Runtime::ToName(isolate, key).ToHandle(&name)) { + if (!Object::ToName(isolate, key).ToHandle(&name)) { return isolate->heap()->exception(); } Maybe result = JSReceiver::HasProperty(receiver, name); diff --git a/src/runtime/runtime-object.cc b/src/runtime/runtime-object.cc index 9134b39dc..2dd5db86e 100644 --- a/src/runtime/runtime-object.cc +++ b/src/runtime/runtime-object.cc @@ -14,18 +14,6 @@ namespace v8 { namespace internal { -MaybeHandle Runtime::ToName(Isolate* isolate, Handle key) { - if (key->IsName()) { - return Handle::cast(key); - } else { - Handle converted; - ASSIGN_RETURN_ON_EXCEPTION(isolate, converted, - Execution::ToString(isolate, key), Name); - return Handle::cast(converted); - } -} - - MaybeHandle Runtime::GetObjectProperty(Isolate* isolate, Handle object, Handle key, @@ -45,7 +33,8 @@ MaybeHandle Runtime::GetObjectProperty(Isolate* isolate, // Convert the key to a name - possibly by calling back into JavaScript. Handle name; - ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); + ASSIGN_RETURN_ON_EXCEPTION(isolate, name, Object::ToName(isolate, key), + Object); // Check if the name is trivially convertible to an index and get // the element if so. @@ -150,7 +139,8 @@ MaybeHandle Runtime::DeleteObjectProperty(Isolate* isolate, } Handle name; - ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); + ASSIGN_RETURN_ON_EXCEPTION(isolate, name, Object::ToName(isolate, key), + Object); return JSReceiver::DeletePropertyOrElement(receiver, name, language_mode); } @@ -175,7 +165,8 @@ MaybeHandle Runtime::SetObjectProperty(Isolate* isolate, } Handle name; - ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object); + ASSIGN_RETURN_ON_EXCEPTION(isolate, name, Object::ToName(isolate, key), + Object); LookupIterator it = LookupIterator::PropertyOrElement(isolate, object, name); return Object::SetProperty(&it, value, language_mode, diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h index b66c10909..b66d8035d 100644 --- a/src/runtime/runtime.h +++ b/src/runtime/runtime.h @@ -1149,9 +1149,6 @@ class Runtime : public AllStatic { MUST_USE_RESULT static MaybeHandle GetPrototype( Isolate* isolate, Handle object); - MUST_USE_RESULT static MaybeHandle ToName(Isolate* isolate, - Handle key); - enum TypedArrayId { // arrayIds below should be synchronized with typedarray.js natives. ARRAY_ID_UINT8 = 1, -- 2.34.1