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

Side by Side Diff: src/objects.cc

Issue 1502983002: [proxies] Make Object.{isFrozen,isSealed} behave correctly for proxies. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 5 years 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
« no previous file with comments | « src/objects.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 7279 matching lines...) Expand 10 before | Expand all | Expand 10 after
7290 ? no_conf 7290 ? no_conf
7291 : no_conf_no_write; 7291 : no_conf_no_write;
7292 DefineOwnProperty(isolate, receiver, key, &desc, THROW_ON_ERROR); 7292 DefineOwnProperty(isolate, receiver, key, &desc, THROW_ON_ERROR);
7293 if (isolate->has_pending_exception()) return Nothing<bool>(); 7293 if (isolate->has_pending_exception()) return Nothing<bool>();
7294 } 7294 }
7295 } 7295 }
7296 return Just(true); 7296 return Just(true);
7297 } 7297 }
7298 7298
7299 7299
7300 Maybe<bool> JSReceiver::TestIntegrityLevel(Handle<JSReceiver> object,
7301 IntegrityLevel level) {
7302 DCHECK(level == SEALED || level == FROZEN);
7303 Isolate* isolate = object->GetIsolate();
7304
7305 Maybe<bool> extensible = JSReceiver::IsExtensible(object);
7306 MAYBE_RETURN(extensible, Nothing<bool>());
7307 if (extensible.FromJust()) return Just(false);
7308
7309 Handle<FixedArray> keys;
7310 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
7311 isolate, keys, JSReceiver::OwnPropertyKeys(object), Nothing<bool>());
7312
7313 for (int i = 0; i < keys->length(); ++i) {
7314 Handle<Object> key(keys->get(i), isolate);
7315 PropertyDescriptor current_desc;
7316 bool owned = JSReceiver::GetOwnPropertyDescriptor(isolate, object, key,
7317 &current_desc);
7318 if (isolate->has_pending_exception()) return Nothing<bool>();
7319 if (owned) {
7320 if (current_desc.configurable()) return Just(false);
7321 if (level == FROZEN &&
7322 PropertyDescriptor::IsDataDescriptor(&current_desc) &&
7323 current_desc.writable()) {
7324 return Just(false);
7325 }
7326 }
7327 }
7328 return Just(true);
7329 }
7330
7331
7300 Maybe<bool> JSReceiver::PreventExtensions(Handle<JSReceiver> object, 7332 Maybe<bool> JSReceiver::PreventExtensions(Handle<JSReceiver> object,
7301 ShouldThrow should_throw) { 7333 ShouldThrow should_throw) {
7302 if (object->IsJSProxy()) { 7334 if (object->IsJSProxy()) {
7303 return JSProxy::PreventExtensions(Handle<JSProxy>::cast(object), 7335 return JSProxy::PreventExtensions(Handle<JSProxy>::cast(object),
7304 should_throw); 7336 should_throw);
7305 } 7337 }
7306 DCHECK(object->IsJSObject()); 7338 DCHECK(object->IsJSObject());
7307 return JSObject::PreventExtensions(Handle<JSObject>::cast(object), 7339 return JSObject::PreventExtensions(Handle<JSObject>::cast(object),
7308 should_throw); 7340 should_throw);
7309 } 7341 }
(...skipping 11784 matching lines...) Expand 10 before | Expand all | Expand 10 after
19094 if (cell->value() != *new_value) { 19126 if (cell->value() != *new_value) {
19095 cell->set_value(*new_value); 19127 cell->set_value(*new_value);
19096 Isolate* isolate = cell->GetIsolate(); 19128 Isolate* isolate = cell->GetIsolate();
19097 cell->dependent_code()->DeoptimizeDependentCodeGroup( 19129 cell->dependent_code()->DeoptimizeDependentCodeGroup(
19098 isolate, DependentCode::kPropertyCellChangedGroup); 19130 isolate, DependentCode::kPropertyCellChangedGroup);
19099 } 19131 }
19100 } 19132 }
19101 19133
19102 } // namespace internal 19134 } // namespace internal
19103 } // namespace v8 19135 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698