diff options
Diffstat (limited to 'deps/v8/src/codegen/source-position-table.h')
-rw-r--r-- | deps/v8/src/codegen/source-position-table.h | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/deps/v8/src/codegen/source-position-table.h b/deps/v8/src/codegen/source-position-table.h index b3bba3bc8a..024eca54fa 100644 --- a/deps/v8/src/codegen/source-position-table.h +++ b/deps/v8/src/codegen/source-position-table.h @@ -5,6 +5,7 @@ #ifndef V8_CODEGEN_SOURCE_POSITION_TABLE_H_ #define V8_CODEGEN_SOURCE_POSITION_TABLE_H_ +#include "src/base/export-template.h" #include "src/codegen/source-position.h" #include "src/common/assert-scope.h" #include "src/common/checks.h" @@ -23,7 +24,9 @@ class Zone; struct PositionTableEntry { PositionTableEntry() - : code_offset(0), source_position(0), is_statement(false) {} + : code_offset(kFunctionEntryBytecodeOffset), + source_position(0), + is_statement(false) {} PositionTableEntry(int offset, int64_t source, bool statement) : code_offset(offset), source_position(source), is_statement(statement) {} @@ -51,7 +54,9 @@ class V8_EXPORT_PRIVATE SourcePositionTableBuilder { void AddPosition(size_t code_offset, SourcePosition source_position, bool is_statement); - Handle<ByteArray> ToSourcePositionTable(Isolate* isolate); + template <typename LocalIsolate> + EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) + Handle<ByteArray> ToSourcePositionTable(LocalIsolate* isolate); OwnedVector<byte> ToSourcePositionTableVector(); inline bool Omit() const { return mode_ != RECORD_SOURCE_POSITIONS; } @@ -70,13 +75,23 @@ class V8_EXPORT_PRIVATE SourcePositionTableBuilder { class V8_EXPORT_PRIVATE SourcePositionTableIterator { public: + // Filter that applies when advancing the iterator. If the filter isn't + // satisfied, we advance the iterator again. enum IterationFilter { kJavaScriptOnly = 0, kExternalOnly = 1, kAll = 2 }; + // Filter that applies only to the first entry of the source position table. + // If it is kSkipFunctionEntry, it will skip the FunctionEntry entry if it + // exists. + enum FunctionEntryFilter { + kSkipFunctionEntry = 0, + kDontSkipFunctionEntry = 1 + }; // Used for saving/restoring the iterator. struct IndexAndPositionState { int index_; PositionTableEntry position_; - IterationFilter filter_; + IterationFilter iteration_filter_; + FunctionEntryFilter function_entry_filter_; }; // We expose three flavours of the iterator, depending on the argument passed @@ -85,18 +100,23 @@ class V8_EXPORT_PRIVATE SourcePositionTableIterator { // Handlified iterator allows allocation, but it needs a handle (and thus // a handle scope). This is the preferred version. explicit SourcePositionTableIterator( - Handle<ByteArray> byte_array, IterationFilter filter = kJavaScriptOnly); + Handle<ByteArray> byte_array, + IterationFilter iteration_filter = kJavaScriptOnly, + FunctionEntryFilter function_entry_filter = kSkipFunctionEntry); // Non-handlified iterator does not need a handle scope, but it disallows // allocation during its lifetime. This is useful if there is no handle // scope around. explicit SourcePositionTableIterator( - ByteArray byte_array, IterationFilter filter = kJavaScriptOnly); + ByteArray byte_array, IterationFilter iteration_filter = kJavaScriptOnly, + FunctionEntryFilter function_entry_filter = kSkipFunctionEntry); // Handle-safe iterator based on an a vector located outside the garbage // collected heap, allows allocation during its lifetime. explicit SourcePositionTableIterator( - Vector<const byte> bytes, IterationFilter filter = kJavaScriptOnly); + Vector<const byte> bytes, + IterationFilter iteration_filter = kJavaScriptOnly, + FunctionEntryFilter function_entry_filter = kSkipFunctionEntry); void Advance(); @@ -114,22 +134,30 @@ class V8_EXPORT_PRIVATE SourcePositionTableIterator { } bool done() const { return index_ == kDone; } - IndexAndPositionState GetState() const { return {index_, current_, filter_}; } + IndexAndPositionState GetState() const { + return {index_, current_, iteration_filter_, function_entry_filter_}; + } void RestoreState(const IndexAndPositionState& saved_state) { index_ = saved_state.index_; current_ = saved_state.position_; - filter_ = saved_state.filter_; + iteration_filter_ = saved_state.iteration_filter_; + function_entry_filter_ = saved_state.function_entry_filter_; } private: + // Initializes the source position interator with the first valid bytecode. + // Also sets the FunctionEntry SourcePosition if it exists. + void Initialize(); + static const int kDone = -1; Vector<const byte> raw_table_; Handle<ByteArray> table_; int index_ = 0; PositionTableEntry current_; - IterationFilter filter_; + IterationFilter iteration_filter_; + FunctionEntryFilter function_entry_filter_; DISALLOW_HEAP_ALLOCATION(no_gc) }; |