| 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);
|
| }
|
| }
|
|
|
|
|