Index: src/property.h |
diff --git a/src/property.h b/src/property.h |
index bbba8aea60d89f432c3ca4eb52b86726e56baf07..1e68c5f4102738c02588235887cde50199b561b3 100644 |
--- a/src/property.h |
+++ b/src/property.h |
@@ -65,11 +65,17 @@ class Descriptor BASE_EMBEDDED { |
#endif |
void SetEnumerationIndex(int index) { |
+ StorageType storage = details_.storage_type(); |
details_ = PropertyDetails(details_.attributes(), details_.type(), index); |
+ details_ = details_.set_storage_type(storage); |
} |
void SetSortedKeyIndex(int index) { details_ = details_.set_pointer(index); } |
+ void SetStorageType(StorageType storage) { |
+ details_ = details_.set_storage_type(storage); |
+ } |
+ |
private: |
Name* key_; |
Object* value_; |
@@ -208,6 +214,10 @@ class LookupResult BASE_EMBEDDED { |
number_ = number; |
} |
+ bool CanStore(Handle<Object> value) { |
+ return value->FitsStorage(details_.storage_type()); |
+ } |
+ |
void TransitionResult(JSObject* holder, int number) { |
lookup_type_ = TRANSITION_TYPE; |
details_ = PropertyDetails(NONE, TRANSITION); |
@@ -256,6 +266,11 @@ class LookupResult BASE_EMBEDDED { |
return details_.type(); |
} |
+ StorageType storage_type() { |
+ ASSERT(IsFound()); |
+ return details_.storage_type(); |
+ } |
+ |
PropertyAttributes GetAttributes() { |
ASSERT(!IsTransition()); |
ASSERT(IsFound()); |