| Index: src/property.h
|
| diff --git a/src/property.h b/src/property.h
|
| index 0f78ba478ec8512e8d94fd57a502a42a470c582a..da772dc86c3cca30c2bbf9355b95a059c55e33fd 100644
|
| --- a/src/property.h
|
| +++ b/src/property.h
|
| @@ -184,6 +184,7 @@ class LookupResult BASE_EMBEDDED {
|
| next_(isolate->top_lookup_result()),
|
| lookup_type_(NOT_FOUND),
|
| holder_(NULL),
|
| + transition_(NULL),
|
| cacheable_(true),
|
| details_(NONE, NONEXISTENT, Representation::None()) {
|
| isolate->SetTopLookupResult(this);
|
| @@ -201,6 +202,7 @@ class LookupResult BASE_EMBEDDED {
|
| holder_ = holder;
|
| details_ = details;
|
| number_ = number;
|
| + transition_ = NULL;
|
| }
|
|
|
| bool CanHoldValue(Handle<Object> value) {
|
| @@ -209,16 +211,18 @@ class LookupResult BASE_EMBEDDED {
|
| return value->FitsRepresentation(details_.representation());
|
| }
|
|
|
| - void TransitionResult(JSObject* holder, int number) {
|
| + void TransitionResult(JSObject* holder, Map* target) {
|
| lookup_type_ = TRANSITION_TYPE;
|
| details_ = PropertyDetails(NONE, TRANSITION, Representation::None());
|
| holder_ = holder;
|
| - number_ = number;
|
| + transition_ = target;
|
| + number_ = 0xAAAA;
|
| }
|
|
|
| void DictionaryResult(JSObject* holder, int entry) {
|
| lookup_type_ = DICTIONARY_TYPE;
|
| holder_ = holder;
|
| + transition_ = NULL;
|
| details_ = holder->property_dictionary()->DetailsAt(entry);
|
| number_ = entry;
|
| }
|
| @@ -226,6 +230,7 @@ class LookupResult BASE_EMBEDDED {
|
| void HandlerResult(JSProxy* proxy) {
|
| lookup_type_ = HANDLER_TYPE;
|
| holder_ = proxy;
|
| + transition_ = NULL;
|
| details_ = PropertyDetails(NONE, HANDLER, Representation::Tagged());
|
| cacheable_ = false;
|
| }
|
| @@ -233,6 +238,7 @@ class LookupResult BASE_EMBEDDED {
|
| void InterceptorResult(JSObject* holder) {
|
| lookup_type_ = INTERCEPTOR_TYPE;
|
| holder_ = holder;
|
| + transition_ = NULL;
|
| details_ = PropertyDetails(NONE, INTERCEPTOR, Representation::Tagged());
|
| }
|
|
|
| @@ -248,7 +254,7 @@ class LookupResult BASE_EMBEDDED {
|
| }
|
|
|
| JSProxy* proxy() {
|
| - ASSERT(IsFound());
|
| + ASSERT(IsHandler());
|
| return JSProxy::cast(holder_);
|
| }
|
|
|
| @@ -373,42 +379,20 @@ class LookupResult BASE_EMBEDDED {
|
| return NULL;
|
| }
|
|
|
| - Map* GetTransitionTarget(Map* map) {
|
| - ASSERT(IsTransition());
|
| - TransitionArray* transitions = map->transitions();
|
| - return transitions->GetTarget(number_);
|
| - }
|
| -
|
| Map* GetTransitionTarget() {
|
| - return GetTransitionTarget(holder()->map());
|
| - }
|
| -
|
| - PropertyDetails GetTransitionDetails(Map* map) {
|
| - ASSERT(IsTransition());
|
| - TransitionArray* transitions = map->transitions();
|
| - return transitions->GetTargetDetails(number_);
|
| + return transition_;
|
| }
|
|
|
| PropertyDetails GetTransitionDetails() {
|
| - return GetTransitionDetails(holder()->map());
|
| - }
|
| -
|
| - bool IsTransitionToField(Map* map) {
|
| - return IsTransition() && GetTransitionDetails(map).type() == FIELD;
|
| + return transition_->GetLastDescriptorDetails();
|
| }
|
|
|
| - bool IsTransitionToConstant(Map* map) {
|
| - return IsTransition() && GetTransitionDetails(map).type() == CONSTANT;
|
| + bool IsTransitionToField() {
|
| + return IsTransition() && GetTransitionDetails().type() == FIELD;
|
| }
|
|
|
| - Map* GetTransitionMap() {
|
| - ASSERT(IsTransition());
|
| - return Map::cast(GetValue());
|
| - }
|
| -
|
| - Map* GetTransitionMapFromMap(Map* map) {
|
| - ASSERT(IsTransition());
|
| - return map->transitions()->GetTarget(number_);
|
| + bool IsTransitionToConstant() {
|
| + return IsTransition() && GetTransitionDetails().type() == CONSTANT;
|
| }
|
|
|
| int GetTransitionIndex() {
|
| @@ -501,6 +485,7 @@ class LookupResult BASE_EMBEDDED {
|
| } lookup_type_;
|
|
|
| JSReceiver* holder_;
|
| + Map* transition_;
|
| int number_;
|
| bool cacheable_;
|
| PropertyDetails details_;
|
|
|