retdec
Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
retdec::llvmir2hll::RecursiveCFGBuilder Class Reference

A recursive creator of control-flow graphs (CFGs) from functions. More...

#include <recursive_cfg_builder.h>

Inheritance diagram for retdec::llvmir2hll::RecursiveCFGBuilder:
Inheritance graph
[legend]
Collaboration diagram for retdec::llvmir2hll::RecursiveCFGBuilder:
Collaboration graph
[legend]

Public Member Functions

virtual void buildCFG () override
 Builds cfg. More...
 
- Public Member Functions inherited from retdec::llvmir2hll::CFGBuilder
ShPtr< CFGgetCFG (ShPtr< Function > func)
 Returns a CFG of the given function func. More...
 

Static Public Member Functions

static ShPtr< RecursiveCFGBuildercreate ()
 Creates and returns a new RecursiveCFGBuilder. More...
 

Private Types

using StmtNodeMapping = std::unordered_map< ShPtr< Statement >, ShPtr< CFG::Node > >
 Mapping of a statement into its corresponding node. More...
 

Private Member Functions

 RecursiveCFGBuilder ()
 Constructs a new builder. More...
 
ShPtr< CFG::NodeaddNode (ShPtr< Statement > stmt)
 Adds a (either new or existing) node starting with stmt into the CFG and returns it. More...
 
void addStatement (ShPtr< Statement > stmt)
 Adds a statement to the current node, visits its successors, and adds a forward or backward edge from the current node to the successor/parent of stmt. More...
 
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. More...
 
ShPtr< CFG::NodegetIndirectSuccessor (ShPtr< Statement > stmt)
 Returns the (indirect) successor node of the given statement stmt. More...
 
void visitForOrUForLoop (ShPtr< Statement > loop, ShPtr< Statement > body)
 Implementation of visit() for for loops. More...
 
Visitor Interface
virtual void visit (ShPtr< Function > func) override
 
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< CallStmt > stmt) override
 
virtual void visit (ShPtr< ReturnStmt > stmt) override
 
virtual void visit (ShPtr< EmptyStmt > stmt) override
 
virtual void visit (ShPtr< IfStmt > stmt) override
 
virtual void visit (ShPtr< SwitchStmt > stmt) override
 
virtual void visit (ShPtr< WhileLoopStmt > stmt) override
 
virtual void visit (ShPtr< ForLoopStmt > stmt) override
 
virtual void visit (ShPtr< UForLoopStmt > stmt) override
 
virtual void visit (ShPtr< BreakStmt > stmt) override
 
virtual void visit (ShPtr< ContinueStmt > stmt) override
 
virtual void visit (ShPtr< GotoStmt > stmt) override
 
virtual void visit (ShPtr< UnreachableStmt > stmt) override
 
virtual void visitStmt (ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true) override
 Visits the given statement, and possibly its successors or nested statements. More...
 
virtual void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< Function > func) override
 
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< BreakStmt > stmt) override
 
virtual void visit (ShPtr< CallStmt > stmt) override
 
virtual void visit (ShPtr< ContinueStmt > stmt) override
 
virtual void visit (ShPtr< EmptyStmt > stmt) override
 
virtual void visit (ShPtr< ForLoopStmt > stmt) override
 
virtual void visit (ShPtr< UForLoopStmt > stmt) override
 
virtual void visit (ShPtr< GotoStmt > stmt) override
 
virtual void visit (ShPtr< IfStmt > stmt) override
 
virtual void visit (ShPtr< ReturnStmt > stmt) override
 
virtual void visit (ShPtr< SwitchStmt > stmt) override
 
virtual void visit (ShPtr< UnreachableStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< WhileLoopStmt > stmt) override
 
virtual void visit (ShPtr< AddOpExpr > expr) override
 
virtual void visit (ShPtr< AddressOpExpr > expr) override
 
virtual void visit (ShPtr< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > expr) override
 
virtual void visit (ShPtr< BitAndOpExpr > expr) override
 
virtual void visit (ShPtr< BitOrOpExpr > expr) override
 
virtual void visit (ShPtr< BitShlOpExpr > expr) override
 
virtual void visit (ShPtr< BitShrOpExpr > expr) override
 
virtual void visit (ShPtr< BitXorOpExpr > expr) override
 
virtual void visit (ShPtr< CallExpr > expr) override
 
virtual void visit (ShPtr< CommaOpExpr > expr) override
 
virtual void visit (ShPtr< DerefOpExpr > expr) override
 
virtual void visit (ShPtr< DivOpExpr > expr) override
 
virtual void visit (ShPtr< EqOpExpr > expr) override
 
