| Index: src/interpreter/source-position-table.h
|
| diff --git a/src/interpreter/source-position-table.h b/src/interpreter/source-position-table.h
|
| index 336cf42bc2c1fe00e4205d5f9372539a37a02b7e..56f635481f07673035b55c641185d2da7645ff6a 100644
|
| --- a/src/interpreter/source-position-table.h
|
| +++ b/src/interpreter/source-position-table.h
|
| @@ -6,72 +6,80 @@
|
| #define V8_INTERPRETER_SOURCE_POSITION_TABLE_H_
|
|
|
| #include "src/assert-scope.h"
|
| +#include "src/checks.h"
|
| #include "src/handles.h"
|
| -#include "src/zone.h"
|
| #include "src/zone-containers.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
|
|
| class BytecodeArray;
|
| -class FixedArray;
|
| +class ByteArray;
|
| class Isolate;
|
| +class Zone;
|
|
|
| namespace interpreter {
|
|
|
| +struct PositionTableEntry {
|
| + PositionTableEntry()
|
| + : bytecode_offset(0), source_position(0), is_statement(false) {}
|
| + PositionTableEntry(int bytecode, int source, bool statement)
|
| + : bytecode_offset(bytecode),
|
| + source_position(source),
|
| + is_statement(statement) {}
|
| +
|
| + int bytecode_offset;
|
| + int source_position;
|
| + bool is_statement;
|
| +};
|
| +
|
| class SourcePositionTableBuilder {
|
| public:
|
| explicit SourcePositionTableBuilder(Isolate* isolate, Zone* zone)
|
| - : isolate_(isolate), entries_(zone) {}
|
| + : isolate_(isolate), bytes_(zone), previous_() {}
|
|
|
| void AddStatementPosition(size_t bytecode_offset, int source_position);
|
| void AddExpressionPosition(size_t bytecode_offset, int source_position);
|
| - void RevertPosition(size_t bytecode_offset);
|
| - Handle<FixedArray> ToFixedArray();
|
| + Handle<ByteArray> ToSourcePositionTable();
|
|
|
| private:
|
| - struct Entry {
|
| - int bytecode_offset;
|
| - uint32_t source_position_and_type;
|
| - };
|
| -
|
| - bool CodeOffsetHasPosition(int bytecode_offset) {
|
| - // Return whether bytecode offset already has a position assigned.
|
| - return entries_.size() > 0 &&
|
| - entries_.back().bytecode_offset == bytecode_offset;
|
| - }
|
| + void AddEntry(const PositionTableEntry& entry);
|
|
|
| Isolate* isolate_;
|
| - ZoneVector<Entry> entries_;
|
| + ZoneVector<byte> bytes_;
|
| + PositionTableEntry previous_;
|
| +
|
| +#ifdef ENABLE_SLOW_DCHECKS
|
| + std::vector<PositionTableEntry> raw_entries_;
|
| +#endif
|
| };
|
|
|
| class SourcePositionTableIterator {
|
| public:
|
| - explicit SourcePositionTableIterator(BytecodeArray* bytecode_array);
|
| + explicit SourcePositionTableIterator(ByteArray* byte_array);
|
|
|
| void Advance();
|
|
|
| int bytecode_offset() const {
|
| DCHECK(!done());
|
| - return bytecode_offset_;
|
| + return current_.bytecode_offset;
|
| }
|
| int source_position() const {
|
| DCHECK(!done());
|
| - return source_position_;
|
| + return current_.source_position;
|
| }
|
| bool is_statement() const {
|
| DCHECK(!done());
|
| - return is_statement_;
|
| + return current_.is_statement;
|
| }
|
| - bool done() const { return index_ > length_; }
|
| + bool done() const { return index_ == kDone; }
|
|
|
| private:
|
| - FixedArray* table_;
|
| + static const int kDone = -1;
|
| +
|
| + ByteArray* table_;
|
| int index_;
|
| - int length_;
|
| - bool is_statement_;
|
| - int bytecode_offset_;
|
| - int source_position_;
|
| + PositionTableEntry current_;
|
| DisallowHeapAllocation no_gc;
|
| };
|
|
|
|
|