| Index: src/lookup.h
|
| diff --git a/src/lookup.h b/src/lookup.h
|
| index a114bc5c0745d8fd42884dc9cd503244e119085d..a2e25c42470bb0c6d6fb9129c0a7cce755063040 100644
|
| --- a/src/lookup.h
|
| +++ b/src/lookup.h
|
| @@ -46,13 +46,15 @@ class LookupIterator FINAL BASE_EMBEDDED {
|
| Configuration configuration = PROTOTYPE_CHAIN)
|
| : configuration_(ComputeConfiguration(configuration, name)),
|
| state_(NOT_FOUND),
|
| + interceptor_state_(InterceptorState::kUninitialized),
|
| property_details_(NONE, v8::internal::DATA, 0),
|
| isolate_(name->GetIsolate()),
|
| name_(name),
|
| receiver_(receiver),
|
| + holder_(GetRoot(receiver_, isolate_)),
|
| + holder_map_(holder_->map(), isolate_),
|
| + initial_holder_(holder_),
|
| number_(DescriptorArray::kNotFound) {
|
| - holder_ = GetRoot();
|
| - holder_map_ = handle(holder_->map(), isolate_);
|
| Next();
|
| }
|
|
|
| @@ -61,12 +63,14 @@ class LookupIterator FINAL BASE_EMBEDDED {
|
| Configuration configuration = PROTOTYPE_CHAIN)
|
| : configuration_(ComputeConfiguration(configuration, name)),
|
| state_(NOT_FOUND),
|
| + interceptor_state_(InterceptorState::kUninitialized),
|
| property_details_(NONE, v8::internal::DATA, 0),
|
| isolate_(name->GetIsolate()),
|
| name_(name),
|
| - holder_map_(holder->map(), isolate_),
|
| receiver_(receiver),
|
| holder_(holder),
|
| + holder_map_(holder_->map(), isolate_),
|
| + initial_holder_(holder_),
|
| number_(DescriptorArray::kNotFound) {
|
| Next();
|
| }
|
| @@ -95,7 +99,7 @@ class LookupIterator FINAL BASE_EMBEDDED {
|
| DCHECK(IsFound());
|
| return Handle<T>::cast(holder_);
|
| }
|
| - Handle<JSReceiver> GetRoot() const;
|
| + static Handle<JSReceiver> GetRoot(Handle<Object> receiver, Isolate* isolate);
|
| bool HolderIsReceiverOrHiddenPrototype() const;
|
|
|
| /* ACCESS_CHECK */
|
| @@ -148,12 +152,21 @@ class LookupIterator FINAL BASE_EMBEDDED {
|
| void InternalizeName();
|
|
|
| private:
|
| + enum class InterceptorState {
|
| + kUninitialized,
|
| + kSkipNonMasking,
|
| + kProcessNonMasking
|
| + };
|
| +
|
| Handle<Map> GetReceiverMap() const;
|
|
|
| MUST_USE_RESULT inline JSReceiver* NextHolder(Map* map);
|
| inline State LookupInHolder(Map* map, JSReceiver* holder);
|
| + void RestartLookupForNonMaskingInterceptors();
|
| + State LookupNonMaskingInterceptorInHolder(Map* map, JSReceiver* holder);
|
| Handle<Object> FetchValue() const;
|
| void ReloadPropertyInformation();
|
| + bool SkipInterceptor(JSObject* holder);
|
|
|
| bool IsBootstrapping() const;
|
|
|
| @@ -187,17 +200,18 @@ class LookupIterator FINAL BASE_EMBEDDED {
|
|
|
| // If configuration_ becomes mutable, update
|
| // HolderIsReceiverOrHiddenPrototype.
|
| - Configuration configuration_;
|
| + const Configuration configuration_;
|
| State state_;
|
| bool has_property_;
|
| + InterceptorState interceptor_state_;
|
| PropertyDetails property_details_;
|
| - Isolate* isolate_;
|
| + Isolate* const isolate_;
|
| Handle<Name> name_;
|
| - Handle<Map> holder_map_;
|
| Handle<Object> transition_;
|
| - Handle<Object> receiver_;
|
| + const Handle<Object> receiver_;
|
| Handle<JSReceiver> holder_;
|
| -
|
| + Handle<Map> holder_map_;
|
| + const Handle<JSReceiver> initial_holder_;
|
| int number_;
|
| };
|
|
|
|
|