LCOV - code coverage report
Current view: top level - src - source-position-table.h (source / functions) Hit Total Coverage
Test: app.info Lines: 3 3 100.0 %
Date: 2017-04-26 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2016 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_SOURCE_POSITION_TABLE_H_
       6             : #define V8_SOURCE_POSITION_TABLE_H_
       7             : 
       8             : #include "src/assert-scope.h"
       9             : #include "src/checks.h"
      10             : #include "src/globals.h"
      11             : #include "src/source-position.h"
      12             : #include "src/zone/zone-containers.h"
      13             : 
      14             : namespace v8 {
      15             : namespace internal {
      16             : 
      17             : class AbstractCode;
      18             : class BytecodeArray;
      19             : class ByteArray;
      20             : template <typename T>
      21             : class Handle;
      22             : class Isolate;
      23             : class Zone;
      24             : 
      25             : struct PositionTableEntry {
      26             :   PositionTableEntry()
      27   229249044 :       : code_offset(0), source_position(0), is_statement(false) {}
      28             :   PositionTableEntry(int offset, int64_t source, bool statement)
      29    53139427 :       : code_offset(offset), source_position(source), is_statement(statement) {}
      30             : 
      31             :   int code_offset;
      32             :   int64_t source_position;
      33             :   bool is_statement;
      34             : };
      35             : 
      36             : class V8_EXPORT_PRIVATE SourcePositionTableBuilder {
      37             :  public:
      38             :   enum RecordingMode { OMIT_SOURCE_POSITIONS, RECORD_SOURCE_POSITIONS };
      39             : 
      40             :   SourcePositionTableBuilder(Zone* zone,
      41             :                              RecordingMode mode = RECORD_SOURCE_POSITIONS);
      42             : 
      43             :   void AddPosition(size_t code_offset, SourcePosition source_position,
      44             :                    bool is_statement);
      45             : 
      46             :   Handle<ByteArray> ToSourcePositionTable(Isolate* isolate,
      47             :                                           Handle<AbstractCode> code);
      48             : 
      49             :  private:
      50             :   void AddEntry(const PositionTableEntry& entry);
      51             : 
      52             :   inline bool Omit() const { return mode_ == OMIT_SOURCE_POSITIONS; }
      53             : 
      54             :   RecordingMode mode_;
      55             :   ZoneVector<byte> bytes_;
      56             : #ifdef ENABLE_SLOW_DCHECKS
      57             :   ZoneVector<PositionTableEntry> raw_entries_;
      58             : #endif
      59             :   PositionTableEntry previous_;  // Previously written entry, to compute delta.
      60             : };
      61             : 
      62             : class V8_EXPORT_PRIVATE SourcePositionTableIterator {
      63             :  public:
      64             :   explicit SourcePositionTableIterator(ByteArray* byte_array);
      65             : 
      66             :   void Advance();
      67             : 
      68             :   int code_offset() const {
      69             :     DCHECK(!done());
      70             :     return current_.code_offset;
      71             :   }
      72             :   SourcePosition source_position() const {
      73             :     DCHECK(!done());
      74             :     return SourcePosition::FromRaw(current_.source_position);
      75             :   }
      76             :   bool is_statement() const {
      77             :     DCHECK(!done());
      78             :     return current_.is_statement;
      79             :   }
      80   116353473 :   bool done() const { return index_ == kDone; }
      81             : 
      82             :  private:
      83             :   static const int kDone = -1;
      84             : 
      85             :   ByteArray* table_;
      86             :   int index_;
      87             :   PositionTableEntry current_;
      88             :   DisallowHeapAllocation no_gc;
      89             : };
      90             : 
      91             : }  // namespace internal
      92             : }  // namespace v8
      93             : 
      94             : #endif  // V8_SOURCE_POSITION_TABLE_H_

Generated by: LCOV version 1.10