Chromium Code Reviews| Index: src/property.h |
| diff --git a/src/property.h b/src/property.h |
| index 76dbae4df880ab252fa44f6492f86141182b6df6..94504157c07963000a3ff5d694de1ec6c8897877 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->set_top_lookup_result(this); |
| @@ -199,6 +200,7 @@ class LookupResult BASE_EMBEDDED { |
| void DescriptorResult(JSObject* holder, PropertyDetails details, int number) { |
| lookup_type_ = DESCRIPTOR_TYPE; |
| holder_ = holder; |
| + transition_ = NULL; |
| details_ = details; |
| number_ = number; |
| } |
| @@ -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_ = 0x89ABCDEF; |
|
Jakob Kummerow
2014/02/18 12:09:53
nit: please pick a number that fits into an int. T
|
| } |
| 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()); |
| } |
| @@ -240,6 +246,7 @@ class LookupResult BASE_EMBEDDED { |
| lookup_type_ = NOT_FOUND; |
| details_ = PropertyDetails(NONE, NONEXISTENT, Representation::None()); |
| holder_ = NULL; |
| + transition_ = NULL; |
| } |
| JSObject* holder() { |
| @@ -248,7 +255,7 @@ class LookupResult BASE_EMBEDDED { |
| } |
| JSProxy* proxy() { |
| - ASSERT(IsFound()); |
| + ASSERT(IsHandler()); |
| return JSProxy::cast(holder_); |
| } |
| @@ -373,47 +380,21 @@ 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; |
| - } |
| - |
| - bool IsTransitionToConstant(Map* map) { |
| - return IsTransition() && GetTransitionDetails(map).type() == CONSTANT; |
| - } |
| - |
| - Map* GetTransitionMap() { |
| ASSERT(IsTransition()); |
| - return Map::cast(GetValue()); |
| + return transition_->GetLastDescriptorDetails(); |
| } |
| - Map* GetTransitionMapFromMap(Map* map) { |
| - ASSERT(IsTransition()); |
| - return map->transitions()->GetTarget(number_); |
| + bool IsTransitionToField() { |
| + return IsTransition() && GetTransitionDetails().type() == FIELD; |
| } |
| - int GetTransitionIndex() { |
| - ASSERT(IsTransition()); |
| - return number_; |
| + bool IsTransitionToConstant() { |
| + return IsTransition() && GetTransitionDetails().type() == CONSTANT; |
| } |
| int GetDescriptorIndex() { |
| @@ -501,6 +482,7 @@ class LookupResult BASE_EMBEDDED { |
| } lookup_type_; |
| JSReceiver* holder_; |
| + Map* transition_; |
| int number_; |
| bool cacheable_; |
| PropertyDetails details_; |