summaryrefslogtreecommitdiff
path: root/deps/v8/src/lookup.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/lookup.h')
-rw-r--r--deps/v8/src/lookup.h125
1 files changed, 21 insertions, 104 deletions
diff --git a/deps/v8/src/lookup.h b/deps/v8/src/lookup.h
index 36ba78be27..c1d4dd4460 100644
--- a/deps/v8/src/lookup.h
+++ b/deps/v8/src/lookup.h
@@ -49,31 +49,13 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
: LookupIterator(isolate, receiver, name, GetRoot(isolate, receiver),
configuration) {}
- LookupIterator(Handle<Object> receiver, Handle<Name> name,
- Handle<JSReceiver> holder,
- Configuration configuration = DEFAULT)
- : LookupIterator(holder->GetIsolate(), receiver, name, holder,
- configuration) {}
+ inline LookupIterator(Handle<Object> receiver, Handle<Name> name,
+ Handle<JSReceiver> holder,
+ Configuration configuration = DEFAULT);
- LookupIterator(Isolate* isolate, Handle<Object> receiver, Handle<Name> name,
- Handle<JSReceiver> holder,
- Configuration configuration = DEFAULT)
- : configuration_(ComputeConfiguration(configuration, name)),
- interceptor_state_(InterceptorState::kUninitialized),
- property_details_(PropertyDetails::Empty()),
- isolate_(isolate),
- name_(isolate_->factory()->InternalizeName(name)),
- receiver_(receiver),
- initial_holder_(holder),
- // kMaxUInt32 isn't a valid index.
- index_(kMaxUInt32),
- number_(static_cast<uint32_t>(DescriptorArray::kNotFound)) {
-#ifdef DEBUG
- uint32_t index; // Assert that the name is not an array index.
- DCHECK(!name->AsArrayIndex(&index));
-#endif // DEBUG
- Start<false>();
- }
+ inline LookupIterator(Isolate* isolate, Handle<Object> receiver,
+ Handle<Name> name, Handle<JSReceiver> holder,
+ Configuration configuration = DEFAULT);
LookupIterator(Isolate* isolate, Handle<Object> receiver, uint32_t index,
Configuration configuration = DEFAULT)
@@ -96,31 +78,13 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
Start<true>();
}
- static LookupIterator PropertyOrElement(
+ static inline LookupIterator PropertyOrElement(
Isolate* isolate, Handle<Object> receiver, Handle<Name> name,
- Configuration configuration = DEFAULT) {
- uint32_t index;
- if (name->AsArrayIndex(&index)) {
- LookupIterator it =
- LookupIterator(isolate, receiver, index, configuration);
- it.name_ = name;
- return it;
- }
- return LookupIterator(isolate, receiver, name, configuration);
- }
+ Configuration configuration = DEFAULT);
- static LookupIterator PropertyOrElement(
+ static inline LookupIterator PropertyOrElement(
Isolate* isolate, Handle<Object> receiver, Handle<Name> name,
- Handle<JSReceiver> holder, Configuration configuration = DEFAULT) {
- uint32_t index;
- if (name->AsArrayIndex(&index)) {
- LookupIterator it =
- LookupIterator(isolate, receiver, index, holder, configuration);
- it.name_ = name;
- return it;
- }
- return LookupIterator(receiver, name, holder, configuration);
- }
+ Handle<JSReceiver> holder, Configuration configuration = DEFAULT);
static LookupIterator PropertyOrElement(
Isolate* isolate, Handle<Object> receiver, Handle<Object> key,
@@ -147,13 +111,7 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
DCHECK(!IsElement());
return name_;
}
- Handle<Name> GetName() {
- if (name_.is_null()) {
- DCHECK(IsElement());
- name_ = factory()->Uint32ToString(index_);
- }
- return name_;
- }
+ inline Handle<Name> GetName();
uint32_t index() const { return index_; }
bool IsElement() const { return index_ != kMaxUInt32; }
@@ -170,17 +128,8 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
Handle<Object> GetReceiver() const { return receiver_; }
template <class T>
- Handle<T> GetStoreTarget() const {
- DCHECK(receiver_->IsJSReceiver());
- if (receiver_->IsJSGlobalProxy()) {
- Map* map = JSGlobalProxy::cast(*receiver_)->map();
- if (map->has_hidden_prototype()) {
- return handle(JSGlobalObject::cast(map->prototype()), isolate_);
- }
- }
- return Handle<T>::cast(receiver_);
- }
- bool is_dictionary_holder() const { return !holder_->HasFastProperties(); }
+ inline Handle<T> GetStoreTarget() const;
+ inline bool is_dictionary_holder() const;
Handle<Map> transition_map() const {
DCHECK_EQ(TRANSITION, state_);
return Handle<Map>::cast(transition_);
@@ -206,23 +155,13 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
bool HasAccess() const;
/* PROPERTY */
- bool ExtendingNonExtensible(Handle<JSReceiver> receiver) {
- DCHECK(receiver.is_identical_to(GetStoreTarget<JSReceiver>()));
- return !receiver->map()->is_extensible() &&
- (IsElement() || !name_->IsPrivate());
- }
+ inline bool ExtendingNonExtensible(Handle<JSReceiver> receiver);
void PrepareForDataProperty(Handle<Object> value);
void PrepareTransitionToDataProperty(Handle<JSReceiver> receiver,
Handle<Object> value,
PropertyAttributes attributes,
Object::StoreFromKeyed store_mode);
- bool IsCacheableTransition() {
- DCHECK_EQ(TRANSITION, state_);
- return transition_->IsPropertyCell() ||
- (transition_map()->is_dictionary_map() &&
- !GetStoreTarget<JSReceiver>()->HasFastProperties()) ||
- transition_map()->GetBackPointer()->IsMap();
- }
+ inline bool IsCacheableTransition();
void ApplyTransitionToDataProperty(Handle<JSReceiver> receiver);
void ReconfigureDataProperty(Handle<Object> value,
PropertyAttributes attributes);
@@ -255,28 +194,11 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
int GetConstantIndex() const;
Handle<PropertyCell> GetPropertyCell() const;
Handle<Object> GetAccessors() const;
- inline Handle<InterceptorInfo> GetInterceptor() const {
- DCHECK_EQ(INTERCEPTOR, state_);
- InterceptorInfo* result =
- IsElement() ? GetInterceptor<true>(JSObject::cast(*holder_))
- : GetInterceptor<false>(JSObject::cast(*holder_));
- return handle(result, isolate_);
- }
+ inline Handle<InterceptorInfo> GetInterceptor() const;
Handle<InterceptorInfo> GetInterceptorForFailedAccessCheck() const;
Handle<Object> GetDataValue() const;
void WriteDataValue(Handle<Object> value, bool initializing_store);
- inline void UpdateProtector() {
- if (IsElement()) return;
- // This list must be kept in sync with
- // CodeStubAssembler::CheckForAssociatedProtector!
- ReadOnlyRoots roots(heap());
- if (*name_ == roots.is_concat_spreadable_symbol() ||
- *name_ == roots.constructor_string() || *name_ == roots.next_string() ||
- *name_ == roots.species_symbol() || *name_ == roots.iterator_symbol() ||
- *name_ == roots.resolve_string() || *name_ == roots.then_string()) {
- InternalUpdateProtector();
- }
- }
+ inline void UpdateProtector();
// Lookup a 'cached' private property for an accessor.
// If not found returns false and leaves the LookupIterator unmodified.
@@ -350,19 +272,14 @@ class V8_EXPORT_PRIVATE LookupIterator final BASE_EMBEDDED {
return number_;
}
- static Configuration ComputeConfiguration(
- Configuration configuration, Handle<Name> name) {
- return name->IsPrivate() ? OWN_SKIP_INTERCEPTOR : configuration;
- }
+ static inline Configuration ComputeConfiguration(
+ Configuration configuration, Handle<Name> name);
static Handle<JSReceiver> GetRootForNonJSReceiver(
Isolate* isolate, Handle<Object> receiver, uint32_t index = kMaxUInt32);
- inline static Handle<JSReceiver> GetRoot(Isolate* isolate,
+ static inline Handle<JSReceiver> GetRoot(Isolate* isolate,
Handle<Object> receiver,
- uint32_t index = kMaxUInt32) {
- if (receiver->IsJSReceiver()) return Handle<JSReceiver>::cast(receiver);
- return GetRootForNonJSReceiver(isolate, receiver, index);
- }
+ uint32_t index = kMaxUInt32);
State NotFound(JSReceiver* const holder) const;