| Index: src/lookup.h
 | 
| diff --git a/src/lookup.h b/src/lookup.h
 | 
| index 0d234abf04ced1afac064b053c18bbe0f41e45a4..e2237abd63ac3d6fdf0ae9a443008576be39c6c0 100644
 | 
| --- a/src/lookup.h
 | 
| +++ b/src/lookup.h
 | 
| @@ -48,13 +48,15 @@ class LookupIterator FINAL BASE_EMBEDDED {
 | 
|        : configuration_(ComputeConfiguration(configuration, name)),
 | 
|          state_(NOT_FOUND),
 | 
|          exotic_index_state_(ExoticIndexState::kUninitialized),
 | 
| +        interceptor_state_(InterceptorState::kUninitialized),
 | 
|          property_details_(PropertyDetails::Empty()),
 | 
|          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();
 | 
|    }
 | 
|  
 | 
| @@ -64,12 +66,14 @@ class LookupIterator FINAL BASE_EMBEDDED {
 | 
|        : configuration_(ComputeConfiguration(configuration, name)),
 | 
|          state_(NOT_FOUND),
 | 
|          exotic_index_state_(ExoticIndexState::kUninitialized),
 | 
| +        interceptor_state_(InterceptorState::kUninitialized),
 | 
|          property_details_(PropertyDetails::Empty()),
 | 
|          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();
 | 
|    }
 | 
| @@ -98,7 +102,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 */
 | 
| @@ -146,12 +150,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;
 | 
|  
 | 
| @@ -188,18 +201,19 @@ class LookupIterator FINAL BASE_EMBEDDED {
 | 
|  
 | 
|    // If configuration_ becomes mutable, update
 | 
|    // HolderIsReceiverOrHiddenPrototype.
 | 
| -  Configuration configuration_;
 | 
| +  const Configuration configuration_;
 | 
|    State state_;
 | 
|    bool has_property_;
 | 
|    ExoticIndexState exotic_index_state_;
 | 
| +  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_;
 | 
|  };
 | 
|  
 | 
| 
 |