Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 715041c883033073a9dc2a167c535c1bf372d0d6..667090f93b7906babe5c7e3d294a0c1f4dd6bc23 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -7075,11 +7075,7 @@ class SharedFunctionInfo: public HeapObject { |
DECL_ACCESSORS(optimized_code_map, FixedArray) |
// Returns entry from optimized code map for specified context and OSR entry. |
- // Note that {code == nullptr, literals == nullptr} indicates no matching |
- // entry has been found, whereas {code, literals == nullptr} indicates that |
- // code is context-independent. |
- CodeAndVector SearchOptimizedCodeMap(Context* native_context, |
- BailoutId osr_ast_id); |
+ Code* SearchOptimizedCodeMap(Context* native_context, BailoutId osr_ast_id); |
// Clear optimized code map. |
void ClearOptimizedCodeMap(); |
@@ -7101,12 +7097,9 @@ class SharedFunctionInfo: public HeapObject { |
Handle<SharedFunctionInfo> shared, Handle<Context> native_context); |
// Add or update entry in the optimized code map for context-dependent code. |
- // If {code} is not given, then an existing entry's code won't be overwritten. |
static void AddToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, |
Handle<Context> native_context, |
- MaybeHandle<Code> code, |
- Handle<TypeFeedbackVector> vector, |
- BailoutId osr_ast_id); |
+ Handle<Code> code, BailoutId osr_ast_id); |
// Set up the link between shared function info and the script. The shared |
// function info is added to the list on the script. |
@@ -7117,8 +7110,7 @@ class SharedFunctionInfo: public HeapObject { |
static const int kEntriesStart = 0; |
static const int kContextOffset = 0; |
static const int kCachedCodeOffset = 1; |
- static const int kFeedbackVectorOffset = 2; |
- static const int kEntryLength = 3; |
+ static const int kEntryLength = 2; |
static const int kInitialLength = kEntriesStart + kEntryLength; |
static const int kNotFound = -1; |
@@ -7130,9 +7122,6 @@ class SharedFunctionInfo: public HeapObject { |
static const int kOffsetToPreviousCachedCode = |
FixedArray::kHeaderSize + |
kPointerSize * (kCachedCodeOffset - kEntryLength); |
- static const int kOffsetToPreviousLiterals = |
- FixedArray::kHeaderSize + |
- kPointerSize * (kFeedbackVectorOffset - kEntryLength); |
// [scope_info]: Scope info. |
DECL_ACCESSORS(scope_info, ScopeInfo) |
@@ -8092,9 +8081,12 @@ class JSFunction: public JSObject { |
// Completes inobject slack tracking on initial map if it is active. |
inline void CompleteInobjectSlackTrackingIfActive(); |
- // [feedback_vector]: Fixed array holding the feedback vector. |
- DECL_ACCESSORS(feedback_vector, TypeFeedbackVector) |
+ // [feedback_vector_cell]: Fixed array holding the feedback vector. |
+ DECL_ACCESSORS(feedback_vector_cell, Cell) |
+ // feedback_vector() can be used once the function is compiled. |
+ inline TypeFeedbackVector* feedback_vector() const; |
+ inline bool has_feedback_vector() const; |
static void EnsureLiterals(Handle<JSFunction> function); |
// Unconditionally clear the type feedback vector (including vector ICs). |
@@ -8740,9 +8732,25 @@ class CompilationCacheShape : public BaseShape<HashTableKey*> { |
static inline Handle<Object> AsHandle(Isolate* isolate, HashTableKey* key); |
static const int kPrefixSize = 0; |
- static const int kEntrySize = 2; |
+ static const int kEntrySize = 3; |
}; |
+class InfoVectorPair { |
+ public: |
+ InfoVectorPair() : info_(nullptr), vector_cell_(nullptr) {} |
+ InfoVectorPair(SharedFunctionInfo* info, Cell* vector_cell) |
+ : info_(info), vector_cell_(vector_cell) {} |
+ |
+ SharedFunctionInfo* info() const { return info_; } |
Michael Starzinger
2017/02/02 13:42:08
nit: s/info/shared/
mvstanton
2017/02/03 12:16:37
Done.
|
+ Cell* vector() const { return vector_cell_; } |
+ |
+ bool has_info() const { return info_ != nullptr; } |
Michael Starzinger
2017/02/02 13:42:08
nit: s/info/shared/
mvstanton
2017/02/03 12:16:37
Done.
|
+ bool has_vector() const { return vector_cell_ != nullptr; } |
+ |
+ private: |
+ SharedFunctionInfo* info_; |
Michael Starzinger
2017/02/02 13:42:07
nit: s/info/shared/
mvstanton
2017/02/03 12:16:37
Done.
|
+ Cell* vector_cell_; |
+}; |
// This cache is used in two different variants. For regexp caching, it simply |
// maps identifying info of the regexp to the cached regexp object. Scripts and |
@@ -8762,17 +8770,25 @@ class CompilationCacheTable: public HashTable<CompilationCacheTable, |
// Find cached value for a string key, otherwise return null. |
Handle<Object> Lookup( |
Handle<String> src, Handle<Context> context, LanguageMode language_mode); |
- Handle<Object> LookupEval( |
- Handle<String> src, Handle<SharedFunctionInfo> shared, |
- LanguageMode language_mode, int scope_position); |
+ InfoVectorPair LookupScript(Handle<String> src, Handle<Context> context, |
+ LanguageMode language_mode); |
+ InfoVectorPair LookupEval(Handle<String> src, |
+ Handle<SharedFunctionInfo> shared, |
+ Handle<Context> native_context, |
+ LanguageMode language_mode, int scope_position); |
Handle<Object> LookupRegExp(Handle<String> source, JSRegExp::Flags flags); |
static Handle<CompilationCacheTable> Put( |
Handle<CompilationCacheTable> cache, Handle<String> src, |
Handle<Context> context, LanguageMode language_mode, |
Handle<Object> value); |
+ static Handle<CompilationCacheTable> PutScript( |
+ Handle<CompilationCacheTable> cache, Handle<String> src, |
+ Handle<Context> context, LanguageMode language_mode, |
+ Handle<SharedFunctionInfo> value, Handle<Cell> literals); |
static Handle<CompilationCacheTable> PutEval( |
Handle<CompilationCacheTable> cache, Handle<String> src, |
- Handle<SharedFunctionInfo> context, Handle<SharedFunctionInfo> value, |
+ Handle<SharedFunctionInfo> outer_info, Handle<SharedFunctionInfo> value, |
+ Handle<Context> native_context, Handle<Cell> literals, |
int scope_position); |
static Handle<CompilationCacheTable> PutRegExp( |
Handle<CompilationCacheTable> cache, Handle<String> src, |