retdec
|
A base class of all brackets managers. More...
#include <bracket_manager.h>
Classes | |
struct | ItemOfPrecTable |
struct | PrevOperators |
Public Member Functions | |
BracketManager (ShPtr< Module > module) | |
Constructs a new base class for brackets managers. More... | |
void | init () |
Iterate through the module and visit all functions and all global variables. Starts brackets analyse. More... | |
virtual std::string | getId () const =0 |
Returns the ID of the BracketManager. More... | |
bool | areBracketsNeeded (ShPtr< Expression > expr) |
Function that decides whether the brackets are needed. This function is needed to be called from HLL writers. More... | |
OrderedAllVisitor Interface | |
virtual void | visit (ShPtr< AddressOpExpr > expr) override |
virtual void | visit (ShPtr< AssignOpExpr > expr) override |
virtual void | visit (ShPtr< ArrayIndexOpExpr > expr) override |
virtual void | visit (ShPtr< StructIndexOpExpr > expr) override |
virtual void | visit (ShPtr< DerefOpExpr > expr) override |
virtual void | visit (ShPtr< NotOpExpr > expr) override |
virtual void | visit (ShPtr< NegOpExpr > expr) override |
virtual void | visit (ShPtr< EqOpExpr > expr) override |
virtual void | visit (ShPtr< NeqOpExpr > expr) override |
virtual void | visit (ShPtr< LtEqOpExpr > expr) override |
virtual void | visit (ShPtr< GtEqOpExpr > expr) override |
virtual void | visit (ShPtr< LtOpExpr > expr) override |
virtual void | visit (ShPtr< GtOpExpr > expr) override |
virtual void | visit (ShPtr< AddOpExpr > expr) override |
virtual void | visit (ShPtr< SubOpExpr > expr) override |
virtual void | visit (ShPtr< MulOpExpr > expr) override |
virtual void | visit (ShPtr< ModOpExpr > expr) override |
virtual void | visit (ShPtr< DivOpExpr > expr) override |
virtual void | visit (ShPtr< AndOpExpr > expr) override |
virtual void | visit (ShPtr< OrOpExpr > expr) override |
virtual void | visit (ShPtr< BitAndOpExpr > expr) override |
virtual void | visit (ShPtr< BitOrOpExpr > expr) override |
virtual void | visit (ShPtr< BitXorOpExpr > expr) override |
virtual void | visit (ShPtr< BitShlOpExpr > expr) override |
virtual void | visit (ShPtr< BitShrOpExpr > expr) override |
virtual void | visit (ShPtr< TernaryOpExpr > expr) override |
virtual void | visit (ShPtr< CallExpr > expr) override |
virtual void | visit (ShPtr< CommaOpExpr > expr) override |
virtual void | visit (ShPtr< BitCastExpr > expr) override |
virtual void | visit (ShPtr< ExtCastExpr > expr) override |
virtual void | visit (ShPtr< TruncCastExpr > 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< 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< ConstArray > constant) override |
virtual void | visit (ShPtr< ConstStruct > constant) override |
virtual void | visit (ShPtr< ConstSymbol > constant) override |
virtual void | visit (ShPtr< Variable > var) override |
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 |
Protected Types | |
enum class | Operators { ADD , ADDRESS , AND , ARRAY , ASSIGN , BITAND , BITOR , BITSHL , BITSHR , BITXOR , CALL , CAST , COMMA , DEREF , DIV , EQ , GT , GTEQ , LT , LTEQ , MOD , MUL , NEG , NEQ , NOT , OR , STRUCT , SUB , TERNARY } |
Enumeration for operators. More... | |
enum class | Direction { CENTER , LEFT , RIGHT } |
Enumeration for direction tree traversal. More... | |
enum | FirstParInItemOfPrecTable { L , R , N , S } |
Protected Member Functions | |
virtual ItemOfPrecTable | checkPrecTable (Operators currentOperator, Operators prevOperator)=0 |
virtual bool | isOperatorSupported (Operators currentOperator)=0 |
PrevOperators | getPrevOperator () |
Top element from prevOperatorsStack . More... | |
Static Protected Attributes | |
static const bool | T = true |
Bool constants. More... | |
static const bool | F = false |
static const int | PREC_TABLE_SIZE = 29 |
Constant for size of precedence table. More... | |
Private Member Functions | |
void | addOperatorOnStackIfSupported (Operators currentOperator, Direction direction) |
Create a structure which contains previous operator and direction of tree traversal and add it on stack of prevOperatorsStack . If operator is not supported, operator is not pushed on stack. More... | |
void | areBracketsNeededForExpr (ShPtr< Expression > expr, Operators currentOperator) |
Function find out, if brackets are needed for input expression. More... | |
bool | areBracketsNeededPrecTable (Operators currentOperator) |
This function enter to precedence table with function checkPrecTable(...) and accordance it decide to if brackets are needed or not. More... | |
void | removeOperatorFromStackIfSupported (Operators currentOperator) |
Pop element from prevOperatorsStack. If operator is not supported, operator is not popped from stack. More... | |
void | treeTraversalForBinaryOpWithStackOperations (ShPtr< BinaryOpExpr > expr, Operators currentOperator) |
Function visit operands of BinaryOpExpr . Function also add operator on stack of previous operators and after visit operand remove this operator from stack. More... | |
void | treeTraversalForCallWithStackOperations (ShPtr< CallExpr > expr, Operators currentOperator) |
Function visit arguments of CallExpr . Function also add operator on stack of previous operators and after visit operand remove this operator from stack. More... | |
void | treeTraversalForCastWithStackOperations (ShPtr< CastExpr > expr, Operators currentOperator) |
Function visit operand of CastExpr . Function also add operator on stack of previous operators and after visit operand remove this operator from stack. More... | |
void | treeTraversalForTernaryOpWithStackOperations (ShPtr< TernaryOpExpr > expr, Operators currentOperator) |
Function visit operands of TernaryOpExpr . Function also add operator on stack of previous operators and after visit operand remove this operator from stack. More... | |
void | treeTraversalForUnaryOpWithStackOperations (ShPtr< UnaryOpExpr > expr, Operators currentOperator) |
Function visit operand of UnaryOpExpr . Function also add operator on stack of previous operators and after visit operand remove this operator from stack. 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< 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... | |
virtual void | visitStmt (ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true) |
Visits the given statement, and possibly its successors or nested statements. 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... | |
![]() | |
virtual | ~Visitor ()=default |
Visitor ()=default | |
Private Attributes | |
std::stack< PrevOperators > | prevOperatorsStack |
std::map< ShPtr< Expression >, bool > | bracketsAreNeededMap |
ShPtr< Module > | module |
The module to be analyzed. More... | |
![]() | |
ShPtr< Statement > | lastStmt |
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... | |
A base class of all brackets managers.
Every brackets manager should subclass this class and override protected checkPrecTable(...)
and isOperatorSupported(...)
functions. In subclass is needed to add a Precedence table, which is generated by script hll_prec_table_gen.py which is in /decompiler/scripts/. In C/Py/.. HLL Writer need to override emitTargetCode(...)
and call the constructor of subclass BracketManager. In constructor of subclass need to place function init(...)
.
Instances of this class have reference object semantics.
|
strongprotected |
|
strongprotected |
Constructs a new base class for brackets managers.
[in] | module | The module to be analyzed. |
|
private |
Create a structure which contains previous operator and direction of tree traversal and add it on stack of prevOperatorsStack
. If operator is not supported, operator is not pushed on stack.
[in] | currentOperator | enum Operators . It is used for creating item which is pushed as previous operator on stack. |
[in] | direction | enum Direction . Enumeration for direction tree traversal. |
bool retdec::llvmir2hll::BracketManager::areBracketsNeeded | ( | ShPtr< Expression > | expr | ) |
Function that decides whether the brackets are needed. This function is needed to be called from HLL writers.
[in] | expr | Input expression. |
true
if brackets are needed, false
otherwise.
|
private |
Function find out, if brackets are needed for input expression.
[in] | expr | Input expression. |
currentOperator | enum Operators . |
|
private |
This function enter to precedence table with function checkPrecTable(...)
and accordance it decide to if brackets are needed or not.
[in] | currentOperator | enum Operators . |
true
if brackets are needed, false
otherwise.
|
protectedpure virtual |
Implemented in retdec::llvmir2hll::NoBracketManager, and retdec::llvmir2hll::CBracketManager.
|
pure virtual |
Returns the ID of the BracketManager.
Implemented in retdec::llvmir2hll::NoBracketManager, and retdec::llvmir2hll::CBracketManager.
|
protected |
Top element from prevOperatorsStack
.
PrevOperators
which is a structure with previous operator and direction of tree traversal. void retdec::llvmir2hll::BracketManager::init | ( | ) |
Iterate through the module and visit all functions and all global variables. Starts brackets analyse.
|
protectedpure virtual |
Implemented in retdec::llvmir2hll::NoBracketManager, and retdec::llvmir2hll::CBracketManager.
|
private |
Pop element from prevOperatorsStack. If operator is not supported, operator is not popped from stack.
[in] | currentOperator | enum Operators . Operator is used for check whether is supported. |
|
private |
Function visit operands of BinaryOpExpr
. Function also add operator on stack of previous operators and after visit operand remove this operator from stack.
[in] | expr | Current expression. |
[in] | currentOperator | enum Operators . |
|
private |
Function visit operands of TernaryOpExpr
. Function also add operator on stack of previous operators and after visit operand remove this operator from stack.
[in] | expr | Current expression. |
[in] | currentOperator | enum Operators . |
|
private |
Function visit operand of UnaryOpExpr
. Function also add operator on stack of previous operators and after visit operand remove this operator from stack.
[in] | expr | Current expression. |
[in] | currentOperator | enum Operators . Current operator. |
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
override |
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
overridevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
override |
|
override |
|
override |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
override |
|
override |
|
private |
This map contains Expression adresses and status to write, or doesn't write brackets.
|
staticprotected |
|
staticprotected |
Constant for size of precedence table.
|
private |
Stack of structures. Every structure contains previous operator and direction of tree traversal.
|
staticprotected |
Bool constants.