Chromium Code Reviews| Index: src/objects.h |
| diff --git a/src/objects.h b/src/objects.h |
| index a2cc6d5b305506d441cc99cc35f0aadb4a9f40d6..e9dd3b5698804581204ffec12d29e8c7c8534a39 100644 |
| --- a/src/objects.h |
| +++ b/src/objects.h |
| @@ -856,6 +856,7 @@ class SafepointEntry; |
| class SharedFunctionInfo; |
| class StringStream; |
| class TypeFeedbackInfo; |
| +class TypeFeedbackMetadata; |
| class TypeFeedbackVector; |
| class WeakCell; |
| class TransitionArray; |
| @@ -4720,8 +4721,8 @@ class LiteralsArray : public FixedArray { |
| public: |
| static const int kVectorIndex = 0; |
| static const int kFirstLiteralIndex = 1; |
| - static const int kOffsetToFirstLiteral = |
| - FixedArray::kHeaderSize + kPointerSize; |
| + static const int kFeedbackVectorOffset = FixedArray::kHeaderSize; |
|
Michael Starzinger
2016/05/10 13:47:20
nit: It is possible to use OffsetOfElementAt(kVect
mvstanton
2016/05/24 16:31:50
Done.
|
| + static const int kOffsetToFirstLiteral = kFeedbackVectorOffset + kPointerSize; |
|
Michael Starzinger
2016/05/10 13:47:20
nit: Likewise.
mvstanton
2016/05/24 16:31:50
Done.
|
| static int OffsetOfLiteralAt(int index) { |
| return SizeFor(index + kFirstLiteralIndex); |
| @@ -4731,6 +4732,7 @@ class LiteralsArray : public FixedArray { |
| inline void set_feedback_vector(TypeFeedbackVector* vector); |
| inline Object* literal(int literal_index) const; |
| inline void set_literal(int literal_index, Object* literal); |
| + inline void set_literal_undefined(int literal_index); |
| inline int literals_count() const; |
| static Handle<LiteralsArray> New(Isolate* isolate, |
| @@ -6582,6 +6584,9 @@ class SharedFunctionInfo: public HeapObject { |
| // Clear optimized code map. |
| void ClearOptimizedCodeMap(); |
| + // Like ClearOptimizedCodeMap, but preserves literals. |
| + void ClearCodeFromOptimizedCodeMap(); |
| + |
| // We have a special root FixedArray with the right shape and values |
| // to represent the cleared optimized code map. This predicate checks |
| // if that root is installed. |
| @@ -6595,6 +6600,9 @@ class SharedFunctionInfo: public HeapObject { |
| // Trims the optimized code map after entries have been removed. |
| void TrimOptimizedCodeMap(int shrink_by); |
| + static Handle<LiteralsArray> FindOrCreateLiterals( |
| + Handle<SharedFunctionInfo> shared, Handle<Context> native_context); |
| + |
| // Add or update entry in the optimized code map for context-independent code. |
| static void AddSharedCodeToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, |
| Handle<Code> code); |
| @@ -6664,16 +6672,10 @@ class SharedFunctionInfo: public HeapObject { |
| inline int expected_nof_properties() const; |
| inline void set_expected_nof_properties(int value); |
| - // [feedback_vector] - accumulates ast node feedback from full-codegen and |
| + // [feedback_metadata] - describes ast node feedback from full-codegen and |
| // (increasingly) from crankshafted code where sufficient feedback isn't |
| // available. |
| - DECL_ACCESSORS(feedback_vector, TypeFeedbackVector) |
| - |
| - // Unconditionally clear the type feedback vector (including vector ICs). |
| - void ClearTypeFeedbackInfo(); |
| - |
| - // Clear the type feedback vector with a more subtle policy at GC time. |
| - void ClearTypeFeedbackInfoAtGCTime(); |
| + DECL_ACCESSORS(feedback_metadata, TypeFeedbackMetadata) |
| #if TRACE_MAPS |
| // [unique_id] - For --trace-maps purposes, an identifier that's persistent |
| @@ -6985,15 +6987,15 @@ class SharedFunctionInfo: public HeapObject { |
| static const int kScriptOffset = kFunctionDataOffset + kPointerSize; |
| static const int kDebugInfoOffset = kScriptOffset + kPointerSize; |
| static const int kFunctionIdentifierOffset = kDebugInfoOffset + kPointerSize; |
| - static const int kFeedbackVectorOffset = |
| + static const int kFeedbackMetadataOffset = |
| kFunctionIdentifierOffset + kPointerSize; |
| #if TRACE_MAPS |
| - static const int kUniqueIdOffset = kFeedbackVectorOffset + kPointerSize; |
| + static const int kUniqueIdOffset = kFeedbackMetadataOffset + kPointerSize; |
| static const int kLastPointerFieldOffset = kUniqueIdOffset; |
| #else |
| // Just to not break the postmortrem support with conditional offsets |
| - static const int kUniqueIdOffset = kFeedbackVectorOffset; |
| - static const int kLastPointerFieldOffset = kFeedbackVectorOffset; |
| + static const int kUniqueIdOffset = kFeedbackMetadataOffset; |
| + static const int kLastPointerFieldOffset = kFeedbackMetadataOffset; |
| #endif |
| #if V8_HOST_ARCH_32_BIT |
| @@ -7404,6 +7406,7 @@ class JSFunction: public JSObject { |
| inline void set_code(Code* code); |
| inline void set_code_no_write_barrier(Code* code); |
| inline void ReplaceCode(Code* code); |
| + static void EnsureLiterals(Handle<JSFunction> function); |
|
Michael Starzinger
2016/05/10 13:47:20
nit: Please move this down to the "[literals]" sec
mvstanton
2016/05/24 16:31:50
Done.
|
| // Get the abstract code associated with the function, which will either be |
| // a Code object or a BytecodeArray. |
| @@ -7429,6 +7432,12 @@ class JSFunction: public JSObject { |
| // Tells whether or not the function is on the concurrent recompilation queue. |
| inline bool IsInOptimizationQueue(); |
| + // Unconditionally clear the type feedback vector (including vector ICs). |
| + void ClearTypeFeedbackInfo(); |
|
Michael Starzinger
2016/05/10 13:47:20
nit: Likewise, please move this down to after the
mvstanton
2016/05/24 16:31:50
Done.
|
| + |
| + // Clear the type feedback vector with a more subtle policy at GC time. |
| + void ClearTypeFeedbackInfoAtGCTime(); |
| + |
| // Completes inobject slack tracking on initial map if it is active. |
| inline void CompleteInobjectSlackTrackingIfActive(); |
| @@ -7443,6 +7452,8 @@ class JSFunction: public JSObject { |
| // access to. |
| DECL_ACCESSORS(literals, LiteralsArray) |
| + inline TypeFeedbackVector* feedback_vector(); |
| + |
| // The initial map for an object created by this constructor. |
| inline Map* initial_map(); |
| static void SetInitialMap(Handle<JSFunction> function, Handle<Map> map, |