LCOV - code coverage report
Current view: top level - src/compiler - compiler-source-position-table.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 31 32 96.9 %
Date: 2019-04-19 Functions: 8 10 80.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             : #include "src/compiler/compiler-source-position-table.h"
       6             : #include "src/compiler/graph.h"
       7             : #include "src/compiler/node-aux-data.h"
       8             : 
       9             : namespace v8 {
      10             : namespace internal {
      11             : namespace compiler {
      12             : 
      13           0 : class SourcePositionTable::Decorator final : public GraphDecorator {
      14             :  public:
      15             :   explicit Decorator(SourcePositionTable* source_positions)
      16      715680 :       : source_positions_(source_positions) {}
      17             : 
      18   101934557 :   void Decorate(Node* node) final {
      19   101934557 :     source_positions_->SetSourcePosition(node,
      20             :                                          source_positions_->current_position_);
      21   101934944 :   }
      22             : 
      23             :  private:
      24             :   SourcePositionTable* source_positions_;
      25             : };
      26             : 
      27     2467670 : SourcePositionTable::SourcePositionTable(Graph* graph)
      28             :     : graph_(graph),
      29             :       decorator_(nullptr),
      30             :       current_position_(SourcePosition::Unknown()),
      31     4935340 :       table_(graph->zone()) {}
      32             : 
      33      715681 : void SourcePositionTable::AddDecorator() {
      34             :   DCHECK_NULL(decorator_);
      35     1431361 :   decorator_ = new (graph_->zone()) Decorator(this);
      36      715680 :   graph_->AddDecorator(decorator_);
      37      715681 : }
      38             : 
      39      645944 : void SourcePositionTable::RemoveDecorator() {
      40             :   DCHECK_NOT_NULL(decorator_);
      41      645944 :   graph_->RemoveDecorator(decorator_);
      42      645943 :   decorator_ = nullptr;
      43      645943 : }
      44             : 
      45   152236158 : SourcePosition SourcePositionTable::GetSourcePosition(Node* node) const {
      46   152236158 :   return table_.Get(node);
      47             : }
      48             : 
      49      660467 : void SourcePositionTable::SetSourcePosition(Node* node,
      50             :                                             SourcePosition position) {
      51   102595024 :   table_.Set(node, position);
      52      661255 : }
      53             : 
      54           9 : void SourcePositionTable::PrintJson(std::ostream& os) const {
      55           9 :   os << "{";
      56             :   bool needs_comma = false;
      57          79 :   for (auto i : table_) {
      58          70 :     SourcePosition pos = i.second;
      59          70 :     if (pos.IsKnown()) {
      60          56 :       if (needs_comma) {
      61          55 :         os << ",";
      62             :       }
      63          56 :       os << "\"" << i.first << "\" : ";
      64          56 :       pos.PrintJson(os);
      65             :       needs_comma = true;
      66             :     }
      67             :   }
      68           9 :   os << "}";
      69           9 : }
      70             : 
      71             : }  // namespace compiler
      72             : }  // namespace internal
      73      122036 : }  // namespace v8

Generated by: LCOV version 1.10