Chromium Code Reviews| Index: src/objects.h |
| diff --git a/src/objects.h b/src/objects.h |
| index fc89b578b3f87596770a6bf97381049a29f709d3..921e967d5b92d0820df751e85813417fa45db612 100644 |
| --- a/src/objects.h |
| +++ b/src/objects.h |
| @@ -649,6 +649,13 @@ class MaybeObject BASE_EMBEDDED { |
| return reinterpret_cast<Object*>(this); |
| } |
| + template<typename T> |
| + inline bool To(T** obj) { |
| + if (IsFailure()) return false; |
| + *obj = T::cast(reinterpret_cast<Object*>(this)); |
| + return true; |
| + } |
| + |
| #ifdef OBJECT_PRINT |
| // Prints this object with details. |
| inline void Print() { |
| @@ -3744,6 +3751,16 @@ class Map: public HeapObject { |
| // [stub cache]: contains stubs compiled for this map. |
| DECL_ACCESSORS(code_cache, Object) |
| + // [prototype transitions]: cache of prototype transitions. |
| + // Prototypre transition is a transition that happens |
|
Mads Ager (chromium)
2011/04/26 09:14:23
Prototypre -> Prototype
|
| + // when we change object's prototype to a new one. |
| + // Cache format: |
| + // 0: finger - index of the first free cell in the cache |
| + // 1 + 2 * i: prototype |
| + // 2 + 2 * i: target map |
| + DECL_ACCESSORS(prototype_transitions, FixedArray) |
| + inline FixedArray* unchecked_prototype_transitions(); |
| + |
| // Lookup in the map's instance descriptors and fill out the result |
| // with the given holder if the name is found. The holder may be |
| // NULL when this function is used from the compiler. |
| @@ -3843,6 +3860,10 @@ class Map: public HeapObject { |
| void TraverseTransitionTree(TraverseCallback callback, void* data); |
| + Object* GetPrototypeTransition(Object* prototype); |
| + |
| + MaybeObject* PutPrototypeTransition(Object* prototype, Map* map); |
| + |
| static const int kMaxPreAllocatedPropertyFields = 255; |
| // Layout description. |
| @@ -3853,14 +3874,15 @@ class Map: public HeapObject { |
| static const int kInstanceDescriptorsOffset = |
| kConstructorOffset + kPointerSize; |
| static const int kCodeCacheOffset = kInstanceDescriptorsOffset + kPointerSize; |
| - static const int kPadStart = kCodeCacheOffset + kPointerSize; |
| + static const int kPrototypeTransitionsOffset = kCodeCacheOffset + kPointerSize; |
|
Mads Ager (chromium)
2011/04/26 09:14:23
Line length.
|
| + static const int kPadStart = kPrototypeTransitionsOffset + kPointerSize; |
| static const int kSize = MAP_POINTER_ALIGN(kPadStart); |
| // Layout of pointer fields. Heap iteration code relies on them |
| // being continiously allocated. |
| static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; |
| static const int kPointerFieldsEndOffset = |
| - Map::kCodeCacheOffset + kPointerSize; |
| + Map::kPrototypeTransitionsOffset + kPointerSize; |
| // Byte offsets within kInstanceSizesOffset. |
| static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; |