95class Node :
public virtual INode {
97 virtual bool apply_visitor_preorder(Modifier &v);
98 virtual void apply_visitor_postorder(Modifier &v);
99 virtual void apply_visitor_revisit(Modifier &v,
const Node *n)
const;
100 virtual void apply_visitor_loop_revisit(Modifier &v)
const;
101 virtual bool apply_visitor_preorder(Inspector &v)
const;
102 virtual void apply_visitor_postorder(Inspector &v)
const;
103 virtual void apply_visitor_revisit(Inspector &v)
const;
104 virtual void apply_visitor_loop_revisit(Inspector &v)
const;
105 virtual const Node *apply_visitor_preorder(Transform &v);
106 virtual const Node *apply_visitor_postorder(Transform &v);
107 virtual void apply_visitor_revisit(Transform &v,
const Node *n)
const;
108 virtual void apply_visitor_loop_revisit(Transform &v)
const;
109 Node &operator=(
const Node &) =
default;
110 Node &operator=(Node &&) =
default;
113 static int currentId;
114 void traceVisit(
const char *visitor)
const;
115 friend class ::P4::Visitor;
116 friend class ::P4::Inspector;
117 friend class ::P4::Modifier;
118 friend class ::P4::Transform;
120 unsigned *columnNumber)
const;
126 void traceCreation()
const;
127 Node() : id(currentId++), clone_id(
id) { traceCreation(); }
128 explicit Node(
Util::SourceInfo si) : srcInfo(si), id(currentId++), clone_id(
id) {
131 Node(
const Node &other) : srcInfo(other.srcInfo), id(currentId++), clone_id(other.clone_id) {
135 const Node *apply(Visitor &v,
const Visitor_Context *ctxt =
nullptr)
const;
136 const Node *apply(Visitor &&v,
const Visitor_Context *ctxt =
nullptr)
const {
137 return apply(v, ctxt);
139 virtual Node *clone()
const = 0;
140 void dbprint(std::ostream &out)
const override;
141 virtual void dump_fields(std::ostream &)
const {}
142 const Node *getNode()
const final {
return this; }
143 Node *getNode()
final {
return this; }
145 cstring node_type_name()
const override {
return "Node"_cs; }
146 static cstring static_type_name() {
return "Node"_cs; }
147 virtual int num_children() {
return 0; }
149 cstring toString()
const override {
return node_type_name(); }
155 virtual bool operator==(
const Node &a)
const {
return this->
typeId() == a.
typeId(); }
158 virtual bool equiv(
const Node &a)
const {
return this->
typeId() == a.
typeId(); }
159#define DEFINE_OPEQ_FUNC(CLASS, BASE) \
160 virtual bool operator==(const CLASS &) const { return false; }
161 IRNODE_ALL_SUBCLASSES(DEFINE_OPEQ_FUNC)
162#undef DEFINE_OPEQ_FUNC
163 virtual void visit_children(Visitor &) {}
164 virtual void visit_children(Visitor &)
const {}
166 bool operator!=(
const Node &n)
const {
return !operator==(n); }
168 DECLARE_TYPEINFO_WITH_TYPEID(Node, NodeKind::Node,
INode);
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24