P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
P4::DoRemoveReturns Class Reference
Inheritance diagram for P4::DoRemoveReturns:

Public Member Functions

 DoRemoveReturns (P4::ReferenceMap *refMap, cstring varName="hasReturned", cstring retValName="retval")
 
const IR::Node * preorder (IR::BlockStatement *statement) override
 
const IR::Node * preorder (IR::ExitStatement *statement) override
 
const IR::Node * preorder (IR::Function *function) override
 
const IR::Node * preorder (IR::IfStatement *statement) override
 
const IR::Node * preorder (IR::P4Action *action) override
 
const IR::Node * preorder (IR::P4Control *control) override
 
const IR::Node * preorder (IR::P4Parser *parser) override
 
const IR::Node * preorder (IR::ReturnStatement *statement) override
 
const IR::Node * preorder (IR::SwitchStatement *statement) override
 

Protected Member Functions

TernaryBool hasReturned ()
 
void pop ()
 
void push ()
 
void set (TernaryBool r)
 

Protected Attributes

P4::ReferenceMaprefMap
 
IR::ID returnedValue
 
IR::ID returnVar
 
cstring retValName
 
std::vector< TernaryBool > stack
 
cstring variableName
 

Detailed Description

This visitor replaces 'returns' by ifs: e.g. control c(inout bit x) { apply { if (x) return; x = !x; }} becomes: control c(inout bit x) { bool hasReturned; apply { hasReturned = false; if (x) hasReturned = true; if (!hasReturned) x = !x; }}