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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <iomanip> 5 #include <iomanip>
6 #include <sstream> 6 #include <sstream>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 5495 matching lines...) Expand 10 before | Expand all | Expand 10 after
5506 } 5506 }
5507 } 5507 }
5508 5508
5509 return it.isolate()->factory()->true_value(); 5509 return it.isolate()->factory()->true_value();
5510 } 5510 }
5511 5511
5512 5512
5513 MaybeHandle<Object> JSReceiver::DeleteElement(Handle<JSReceiver> object, 5513 MaybeHandle<Object> JSReceiver::DeleteElement(Handle<JSReceiver> object,
5514 uint32_t index, 5514 uint32_t index,
5515 LanguageMode language_mode) { 5515 LanguageMode language_mode) {
5516 if (object->map()->is_strong()) {
5517 Isolate* isolate = object->GetIsolate();
5518 if (is_strict(language_mode)) {
5519 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
5520 isolate,
5521 NewTypeError(MessageTemplate::kStrongDeleteProperty,
5522 isolate->factory()->NewNumberFromUint(index), object),
5523 Object);
5524 }
5525 return isolate->factory()->false_value();
5526 }
5516 if (object->IsJSProxy()) { 5527 if (object->IsJSProxy()) {
5517 return JSProxy::DeleteElementWithHandler(Handle<JSProxy>::cast(object), 5528 return JSProxy::DeleteElementWithHandler(Handle<JSProxy>::cast(object),
5518 index, language_mode); 5529 index, language_mode);
5519 } 5530 }
5520 return JSObject::DeleteElement(Handle<JSObject>::cast(object), index, 5531 return JSObject::DeleteElement(Handle<JSObject>::cast(object), index,
5521 language_mode); 5532 language_mode);
5522 } 5533 }
5523 5534
5524 5535
5525 MaybeHandle<Object> JSReceiver::DeleteProperty(Handle<JSReceiver> object, 5536 MaybeHandle<Object> JSReceiver::DeleteProperty(Handle<JSReceiver> object,
5526 Handle<Name> name, 5537 Handle<Name> name,
5527 LanguageMode language_mode) { 5538 LanguageMode language_mode) {
5539 if (object->map()->is_strong()) {
5540 Isolate* isolate = object->GetIsolate();
5541 if (is_strict(language_mode)) {
5542 THROW_NEW_ERROR(
rossberg 2015/05/22 11:34:50 Same here.
conradw 2015/05/22 13:37:56 See above.
5543 isolate,
5544 NewTypeError(MessageTemplate::kStrongDeleteProperty, name, object),
5545 Object);
5546 }
5547 return isolate->factory()->false_value();
5548 }
5528 if (object->IsJSProxy()) { 5549 if (object->IsJSProxy()) {
5529 return JSProxy::DeletePropertyWithHandler(Handle<JSProxy>::cast(object), 5550 return JSProxy::DeletePropertyWithHandler(Handle<JSProxy>::cast(object),
5530 name, language_mode); 5551 name, language_mode);
5531 } 5552 }
5532 return JSObject::DeleteProperty(Handle<JSObject>::cast(object), name, 5553 return JSObject::DeleteProperty(Handle<JSObject>::cast(object), name,
5533 language_mode); 5554 language_mode);
5534 } 5555 }
5535 5556
5536 5557
5537 bool JSObject::ReferencesObjectFromElements(FixedArray* elements, 5558 bool JSObject::ReferencesObjectFromElements(FixedArray* elements,
(...skipping 11715 matching lines...) Expand 10 before | Expand all | Expand 10 after
17253 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, 17274 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell,
17254 Handle<Object> new_value) { 17275 Handle<Object> new_value) {
17255 if (cell->value() != *new_value) { 17276 if (cell->value() != *new_value) {
17256 cell->set_value(*new_value); 17277 cell->set_value(*new_value);
17257 Isolate* isolate = cell->GetIsolate(); 17278 Isolate* isolate = cell->GetIsolate();
17258 cell->dependent_code()->DeoptimizeDependentCodeGroup( 17279 cell->dependent_code()->DeoptimizeDependentCodeGroup(
17259 isolate, DependentCode::kPropertyCellChangedGroup); 17280 isolate, DependentCode::kPropertyCellChangedGroup);
17260 } 17281 }
17261 } 17282 }
17262 } } // namespace v8::internal 17283 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698