LCOV - code coverage report
Current view: top level - src - source-position-table.h (source / functions) Hit Total Coverage
Test: app.info Lines: 5 5 100.0 %
Date: 2019-01-20 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 ByteArray;
      18             : template <typename T>
      19             : class Handle;
      20             : class Isolate;
      21             : class Zone;
      22             : 
      23             : struct PositionTableEntry {
      24             :   PositionTableEntry()
      25   127397169 :       : code_offset(0), source_position(0), is_statement(false) {}
      26             :   PositionTableEntry(int offset, int64_t source, bool statement)
      27    35583335 :       : code_offset(offset), source_position(source), is_statement(statement) {}
      28             : 
      29             :   int code_offset;
      30             :   int64_t source_position;
      31             :   bool is_statement;
      32             : };
      33             : 
      34             : class V8_EXPORT_PRIVATE SourcePositionTableBuilder {
      35             :  public:
      36             :   enum RecordingMode { OMIT_SOURCE_POSITIONS, RECORD_SOURCE_POSITIONS };
      37             : 
      38             :   explicit SourcePositionTableBuilder(
      39             :       RecordingMode mode = RECORD_SOURCE_POSITIONS);
      40             : 
      41             :   void AddPosition(size_t code_offset, SourcePosition source_position,
      42             :                    bool is_statement);
      43             : 
      44             :   Handle<ByteArray> ToSourcePositionTable(Isolate* isolate);
      45             :   OwnedVector<byte> ToSourcePositionTableVector();
      46             : 
      47             :  private:
      48             :   void AddEntry(const PositionTableEntry& entry);
      49             : 
      50             :   inline bool Omit() const { return mode_ == OMIT_SOURCE_POSITIONS; }
      51             : 
      52             :   RecordingMode mode_;
      53             :   std::vector<byte> bytes_;
      54             : #ifdef ENABLE_SLOW_DCHECKS
      55             :   std::vector<PositionTableEntry> raw_entries_;
      56             : #endif
      57             :   PositionTableEntry previous_;  // Previously written entry, to compute delta.
      58             : };
      59             : 
      60             : class V8_EXPORT_PRIVATE SourcePositionTableIterator {
      61             :  public:
      62             :   // Used for saving/restoring the iterator.
      63             :   struct IndexAndPosition {
      64             :     int index_;
      65             :     PositionTableEntry position_;
      66             :   };
      67             : 
      68             :   // We expose three flavours of the iterator, depending on the argument passed
      69             :   // to the constructor:
      70             : 
      71             :   // Handlified iterator allows allocation, but it needs a handle (and thus
      72             :   // a handle scope). This is the preferred version.
      73             :   explicit SourcePositionTableIterator(Handle<ByteArray> byte_array);
      74             : 
      75             :   // Non-handlified iterator does not need a handle scope, but it disallows
      76             :   // allocation during its lifetime. This is useful if there is no handle
      77             :   // scope around.
      78             :   explicit SourcePositionTableIterator(ByteArray byte_array);
      79             : 
      80             :   // Handle-safe iterator based on an a vector located outside the garbage
      81             :   // collected heap, allows allocation during its lifetime.
      82             :   explicit SourcePositionTableIterator(Vector<const byte> bytes);
      83             : 
      84             :   void Advance();
      85             : 
      86             :   int code_offset() const {
      87             :     DCHECK(!done());
      88             :     return current_.code_offset;
      89             :   }
      90             :   SourcePosition source_position() const {
      91             :     DCHECK(!done());
      92             :     return SourcePosition::FromRaw(current_.source_position);
      93             :   }
      94             :   bool is_statement() const {
      95             :     DCHECK(!done());
      96             :     return current_.is_statement;
      97             :   }
      98             :   bool done() const { return index_ == kDone; }
      99             : 
     100         861 :   IndexAndPosition GetState() const { return {index_, current_}; }
     101             : 
     102             :   void RestoreState(const IndexAndPosition& saved_state) {
     103         861 :     index_ = saved_state.index_;
     104         861 :     current_ = saved_state.position_;
     105             :   }
     106             : 
     107             :  private:
     108             :   static const int kDone = -1;
     109             : 
     110             :   Vector<const byte> raw_table_;
     111             :   Handle<ByteArray> table_;
     112             :   int index_ = 0;
     113             :   PositionTableEntry current_;
     114             :   DISALLOW_HEAP_ALLOCATION(no_gc);
     115             : };
     116             : 
     117             : }  // namespace internal
     118             : }  // namespace v8
     119             : 
     120             : #endif  // V8_SOURCE_POSITION_TABLE_H_

Generated by: LCOV version 1.10