Index: src/interpreter/source-position-table.h |
diff --git a/src/interpreter/source-position-table.h b/src/interpreter/source-position-table.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f05c0f7de57b2fa98cc41f98d88f1635e6ad1f11 |
--- /dev/null |
+++ b/src/interpreter/source-position-table.h |
@@ -0,0 +1,82 @@ |
+// Copyright 2016 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef V8_INTERPRETER_SOURCE_POSITION_TABLE_H_ |
+#define V8_INTERPRETER_SOURCE_POSITION_TABLE_H_ |
+ |
+#include "src/assert-scope.h" |
+#include "src/handles.h" |
+#include "src/zone.h" |
+#include "src/zone-containers.h" |
+ |
+namespace v8 { |
+namespace internal { |
+ |
+class BytecodeArray; |
+class FixedArray; |
+class Isolate; |
+ |
+namespace interpreter { |
+ |
+class SourcePositionTableBuilder { |
+ public: |
+ explicit SourcePositionTableBuilder(Isolate* isolate, Zone* zone) |
+ : isolate_(isolate), entries_(zone) {} |
+ |
+ void AddStatementPosition(int bytecode_offset, int source_position); |
+ void AddExpressionPosition(int bytecode_offset, int source_position); |
+ Handle<FixedArray> ToFixedArray(); |
+ |
+ private: |
+ struct Entry { |
+ int bytecode_offset; |
+ uint32_t source_position_and_type; |
+ }; |
+ |
+ void AssertMonotonic(int bytecode_offset) { |
+ DCHECK(entries_.size() == 0 || |
+ entries_.back().bytecode_offset < bytecode_offset); |
+ } |
+ |
+ Isolate* isolate_; |
+ ZoneVector<Entry> entries_; |
+}; |
+ |
+class SourcePositionTableIterator { |
+ public: |
+ explicit SourcePositionTableIterator(BytecodeArray* bytecode_array); |
+ |
+ static int PositionFromBytecodeOffset(BytecodeArray* bytecode_array, |
+ int bytecode_offset); |
+ void Advance(); |
+ |
+ int bytecode_offset() const { |
+ DCHECK(!done()); |
+ return bytecode_offset_; |
+ } |
+ int source_position() const { |
+ DCHECK(!done()); |
+ return source_position_; |
+ } |
+ bool is_statement() const { |
+ DCHECK(!done()); |
+ return is_statement_; |
+ } |
+ bool done() const { return index_ > length_; } |
+ |
+ private: |
+ FixedArray* table_; |
+ int index_; |
+ int length_; |
+ bool is_statement_; |
+ int bytecode_offset_; |
+ int source_position_; |
+ DisallowHeapAllocation no_gc; |
+}; |
+ |
+} // namespace interpreter |
+} // namespace internal |
+} // namespace v8 |
+ |
+#endif // V8_INTERPRETER_SOURCE_POSITION_TABLE_H_ |