| Index: src/runtime/runtime-object.cc
|
| diff --git a/src/runtime/runtime-object.cc b/src/runtime/runtime-object.cc
|
| index 99aebda67bd3b2fb4342d867ea959a0e54805325..b3b917b03ab2eafc8bebc5a9d212517b4d250ea9 100644
|
| --- a/src/runtime/runtime-object.cc
|
| +++ b/src/runtime/runtime-object.cc
|
| @@ -72,6 +72,8 @@ MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate,
|
|
|
| // Check if the name is trivially convertible to an index and get
|
| // the element if so.
|
| + // TODO(verwaest): Make sure GetProperty(LookupIterator*) can handle this, and
|
| + // remove the special casing here.
|
| if (name->AsArrayIndex(&index)) {
|
| return GetElementOrCharAt(isolate, object, index);
|
| } else {
|
| @@ -102,23 +104,13 @@ MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate,
|
| }
|
|
|
| Handle<Name> name;
|
| - if (key->IsName()) {
|
| - name = Handle<Name>::cast(key);
|
| - } else {
|
| - // Call-back into JavaScript to convert the key to a string.
|
| - Handle<Object> converted;
|
| - ASSIGN_RETURN_ON_EXCEPTION(isolate, converted,
|
| - Execution::ToString(isolate, key), Object);
|
| - name = Handle<String>::cast(converted);
|
| - }
|
| + ASSIGN_RETURN_ON_EXCEPTION(isolate, name, ToName(isolate, key), Object);
|
|
|
| - if (name->AsArrayIndex(&index)) {
|
| - // TODO(verwaest): Support other objects as well.
|
| - if (!object->IsJSReceiver()) return value;
|
| - return JSReceiver::SetElement(Handle<JSReceiver>::cast(object), index,
|
| - value, language_mode);
|
| - }
|
| - return Object::SetProperty(object, name, value, language_mode);
|
| + LookupIterator it = LookupIterator::PropertyOrElement(isolate, object, name);
|
| + // TODO(verwaest): Support other objects as well.
|
| + if (it.IsElement() && !object->IsJSReceiver()) return value;
|
| + return Object::SetProperty(&it, value, language_mode,
|
| + Object::MAY_BE_STORE_FROM_KEYED);
|
| }
|
|
|
|
|
| @@ -239,12 +231,9 @@ MUST_USE_RESULT static MaybeHandle<Object> GetOwnProperty(Isolate* isolate,
|
| Factory* factory = isolate->factory();
|
|
|
| PropertyAttributes attrs;
|
| - uint32_t index;
|
| // Get attributes.
|
| - LookupIterator it =
|
| - name->AsArrayIndex(&index)
|
| - ? LookupIterator(isolate, obj, index, LookupIterator::HIDDEN)
|
| - : LookupIterator(obj, name, LookupIterator::HIDDEN);
|
| + LookupIterator it = LookupIterator::PropertyOrElement(isolate, obj, name,
|
| + LookupIterator::HIDDEN);
|
| Maybe<PropertyAttributes> maybe = JSObject::GetPropertyAttributes(&it);
|
|
|
| if (!maybe.IsJust()) return MaybeHandle<Object>();
|
| @@ -1274,23 +1263,17 @@ RUNTIME_FUNCTION(Runtime_DefineDataPropertyUnchecked) {
|
| CONVERT_ARG_HANDLE_CHECKED(Object, value, 2);
|
| CONVERT_PROPERTY_ATTRIBUTES_CHECKED(attrs, 3);
|
|
|
| - uint32_t index = 0;
|
| - LookupIterator::Configuration c = LookupIterator::OWN_SKIP_INTERCEPTOR;
|
| - LookupIterator it = name->AsArrayIndex(&index)
|
| - ? LookupIterator(isolate, object, index, c)
|
| - : LookupIterator(object, name, c);
|
| + LookupIterator it = LookupIterator::PropertyOrElement(isolate, object, name,
|
| + LookupIterator::OWN);
|
| if (it.state() == LookupIterator::ACCESS_CHECK && !it.HasAccess()) {
|
| return isolate->heap()->undefined_value();
|
| }
|
|
|
| Handle<Object> result;
|
| - MaybeHandle<Object> maybe_result =
|
| - it.IsElement()
|
| - ? JSObject::SetOwnElementIgnoreAttributes(object, index, value, attrs,
|
| - JSObject::DONT_FORCE_FIELD)
|
| - : JSObject::SetOwnPropertyIgnoreAttributes(
|
| - object, name, value, attrs, JSObject::DONT_FORCE_FIELD);
|
| - ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, maybe_result);
|
| + ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
|
| + isolate, result, JSObject::DefineOwnPropertyIgnoreAttributes(
|
| + &it, value, attrs, JSObject::DONT_FORCE_FIELD));
|
| +
|
| return *result;
|
| }
|
|
|
|
|