69 std::vector<TernaryBool> stack;
70 void push() { stack.push_back(TernaryBool::No); }
71 void pop() { stack.pop_back(); }
72 void set(TernaryBool r) {
73 BUG_CHECK(!stack.empty(),
"Empty stack");
76 TernaryBool hasReturned() {
77 BUG_CHECK(!stack.empty(),
"Empty stack");
82 explicit DoRemoveReturns(
cstring varName =
"hasReturned"_cs,
cstring retValName =
"retval"_cs)
83 : variableName(varName), retValName(retValName) {
85 setName(
"DoRemoveReturns");
88 const IR::Node *preorder(IR::Function *function)
override;
89 const IR::Node *preorder(IR::BlockStatement *statement)
override;
90 const IR::Node *preorder(IR::ReturnStatement *statement)
override;
91 const IR::Node *preorder(IR::ExitStatement *statement)
override;
92 const IR::Node *preorder(IR::IfStatement *statement)
override;
93 const IR::Node *preorder(IR::SwitchStatement *statement)
override;
95 const IR::Node *preorder(IR::P4Action *action)
override;
96 const IR::Node *preorder(IR::P4Control *control)
override;
97 const IR::Node *preorder(IR::P4Parser *parser)
override {
102 const IR::Node *postorder(IR::LoopStatement *loop)
override;
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24