OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/assert-scope.h" | 10 #include "src/assert-scope.h" |
(...skipping 6643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6654 inline bool OptimizedCodeMapIsCleared() const; | 6654 inline bool OptimizedCodeMapIsCleared() const; |
6655 | 6655 |
6656 // Removes a specific optimized code object from the optimized code map. | 6656 // Removes a specific optimized code object from the optimized code map. |
6657 // In case of non-OSR the code reference is cleared from the cache entry but | 6657 // In case of non-OSR the code reference is cleared from the cache entry but |
6658 // the entry itself is left in the map in order to proceed sharing literals. | 6658 // the entry itself is left in the map in order to proceed sharing literals. |
6659 void EvictFromOptimizedCodeMap(Code* optimized_code, const char* reason); | 6659 void EvictFromOptimizedCodeMap(Code* optimized_code, const char* reason); |
6660 | 6660 |
6661 // Trims the optimized code map after entries have been removed. | 6661 // Trims the optimized code map after entries have been removed. |
6662 void TrimOptimizedCodeMap(int shrink_by); | 6662 void TrimOptimizedCodeMap(int shrink_by); |
6663 | 6663 |
6664 // Add a new entry to the optimized code map for context-independent code. | 6664 // Add or update entry in the optimized code map for context-independent code. |
6665 static void AddSharedCodeToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, | 6665 static void AddSharedCodeToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, |
6666 Handle<Code> code); | 6666 Handle<Code> code); |
6667 | 6667 |
6668 // Add a new entry to the optimized code map for context-dependent code. | 6668 // Add or update entry in the optimized code map for context-dependent code. |
6669 inline static void AddToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, | 6669 // If {code} is not given, then an existing entry's code won't be overwritten. |
6670 Handle<Context> native_context, | 6670 static void AddToOptimizedCodeMap(Handle<SharedFunctionInfo> shared, |
6671 Handle<Code> code, | 6671 Handle<Context> native_context, |
6672 Handle<LiteralsArray> literals, | 6672 MaybeHandle<Code> code, |
6673 BailoutId osr_ast_id); | 6673 Handle<LiteralsArray> literals, |
6674 | 6674 BailoutId osr_ast_id); |
6675 // We may already have cached the code, but want to store literals in the | |
6676 // cache. | |
6677 inline static void AddLiteralsToOptimizedCodeMap( | |
6678 Handle<SharedFunctionInfo> shared, Handle<Context> native_context, | |
6679 Handle<LiteralsArray> literals); | |
6680 | 6675 |
6681 // Set up the link between shared function info and the script. The shared | 6676 // Set up the link between shared function info and the script. The shared |
6682 // function info is added to the list on the script. | 6677 // function info is added to the list on the script. |
6683 static void SetScript(Handle<SharedFunctionInfo> shared, | 6678 static void SetScript(Handle<SharedFunctionInfo> shared, |
6684 Handle<Object> script_object); | 6679 Handle<Object> script_object); |
6685 | 6680 |
6686 // Layout description of the optimized code map. | 6681 // Layout description of the optimized code map. |
6687 static const int kSharedCodeIndex = 0; | 6682 static const int kSharedCodeIndex = 0; |
6688 static const int kEntriesStart = 1; | 6683 static const int kEntriesStart = 1; |
6689 static const int kContextOffset = 0; | 6684 static const int kContextOffset = 0; |
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7281 static const int kFunctionKindByteOffset = BYTE_OFFSET(kFunctionKind); | 7276 static const int kFunctionKindByteOffset = BYTE_OFFSET(kFunctionKind); |
7282 #undef BYTE_OFFSET | 7277 #undef BYTE_OFFSET |
7283 | 7278 |
7284 private: | 7279 private: |
7285 // Returns entry from optimized code map for specified context and OSR entry. | 7280 // Returns entry from optimized code map for specified context and OSR entry. |
7286 // The result is either kNotFound, kSharedCodeIndex for context-independent | 7281 // The result is either kNotFound, kSharedCodeIndex for context-independent |
7287 // entry or a start index of the context-dependent entry. | 7282 // entry or a start index of the context-dependent entry. |
7288 int SearchOptimizedCodeMapEntry(Context* native_context, | 7283 int SearchOptimizedCodeMapEntry(Context* native_context, |
7289 BailoutId osr_ast_id); | 7284 BailoutId osr_ast_id); |
7290 | 7285 |
7291 // If code is undefined, then existing code won't be overwritten. | |
7292 static void AddToOptimizedCodeMapInternal(Handle<SharedFunctionInfo> shared, | |
7293 Handle<Context> native_context, | |
7294 Handle<HeapObject> code, | |
7295 Handle<LiteralsArray> literals, | |
7296 BailoutId osr_ast_id); | |
7297 | |
7298 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); | 7286 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); |
7299 }; | 7287 }; |
7300 | 7288 |
7301 | 7289 |
7302 // Printing support. | 7290 // Printing support. |
7303 struct SourceCodeOf { | 7291 struct SourceCodeOf { |
7304 explicit SourceCodeOf(SharedFunctionInfo* v, int max = -1) | 7292 explicit SourceCodeOf(SharedFunctionInfo* v, int max = -1) |
7305 : value(v), max_length(max) {} | 7293 : value(v), max_length(max) {} |
7306 const SharedFunctionInfo* value; | 7294 const SharedFunctionInfo* value; |
7307 int max_length; | 7295 int max_length; |
(...skipping 3565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10873 } | 10861 } |
10874 return value; | 10862 return value; |
10875 } | 10863 } |
10876 }; | 10864 }; |
10877 | 10865 |
10878 | 10866 |
10879 } // NOLINT, false-positive due to second-order macros. | 10867 } // NOLINT, false-positive due to second-order macros. |
10880 } // NOLINT, false-positive due to second-order macros. | 10868 } // NOLINT, false-positive due to second-order macros. |
10881 | 10869 |
10882 #endif // V8_OBJECTS_H_ | 10870 #endif // V8_OBJECTS_H_ |
OLD | NEW |