Revert "Revert "Upgrade to 5.0.71.48"" DO NOT MERGE
This reverts commit f2e3994fa5148cc3d9946666f0b0596290192b0e,
and updates the x64 makefile properly so it doesn't break that
build.
FPIIM-449
Change-Id: Ib83e35bfbae6af627451c926a9650ec57c045605
(cherry picked from commit 109988c7ccb6f3fd1a58574fa3dfb88beaef6632)
diff --git a/src/lookup.h b/src/lookup.h
index 7d68956..0c298d9 100644
--- a/src/lookup.h
+++ b/src/lookup.h
@@ -48,16 +48,14 @@
Configuration configuration = DEFAULT)
: configuration_(ComputeConfiguration(configuration, name)),
state_(NOT_FOUND),
- exotic_index_state_(ExoticIndexState::kUninitialized),
interceptor_state_(InterceptorState::kUninitialized),
property_details_(PropertyDetails::Empty()),
isolate_(name->GetIsolate()),
- name_(Name::Flatten(name)),
+ name_(isolate_->factory()->InternalizeName(name)),
// kMaxUInt32 isn't a valid index.
index_(kMaxUInt32),
receiver_(receiver),
holder_(GetRoot(isolate_, receiver)),
- holder_map_(holder_->map(), isolate_),
initial_holder_(holder_),
number_(DescriptorArray::kNotFound) {
#ifdef DEBUG
@@ -72,16 +70,14 @@
Configuration configuration = DEFAULT)
: configuration_(ComputeConfiguration(configuration, name)),
state_(NOT_FOUND),
- exotic_index_state_(ExoticIndexState::kUninitialized),
interceptor_state_(InterceptorState::kUninitialized),
property_details_(PropertyDetails::Empty()),
isolate_(name->GetIsolate()),
- name_(Name::Flatten(name)),
+ name_(isolate_->factory()->InternalizeName(name)),
// kMaxUInt32 isn't a valid index.
index_(kMaxUInt32),
receiver_(receiver),
holder_(holder),
- holder_map_(holder_->map(), isolate_),
initial_holder_(holder_),
number_(DescriptorArray::kNotFound) {
#ifdef DEBUG
@@ -95,7 +91,6 @@
Configuration configuration = DEFAULT)
: configuration_(configuration),
state_(NOT_FOUND),
- exotic_index_state_(ExoticIndexState::kUninitialized),
interceptor_state_(InterceptorState::kUninitialized),
property_details_(PropertyDetails::Empty()),
isolate_(isolate),
@@ -103,7 +98,6 @@
index_(index),
receiver_(receiver),
holder_(GetRoot(isolate, receiver, index)),
- holder_map_(holder_->map(), isolate_),
initial_holder_(holder_),
number_(DescriptorArray::kNotFound) {
// kMaxUInt32 isn't a valid index.
@@ -116,7 +110,6 @@
Configuration configuration = DEFAULT)
: configuration_(configuration),
state_(NOT_FOUND),
- exotic_index_state_(ExoticIndexState::kUninitialized),
interceptor_state_(InterceptorState::kUninitialized),
property_details_(PropertyDetails::Empty()),
isolate_(isolate),
@@ -124,7 +117,6 @@
index_(index),
receiver_(receiver),
holder_(holder),
- holder_map_(holder_->map(), isolate_),
initial_holder_(holder_),
number_(DescriptorArray::kNotFound) {
// kMaxUInt32 isn't a valid index.
@@ -135,27 +127,27 @@
static LookupIterator PropertyOrElement(
Isolate* isolate, Handle<Object> receiver, Handle<Name> name,
Configuration configuration = DEFAULT) {
- name = Name::Flatten(name);
uint32_t index;
- LookupIterator it =
- name->AsArrayIndex(&index)
- ? LookupIterator(isolate, receiver, index, configuration)
- : LookupIterator(receiver, name, configuration);
- it.name_ = name;
- return it;
+ if (name->AsArrayIndex(&index)) {
+ LookupIterator it =
+ LookupIterator(isolate, receiver, index, configuration);
+ it.name_ = name;
+ return it;
+ }
+ return LookupIterator(receiver, name, configuration);
}
static LookupIterator PropertyOrElement(
Isolate* isolate, Handle<Object> receiver, Handle<Name> name,
Handle<JSReceiver> holder, Configuration configuration = DEFAULT) {
- name = Name::Flatten(name);
uint32_t index;
- LookupIterator it =
- name->AsArrayIndex(&index)
- ? LookupIterator(isolate, receiver, index, holder, configuration)
- : LookupIterator(receiver, name, holder, configuration);
- it.name_ = name;
- return it;
+ if (name->AsArrayIndex(&index)) {
+ LookupIterator it =
+ LookupIterator(isolate, receiver, index, holder, configuration);
+ it.name_ = name;
+ return it;
+ }
+ return LookupIterator(receiver, name, holder, configuration);
}
static LookupIterator PropertyOrElement(
@@ -193,7 +185,7 @@
Factory* factory() const { return isolate_->factory(); }
Handle<Object> GetReceiver() const { return receiver_; }
Handle<JSObject> GetStoreTarget() const;
- bool is_dictionary_holder() const { return holder_map_->is_dictionary_map(); }
+ bool is_dictionary_holder() const { return !holder_->HasFastProperties(); }
Handle<Map> transition_map() const {
DCHECK_EQ(TRANSITION, state_);
return Handle<Map>::cast(transition_);
@@ -214,17 +206,23 @@
bool HasAccess() const;
/* PROPERTY */
+ bool ExtendingNonExtensible(Handle<JSObject> receiver) {
+ DCHECK(receiver.is_identical_to(GetStoreTarget()));
+ return !receiver->map()->is_extensible() &&
+ (IsElement() || !name_->IsPrivate());
+ }
void PrepareForDataProperty(Handle<Object> value);
- void PrepareTransitionToDataProperty(Handle<Object> value,
+ void PrepareTransitionToDataProperty(Handle<JSObject> receiver,
+ Handle<Object> value,
PropertyAttributes attributes,
Object::StoreFromKeyed store_mode);
bool IsCacheableTransition() {
- if (state_ != TRANSITION) return false;
+ DCHECK_EQ(TRANSITION, state_);
return transition_->IsPropertyCell() ||
(!transition_map()->is_dictionary_map() &&
transition_map()->GetBackPointer()->IsMap());
}
- void ApplyTransitionToDataProperty();
+ void ApplyTransitionToDataProperty(Handle<JSObject> receiver);
void ReconfigureDataProperty(Handle<Object> value,
PropertyAttributes attributes);
void Delete();
@@ -237,13 +235,17 @@
DCHECK(has_property_);
return property_details_;
}
+ PropertyAttributes property_attributes() const {
+ return property_details().attributes();
+ }
bool IsConfigurable() const { return property_details().IsConfigurable(); }
bool IsReadOnly() const { return property_details().IsReadOnly(); }
+ bool IsEnumerable() const { return property_details().IsEnumerable(); }
Representation representation() const {
return property_details().representation();
}
FieldIndex GetFieldIndex() const;
- Handle<HeapType> GetFieldType() const;
+ Handle<FieldType> GetFieldType() const;
int GetAccessorIndex() const;
int GetConstantIndex() const;
Handle<PropertyCell> GetPropertyCell() const;
@@ -254,8 +256,7 @@
}
Handle<Object> GetDataValue() const;
void WriteDataValue(Handle<Object> value);
- void InternalizeName();
- void ReloadHolderMap();
+ void UpdateProtector();
private:
enum class InterceptorState {
@@ -277,7 +278,6 @@
void ReloadPropertyInformation();
inline bool SkipInterceptor(JSObject* holder);
bool HasInterceptor(Map* map) const;
- bool InternalHolderIsReceiverOrHiddenPrototype() const;
inline InterceptorInfo* GetInterceptor(JSObject* holder) const {
if (IsElement()) return holder->GetIndexedInterceptor();
return holder->GetNamedInterceptor();
@@ -288,13 +288,15 @@
return (configuration_ & kInterceptor) != 0;
}
int descriptor_number() const {
+ DCHECK(!IsElement());
DCHECK(has_property_);
- DCHECK(!holder_map_->is_dictionary_map());
+ DCHECK(holder_->HasFastProperties());
return number_;
}
int dictionary_entry() const {
+ DCHECK(!IsElement());
DCHECK(has_property_);
- DCHECK(holder_map_->is_dictionary_map());
+ DCHECK(!holder_->HasFastProperties());
return number_;
}
@@ -317,15 +319,15 @@
return GetRootForNonJSReceiver(isolate, receiver, index);
}
- enum class ExoticIndexState { kUninitialized, kNotExotic, kExotic };
- inline bool IsIntegerIndexedExotic(JSReceiver* holder);
+ State NotFound(JSReceiver* const holder) const;
+
+ bool HolderIsInContextIndex(uint32_t index) const;
// If configuration_ becomes mutable, update
// HolderIsReceiverOrHiddenPrototype.
const Configuration configuration_;
State state_;
bool has_property_;
- ExoticIndexState exotic_index_state_;
InterceptorState interceptor_state_;
PropertyDetails property_details_;
Isolate* const isolate_;
@@ -334,7 +336,6 @@
Handle<Object> transition_;
const Handle<Object> receiver_;
Handle<JSReceiver> holder_;
- Handle<Map> holder_map_;
const Handle<JSReceiver> initial_holder_;
uint32_t number_;
};