virtual void visit (ShPtr< GtEqOpExpr > expr) override
 
virtual void visit (ShPtr< GtOpExpr > expr) override
 
virtual void visit (ShPtr< LtEqOpExpr > expr) override
 
virtual void visit (ShPtr< LtOpExpr > expr) override
 
virtual void visit (ShPtr< ModOpExpr > expr) override
 
virtual void visit (ShPtr< MulOpExpr > expr) override
 
virtual void visit (ShPtr< NegOpExpr > expr) override
 
virtual void visit (ShPtr< NeqOpExpr > expr) override
 
virtual void visit (ShPtr< NotOpExpr > expr) override
 
virtual void visit (ShPtr< OrOpExpr > expr) override
 
virtual void visit (ShPtr< StructIndexOpExpr > expr) override
 
virtual void visit (ShPtr< SubOpExpr > expr) override
 
virtual void visit (ShPtr< TernaryOpExpr > expr) override
 
virtual void visit (ShPtr< Variable > var) override
 
virtual void visit (ShPtr< BitCastExpr > expr) override
 
virtual void visit (ShPtr< ExtCastExpr > expr) override
 
virtual void visit (ShPtr< FPToIntCastExpr > expr) override
 
virtual void visit (ShPtr< IntToFPCastExpr > expr) override
 
virtual void visit (ShPtr< IntToPtrCastExpr > expr) override
 
virtual void visit (ShPtr< PtrToIntCastExpr > expr) override
 
virtual void visit (ShPtr< TruncCastExpr > expr) override
 
virtual void visit (ShPtr< ConstArray > constant) override
 
virtual void visit (ShPtr< ConstBool > constant) override
 
virtual void visit (ShPtr< ConstFloat > constant) override
 
virtual void visit (ShPtr< ConstInt > constant) override
 
virtual void visit (ShPtr< ConstNullPointer > constant) override
 
virtual void visit (ShPtr< ConstString > constant) override
 
virtual void visit (ShPtr< ConstStruct > constant) override
 
virtual void visit (ShPtr< ConstSymbol > constant) override
 
virtual void visit (ShPtr< ArrayType > type) override
 
virtual void visit (ShPtr< FloatType > type) override
 
virtual void visit (ShPtr< IntType > type) override
 
virtual void visit (ShPtr< PointerType > type) override
 
virtual void visit (ShPtr< StringType > type) override
 
virtual void visit (ShPtr< StructType > type) override
 
virtual void visit (ShPtr< FunctionType > type) override
 
virtual void visit (ShPtr< VoidType > type) override
 
virtual void visit (ShPtr< UnknownType > type) override
 
- Private Member Functions inherited from retdec::llvmir2hll::OrderedAllVisitor
virtual void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< AddOpExpr > expr) override
 
virtual void visit (ShPtr< AddressOpExpr > expr) override
 
virtual void visit (ShPtr< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > expr) override
 
virtual void visit (ShPtr< BitAndOpExpr > expr) override
 
virtual void visit (ShPtr< BitOrOpExpr > expr) override
 
virtual void visit (ShPtr< BitShlOpExpr > expr) override
 
virtual void visit (ShPtr< BitShrOpExpr > expr) override
 
virtual void visit (ShPtr< BitXorOpExpr > expr) override
 
virtual void visit (ShPtr< CallExpr > expr) override
 
virtual void visit (ShPtr< CommaOpExpr > expr) override
 
virtual void visit (ShPtr< DerefOpExpr > expr) override
 
virtual void visit (ShPtr< DivOpExpr > expr) override
 
virtual void visit (ShPtr< EqOpExpr > expr) override
 
virtual void visit (ShPtr< GtEqOpExpr > expr) override
 
virtual void visit (ShPtr< GtOpExpr > expr) override
 
virtual void visit (ShPtr< LtEqOpExpr > expr) override
 
virtual void visit (ShPtr< LtOpExpr > expr) override
 
virtual void visit (ShPtr< ModOpExpr > expr) override
 
virtual void visit (ShPtr< MulOpExpr > expr) override
 
virtual void visit (ShPtr< NegOpExpr > expr) override
 
virtual void visit (ShPtr< NeqOpExpr > expr) override
 
virtual void visit (ShPtr< NotOpExpr > expr) override
 
virtual void visit (ShPtr< OrOpExpr > expr) override
 
virtual void visit (ShPtr< StructIndexOpExpr > expr) override
 
virtual void visit (ShPtr< SubOpExpr > expr) override
 
virtual void visit (ShPtr< TernaryOpExpr > expr) override
 
virtual void visit (ShPtr< Variable > var) override
 
