| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/lookup.h" | 5 #include "src/lookup.h" |
| 6 | 6 |
| 7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
| 8 #include "src/deoptimizer.h" | 8 #include "src/deoptimizer.h" |
| 9 #include "src/elements.h" | 9 #include "src/elements.h" |
| 10 #include "src/field-type.h" | 10 #include "src/field-type.h" |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 #endif | 301 #endif |
| 302 } | 302 } |
| 303 | 303 |
| 304 // Can only be called when the receiver is a JSObject. JSProxy has to be handled | 304 // Can only be called when the receiver is a JSObject. JSProxy has to be handled |
| 305 // via a trap. Adding properties to primitive values is not observable. | 305 // via a trap. Adding properties to primitive values is not observable. |
| 306 void LookupIterator::PrepareTransitionToDataProperty( | 306 void LookupIterator::PrepareTransitionToDataProperty( |
| 307 Handle<JSObject> receiver, Handle<Object> value, | 307 Handle<JSObject> receiver, Handle<Object> value, |
| 308 PropertyAttributes attributes, Object::StoreFromKeyed store_mode) { | 308 PropertyAttributes attributes, Object::StoreFromKeyed store_mode) { |
| 309 DCHECK(receiver.is_identical_to(GetStoreTarget())); | 309 DCHECK(receiver.is_identical_to(GetStoreTarget())); |
| 310 if (state_ == TRANSITION) return; | 310 if (state_ == TRANSITION) return; |
| 311 |
| 312 if (!IsElement() && name()->IsPrivate()) { |
| 313 attributes = static_cast<PropertyAttributes>(attributes | DONT_ENUM); |
| 314 } |
| 315 |
| 311 DCHECK(state_ != LookupIterator::ACCESSOR || | 316 DCHECK(state_ != LookupIterator::ACCESSOR || |
| 312 (GetAccessors()->IsAccessorInfo() && | 317 (GetAccessors()->IsAccessorInfo() && |
| 313 AccessorInfo::cast(*GetAccessors())->is_special_data_property())); | 318 AccessorInfo::cast(*GetAccessors())->is_special_data_property())); |
| 314 DCHECK_NE(INTEGER_INDEXED_EXOTIC, state_); | 319 DCHECK_NE(INTEGER_INDEXED_EXOTIC, state_); |
| 315 DCHECK(state_ == NOT_FOUND || !HolderIsReceiverOrHiddenPrototype()); | 320 DCHECK(state_ == NOT_FOUND || !HolderIsReceiverOrHiddenPrototype()); |
| 316 | 321 |
| 317 Handle<Map> map(receiver->map(), isolate_); | 322 Handle<Map> map(receiver->map(), isolate_); |
| 318 | 323 |
| 319 // Dictionary maps can always have additional data properties. | 324 // Dictionary maps can always have additional data properties. |
| 320 if (map->is_dictionary_map()) { | 325 if (map->is_dictionary_map()) { |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 } | 440 } |
| 436 | 441 |
| 437 void LookupIterator::TransitionToAccessorProperty( | 442 void LookupIterator::TransitionToAccessorProperty( |
| 438 Handle<Object> getter, Handle<Object> setter, | 443 Handle<Object> getter, Handle<Object> setter, |
| 439 PropertyAttributes attributes) { | 444 PropertyAttributes attributes) { |
| 440 DCHECK(!getter->IsNull(isolate_) || !setter->IsNull(isolate_)); | 445 DCHECK(!getter->IsNull(isolate_) || !setter->IsNull(isolate_)); |
| 441 // Can only be called when the receiver is a JSObject. JSProxy has to be | 446 // Can only be called when the receiver is a JSObject. JSProxy has to be |
| 442 // handled via a trap. Adding properties to primitive values is not | 447 // handled via a trap. Adding properties to primitive values is not |
| 443 // observable. | 448 // observable. |
| 444 Handle<JSObject> receiver = GetStoreTarget(); | 449 Handle<JSObject> receiver = GetStoreTarget(); |
| 450 if (!IsElement() && name()->IsPrivate()) { |
| 451 attributes = static_cast<PropertyAttributes>(attributes | DONT_ENUM); |
| 452 } |
| 445 | 453 |
| 446 if (!IsElement() && !receiver->map()->is_dictionary_map()) { | 454 if (!IsElement() && !receiver->map()->is_dictionary_map()) { |
| 447 Handle<Map> old_map(receiver->map(), isolate_); | 455 Handle<Map> old_map(receiver->map(), isolate_); |
| 448 | 456 |
| 449 if (!holder_.is_identical_to(receiver)) { | 457 if (!holder_.is_identical_to(receiver)) { |
| 450 holder_ = receiver; | 458 holder_ = receiver; |
| 451 state_ = NOT_FOUND; | 459 state_ = NOT_FOUND; |
| 452 } else if (state_ == INTERCEPTOR) { | 460 } else if (state_ == INTERCEPTOR) { |
| 453 LookupInRegularHolder<false>(*old_map, *holder_); | 461 LookupInRegularHolder<false>(*old_map, *holder_); |
| 454 } | 462 } |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 | 867 |
| 860 // We have found a cached property! Modify the iterator accordingly. | 868 // We have found a cached property! Modify the iterator accordingly. |
| 861 name_ = maybe_name.ToHandleChecked(); | 869 name_ = maybe_name.ToHandleChecked(); |
| 862 Restart(); | 870 Restart(); |
| 863 CHECK_EQ(state(), LookupIterator::DATA); | 871 CHECK_EQ(state(), LookupIterator::DATA); |
| 864 return true; | 872 return true; |
| 865 } | 873 } |
| 866 | 874 |
| 867 } // namespace internal | 875 } // namespace internal |
| 868 } // namespace v8 | 876 } // namespace v8 |
| OLD | NEW |