Chromium Code Reviews| Index: src/objects.h |
| diff --git a/src/objects.h b/src/objects.h |
| index 2f92d70b3fb649d973597b927bb012f684f8bad4..695c6f5db26665c662234a930cef106f3cbffe3a 100644 |
| --- a/src/objects.h |
| +++ b/src/objects.h |
| @@ -793,6 +793,7 @@ class MaybeObject BASE_EMBEDDED { |
| V(DescriptorArray) \ |
| V(DeoptimizationInputData) \ |
| V(DeoptimizationOutputData) \ |
| + V(CacheCells) \ |
| V(FixedArray) \ |
| V(FixedDoubleArray) \ |
| V(Context) \ |
| @@ -3940,8 +3941,44 @@ class DeoptimizationOutputData: public FixedArray { |
| }; |
| -class SafepointEntry; |
| +// Forward declaration. |
| +class JSGlobalPropertyCell; |
| + |
| +// CacheCells is a fixed array used to hold the association between |
| +// cache cells and AST ids for code generated by the full compiler. |
| +// The format of the these objects is |
| +// [i * 2]: Global property cell of ith cache cell. |
| +// [i * 2 + 1]: Ast ID for ith cache cell. |
| +class CacheCells: public FixedArray { |
|
Michael Starzinger
2012/01/27 13:03:51
As discussed offline, this was renamed to "TypeFee
|
| + public: |
| + int CellCount() { return length() / 2; } |
| + static int LengthOfFixedArray(int cell_count) { return cell_count * 2; } |
| + |
| + // Accessors for AST ids associated with cache values. |
| + inline Smi* AstId(int index); |
| + inline void SetAstId(int index, Smi* id); |
| + |
| + // Accessors for global property cells holding the cache values. |
| + inline JSGlobalPropertyCell* Cell(int index); |
| + inline void SetCell(int index, JSGlobalPropertyCell* cell); |
| + |
| + // The object that indicates an uninitialized cache. |
| + static inline Handle<Object> UninitializedSentinel(Isolate* isolate); |
| + |
| + // The object that indicates a megamorphic state. |
| + static inline Handle<Object> MegamorphicSentinel(Isolate* isolate); |
| + // A raw version of the uninitialized sentinel that's safe to read during |
| + // garbage collection (e.g., for patching the cache). |
| + static inline Object* RawUninitializedSentinel(Heap* heap); |
| + |
| + // Casting. |
| + static inline CacheCells* cast(Object* obj); |
| +}; |
| + |
| + |
| +// Forward declaration. |
| +class SafepointEntry; |
| // Code describes objects with on-the-fly generated machine code. |
| class Code: public HeapObject { |
| @@ -4013,6 +4050,9 @@ class Code: public HeapObject { |
| // [deoptimization_data]: Array containing data for deopt. |
| DECL_ACCESSORS(deoptimization_data, FixedArray) |
| + // [cache_cells]: Array containing cache cells used for type feedback. |
| + DECL_ACCESSORS(cache_cells, CacheCells) |
| + |
| // [code_flushing_candidate]: Field only used during garbage |
| // collection to hold code flushing candidates. The contents of this |
| // field does not have to be traced during garbage collection since |
| @@ -4122,11 +4162,6 @@ class Code: public HeapObject { |
| inline byte to_boolean_state(); |
| inline void set_to_boolean_state(byte value); |
| - // For kind STUB, major_key == CallFunction, tells whether there is |
| - // a function cache in the instruction stream. |
| - inline bool has_function_cache(); |
| - inline void set_has_function_cache(bool flag); |
| - |
| // Get the safepoint entry for the given pc. |
| SafepointEntry GetSafepointEntry(Address pc); |
| @@ -4241,8 +4276,9 @@ class Code: public HeapObject { |
| static const int kHandlerTableOffset = kRelocationInfoOffset + kPointerSize; |
| static const int kDeoptimizationDataOffset = |
| kHandlerTableOffset + kPointerSize; |
| + static const int kCacheCellsOffset = kDeoptimizationDataOffset + kPointerSize; |
| static const int kNextCodeFlushingCandidateOffset = |
| - kDeoptimizationDataOffset + kPointerSize; |
| + kCacheCellsOffset + kPointerSize; |
| static const int kFlagsOffset = |
| kNextCodeFlushingCandidateOffset + kPointerSize; |
| @@ -4267,7 +4303,6 @@ class Code: public HeapObject { |
| static const int kBinaryOpTypeOffset = kStubMajorKeyOffset + 1; |
| static const int kCompareStateOffset = kStubMajorKeyOffset + 1; |
| static const int kToBooleanTypeOffset = kStubMajorKeyOffset + 1; |
| - static const int kHasFunctionCacheOffset = kStubMajorKeyOffset + 1; |
| static const int kFullCodeFlags = kOptimizableOffset + 1; |
| class FullCodeFlagsHasDeoptimizationSupportField: |
| @@ -5658,7 +5693,6 @@ class JSGlobalProxy : public JSObject { |
| // Forward declaration. |
| class JSBuiltinsObject; |
| -class JSGlobalPropertyCell; |
| // Common super class for JavaScript global objects and the special |
| // builtins global objects. |