Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index ecb5bf1b5164265ae48d7f4be04d01181a7c8c65..9505800246f849e035de242fb5d874c27d32c833 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -5513,6 +5513,17 @@ MaybeHandle<Object> JSObject::DeleteProperty(Handle<JSObject> object, |
MaybeHandle<Object> JSReceiver::DeleteElement(Handle<JSReceiver> object, |
uint32_t index, |
LanguageMode language_mode) { |
+ if (object->map()->is_strong()) { |
+ Isolate* isolate = object->GetIsolate(); |
+ if (is_strict(language_mode)) { |
+ THROW_NEW_ERROR( |
rossberg
2015/05/22 11:34:50
Why do we need to throw here? Returning false shou
conradw
2015/05/22 13:37:56
Discussed offline, throw is needed but is in wrong
|
+ isolate, |
+ NewTypeError(MessageTemplate::kStrongDeleteProperty, |
+ isolate->factory()->NewNumberFromUint(index), object), |
+ Object); |
+ } |
+ return isolate->factory()->false_value(); |
+ } |
if (object->IsJSProxy()) { |
return JSProxy::DeleteElementWithHandler(Handle<JSProxy>::cast(object), |
index, language_mode); |
@@ -5525,6 +5536,16 @@ MaybeHandle<Object> JSReceiver::DeleteElement(Handle<JSReceiver> object, |
MaybeHandle<Object> JSReceiver::DeleteProperty(Handle<JSReceiver> object, |
Handle<Name> name, |
LanguageMode language_mode) { |
+ if (object->map()->is_strong()) { |
+ Isolate* isolate = object->GetIsolate(); |
+ if (is_strict(language_mode)) { |
+ THROW_NEW_ERROR( |
rossberg
2015/05/22 11:34:50
Same here.
conradw
2015/05/22 13:37:56
See above.
|
+ isolate, |
+ NewTypeError(MessageTemplate::kStrongDeleteProperty, name, object), |
+ Object); |
+ } |
+ return isolate->factory()->false_value(); |
+ } |
if (object->IsJSProxy()) { |
return JSProxy::DeletePropertyWithHandler(Handle<JSProxy>::cast(object), |
name, language_mode); |