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

          Line data    Source code
       1             : // Copyright 2014 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_COMPILER_COMPILER_SOURCE_POSITION_TABLE_H_
       6             : #define V8_COMPILER_COMPILER_SOURCE_POSITION_TABLE_H_
       7             : 
       8             : #include "src/base/compiler-specific.h"
       9             : #include "src/compiler/node-aux-data.h"
      10             : #include "src/globals.h"
      11             : #include "src/source-position.h"
      12             : 
      13             : namespace v8 {
      14             : namespace internal {
      15             : namespace compiler {
      16             : 
      17     1104137 : class V8_EXPORT_PRIVATE SourcePositionTable final
      18             :     : public NON_EXPORTED_BASE(ZoneObject) {
      19             :  public:
      20             :   class Scope final {
      21             :    public:
      22             :     Scope(SourcePositionTable* source_positions, SourcePosition position)
      23             :         : source_positions_(source_positions),
      24   112861901 :           prev_position_(source_positions->current_position_) {
      25             :       Init(position);
      26             :     }
      27             :     Scope(SourcePositionTable* source_positions, Node* node)
      28             :         : source_positions_(source_positions),
      29             :           prev_position_(source_positions->current_position_) {
      30             :       Init(source_positions_->GetSourcePosition(node));
      31             :     }
      32   112862042 :     ~Scope() { source_positions_->current_position_ = prev_position_; }
      33             : 
      34             :    private:
      35             :     void Init(SourcePosition position) {
      36   112861901 :       if (position.IsKnown()) source_positions_->current_position_ = position;
      37             :     }
      38             : 
      39             :     SourcePositionTable* const source_positions_;
      40             :     SourcePosition const prev_position_;
      41             :     DISALLOW_COPY_AND_ASSIGN(Scope);
      42             :   };
      43             : 
      44             :   explicit SourcePositionTable(Graph* graph);
      45             : 
      46             :   void AddDecorator();
      47             :   void RemoveDecorator();
      48             : 
      49             :   SourcePosition GetSourcePosition(Node* node) const;
      50             :   void SetSourcePosition(Node* node, SourcePosition position);
      51             : 
      52             :   void SetCurrentPosition(const SourcePosition& pos) {
      53     7780640 :     current_position_ = pos;
      54             :   }
      55             : 
      56             :   void PrintJson(std::ostream& os) const;
      57             : 
      58             :  private:
      59             :   class Decorator;
      60             : 
      61             :   Graph* const graph_;
      62             :   Decorator* decorator_;
      63             :   SourcePosition current_position_;
      64             :   NodeAuxData<SourcePosition, SourcePosition::Unknown> table_;
      65             : 
      66             :   DISALLOW_COPY_AND_ASSIGN(SourcePositionTable);
      67             : };
      68             : 
      69             : }  // namespace compiler
      70             : }  // namespace internal
      71             : }  // namespace v8
      72             : 
      73             : #endif  // V8_COMPILER_COMPILER_SOURCE_POSITION_TABLE_H_

Generated by: LCOV version 1.10