38 std::vector<IR::Vector<IR::Declaration> *> toMove;
41 BUG_CHECK(!toMove.empty(),
"Empty move stack");
45 BUG_CHECK(!toMove.empty(),
"Empty move stack");
48 void addMove(
const IR::Declaration *decl) { getMoves()->push_back(decl); }
51 explicit MoveDeclarations(
bool parsersOnly =
false) : parsersOnly(parsersOnly) {
52 setName(
"MoveDeclarations");
55 void end_apply(
const IR::Node *)
override { BUG_CHECK(toMove.empty(),
"Non empty move stack"); }
56 const IR::Node *preorder(IR::P4Action *action)
override {
61 if (findContext<IR::P4Control>() ==
nullptr)
67 const IR::Node *preorder(IR::P4Control *control)
override {
75 const IR::Node *preorder(IR::P4Parser *parser)
override {
79 const IR::Node *preorder(IR::Function *function)
override {
87 const IR::Node *postorder(IR::P4Action *action)
override;
88 const IR::Node *postorder(IR::P4Control *control)
override;
89 const IR::Node *postorder(IR::P4Parser *parser)
override;
90 const IR::Node *postorder(IR::Function *function)
override;
91 const IR::Node *postorder(IR::Declaration_Variable *decl)
override;
92 const IR::Node *postorder(IR::Declaration_Constant *decl)
override;
103 IR::IndexedVector<IR::StatOrDecl> *toMove;
104 const IR::ParserState *oldStart;
109 : refMap(refMap), oldStart(
nullptr), newStartName(
"") {
110 setName(
"MoveInitializers");
112 toMove =
new IR::IndexedVector<IR::StatOrDecl>();
114 const IR::Node *preorder(IR::P4Parser *parser)
override;
115 const IR::Node *postorder(IR::P4Parser *parser)
override;
116 const IR::Node *postorder(IR::Declaration_Variable *decl)
override;
117 const IR::Node *postorder(IR::ParserState *state)
override;
118 const IR::Node *postorder(IR::P4Control *control)
override;
119 const IR::Node *postorder(IR::Path *path)
override;