31 std::vector<IR::Vector<IR::Declaration>> toMove;
32 void push() { toMove.emplace_back(); }
34 BUG_CHECK(!toMove.empty(),
"Empty move stack");
38 BUG_CHECK(!toMove.empty(),
"Empty move stack");
42 BUG_CHECK(!toMove.empty(),
"Empty move stack");
45 void addMove(
const IR::Declaration *decl) { getMoves().push_back(decl); }
48 explicit MoveDeclarations(
bool parsersOnly =
false) : parsersOnly(parsersOnly) {
49 setName(
"MoveDeclarations");
52 void end_apply(
const IR::Node *)
override { BUG_CHECK(toMove.empty(),
"Non empty move stack"); }
53 const IR::Node *preorder(IR::P4Action *action)
override {
58 if (!isInContext<IR::P4Control>())
64 const IR::Node *preorder(IR::P4Control *control)
override {
72 const IR::Node *preorder(IR::P4Parser *parser)
override {
76 const IR::Node *preorder(IR::Function *function)
override {
84 const IR::Node *postorder(IR::P4Action *action)
override;
85 const IR::Node *postorder(IR::P4Control *control)
override;
86 const IR::Node *postorder(IR::P4Parser *parser)
override;
87 const IR::Node *postorder(IR::Function *function)
override;
88 const IR::Node *postorder(IR::Declaration_Variable *decl)
override;
89 const IR::Node *postorder(IR::Declaration_Constant *decl)
override;
98class MoveInitializers :
public Transform,
public ResolutionContext {
101 const IR::ParserState *oldStart;
103 bool loopsBackToStart;
106 MoveInitializers() : newStartName(
"") { setName(
"MoveInitializers"); }
108 const IR::Node *preorder(IR::P4Parser *parser)
override;
109 const IR::Node *preorder(IR::Declaration_Variable *decl)
override;
110 const IR::Node *postorder(IR::ParserState *state)
override;
111 const IR::Node *postorder(IR::Path *path)
override;
112 const IR::Node *postorder(IR::P4Parser *parser)
override;
113 const IR::Node *postorder(IR::P4Control *control)
override;
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13