| Index: src/property.h
|
| diff --git a/src/property.h b/src/property.h
|
| index bbba8aea60d89f432c3ca4eb52b86726e56baf07..229241948a8c4ee0dc253e199bdbd1710fdb8159 100644
|
| --- a/src/property.h
|
| +++ b/src/property.h
|
| @@ -65,7 +65,8 @@ class Descriptor BASE_EMBEDDED {
|
| #endif
|
|
|
| void SetEnumerationIndex(int index) {
|
| - details_ = PropertyDetails(details_.attributes(), details_.type(), index);
|
| + details_ = PropertyDetails(details_.attributes(), details_.type(),
|
| + details_.representation(), index);
|
| }
|
|
|
| void SetSortedKeyIndex(int index) { details_ = details_.set_pointer(index); }
|
| @@ -93,10 +94,11 @@ class Descriptor BASE_EMBEDDED {
|
| Object* value,
|
| PropertyAttributes attributes,
|
| PropertyType type,
|
| + Representation representation,
|
| int index)
|
| : key_(key),
|
| value_(value),
|
| - details_(attributes, type, index) { }
|
| + details_(attributes, type, representation, index) { }
|
|
|
| friend class DescriptorArray;
|
| };
|
| @@ -107,8 +109,10 @@ class FieldDescriptor: public Descriptor {
|
| FieldDescriptor(Name* key,
|
| int field_index,
|
| PropertyAttributes attributes,
|
| + Representation representation,
|
| int index = 0)
|
| - : Descriptor(key, Smi::FromInt(field_index), attributes, FIELD, index) {}
|
| + : Descriptor(key, Smi::FromInt(field_index), attributes,
|
| + FIELD, representation, index) {}
|
| };
|
|
|
|
|
| @@ -118,7 +122,8 @@ class ConstantFunctionDescriptor: public Descriptor {
|
| JSFunction* function,
|
| PropertyAttributes attributes,
|
| int index)
|
| - : Descriptor(key, function, attributes, CONSTANT_FUNCTION, index) {}
|
| + : Descriptor(key, function, attributes,
|
| + CONSTANT_FUNCTION, Representation::Tagged(), index) {}
|
| };
|
|
|
|
|
| @@ -128,7 +133,8 @@ class CallbacksDescriptor: public Descriptor {
|
| Object* foreign,
|
| PropertyAttributes attributes,
|
| int index = 0)
|
| - : Descriptor(key, foreign, attributes, CALLBACKS, index) {}
|
| + : Descriptor(key, foreign, attributes, CALLBACKS,
|
| + Representation::Tagged(), index) {}
|
| };
|
|
|
|
|
| @@ -190,7 +196,7 @@ class LookupResult BASE_EMBEDDED {
|
| lookup_type_(NOT_FOUND),
|
| holder_(NULL),
|
| cacheable_(true),
|
| - details_(NONE, NONEXISTENT) {
|
| + details_(NONE, NONEXISTENT, Representation::None()) {
|
| isolate->SetTopLookupResult(this);
|
| }
|
|
|
| @@ -208,9 +214,13 @@ class LookupResult BASE_EMBEDDED {
|
| number_ = number;
|
| }
|
|
|
| + bool CanHoldValue(Handle<Object> value) {
|
| + return value->FitsRepresentation(details_.representation());
|
| + }
|
| +
|
| void TransitionResult(JSObject* holder, int number) {
|
| lookup_type_ = TRANSITION_TYPE;
|
| - details_ = PropertyDetails(NONE, TRANSITION);
|
| + details_ = PropertyDetails(NONE, TRANSITION, Representation::None());
|
| holder_ = holder;
|
| number_ = number;
|
| }
|
| @@ -225,19 +235,19 @@ class LookupResult BASE_EMBEDDED {
|
| void HandlerResult(JSProxy* proxy) {
|
| lookup_type_ = HANDLER_TYPE;
|
| holder_ = proxy;
|
| - details_ = PropertyDetails(NONE, HANDLER);
|
| + details_ = PropertyDetails(NONE, HANDLER, Representation::None());
|
| cacheable_ = false;
|
| }
|
|
|
| void InterceptorResult(JSObject* holder) {
|
| lookup_type_ = INTERCEPTOR_TYPE;
|
| holder_ = holder;
|
| - details_ = PropertyDetails(NONE, INTERCEPTOR);
|
| + details_ = PropertyDetails(NONE, INTERCEPTOR, Representation::None());
|
| }
|
|
|
| void NotFound() {
|
| lookup_type_ = NOT_FOUND;
|
| - details_ = PropertyDetails(NONE, NONEXISTENT);
|
| + details_ = PropertyDetails(NONE, NONEXISTENT, Representation::None());
|
| holder_ = NULL;
|
| }
|
|
|
| @@ -256,6 +266,11 @@ class LookupResult BASE_EMBEDDED {
|
| return details_.type();
|
| }
|
|
|
| + Representation representation() {
|
| + ASSERT(IsFound());
|
| + return details_.representation();
|
| + }
|
| +
|
| PropertyAttributes GetAttributes() {
|
| ASSERT(!IsTransition());
|
| ASSERT(IsFound());
|
|
|