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 | class SourcePositionTable::Decorator final : public GraphDecorator { |
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 |
74 |