Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 38f6bb30cb233e2c12e7d4eee1b88ba7f2c97aa2..bcaac77e40cad799b19bd9e82f88ac36c97c2a62 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -850,6 +850,7 @@ class SafepointEntry; |
class SharedFunctionInfo; |
class StringStream; |
class TypeFeedbackInfo; |
+class TypeFeedbackMetadata; |
class TypeFeedbackVector; |
class WeakCell; |
class TransitionArray; |
@@ -4715,8 +4716,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); |
@@ -4726,6 +4727,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, |
@@ -6564,6 +6566,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. |
@@ -6577,6 +6582,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); |
@@ -6611,6 +6619,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) |
@@ -6639,16 +6654,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 |
@@ -6942,15 +6951,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 |
@@ -7371,6 +7379,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); |
@@ -7391,6 +7400,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(); |
@@ -7405,6 +7420,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, |