34 int expressionPrecedence;
38 bool noIncludes =
false;
45 VecPrint(
const char *sep,
const char *term) : separator(sep), terminator(term) {}
52 ListPrint(
const char *start,
const char *end) : start(start), end(end) {}
56 std::vector<VecPrint> vectorSeparator;
57 size_t vectorSeparator_init_apply_size = 0;
58 std::vector<ListPrint> listTerminators;
59 size_t listTerminators_init_apply_size = 0;
61 void setVecSep(
const char *sep,
const char *term =
nullptr) {
62 vectorSeparator.push_back(VecPrint(sep, term));
65 BUG_CHECK(!vectorSeparator.empty(),
"Empty vectorSeparator");
66 vectorSeparator.pop_back();
69 BUG_CHECK(!vectorSeparator.empty(),
"Empty vectorSeparator");
70 return vectorSeparator.back();
74 BUG_CHECK(!listTerminators.empty(),
"Empty listTerminators");
75 listTerminators.pop_back();
78 std::optional<cstring> ifSystemFile(
const IR::Node *node);
80 void dump(
unsigned depth,
const IR::Node *node =
nullptr,
unsigned adjDepth = 0);
81 unsigned curDepth()
const;
90 std::ostream *outStream;
97 : expressionPrecedence(DBPrint::Prec_Low),
100 withinArgument(false),
104 visitDagOnce =
false;
108 : expressionPrecedence(DBPrint::Prec_Low),
111 withinArgument(false),
112 builder(*new Util::SourceCodeBuilder()),
113 outStream(outStream),
115 visitDagOnce =
false;
120 expressionPrecedence(DBPrint::Prec_Low),
123 withinArgument(false),
124 builder(*new Util::SourceCodeBuilder()),
125 outStream(&
std::cout),
127 visitDagOnce =
false;
131 using Inspector::preorder;
133 void setnoIncludesArg(
bool condition) { noIncludes = condition; }
135 void setListTerm(
const char *start,
const char *end) {
136 listTerminators.push_back(ListPrint(start, end));
138 Visitor::profile_t init_apply(
const IR::Node *node)
override;
139 void end_apply(
const IR::Node *node)
override;
141 bool process(
const IR::Type_StructLike *t,
const char *name);
143 bool preorder(
const IR::Type_Boolean *t)
override;
144 bool preorder(
const IR::Type_Varbits *t)
override;
145 bool preorder(
const IR::Type_Bits *t)
override;
146 bool preorder(
const IR::Type_InfInt *t)
override;
147 bool preorder(
const IR::Type_String *t)
override;
148 bool preorder(
const IR::Type_Var *t)
override;
149 bool preorder(
const IR::Type_Dontcare *t)
override;
150 bool preorder(
const IR::Type_Void *t)
override;
151 bool preorder(
const IR::Type_Error *t)
override;
152 bool preorder(
const IR::Type_Struct *t)
override {
return process(t,
"struct"); }
153 bool preorder(
const IR::Type_Header *t)
override {
return process(t,
"header"); }
154 bool preorder(
const IR::Type_HeaderUnion *t)
override {
return process(t,
"header_union"); }
155 bool preorder(
const IR::Type_Package *t)
override;
156 bool preorder(
const IR::Type_Parser *t)
override;
157 bool preorder(
const IR::Type_Control *t)
override;
158 bool preorder(
const IR::Type_Name *t)
override;
159 bool preorder(
const IR::Type_Stack *t)
override;
160 bool preorder(
const IR::Type_Specialized *t)
override;
161 bool preorder(
const IR::Type_Enum *t)
override;
162 bool preorder(
const IR::Type_SerEnum *t)
override;
163 bool preorder(
const IR::Type_Typedef *t)
override;
164 bool preorder(
const IR::Type_Newtype *t)
override;
165 bool preorder(
const IR::Type_Extern *t)
override;
166 bool preorder(
const IR::Type_Unknown *t)
override;
167 bool preorder(
const IR::Type_BaseList *t)
override;
168 bool preorder(
const IR::Type *t)
override {
169 builder.append(t->toString());
172 bool preorder(
const IR::Type_SpecializedCanonical *t)
override {
173 BUG(
"%1%: specialized canonical type in IR tree", t);
178 bool preorder(
const IR::Declaration_Constant *cst)
override;
179 bool preorder(
const IR::Declaration_Variable *v)
override;
180 bool preorder(
const IR::Declaration_Instance *t)
override;
181 bool preorder(
const IR::Declaration_MatchKind *d)
override;
184 bool preorder(
const IR::Dots *e)
override;
185 bool preorder(
const IR::NamedDots *e)
override;
186 bool preorder(
const IR::Constant *c)
override;
187 bool preorder(
const IR::Slice *slice)
override;
188 bool preorder(
const IR::BoolLiteral *b)
override;
189 bool preorder(
const IR::StringLiteral *s)
override;
190 bool preorder(
const IR::PathExpression *p)
override;
191 bool preorder(
const IR::Cast *c)
override;
192 bool preorder(
const IR::Operation_Binary *b)
override;
193 bool preorder(
const IR::Operation_Unary *u)
override;
194 bool preorder(
const IR::ArrayIndex *a)
override;
195 bool preorder(
const IR::TypeNameExpression *e)
override;
196 bool preorder(
const IR::Mux *a)
override;
197 bool preorder(
const IR::ConstructorCallExpression *e)
override;
198 bool preorder(
const IR::Member *e)
override;
199 bool preorder(
const IR::SelectCase *e)
override;
200 bool preorder(
const IR::SelectExpression *e)
override;
201 bool preorder(
const IR::ListExpression *e)
override;
202 bool preorder(
const IR::P4ListExpression *e)
override;
203 bool preorder(
const IR::StructExpression *e)
override;
204 bool preorder(
const IR::Invalid *e)
override;
205 bool preorder(
const IR::InvalidHeader *e)
override;
206 bool preorder(
const IR::InvalidHeaderUnion *e)
override;
207 bool preorder(
const IR::HeaderStackExpression *e)
override;
208 bool preorder(
const IR::MethodCallExpression *e)
override;
209 bool preorder(
const IR::DefaultExpression *e)
override;
210 bool preorder(
const IR::This *e)
override;
213 bool preorder(
const IR::Vector<IR::ActionListElement> *v)
override;
214 bool preorder(
const IR::Vector<IR::Annotation> *v)
override;
215 bool preorder(
const IR::Vector<IR::Entry> *v)
override;
216 bool preorder(
const IR::Vector<IR::Expression> *v)
override;
217 bool preorder(
const IR::Vector<IR::Argument> *v)
override;
218 bool preorder(
const IR::Vector<IR::KeyElement> *v)
override;
219 bool preorder(
const IR::Vector<IR::Method> *v)
override;
220 bool preorder(
const IR::Vector<IR::Node> *v)
override;
221 bool preorder(
const IR::Vector<IR::SelectCase> *v)
override;
222 bool preorder(
const IR::Vector<IR::SwitchCase> *v)
override;
223 bool preorder(
const IR::Vector<IR::Type> *v)
override;
224 bool preorder(
const IR::IndexedVector<IR::Declaration_ID> *v)
override;
225 bool preorder(
const IR::IndexedVector<IR::Declaration> *v)
override;
226 bool preorder(
const IR::IndexedVector<IR::Node> *v)
override;
227 bool preorder(
const IR::IndexedVector<IR::ParserState> *v)
override;
228 bool preorder(
const IR::IndexedVector<IR::StatOrDecl> *v)
override;
231 bool preorder(
const IR::AssignmentStatement *s)
override;
232 bool preorder(
const IR::BlockStatement *s)
override;
233 bool preorder(
const IR::MethodCallStatement *s)
override;
234 bool preorder(
const IR::EmptyStatement *s)
override;
235 bool preorder(
const IR::ReturnStatement *s)
override;
236 bool preorder(
const IR::BreakStatement *s)
override;
237 bool preorder(
const IR::ContinueStatement *s)
override;
238 bool preorder(
const IR::ExitStatement *s)
override;
239 bool preorder(
const IR::SwitchCase *s)
override;
240 bool preorder(
const IR::SwitchStatement *s)
override;
241 bool preorder(
const IR::IfStatement *s)
override;
242 bool preorder(
const IR::ForStatement *s)
override;
243 bool preorder(
const IR::ForInStatement *s)
override;
246 bool preorder(
const IR::NamedExpression *ne)
override;
247 bool preorder(
const IR::Argument *arg)
override;
248 bool preorder(
const IR::Path *p)
override;
249 bool preorder(
const IR::Parameter *p)
override;
250 bool preorder(
const IR::Annotations *a)
override;
251 bool preorder(
const IR::Annotation *a)
override;
252 bool preorder(
const IR::P4Program *program)
override;
253 bool preorder(
const IR::P4Control *c)
override;
254 bool preorder(
const IR::P4Action *c)
override;
255 bool preorder(
const IR::ParserState *s)
override;
256 bool preorder(
const IR::P4Parser *c)
override;
257 bool preorder(
const IR::TypeParameters *p)
override;
258 bool preorder(
const IR::ParameterList *p)
override;
259 bool preorder(
const IR::Method *p)
override;
260 bool preorder(
const IR::Function *function)
override;
262 bool preorder(
const IR::ExpressionValue *v)
override;
263 bool preorder(
const IR::ActionListElement *ale)
override;
264 bool preorder(
const IR::ActionList *v)
override;
265 bool preorder(
const IR::Key *v)
override;
266 bool preorder(
const IR::Property *p)
override;
267 bool preorder(
const IR::TableProperties *t)
override;
268 bool preorder(
const IR::EntriesList *l)
override;
269 bool preorder(
const IR::Entry *e)
override;
270 bool preorder(
const IR::P4Table *c)
override;
271 bool preorder(
const IR::P4ValueSet *c)
override;
274 bool preorder(
const IR::V1Program *)
override {
return false; }
Visitor mixin for looking up names in enclosing scopes from the Visitor::Context.
Definition resolveReferences.h:33