| Index: src/lookup.h
|
| diff --git a/src/lookup.h b/src/lookup.h
|
| index a574980c1fe2ccad20ebff3ac42bb83e4929d45e..48dce3a645732df9e45a06f41be205a2a7873bb7 100644
|
| --- a/src/lookup.h
|
| +++ b/src/lookup.h
|
| @@ -52,6 +52,8 @@ class LookupIterator final BASE_EMBEDDED {
|
| property_details_(PropertyDetails::Empty()),
|
| isolate_(name->GetIsolate()),
|
| name_(name),
|
| + // kMaxUInt32 isn't a valid index.
|
| + index_(kMaxUInt32),
|
| receiver_(receiver),
|
| holder_(GetRoot(receiver_, isolate_)),
|
| holder_map_(holder_->map(), isolate_),
|
| @@ -70,6 +72,8 @@ class LookupIterator final BASE_EMBEDDED {
|
| property_details_(PropertyDetails::Empty()),
|
| isolate_(name->GetIsolate()),
|
| name_(name),
|
| + // kMaxUInt32 isn't a valid index.
|
| + index_(kMaxUInt32),
|
| receiver_(receiver),
|
| holder_(holder),
|
| holder_map_(holder_->map(), isolate_),
|
| @@ -78,9 +82,54 @@ class LookupIterator final BASE_EMBEDDED {
|
| Next();
|
| }
|
|
|
| + LookupIterator(Isolate* isolate, Handle<Object> receiver, uint32_t index,
|
| + Configuration configuration = PROTOTYPE_CHAIN)
|
| + : configuration_(configuration),
|
| + state_(NOT_FOUND),
|
| + exotic_index_state_(ExoticIndexState::kNotExotic),
|
| + interceptor_state_(InterceptorState::kUninitialized),
|
| + property_details_(PropertyDetails::Empty()),
|
| + isolate_(isolate),
|
| + name_(),
|
| + index_(index),
|
| + receiver_(receiver),
|
| + holder_(GetRoot(receiver_, isolate_)),
|
| + holder_map_(holder_->map(), isolate_),
|
| + initial_holder_(holder_),
|
| + number_(DescriptorArray::kNotFound) {
|
| + // kMaxUInt32 isn't a valid index.
|
| + DCHECK_NE(kMaxUInt32, index_);
|
| + Next();
|
| + }
|
| +
|
| + LookupIterator(Isolate* isolate, Handle<Object> receiver, uint32_t index,
|
| + Handle<JSReceiver> holder,
|
| + Configuration configuration = PROTOTYPE_CHAIN)
|
| + : configuration_(configuration),
|
| + state_(NOT_FOUND),
|
| + exotic_index_state_(ExoticIndexState::kNotExotic),
|
| + interceptor_state_(InterceptorState::kUninitialized),
|
| + property_details_(PropertyDetails::Empty()),
|
| + isolate_(isolate),
|
| + name_(),
|
| + index_(index),
|
| + receiver_(receiver),
|
| + holder_(holder),
|
| + holder_map_(holder_->map(), isolate_),
|
| + initial_holder_(holder_),
|
| + number_(DescriptorArray::kNotFound) {
|
| + // kMaxUInt32 isn't a valid index.
|
| + DCHECK_NE(kMaxUInt32, index_);
|
| + Next();
|
| + }
|
| +
|
| Isolate* isolate() const { return isolate_; }
|
| State state() const { return state_; }
|
| +
|
| Handle<Name> name() const { return name_; }
|
| + uint32_t index() const { return index_; }
|
| +
|
| + bool IsElement() const { return index_ != kMaxUInt32; }
|
|
|
| bool IsFound() const { return state_ != NOT_FOUND; }
|
| void Next();
|
| @@ -161,6 +210,7 @@ class LookupIterator final BASE_EMBEDDED {
|
| Handle<Object> FetchValue() const;
|
| void ReloadPropertyInformation();
|
| bool SkipInterceptor(JSObject* holder);
|
| + bool HasInterceptor(Map* map) const;
|
|
|
| bool IsBootstrapping() const;
|
|
|
| @@ -192,7 +242,7 @@ class LookupIterator final BASE_EMBEDDED {
|
| }
|
| }
|
|
|
| - enum class ExoticIndexState { kUninitialized, kNoIndex, kIndex };
|
| + enum class ExoticIndexState { kUninitialized, kNotExotic, kExotic };
|
| bool IsIntegerIndexedExotic(JSReceiver* holder);
|
|
|
| // If configuration_ becomes mutable, update
|
| @@ -205,12 +255,13 @@ class LookupIterator final BASE_EMBEDDED {
|
| PropertyDetails property_details_;
|
| Isolate* const isolate_;
|
| Handle<Name> name_;
|
| + uint32_t index_;
|
| Handle<Object> transition_;
|
| const Handle<Object> receiver_;
|
| Handle<JSReceiver> holder_;
|
| Handle<Map> holder_map_;
|
| const Handle<JSReceiver> initial_holder_;
|
| - int number_;
|
| + uint32_t number_;
|
| };
|
|
|
|
|
|
|