45class ValidateParsedProgram final :
public Inspector {
46 std::unordered_map<std::pair<const IR::Node *, cstring>,
bool> annNames;
48 void container(
const IR::IContainer *type);
50 void distinctParameters(
const IR::TypeParameters *typeParams,
const IR::ParameterList *apply,
51 const IR::ParameterList *constr);
54 ValidateParsedProgram() { setName(
"ValidateParsedProgram"); }
55 void end_apply(
const IR::Node *)
override { annNames.clear(); }
56 void postorder(
const IR::Annotation *annotations)
override;
57 void postorder(
const IR::P4Program *program)
override;
58 void postorder(
const IR::Constant *c)
override;
59 void postorder(
const IR::SwitchStatement *statement)
override;
60 void postorder(
const IR::Method *t)
override;
61 void postorder(
const IR::StructField *f)
override;
62 void postorder(
const IR::ParserState *s)
override;
63 void postorder(
const IR::P4Table *t)
override;
64 void postorder(
const IR::Type_Bits *type)
override;
65 void postorder(
const IR::Type_Varbits *type)
override;
66 void postorder(
const IR::ConstructorCallExpression *expression)
override;
67 void postorder(
const IR::Declaration_Variable *decl)
override;
68 void postorder(
const IR::Declaration_Instance *inst)
override;
69 void postorder(
const IR::Declaration_Constant *decl)
override;
70 void postorder(
const IR::EntriesList *l)
override;
71 void postorder(
const IR::ReturnStatement *statement)
override;
72 void postorder(
const IR::ExitStatement *statement)
override;
73 void postorder(
const IR::Type_Package *package)
override { container(package); }
74 void postorder(
const IR::P4Control *control)
override {
76 distinctParameters(control->getTypeParameters(), control->getApplyParameters(),
77 control->getConstructorParameters());
79 void postorder(
const IR::P4Parser *parser)
override {
80 auto start = parser->states.getDeclaration(IR::ParserState::start);
82 error(ErrorType::ERR_INVALID,
"Parser %1% has no 'start' state", parser->name);
85 distinctParameters(parser->getTypeParameters(), parser->getApplyParameters(),
86 parser->getConstructorParameters());
88 void postorder(
const IR::Dots *dots)
override;
89 void postorder(
const IR::BreakStatement *s)
override;
90 void postorder(
const IR::ContinueStatement *s)
override;
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:49