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, |