// Convience combinations of bits.
CHECK_PROPERTY = 0,
+ CHECK_OWN = CHECK_ACCESS_CHECK | CHECK_INTERCEPTOR,
CHECK_HIDDEN_SKIP_INTERCEPTOR = CHECK_HIDDEN_PROPERTY | CHECK_ACCESS_CHECK,
CHECK_DERIVED_SKIP_INTERCEPTOR =
CHECK_HIDDEN_SKIP_INTERCEPTOR | CHECK_DERIVED_PROPERTY,
// Lookup a property. If found, the result is valid and has
// detailed information.
- void LookupOwn(Handle<Name> name, LookupResult* result);
void Lookup(Handle<Name> name, LookupResult* result);
enum KeyCollectionType { OWN_ONLY, INCLUDE_PROTOS };
KeyCollectionType type);
private:
+ void LookupOwn(Handle<Name> name, LookupResult* result);
DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver);
};
}
// Lookup cache miss. Perform lookup and update the cache if
// appropriate.
- LookupResult result(isolate);
- receiver->LookupOwn(key, &result);
- if (result.IsField()) {
- FieldIndex field_index = result.GetFieldIndex();
+ LookupIterator it(receiver, key, LookupIterator::CHECK_OWN);
+ if (it.IsFound() && it.state() == LookupIterator::PROPERTY &&
+ it.HasProperty() && it.property_details().type() == FIELD) {
+ FieldIndex field_index = it.GetFieldIndex();
// Do not track double fields in the keyed lookup cache. Reading
// double values requires boxing.
- if (!result.representation().IsDouble()) {
+ if (!it.representation().IsDouble()) {
keyed_lookup_cache->Update(receiver_map, key,
field_index.GetKeyedLookupCacheIndex());
}
AllowHeapAllocation allow_allocation;
- return *JSObject::FastPropertyAt(receiver, result.representation(),
+ return *JSObject::FastPropertyAt(receiver, it.representation(),
field_index);
}
} else {