Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 795b429a924628626d87d34d973b20126a18447e..af170f8db757471cce0e8f30af98fb148845fdac 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -848,6 +848,7 @@ class SafepointEntry; |
class SharedFunctionInfo; |
class StringStream; |
class TypeFeedbackInfo; |
+class TypeFeedbackMetadata; |
class TypeFeedbackVector; |
class WeakCell; |
class TransitionArray; |
@@ -4714,8 +4715,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; |
+ static const int kOffsetToFirstLiteral = kFeedbackVectorOffset + kPointerSize; |
static int OffsetOfLiteralAt(int index) { |
return SizeFor(index + kFirstLiteralIndex); |
@@ -4725,6 +4726,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, |
@@ -6546,6 +6548,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. |
@@ -6559,6 +6564,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 a new entry to the optimized code map for context-independent code. |
static void AddSharedCodeToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, |
Handle<Code> code); |
@@ -6593,6 +6601,13 @@ class SharedFunctionInfo: public HeapObject { |
static const int kNotFound = -1; |
+ // Helpers for assembly code that does a backwards walk of the optimized code |
+ // map. |
+ static inline int OffsetToPreviousContext(); |
+ static inline int OffsetToPreviousCachedCode(); |
+ static inline int OffsetToPreviousLiterals(); |
+ static inline int OffsetToPreviousOsrAstId(); |
+ |
// [scope_info]: Scope info. |
DECL_ACCESSORS(scope_info, ScopeInfo) |
@@ -6621,16 +6636,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 |
@@ -6924,15 +6933,14 @@ class SharedFunctionInfo: public HeapObject { |
static const int kScriptOffset = kFunctionDataOffset + kPointerSize; |
static const int kDebugInfoOffset = kScriptOffset + kPointerSize; |
static const int kInferredNameOffset = kDebugInfoOffset + kPointerSize; |
- static const int kFeedbackVectorOffset = |
- kInferredNameOffset + kPointerSize; |
+ static const int kFeedbackMetadataOffset = kInferredNameOffset + 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 |
@@ -7349,6 +7357,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); |
// Tells whether this function inlines the given shared function info. |
bool Inlines(SharedFunctionInfo* candidate); |
@@ -7369,6 +7378,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(); |
+ |
+ // 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(); |
@@ -7383,6 +7398,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, |