virtual void visit (ShPtr< BitCastExpr > expr) override
 
virtual void visit (ShPtr< ExtCastExpr > expr) override
 
virtual void visit (ShPtr< FPToIntCastExpr > expr) override
 
virtual void visit (ShPtr< IntToFPCastExpr > expr) override
 
virtual void visit (ShPtr< IntToPtrCastExpr > expr) override
 
virtual void visit (ShPtr< PtrToIntCastExpr > expr) override
 
virtual void visit (ShPtr< TruncCastExpr > expr) override
 
virtual void visit (ShPtr< ConstArray > constant) override
 
virtual void visit (ShPtr< ConstBool > constant) override
 
virtual void visit (ShPtr< ConstFloat > constant) override
 
virtual void visit (ShPtr< ConstInt > constant) override
 
virtual void visit (ShPtr< ConstNullPointer > constant) override
 
virtual void visit (ShPtr< ConstString > constant) override
 
virtual void visit (ShPtr< ConstStruct > constant) override
 
virtual void visit (ShPtr< ConstSymbol > constant) override
 
virtual void visit (ShPtr< ArrayType > type) override
 
virtual void visit (ShPtr< FloatType > type) override
 
virtual void visit (ShPtr< IntType > type) override
 
virtual void visit (ShPtr< PointerType > type) override
 
virtual void visit (ShPtr< StringType > type) override
 
virtual void visit (ShPtr< StructType > type) override
 
virtual void visit (ShPtr< FunctionType > type) override
 
virtual void visit (ShPtr< VoidType > type) override
 
virtual void visit (ShPtr< UnknownType > type) override
 
 OrderedAllVisitor (bool visitSuccessors=true, bool visitNestedStmts=true)
 Constructs a new visitor. More...
 
void restart (bool visitSuccessors=true, bool visitNestedStmts=true)
 "Restarts" the visitor so it is in the state like it was when it was created. More...
 
bool makeAccessedAndCheckIfAccessed (ShPtr< Type > type)
 Makes the given type accessed. More...
 
- Private Member Functions inherited from retdec::llvmir2hll::Visitor
virtual ~Visitor ()=default
 
 Visitor ()=default
 

Private Attributes

ShPtr< CFG::NodecurrNode
 Currently generated node. More...
 
StmtNodeMapping firstStmtNodeMapping
 
- Private Attributes inherited from retdec::llvmir2hll::OrderedAllVisitor
ShPtr< StatementlastStmt
 Statement that has been accessed as the last one. More...
 
StmtUSet accessedStmts
 A set of all accessed statements. More...
 
TypeUSet accessedTypes
 A set of all accessed types. More...
 
bool visitSuccessors
 Should statements' successor be accessed? More...
 
bool visitNestedStmts
 Should nested statements be accessed? More...
 

Additional Inherited Members

- Protected Member Functions inherited from retdec::llvmir2hll::CFGBuilder
 CFGBuilder ()=default
 
- Protected Attributes inherited from retdec::llvmir2hll::CFGBuilder
ShPtr< CFGcfg
 A CFG that is currently being built. More...
 
ShPtr< Functionfunc
 A function from which the CFG is being built. More...
 

Detailed Description

A recursive creator of control-flow graphs (CFGs) from functions.

Deprecated:
Use of this class to build CFGs is deprecated. Use NonRecursiveCFGBuilder, which can handle large code without requiring too much space on the stack.

Member Typedef Documentation

◆ StmtNodeMapping

Mapping of a statement into its corresponding node.

Constructor & Destructor Documentation

◆ RecursiveCFGBuilder()

retdec::llvmir2hll::RecursiveCFGBuilder::RecursiveCFGBuilder ( )
private

Constructs a new builder.

Member Function Documentation

◆ addForwardOrBackwardEdge()

void retdec::llvmir2hll::RecursiveCFGBuilder::addForwardOrBackwardEdge ( ShPtr< Statement stmt,
ShPtr< Expression edgeCond = nullptr 
)
private

Adds a forward or backward edge from the current node to the successor/parent of stmt.

Parameters
[in]stmtStatement for which the edge is added.
[in]edgeCondOptional condition of the added edge.

If stmt->getParent() does not exist, it implies that there is an implicit return from the function. If it exists and it is a while or for loop, it creates a backward edge. If it is an if or switch statement, it creates a forward edge.

Precondition:

  • stmt doesn't have a (direct) successor

This function may add new nodes.

◆ addNode()

ShPtr< CFG::Node > retdec::llvmir2hll::RecursiveCFGBuilder::addNode ( ShPtr< Statement stmt)
private

Adds a (either new or existing) node starting with stmt into the CFG and returns it.

