7 #ifndef RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_BUILDERS_RECURSIVE_CFG_BUILDER_H
8 #define RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_BUILDERS_RECURSIVE_CFG_BUILDER_H
A representation of a control-flow graph (CFG).
A base class for creators of control-flow graphs (CFGs) from functions.
A base class for creators of control-flow graphs (CFGs) from functions.
Definition: cfg_builder.h:31
ShPtr< Function > func
A function from which the CFG is being built.
Definition: cfg_builder.h:43
A visitor that visits everything in an ordered way.
Definition: ordered_all_visitor.h:44
bool visitSuccessors
Should statements' successor be accessed?
Definition: ordered_all_visitor.h:144
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
bool visitNestedStmts
Should nested statements be accessed?
Definition: ordered_all_visitor.h:147
A recursive creator of control-flow graphs (CFGs) from functions.
Definition: recursive_cfg_builder.h:27
virtual void visitStmt(ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true) override
Visits the given statement, and possibly its successors or nested statements.
Definition: recursive_cfg_builder.cpp:391
RecursiveCFGBuilder()
Constructs a new builder.
Definition: recursive_cfg_builder.cpp:147
ShPtr< CFG::Node > addNode(ShPtr< Statement > stmt)
Adds a (either new or existing) node starting with stmt into the CFG and returns it.
Definition: recursive_cfg_builder.cpp:426
static ShPtr< RecursiveCFGBuilder > create()
Creates and returns a new RecursiveCFGBuilder.
Definition: recursive_cfg_builder.cpp:179
void addForwardOrBackwardEdge(ShPtr< Statement > stmt, ShPtr< Expression > edgeCond=nullptr)
Adds a forward or backward edge from the current node to the successor/parent of stmt.
Definition: recursive_cfg_builder.cpp:481
ShPtr< CFG::Node > currNode
Currently generated node.
Definition: recursive_cfg_builder.h:71
StmtNodeMapping firstStmtNodeMapping
Definition: recursive_cfg_builder.h:75
ShPtr< CFG::Node > getIndirectSuccessor(ShPtr< Statement > stmt)
Returns the (indirect) successor node of the given statement stmt.
Definition: recursive_cfg_builder.cpp:495
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
std::unordered_map< ShPtr< Statement >, ShPtr< CFG::Node > > StmtNodeMapping
Mapping of a statement into its corresponding node.
Definition: recursive_cfg_builder.h:35
void addStatement(ShPtr< Statement > stmt)
Adds a statement to the current node, visits its successors, and adds a forward or backward edge from...
Definition: recursive_cfg_builder.cpp:451
void visitForOrUForLoop(ShPtr< Statement > loop, ShPtr< Statement > body)
Implementation of visit() for for loops.
Definition: recursive_cfg_builder.cpp:570
virtual void buildCFG() override
Builds cfg.
Definition: recursive_cfg_builder.cpp:150
A library providing API for working with back-end IR.
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
Definition: archive_wrapper.h:19
A visitor that visits everything in an ordered way.
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.