Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 107297c944701f3e3570145168d11b66b30bc3a7..8047995db963f909efdc460f3a66358a6de479b9 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -5031,12 +5031,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { |
RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); |
PropertyAttributes attr = static_cast<PropertyAttributes>(unchecked); |
- LookupResult result(isolate); |
- js_object->LocalLookupRealNamedProperty(*name, &result); |
+ LookupResult lookup(isolate); |
+ js_object->LocalLookupRealNamedProperty(*name, &lookup); |
// Special case for callback properties. |
- if (result.IsPropertyCallbacks()) { |
- Object* callback = result.GetCallbackObject(); |
+ if (lookup.IsPropertyCallbacks()) { |
+ Handle<Object> callback(lookup.GetCallbackObject(), isolate); |
// To be compatible with Safari we do not change the value on API objects |
// in Object.defineProperty(). Firefox disagrees here, and actually changes |
// the value. |
@@ -5047,13 +5047,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { |
// setter to update the value instead. |
// TODO(mstarzinger): So far this only works if property attributes don't |
// change, this should be fixed once we cleanup the underlying code. |
- if (callback->IsForeign() && result.GetAttributes() == attr) { |
+ if (callback->IsForeign() && lookup.GetAttributes() == attr) { |
Handle<Object> result_object = |
JSObject::SetPropertyWithCallback(js_object, |
- handle(callback, isolate), |
+ callback, |
name, |
obj_value, |
- handle(result.holder()), |
+ handle(lookup.holder()), |
kStrictMode); |
RETURN_IF_EMPTY_HANDLE(isolate, result_object); |
return *result_object; |
@@ -5066,8 +5066,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { |
// map. The current version of SetObjectProperty does not handle attributes |
// correctly in the case where a property is a field and is reset with |
// new attributes. |
- if (result.IsFound() && |
- (attr != result.GetAttributes() || result.IsPropertyCallbacks())) { |
+ if (lookup.IsFound() && |
+ (attr != lookup.GetAttributes() || lookup.IsPropertyCallbacks())) { |
// New attributes - normalize to avoid writing to instance descriptor |
if (js_object->IsJSGlobalProxy()) { |
// Since the result is a property, the prototype will exist so |
@@ -5083,11 +5083,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { |
return *result; |
} |
- return Runtime::ForceSetObjectProperty(isolate, |
- js_object, |
- name, |
- obj_value, |
- attr); |
+ Handle<Object> result = Runtime::ForceSetObjectProperty(isolate, js_object, |
+ name, |
+ obj_value, |
+ attr); |
+ RETURN_IF_EMPTY_HANDLE(isolate, result); |
+ return *result; |
} |
@@ -5241,13 +5242,11 @@ MaybeObject* Runtime::SetObjectProperty(Isolate* isolate, |
} |
-MaybeObject* Runtime::ForceSetObjectProperty(Isolate* isolate, |
- Handle<JSObject> js_object, |
- Handle<Object> key, |
- Handle<Object> value, |
- PropertyAttributes attr) { |
- HandleScope scope(isolate); |
- |
+Handle<Object> Runtime::ForceSetObjectProperty(Isolate* isolate, |
+ Handle<JSObject> js_object, |
+ Handle<Object> key, |
+ Handle<Object> value, |
+ PropertyAttributes attr) { |
// Check if the given key is an array index. |
uint32_t index; |
if (key->ToArrayIndex(&index)) { |
@@ -5259,24 +5258,24 @@ MaybeObject* Runtime::ForceSetObjectProperty(Isolate* isolate, |
// string does nothing with the assignment then we can ignore such |
// assignments. |
if (js_object->IsStringObjectWithCharacterAt(index)) { |
- return *value; |
+ return value; |
} |
- return js_object->SetElement( |
- index, *value, attr, kNonStrictMode, false, DEFINE_PROPERTY); |
+ return JSObject::SetElement(js_object, index, value, attr, kNonStrictMode, |
+ false, |
+ DEFINE_PROPERTY); |
} |
if (key->IsName()) { |
Handle<Name> name = Handle<Name>::cast(key); |
if (name->AsArrayIndex(&index)) { |
- return js_object->SetElement( |
- index, *value, attr, kNonStrictMode, false, DEFINE_PROPERTY); |
+ return JSObject::SetElement(js_object, index, value, attr, kNonStrictMode, |
+ false, |
+ DEFINE_PROPERTY); |
} else { |
if (name->IsString()) Handle<String>::cast(name)->TryFlatten(); |
- Handle<Object> result = JSObject::SetLocalPropertyIgnoreAttributes( |
- js_object, name, value, attr); |
- RETURN_IF_EMPTY_HANDLE(isolate, result); |
- return *result; |
+ return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name, |
+ value, attr); |
} |
} |
@@ -5284,17 +5283,16 @@ MaybeObject* Runtime::ForceSetObjectProperty(Isolate* isolate, |
bool has_pending_exception = false; |
Handle<Object> converted = |
Execution::ToString(isolate, key, &has_pending_exception); |
- if (has_pending_exception) return Failure::Exception(); |
+ if (has_pending_exception) return Handle<Object>(); // exception |
Handle<String> name = Handle<String>::cast(converted); |
if (name->AsArrayIndex(&index)) { |
- return js_object->SetElement( |
- index, *value, attr, kNonStrictMode, false, DEFINE_PROPERTY); |
+ return JSObject::SetElement(js_object, index, value, attr, kNonStrictMode, |
+ false, |
+ DEFINE_PROPERTY); |
} else { |
- Handle<Object> result = JSObject::SetLocalPropertyIgnoreAttributes( |
- js_object, name, value, attr); |
- RETURN_IF_EMPTY_HANDLE(isolate, result); |
- return *result; |
+ return JSObject::SetLocalPropertyIgnoreAttributes(js_object, name, value, |
+ attr); |
} |
} |