V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
compiler-source-position-table.cc
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 
14  public:
15  explicit Decorator(SourcePositionTable* source_positions)
16  : source_positions_(source_positions) {}
17 
18  void Decorate(Node* node) final {
19  source_positions_->SetSourcePosition(node,
20  source_positions_->current_position_);
21  }
22 
23  private:
24  SourcePositionTable* source_positions_;
25 };
26 
27 SourcePositionTable::SourcePositionTable(Graph* graph)
28  : graph_(graph),
29  decorator_(nullptr),
30  current_position_(SourcePosition::Unknown()),
31  table_(graph->zone()) {}
32 
33 void SourcePositionTable::AddDecorator() {
34  DCHECK_NULL(decorator_);
35  decorator_ = new (graph_->zone()) Decorator(this);
36  graph_->AddDecorator(decorator_);
37 }
38 
39 void SourcePositionTable::RemoveDecorator() {
40  DCHECK_NOT_NULL(decorator_);
41  graph_->RemoveDecorator(decorator_);
42  decorator_ = nullptr;
43 }
44 
45 SourcePosition SourcePositionTable::GetSourcePosition(Node* node) const {
46  return table_.Get(node);
47 }
48 
49 void SourcePositionTable::SetSourcePosition(Node* node,
50  SourcePosition position) {
51  table_.Set(node, position);
52 }
53 
54 void SourcePositionTable::PrintJson(std::ostream& os) const {
55  os << "{";
56  bool needs_comma = false;
57  for (auto i : table_) {
58  SourcePosition pos = i.second;
59  if (pos.IsKnown()) {
60  if (needs_comma) {
61  os << ",";
62  }
63  os << "\"" << i.first << "\" : ";
64  pos.PrintJson(os);
65  needs_comma = true;
66  }
67  }
68  os << "}";
69 }
70 
71 } // namespace compiler
72 } // namespace internal
73 } // namespace v8
Definition: libplatform.h:13