OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 5973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5984 LayoutDescriptor* layout_descriptor); | 5984 LayoutDescriptor* layout_descriptor); |
5985 inline void InitializeDescriptors(DescriptorArray* descriptors, | 5985 inline void InitializeDescriptors(DescriptorArray* descriptors, |
5986 LayoutDescriptor* layout_descriptor); | 5986 LayoutDescriptor* layout_descriptor); |
5987 | 5987 |
5988 // [stub cache]: contains stubs compiled for this map. | 5988 // [stub cache]: contains stubs compiled for this map. |
5989 DECL_ACCESSORS(code_cache, Object) | 5989 DECL_ACCESSORS(code_cache, Object) |
5990 | 5990 |
5991 // [dependent code]: list of optimized codes that weakly embed this map. | 5991 // [dependent code]: list of optimized codes that weakly embed this map. |
5992 DECL_ACCESSORS(dependent_code, DependentCode) | 5992 DECL_ACCESSORS(dependent_code, DependentCode) |
5993 | 5993 |
| 5994 // [weak cell cache]: cache that stores a weak cell pointing to this map. |
| 5995 DECL_ACCESSORS(weak_cell_cache, Object) |
| 5996 |
5994 // [prototype transitions]: cache of prototype transitions. | 5997 // [prototype transitions]: cache of prototype transitions. |
5995 // Prototype transition is a transition that happens | 5998 // Prototype transition is a transition that happens |
5996 // when we change object's prototype to a new one. | 5999 // when we change object's prototype to a new one. |
5997 // Cache format: | 6000 // Cache format: |
5998 // 0: finger - index of the first free cell in the cache | 6001 // 0: finger - index of the first free cell in the cache |
5999 // 1 + i: target map | 6002 // 1 + i: target map |
6000 inline FixedArray* GetPrototypeTransitions(); | 6003 inline FixedArray* GetPrototypeTransitions(); |
6001 inline bool HasPrototypeTransitions(); | 6004 inline bool HasPrototypeTransitions(); |
6002 | 6005 |
6003 static const int kProtoTransitionNumberOfEntriesOffset = 0; | 6006 static const int kProtoTransitionNumberOfEntriesOffset = 0; |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6289 kConstructorOrBackPointerOffset + kPointerSize; | 6292 kConstructorOrBackPointerOffset + kPointerSize; |
6290 static const int kDescriptorsOffset = kTransitionsOffset + kPointerSize; | 6293 static const int kDescriptorsOffset = kTransitionsOffset + kPointerSize; |
6291 #if V8_DOUBLE_FIELDS_UNBOXING | 6294 #if V8_DOUBLE_FIELDS_UNBOXING |
6292 static const int kLayoutDecriptorOffset = kDescriptorsOffset + kPointerSize; | 6295 static const int kLayoutDecriptorOffset = kDescriptorsOffset + kPointerSize; |
6293 static const int kCodeCacheOffset = kLayoutDecriptorOffset + kPointerSize; | 6296 static const int kCodeCacheOffset = kLayoutDecriptorOffset + kPointerSize; |
6294 #else | 6297 #else |
6295 static const int kLayoutDecriptorOffset = 1; // Must not be ever accessed. | 6298 static const int kLayoutDecriptorOffset = 1; // Must not be ever accessed. |
6296 static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize; | 6299 static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize; |
6297 #endif | 6300 #endif |
6298 static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize; | 6301 static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize; |
6299 static const int kSize = kDependentCodeOffset + kPointerSize; | 6302 static const int kWeakCellCacheOffset = kDependentCodeOffset + kPointerSize; |
| 6303 static const int kSize = kWeakCellCacheOffset + kPointerSize; |
6300 | 6304 |
6301 // Layout of pointer fields. Heap iteration code relies on them | 6305 // Layout of pointer fields. Heap iteration code relies on them |
6302 // being continuously allocated. | 6306 // being continuously allocated. |
6303 static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; | 6307 static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; |
6304 static const int kPointerFieldsEndOffset = kSize; | 6308 static const int kPointerFieldsEndOffset = kSize; |
6305 | 6309 |
6306 // Byte offsets within kInstanceSizesOffset. | 6310 // Byte offsets within kInstanceSizesOffset. |
6307 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; | 6311 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; |
6308 static const int kInObjectPropertiesByte = 1; | 6312 static const int kInObjectPropertiesByte = 1; |
6309 static const int kInObjectPropertiesOffset = | 6313 static const int kInObjectPropertiesOffset = |
(...skipping 1791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8101 | 8105 |
8102 private: | 8106 private: |
8103 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheTable); | 8107 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheTable); |
8104 }; | 8108 }; |
8105 | 8109 |
8106 | 8110 |
8107 class CodeCache: public Struct { | 8111 class CodeCache: public Struct { |
8108 public: | 8112 public: |
8109 DECL_ACCESSORS(default_cache, FixedArray) | 8113 DECL_ACCESSORS(default_cache, FixedArray) |
8110 DECL_ACCESSORS(normal_type_cache, Object) | 8114 DECL_ACCESSORS(normal_type_cache, Object) |
8111 DECL_ACCESSORS(weak_cell_cache, Object) | |
8112 | 8115 |
8113 // Add the code object to the cache. | 8116 // Add the code object to the cache. |
8114 static void Update( | 8117 static void Update( |
8115 Handle<CodeCache> cache, Handle<Name> name, Handle<Code> code); | 8118 Handle<CodeCache> cache, Handle<Name> name, Handle<Code> code); |
8116 | 8119 |
8117 // Lookup code object in the cache. Returns code object if found and undefined | 8120 // Lookup code object in the cache. Returns code object if found and undefined |
8118 // if not. | 8121 // if not. |
8119 Object* Lookup(Name* name, Code::Flags flags); | 8122 Object* Lookup(Name* name, Code::Flags flags); |
8120 | 8123 |
8121 // Get the internal index of a code object in the cache. Returns -1 if the | 8124 // Get the internal index of a code object in the cache. Returns -1 if the |
8122 // code object is not in that cache. This index can be used to later call | 8125 // code object is not in that cache. This index can be used to later call |
8123 // RemoveByIndex. The cache cannot be modified between a call to GetIndex and | 8126 // RemoveByIndex. The cache cannot be modified between a call to GetIndex and |
8124 // RemoveByIndex. | 8127 // RemoveByIndex. |
8125 int GetIndex(Object* name, Code* code); | 8128 int GetIndex(Object* name, Code* code); |
8126 | 8129 |
8127 // Remove an object from the cache with the provided internal index. | 8130 // Remove an object from the cache with the provided internal index. |
8128 void RemoveByIndex(Object* name, Code* code, int index); | 8131 void RemoveByIndex(Object* name, Code* code, int index); |
8129 | 8132 |
8130 DECLARE_CAST(CodeCache) | 8133 DECLARE_CAST(CodeCache) |
8131 | 8134 |
8132 // Dispatched behavior. | 8135 // Dispatched behavior. |
8133 DECLARE_PRINTER(CodeCache) | 8136 DECLARE_PRINTER(CodeCache) |
8134 DECLARE_VERIFIER(CodeCache) | 8137 DECLARE_VERIFIER(CodeCache) |
8135 | 8138 |
8136 static const int kDefaultCacheOffset = HeapObject::kHeaderSize; | 8139 static const int kDefaultCacheOffset = HeapObject::kHeaderSize; |
8137 static const int kNormalTypeCacheOffset = | 8140 static const int kNormalTypeCacheOffset = |
8138 kDefaultCacheOffset + kPointerSize; | 8141 kDefaultCacheOffset + kPointerSize; |
8139 static const int kWeakCellCacheOffset = kNormalTypeCacheOffset + kPointerSize; | 8142 static const int kSize = kNormalTypeCacheOffset + kPointerSize; |
8140 static const int kSize = kWeakCellCacheOffset + kPointerSize; | |
8141 | 8143 |
8142 private: | 8144 private: |
8143 static void UpdateDefaultCache( | 8145 static void UpdateDefaultCache( |
8144 Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code); | 8146 Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code); |
8145 static void UpdateNormalTypeCache( | 8147 static void UpdateNormalTypeCache( |
8146 Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code); | 8148 Handle<CodeCache> code_cache, Handle<Name> name, Handle<Code> code); |
8147 Object* LookupDefaultCache(Name* name, Code::Flags flags); | 8149 Object* LookupDefaultCache(Name* name, Code::Flags flags); |
8148 Object* LookupNormalTypeCache(Name* name, Code::Flags flags); | 8150 Object* LookupNormalTypeCache(Name* name, Code::Flags flags); |
8149 | 8151 |
8150 // Code cache layout of the default cache. Elements are alternating name and | 8152 // Code cache layout of the default cache. Elements are alternating name and |
(...skipping 2827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10978 } else { | 10980 } else { |
10979 value &= ~(1 << bit_position); | 10981 value &= ~(1 << bit_position); |
10980 } | 10982 } |
10981 return value; | 10983 return value; |
10982 } | 10984 } |
10983 }; | 10985 }; |
10984 | 10986 |
10985 } } // namespace v8::internal | 10987 } } // namespace v8::internal |
10986 | 10988 |
10987 #endif // V8_OBJECTS_H_ | 10989 #endif // V8_OBJECTS_H_ |
OLD | NEW |