Index: src/lookup.h |
diff --git a/src/lookup.h b/src/lookup.h |
index a114bc5c0745d8fd42884dc9cd503244e119085d..c6bbb66f72240bba0cd3fd34457b2954f8746b04 100644 |
--- a/src/lookup.h |
+++ b/src/lookup.h |
@@ -31,6 +31,7 @@ class LookupIterator FINAL BASE_EMBEDDED { |
enum State { |
ACCESS_CHECK, |
+ INTEGER_INDEXED_EXOTIC, |
INTERCEPTOR, |
JSPROXY, |
NOT_FOUND, |
@@ -46,6 +47,7 @@ class LookupIterator FINAL BASE_EMBEDDED { |
Configuration configuration = PROTOTYPE_CHAIN) |
: configuration_(ComputeConfiguration(configuration, name)), |
state_(NOT_FOUND), |
+ exotic_index_state_(ExoticIndexState::kUninitialized), |
property_details_(NONE, v8::internal::DATA, 0), |
isolate_(name->GetIsolate()), |
name_(name), |
@@ -61,6 +63,7 @@ class LookupIterator FINAL BASE_EMBEDDED { |
Configuration configuration = PROTOTYPE_CHAIN) |
: configuration_(ComputeConfiguration(configuration, name)), |
state_(NOT_FOUND), |
+ exotic_index_state_(ExoticIndexState::kUninitialized), |
property_details_(NONE, v8::internal::DATA, 0), |
isolate_(name->GetIsolate()), |
name_(name), |
@@ -140,11 +143,6 @@ class LookupIterator FINAL BASE_EMBEDDED { |
// Usually returns the value that was passed in, but may perform |
// non-observable modifications on it, such as internalize strings. |
Handle<Object> WriteDataValue(Handle<Object> value); |
- |
- // Checks whether the receiver is an indexed exotic object |
- // and name is a special numeric index. |
- bool IsSpecialNumericIndex() const; |
- |
void InternalizeName(); |
private: |
@@ -185,11 +183,15 @@ class LookupIterator FINAL BASE_EMBEDDED { |
} |
} |
+ enum class ExoticIndexState { kUninitialized, kNoIndex, kIndex }; |
+ bool IsIntegerIndexedExotic(JSReceiver* holder); |
+ |
// If configuration_ becomes mutable, update |
// HolderIsReceiverOrHiddenPrototype. |
Configuration configuration_; |
State state_; |
bool has_property_; |
+ ExoticIndexState exotic_index_state_; |
PropertyDetails property_details_; |
Isolate* isolate_; |
Handle<Name> name_; |