Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(877)

Unified Diff: src/lookup.h

Issue 1770833002: Speed up indexed interceptor handling in the LookupIterator (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ic/ic.cc ('k') | src/lookup.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/lookup.h
diff --git a/src/lookup.h b/src/lookup.h
index 9a053198cbc8378c07c0806964ff0b320b43e06e..3d52c103dcd7f318ec88bd6a6cbecc6d12cd7b62 100644
--- a/src/lookup.h
+++ b/src/lookup.h
@@ -51,10 +51,11 @@ class LookupIterator final BASE_EMBEDDED {
property_details_(PropertyDetails::Empty()),
isolate_(name->GetIsolate()),
name_(isolate_->factory()->InternalizeName(name)),
+ receiver_(receiver),
+ initial_holder_(GetRoot(isolate_, receiver)),
// kMaxUInt32 isn't a valid index.
index_(kMaxUInt32),
- receiver_(receiver),
- initial_holder_(GetRoot(isolate_, receiver)) {
+ number_(DescriptorArray::kNotFound) {
#ifdef DEBUG
uint32_t index; // Assert that the name is not an array index.
DCHECK(!name->AsArrayIndex(&index));
@@ -70,10 +71,11 @@ class LookupIterator final BASE_EMBEDDED {
property_details_(PropertyDetails::Empty()),
isolate_(name->GetIsolate()),
name_(isolate_->factory()->InternalizeName(name)),
+ receiver_(receiver),
+ initial_holder_(holder),
// kMaxUInt32 isn't a valid index.
index_(kMaxUInt32),
- receiver_(receiver),
- initial_holder_(holder) {
+ number_(DescriptorArray::kNotFound) {
#ifdef DEBUG
uint32_t index; // Assert that the name is not an array index.
DCHECK(!name->AsArrayIndex(&index));
@@ -87,10 +89,10 @@ class LookupIterator final BASE_EMBEDDED {
interceptor_state_(InterceptorState::kUninitialized),
property_details_(PropertyDetails::Empty()),
isolate_(isolate),
- name_(),
- index_(index),
receiver_(receiver),
- initial_holder_(GetRoot(isolate, receiver, index)) {
+ initial_holder_(GetRoot(isolate, receiver, index)),
+ index_(index),
+ number_(DescriptorArray::kNotFound) {
// kMaxUInt32 isn't a valid index.
DCHECK_NE(kMaxUInt32, index_);
Start<true>();
@@ -103,10 +105,10 @@ class LookupIterator final BASE_EMBEDDED {
interceptor_state_(InterceptorState::kUninitialized),
property_details_(PropertyDetails::Empty()),
isolate_(isolate),
- name_(),
- index_(index),
receiver_(receiver),
- initial_holder_(holder) {
+ initial_holder_(holder),
+ index_(index),
+ number_(DescriptorArray::kNotFound) {
// kMaxUInt32 isn't a valid index.
DCHECK_NE(kMaxUInt32, index_);
Start<true>();
@@ -253,7 +255,10 @@ class LookupIterator final BASE_EMBEDDED {
Handle<Object> GetAccessors() const;
inline Handle<InterceptorInfo> GetInterceptor() const {
DCHECK_EQ(INTERCEPTOR, state_);
- return handle(GetInterceptor(JSObject::cast(*holder_)), isolate_);
+ InterceptorInfo* result =
+ IsElement() ? GetInterceptor<true>(JSObject::cast(*holder_))
+ : GetInterceptor<false>(JSObject::cast(*holder_));
+ return handle(result, isolate_);
}
Handle<Object> GetDataValue() const;
void WriteDataValue(Handle<Object> value);
@@ -302,10 +307,12 @@ class LookupIterator final BASE_EMBEDDED {
template <bool is_element>
void ReloadPropertyInformation();
- inline bool SkipInterceptor(JSObject* holder);
+ template <bool is_element>
+ bool SkipInterceptor(JSObject* holder);
+ template <bool is_element>
inline InterceptorInfo* GetInterceptor(JSObject* holder) const {
- if (IsElement()) return holder->GetIndexedInterceptor();
- return holder->GetNamedInterceptor();
+ return is_element ? holder->GetIndexedInterceptor()
+ : holder->GetNamedInterceptor();
}
bool check_hidden() const { return (configuration_ & kHidden) != 0; }
@@ -357,11 +364,11 @@ 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_;
const Handle<JSReceiver> initial_holder_;
+ uint32_t index_;
uint32_t number_;
};
« no previous file with comments | « src/ic/ic.cc ('k') | src/lookup.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698