V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
node-origin-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/node-origin-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 void NodeOrigin::PrintJson(std::ostream& out) const {
14  out << "{ ";
15  switch (origin_kind_) {
16  case kGraphNode:
17  out << "\"nodeId\" : ";
18  break;
19  case kWasmBytecode:
20  out << "\"bytecodePosition\" : ";
21  break;
22  }
23  out << created_from();
24  out << ", \"reducer\" : \"" << reducer_name() << "\"";
25  out << ", \"phase\" : \"" << phase_name() << "\"";
26  out << "}";
27 }
28 
30  public:
31  explicit Decorator(NodeOriginTable* origins) : origins_(origins) {}
32 
33  void Decorate(Node* node) final {
34  origins_->SetNodeOrigin(node, origins_->current_origin_);
35  }
36 
37  private:
38  NodeOriginTable* origins_;
39 };
40 
41 NodeOriginTable::NodeOriginTable(Graph* graph)
42  : graph_(graph),
43  decorator_(nullptr),
44  current_origin_(NodeOrigin::Unknown()),
45  current_phase_name_("unknown"),
46  table_(graph->zone()) {}
47 
48 void NodeOriginTable::AddDecorator() {
49  DCHECK_NULL(decorator_);
50  decorator_ = new (graph_->zone()) Decorator(this);
51  graph_->AddDecorator(decorator_);
52 }
53 
54 void NodeOriginTable::RemoveDecorator() {
55  DCHECK_NOT_NULL(decorator_);
56  graph_->RemoveDecorator(decorator_);
57  decorator_ = nullptr;
58 }
59 
60 NodeOrigin NodeOriginTable::GetNodeOrigin(Node* node) const {
61  return table_.Get(node);
62 }
63 
64 void NodeOriginTable::SetNodeOrigin(Node* node, const NodeOrigin& no) {
65  table_.Set(node, no);
66 }
67 
68 void NodeOriginTable::PrintJson(std::ostream& os) const {
69  os << "{";
70  bool needs_comma = false;
71  for (auto i : table_) {
72  NodeOrigin no = i.second;
73  if (no.IsKnown()) {
74  if (needs_comma) {
75  os << ",";
76  }
77  os << "\"" << i.first << "\""
78  << ": ";
79  no.PrintJson(os);
80  needs_comma = true;
81  }
82  }
83  os << "}";
84 }
85 
86 } // namespace compiler
87 } // namespace internal
88 } // namespace v8
Definition: libplatform.h:13