Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: src/objects.cc

Issue 1156573002: [strong] Implement per-object restrictions behaviour of delete operator (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: trim linebreaks Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698