Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index c54df59d97ececfd3e8ef05a6388624004350395..a89ea0f5693e7ddc4193d45257e0b6d171d1845c 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -31,6 +31,7 @@ |
#include "allocation.h" |
#include "builtins.h" |
#include "list.h" |
+#include "property-details.h" |
#include "smart-array-pointer.h" |
#include "unicode-inl.h" |
#if V8_TARGET_ARCH_ARM |
@@ -124,18 +125,6 @@ |
// HeapObject: [32 bit direct pointer] (4 byte aligned) | 01 |
// Failure: [30 bit signed int] 11 |
-// Ecma-262 3rd 8.6.1 |
-enum PropertyAttributes { |
- NONE = v8::None, |
- READ_ONLY = v8::ReadOnly, |
- DONT_ENUM = v8::DontEnum, |
- DONT_DELETE = v8::DontDelete, |
- ABSENT = 16 // Used in runtime to indicate a property is absent. |
- // ABSENT can never be stored in or returned from a descriptor's attributes |
- // bitfield. It is only used as a return value meaning the attributes of |
- // a non-existent property. |
-}; |
- |
namespace v8 { |
namespace internal { |
@@ -178,70 +167,6 @@ static const int kElementsKindCount = |
void PrintElementsKind(FILE* out, ElementsKind kind); |
-// PropertyDetails captures type and attributes for a property. |
-// They are used both in property dictionaries and instance descriptors. |
-class PropertyDetails BASE_EMBEDDED { |
- public: |
- PropertyDetails(PropertyAttributes attributes, |
- PropertyType type, |
- int index = 0) { |
- ASSERT(TypeField::is_valid(type)); |
- ASSERT(AttributesField::is_valid(attributes)); |
- ASSERT(StorageField::is_valid(index)); |
- |
- value_ = TypeField::encode(type) |
- | AttributesField::encode(attributes) |
- | StorageField::encode(index); |
- |
- ASSERT(type == this->type()); |
- ASSERT(attributes == this->attributes()); |
- ASSERT(index == this->index()); |
- } |
- |
- // Conversion for storing details as Object*. |
- explicit inline PropertyDetails(Smi* smi); |
- inline Smi* AsSmi(); |
- |
- PropertyType type() { return TypeField::decode(value_); } |
- |
- bool IsTransition() { |
- PropertyType t = type(); |
- ASSERT(t != INTERCEPTOR); |
- return IsTransitionType(t); |
- } |
- |
- bool IsProperty() { |
- return type() < FIRST_PHANTOM_PROPERTY_TYPE; |
- } |
- |
- PropertyAttributes attributes() { return AttributesField::decode(value_); } |
- |
- int index() { return StorageField::decode(value_); } |
- |
- inline PropertyDetails AsDeleted(); |
- |
- static bool IsValidIndex(int index) { |
- return StorageField::is_valid(index); |
- } |
- |
- bool IsReadOnly() { return (attributes() & READ_ONLY) != 0; } |
- bool IsDontDelete() { return (attributes() & DONT_DELETE) != 0; } |
- bool IsDontEnum() { return (attributes() & DONT_ENUM) != 0; } |
- bool IsDeleted() { return DeletedField::decode(value_) != 0;} |
- |
- // Bit fields in value_ (type, shift, size). Must be public so the |
- // constants can be embedded in generated code. |
- class TypeField: public BitField<PropertyType, 0, 4> {}; |
- class AttributesField: public BitField<PropertyAttributes, 4, 3> {}; |
- class DeletedField: public BitField<uint32_t, 7, 1> {}; |
- class StorageField: public BitField<uint32_t, 8, 32-8> {}; |
- |
- static const int kInitialIndex = 1; |
- |
- private: |
- uint32_t value_; |
-}; |
- |
// Setter that skips the write barrier if mode is SKIP_WRITE_BARRIER. |
enum WriteBarrierMode { SKIP_WRITE_BARRIER, UPDATE_WRITE_BARRIER }; |