67 std::vector<TernaryBool> stack;
68 void push() { stack.push_back(TernaryBool::No); }
69 void pop() { stack.pop_back(); }
70 void set(TernaryBool r) {
71 BUG_CHECK(!stack.empty(),
"Empty stack");
74 TernaryBool hasReturned() {
75 BUG_CHECK(!stack.empty(),
"Empty stack");
82 : refMap(refMap), 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 {