Preconditions
  • stmt is non-null

◆ addStatement()

void retdec::llvmir2hll::RecursiveCFGBuilder::addStatement ( ShPtr< Statement stmt)
private

Adds a statement to the current node, visits its successors, and adds a forward or backward edge from the current node to the successor/parent of stmt.

Empty statements are skipped (i.e. not added to cfg->stmtNodeMapping and currNode->stmts).

◆ buildCFG()

void retdec::llvmir2hll::RecursiveCFGBuilder::buildCFG ( )
overridevirtual

Builds cfg.

When this function is called, cfg and func are correctly initialized.

Implements retdec::llvmir2hll::CFGBuilder.

◆ create()

ShPtr< RecursiveCFGBuilder > retdec::llvmir2hll::RecursiveCFGBuilder::create ( )
static

Creates and returns a new RecursiveCFGBuilder.

◆ getIndirectSuccessor()

ShPtr< CFG::Node > retdec::llvmir2hll::RecursiveCFGBuilder::getIndirectSuccessor ( ShPtr< Statement stmt)
private

Returns the (indirect) successor node of the given statement stmt.

This function may add new nodes.

◆ visit() [1/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [2/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [3/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [4/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [5/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [6/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [7/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [8/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< AssignStmt stmt)
overrideprivatevirtual

◆ visit() [9/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [10/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [11/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [12/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [13/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [14/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [15/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [16/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< BreakStmt stmt)
overrideprivatevirtual

◆ visit() [17/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [18/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [19/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< CallStmt stmt)
overrideprivatevirtual

◆ visit() [20/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [21/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [22/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [23/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [24/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [25/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [26/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [27/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [28/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [29/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [30/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< ContinueStmt stmt)
overrideprivatevirtual

◆ visit() [31/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [32/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [33/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [34/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< EmptyStmt stmt)
overrideprivatevirtual

◆ visit() [35/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [36/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [37/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [38/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [39/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< ForLoopStmt stmt)
overrideprivatevirtual

◆ visit() [40/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [41/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [42/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< Function func)
overrideprivatevirtual

◆ visit() [43/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [44/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [45/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [46/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< GotoStmt stmt)
overrideprivatevirtual

◆ visit() [47/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [48/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [49/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [50/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< IfStmt stmt)
overrideprivatevirtual

◆ visit() [51/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [52/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [53/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [54/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [55/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [56/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [57/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [58/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [59/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [60/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [61/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [62/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [63/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [64/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [65/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< ReturnStmt stmt)
overrideprivatevirtual

◆ visit() [66/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [67/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [68/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [69/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [70/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [71/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< SwitchStmt stmt)
overrideprivatevirtual

◆ visit() [72/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [73/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [74/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [75/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< UForLoopStmt stmt)
overrideprivatevirtual

◆ visit() [76/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [77/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [78/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< UnreachableStmt stmt)
overrideprivatevirtual

◆ visit() [79/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [80/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< VarDefStmt stmt)
overrideprivatevirtual

◆ visit() [81/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [82/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [83/84]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [84/84]

void retdec::llvmir2hll::RecursiveCFGBuilder::visit ( ShPtr< WhileLoopStmt stmt)
overrideprivatevirtual

◆ visitForOrUForLoop()

void retdec::llvmir2hll::RecursiveCFGBuilder::visitForOrUForLoop ( ShPtr< Statement loop,
ShPtr< Statement body 
)
private

Implementation of visit() for for loops.

◆ visitStmt()

void retdec::llvmir2hll::RecursiveCFGBuilder::visitStmt ( ShPtr< Statement stmt,
bool  visitSuccessors = true,
bool  visitNestedStmts = true 
)
overrideprivatevirtual

Visits the given statement, and possibly its successors or nested statements.

Parameters
[in]stmtStatement to be visited.
[in]visitSuccessorsIf true, a successor of stmt is also visited (and a successor of this successor, and so on).
[in]visitNestedStmtsIf true, nested statements are also visited, e.g. loop, if, and switch statement's bodies.

If stmt has already been accessed, this function does nothing. If stmt is the null pointer, it also does nothing. Before visiting stmt, this function adds it to accessedStmts.

Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.

Member Data Documentation

◆ currNode

ShPtr<CFG::Node> retdec::llvmir2hll::RecursiveCFGBuilder::currNode
private

Currently generated node.

◆ firstStmtNodeMapping

StmtNodeMapping retdec::llvmir2hll::RecursiveCFGBuilder::firstStmtNodeMapping
private

Mapping between a statement S and a node N of which S is the first statement.


The documentation for this class was generated from the following files: