Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 56507aeb42c09d190ccd31aef4e4ec014b84070d..cddd9cefdabec8e9771ce0b1976ff040eb52cd3f 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -3872,7 +3872,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineAccessorProperty) { |
|| result.type() == CONSTANT_FUNCTION)) { |
Object* ok; |
{ MaybeObject* maybe_ok = |
- obj->DeleteProperty(name, JSObject::NORMAL_DELETION); |
+ obj->DeleteProperty(name, JSReceiver::NORMAL_DELETION); |
if (!maybe_ok->ToObject(&ok)) return maybe_ok; |
} |
} |
@@ -4126,24 +4126,25 @@ MaybeObject* Runtime::ForceSetObjectProperty(Isolate* isolate, |
MaybeObject* Runtime::ForceDeleteObjectProperty(Isolate* isolate, |
- Handle<JSObject> js_object, |
+ Handle<JSReceiver> receiver, |
Handle<Object> key) { |
HandleScope scope(isolate); |
// Check if the given key is an array index. |
uint32_t index; |
- if (key->ToArrayIndex(&index)) { |
+ if (receiver->IsJSObject() && key->ToArrayIndex(&index)) { |
// In Firefox/SpiderMonkey, Safari and Opera you can access the |
// characters of a string using [] notation. In the case of a |
// String object we just need to redirect the deletion to the |
// underlying string if the index is in range. Since the |
// underlying string does nothing with the deletion, we can ignore |
// such deletions. |
- if (js_object->IsStringObjectWithCharacterAt(index)) { |
+ if (receiver->IsStringObjectWithCharacterAt(index)) { |
return isolate->heap()->true_value(); |
} |
- return js_object->DeleteElement(index, JSObject::FORCE_DELETION); |
+ return JSObject::cast(*receiver)->DeleteElement( |
+ index, JSReceiver::FORCE_DELETION); |
} |
Handle<String> key_string; |
@@ -4158,7 +4159,7 @@ MaybeObject* Runtime::ForceDeleteObjectProperty(Isolate* isolate, |
} |
key_string->TryFlatten(); |
- return js_object->DeleteProperty(*key_string, JSObject::FORCE_DELETION); |
+ return receiver->DeleteProperty(*key_string, JSReceiver::FORCE_DELETION); |
} |
@@ -4237,12 +4238,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteProperty) { |
NoHandleAllocation ha; |
ASSERT(args.length() == 3); |
- CONVERT_CHECKED(JSObject, object, args[0]); |
+ CONVERT_CHECKED(JSReceiver, object, args[0]); |
CONVERT_CHECKED(String, key, args[1]); |
CONVERT_SMI_ARG_CHECKED(strict, 2); |
return object->DeleteProperty(key, (strict == kStrictMode) |
- ? JSObject::STRICT_DELETION |
- : JSObject::NORMAL_DELETION); |
+ ? JSReceiver::STRICT_DELETION |
+ : JSReceiver::NORMAL_DELETION); |
} |
@@ -8198,9 +8199,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteContextSlot) { |
// index is non-negative. |
Handle<JSObject> object = Handle<JSObject>::cast(holder); |
if (index >= 0) { |
- return object->DeleteElement(index, JSObject::NORMAL_DELETION); |
+ return object->DeleteElement(index, JSReceiver::NORMAL_DELETION); |
} else { |
- return object->DeleteProperty(*name, JSObject::NORMAL_DELETION); |
+ return object->DeleteProperty(*name, JSReceiver::NORMAL_DELETION); |
} |
} |