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

A renamer of variable names which names them to make the code as readable as possible. More...

#include <readable_var_renamer.h>

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

Public Member Functions

virtual std::string getId () const override
 Returns the ID of the renamer. More...
 
- Public Member Functions inherited from retdec::llvmir2hll::VarRenamer
void renameVars (ShPtr< Module > module)
 Renames variables in the given module according to the settings set when constructing the renamer. More...
 

Static Public Member Functions

static ShPtr< VarRenamercreate (ShPtr< VarNameGen > varNameGen, bool useDebugNames=true)
 Creates a new renamer. More...
 

Private Member Functions

virtual void renameGlobalVar (ShPtr< Variable > var) override
 Renames the given global variable. More...
 
virtual void renameVarsInFunc (ShPtr< Function > func) override
 Renames variables in the given function. More...
 
virtual void renameFuncParam (ShPtr< Variable > var, ShPtr< Function > func) override
 Renames the given parameter var of function func. More...
 
virtual void renameFuncLocalVar (ShPtr< Variable > var, ShPtr< Function > func) override
 Renames the given local variable var of function func. More...
 
void visitSubsequentStmts (ShPtr< Statement > stmt)
 Visits subsequent statements of stmt (if any). More...
 
void visitFuncBody (ShPtr< Function > func)
 Visits the body of the given function. More...
 
void renameMainParams (ShPtr< Function > func)
 If the given function is "main", it properly renames its parameters. More...
 
void renameInductionVars (ShPtr< Function > func)
 Properly renames induction variables in the given function. More...
 
void renameInductionVar (ShPtr< Variable > var, ShPtr< Function > func)
 Renames the given induction variable in the given function. More...
 
void renameReturnedVars (ShPtr< Function > func)
 Properly renames variables returned from the given function. More...
 
void renameResultsOfWellKnownFuncs (ShPtr< Function > func)
 Renames variables storing the results of calls to well-known functions. More...
 
void renameArgsOfWellKnownFuncs (ShPtr< Function > func)
 Renames variables passed as arguments to well-known functions. More...
 
void renameOtherLocalVars (ShPtr< Function > func)
 Properly renames other local variables in the given function. More...
 
void renameVarByChoosingNameFromList (ShPtr< Variable > var, ShPtr< Function > func, const char **names, std::size_t numOfAvailNames)
 Renames the given variable in the given function by choosing the first fitting name from names. More...
 
void tryRenameVarStoringCallResult (ShPtr< Statement > stmt)
 Tries to rename the variable on the left-hand side of the given statement based on the function that is called in the right-hand side. More...
 
void tryRenameVarsPassedAsArgsToFuncCall (ShPtr< CallExpr > expr)
 Tries to rename variables pass as arguments to the given call. More...
 
void tryRenameVarPassedAsArgToFuncCall (ShPtr< Function > calledFunc, ShPtr< Variable > var, unsigned argPos)
 Tries to rename the given argument of the given call to a declared function. More...
 
ShPtr< FunctiongetDeclaredFunc (ShPtr< CallExpr > expr) const
 Returns the function called in the given expression provided that it is a call to a declared function, the null pointer otherwise. More...
 
ShPtr< VariablegetVarFromCallArg (ShPtr< Expression > arg) const
 Tries to obtain a variable from the given argument of a function call. More...
 
std::string genNameForFuncParam (ShPtr< Variable > var, ShPtr< Function > func) const
 Generates a name for the given parameter of the given function. More...
 
 ReadableVarRenamer (ShPtr< VarNameGen > varNameGen, bool useDebugNames)
 Constructs a new renamer. More...
 
Visitor Interface
virtual void visit (ShPtr< ForLoopStmt > stmt) override
 
virtual void visit (ShPtr< ReturnStmt > stmt) override
 
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< CallExpr > expr) 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
 

Private Attributes

UPtr< VarNameGenglobalVarNameGen
 Generator of names for global variables. More...
 
UPtr< VarNameGenlocalVarNameGen
 Generator of names for local variables. More...
 
StringSet indVarsNamesInCurrFunc
 
bool renamingInductionVars
 Are we renaming induction variables? More...
 
bool renamingReturnVars
 Are we renaming return variables? More...
 
bool renamingResultsOfWellKnownFuncs
 
bool renamingArgsOfWellKnownFuncs
 

Additional Inherited Members

- Protected Types inherited from retdec::llvmir2hll::VarRenamer
using FuncStringSetMap = std::map< ShPtr< Function >, StringSet >
 Mapping of a function into a set of strings. More...
 
using FuncByNameMap = std::map< std::string, ShPtr< Function > >
 Mapping of a function's name into the function. More...
 
- Protected Member Functions inherited from retdec::llvmir2hll::VarRenamer
 VarRenamer (ShPtr< VarNameGen > varNameGen, bool useDebugNames=true)
 Constructs a new variable renamer. More...
 
void assignName (ShPtr< Variable > var, const std::string &name, ShPtr< Function > func=nullptr)
 Assigns name to the given variable var, possibly in the given function. More...
 
void assignNameFromDebugInfoIfAvail (ShPtr< Variable > var, ShPtr< Function > func=nullptr)
 Assigns the name from debug information (if available) to the given variable. More...
 
bool isGlobalVar (ShPtr< Variable > var) const
 Returns true if the given variable is global, false otherwise. More...
 
bool isFunc (ShPtr< Variable > var) const
 Returns true if the given variable corresponds to a function, false otherwise. More...
 
bool hasBeenRenamed (ShPtr< Variable > var) const
 Returns true if the given variable has already been renamed, false otherwise. More...
 
bool nameExists (const std::string &name, ShPtr< Function > func=nullptr) const
 Returns true if the given name has already been assigned, false otherwise. More...
 
ShPtr< FunctiongetFuncByName (const std::string &name) const
 Returns a function with the given name. More...
 
virtual void doVarsRenaming ()
 Renames the variables in module. More...
 
virtual void renameUsingDebugNames ()
 Renames all variables in the module by using the assigned names from debug information. More...
 
virtual void renameGlobalVars ()
 Renames all global variables in the module. More...
 
virtual void renameVarsInFuncs ()
 Renames the variables in all functions. 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
 
- Protected Member Functions inherited from retdec::llvmir2hll::OrderedAllVisitor
 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 void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< Function > func) 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< UForLoopStmt > stmt) override
 
virtual void visit (ShPtr< GotoStmt > stmt) override
 
virtual void visit (ShPtr< IfStmt > stmt) override
 
virtual void visit (ShPtr< SwitchStmt > stmt) override
 
virtual void visit (ShPtr< UnreachableStmt > 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< 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< 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 Member Functions inherited from retdec::llvmir2hll::Visitor
 Visitor ()=default
 
virtual ~Visitor ()=default
 
- Protected Attributes inherited from retdec::llvmir2hll::VarRenamer
ShPtr< VarNameGenvarNameGen
 Used generator of variable names. More...
 
bool useDebugNames
 Should we use variable names from debugging information? More...
 
ShPtr< Modulemodule
 Module in which the variables are being renamed. More...
 
VarSet globalVars
 
FuncByNameMap funcsByName
 
VarSet renamedVars
 Variables which have already been renamed. More...
 
StringSet globalVarsNames
 Assigned names of global variables. More...
 
FuncStringSetMap localVarsNames
 
ShPtr< FunctioncurrFunc
 The currently visited function. More...
 
- Protected 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...
 

Detailed Description

A renamer of variable names which names them to make the code as readable as possible.

The following renames are done: (1) If a variable has assigned a name from debug information, it is used.

(2) Induction variables of loops are named "i", "j", "k", ... (if possible).

(3) If only a single variable is returned from a function, this variable is named "result" (if possible).

(4) The parameters of the main() function are named "argc" and "argv" (if possible).

(5) Variables storing the return values of some well-known functions, which are named uniformly by programmers, are assigned such names. For example, depending on the used semantics, the variable storing the result of getchar() may be named c.

(6) Variables passed as arguments to some well-known functions are given more meaningful names (whenever possible). For example, depending on the used semantics, the variable passed as the first argument of fopen() may be named file_path.

(7) The remaining variables are named gX (global variables), aX (parameters), and vX (local variables), where Xs are consecutive numbers, starting from 1.

Use create() to create instances.

Constructor & Destructor Documentation

◆ ReadableVarRenamer()

retdec::llvmir2hll::ReadableVarRenamer::ReadableVarRenamer ( ShPtr< VarNameGen varNameGen,
bool  useDebugNames 
)
private

Constructs a new renamer.

For more details, see create().

Member Function Documentation

◆ create()

ShPtr< VarRenamer > retdec::llvmir2hll::ReadableVarRenamer::create ( ShPtr< VarNameGen varNameGen,
bool  useDebugNames = true 
)
static

Creates a new renamer.

Parameters
[in]varNameGenUsed generator of variable names (not used in this renamer).
[in]useDebugNamesShould we use variable names from debugging information?
Preconditions
  • varNameGen is non-null

◆ genNameForFuncParam()

std::string retdec::llvmir2hll::ReadableVarRenamer::genNameForFuncParam ( ShPtr< Variable var,
ShPtr< Function func 
) const
private

Generates a name for the given parameter of the given function.

◆ getDeclaredFunc()

ShPtr< Function > retdec::llvmir2hll::ReadableVarRenamer::getDeclaredFunc ( ShPtr< CallExpr expr) const
private

Returns the function called in the given expression provided that it is a call to a declared function, the null pointer otherwise.

◆ getId()

std::string retdec::llvmir2hll::ReadableVarRenamer::getId ( ) const
overridevirtual

Returns the ID of the renamer.

Implements retdec::llvmir2hll::VarRenamer.

◆ getVarFromCallArg()

ShPtr< Variable > retdec::llvmir2hll::ReadableVarRenamer::getVarFromCallArg ( ShPtr< Expression arg) const
private

Tries to obtain a variable from the given argument of a function call.

When the variable cannot be obtained, the null pointer is returned.

◆ renameArgsOfWellKnownFuncs()

void retdec::llvmir2hll::ReadableVarRenamer::renameArgsOfWellKnownFuncs ( ShPtr< Function func)
private

Renames variables passed as arguments to well-known functions.

◆ renameFuncLocalVar()

void retdec::llvmir2hll::ReadableVarRenamer::renameFuncLocalVar ( ShPtr< Variable var,
ShPtr< Function func 
)
overrideprivatevirtual

Renames the given local variable var of function func.

By default, it uses varNameGen to generate a new name for the variable.

Preconditions
  • var and func are non-null

Reimplemented from retdec::llvmir2hll::VarRenamer.

◆ renameFuncParam()

void retdec::llvmir2hll::ReadableVarRenamer::renameFuncParam ( ShPtr< Variable var,
ShPtr< Function func 
)
overrideprivatevirtual

Renames the given parameter var of function func.

By default, it uses varNameGen to generate a new name for the variable.

Preconditions
  • var and func are non-null

Reimplemented from retdec::llvmir2hll::VarRenamer.

◆ renameGlobalVar()

void retdec::llvmir2hll::ReadableVarRenamer::renameGlobalVar ( ShPtr< Variable var)
overrideprivatevirtual

Renames the given global variable.

By default, it uses varNameGen to generate a new name for the variable.

Preconditions
  • var is non-null

Reimplemented from retdec::llvmir2hll::VarRenamer.

◆ renameInductionVar()

void retdec::llvmir2hll::ReadableVarRenamer::renameInductionVar ( ShPtr< Variable var,
ShPtr< Function func 
)
private

Renames the given induction variable in the given function.

◆ renameInductionVars()

void retdec::llvmir2hll::ReadableVarRenamer::renameInductionVars ( ShPtr< Function func)
private

Properly renames induction variables in the given function.

◆ renameMainParams()

void retdec::llvmir2hll::ReadableVarRenamer::renameMainParams ( ShPtr< Function func)
private

If the given function is "main", it properly renames its parameters.

◆ renameOtherLocalVars()

void retdec::llvmir2hll::ReadableVarRenamer::renameOtherLocalVars ( ShPtr< Function func)
private

Properly renames other local variables in the given function.

◆ renameResultsOfWellKnownFuncs()

void retdec::llvmir2hll::ReadableVarRenamer::renameResultsOfWellKnownFuncs ( ShPtr< Function func)
private

Renames variables storing the results of calls to well-known functions.

◆ renameReturnedVars()

void retdec::llvmir2hll::ReadableVarRenamer::renameReturnedVars ( ShPtr< Function func)
private

Properly renames variables returned from the given function.

◆ renameVarByChoosingNameFromList()

void retdec::llvmir2hll::ReadableVarRenamer::renameVarByChoosingNameFromList ( ShPtr< Variable var,
ShPtr< Function func,
const char **  names,
std::size_t  numOfAvailNames 
)
private

Renames the given variable in the given function by choosing the first fitting name from names.

Parameters
[in,out]varVariable to be renamed.
[in]funcFunction that contains var as a parameter or local variable.
[in]namesList of available names.
[in]numOfAvailNamesNumber of available names in names.

If there are no names that can be used, the last name of names is used, but a suffix is appended to it.

◆ renameVarsInFunc()

void retdec::llvmir2hll::ReadableVarRenamer::renameVarsInFunc ( ShPtr< Function func)
overrideprivatevirtual

Renames variables in the given function.

By default, it sets currFunc, calls renameFuncParam() on every function parameter that has not yet been renamed. Then, if func is a definition, it calls visitStmt(func->getBody()) to call renameFuncLocalVar() on every local variable in the function.

Preconditions
  • func is non-null

Reimplemented from retdec::llvmir2hll::VarRenamer.

◆ tryRenameVarPassedAsArgToFuncCall()

void retdec::llvmir2hll::ReadableVarRenamer::tryRenameVarPassedAsArgToFuncCall ( ShPtr< Function calledFunc,
ShPtr< Variable var,
unsigned  argPos 
)
private

Tries to rename the given argument of the given call to a declared function.

This function does nothing when:

  • var is a global variable, function, or it has already been renamed

◆ tryRenameVarsPassedAsArgsToFuncCall()

void retdec::llvmir2hll::ReadableVarRenamer::tryRenameVarsPassedAsArgsToFuncCall ( ShPtr< CallExpr expr)
private

Tries to rename variables pass as arguments to the given call.

Preconditions
  • expr is non-null

This function does nothing when:

  • expr is a function call to anything but a declared function
  • there are no variables to be renamed

◆ tryRenameVarStoringCallResult()

void retdec::llvmir2hll::ReadableVarRenamer::tryRenameVarStoringCallResult ( ShPtr< Statement stmt)
private

Tries to rename the variable on the left-hand side of the given statement based on the function that is called in the right-hand side.

Preconditions
  • stmt is non-null
  • stmt is either a variable-defining statement or an assign statement

This function does nothing when:

  • the left-hand side of stmt is not a variable
  • the right-hand side of stmt is a function call to anything but a declared function
  • the variable has already been renamed or it is a global variable

◆ visit() [1/75]

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

◆ visit() [2/75]

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

◆ visit() [3/75]

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

◆ visit() [4/75]

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

◆ visit() [5/75]

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

◆ visit() [6/75]

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

◆ visit() [7/75]

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

◆ visit() [8/75]

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

◆ visit() [9/75]

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

◆ visit() [10/75]

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

◆ visit() [11/75]

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

◆ visit() [12/75]

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

◆ visit() [13/75]

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

◆ visit() [14/75]

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

◆ visit() [15/75]

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

◆ visit() [16/75]

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

◆ visit() [17/75]

void retdec::llvmir2hll::ReadableVarRenamer::visit ( ShPtr< CallExpr expr)
overrideprivatevirtual

◆ visit() [18/75]

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

◆ visit() [19/75]

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

◆ visit() [20/75]

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

◆ visit() [21/75]

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

◆ visit() [22/75]

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

◆ visit() [23/75]

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

◆ visit() [24/75]

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

◆ visit() [25/75]

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

◆ visit() [26/75]

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

◆ visit() [27/75]

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

◆ visit() [28/75]

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

◆ visit() [29/75]

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

◆ visit() [30/75]

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

◆ visit() [31/75]

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

◆ visit() [32/75]

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

◆ visit() [33/75]

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

◆ visit() [34/75]

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

◆ visit() [35/75]

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

◆ visit() [36/75]

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

◆ visit() [37/75]

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

◆ visit() [38/75]

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

◆ visit() [39/75]

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

◆ visit() [40/75]

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

◆ visit() [41/75]

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

◆ visit() [42/75]

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

◆ visit() [43/75]

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

◆ visit() [44/75]

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

◆ visit() [45/75]

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

◆ visit() [46/75]

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

◆ visit() [47/75]

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

◆ visit() [48/75]

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

◆ visit() [49/75]

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

◆ visit() [50/75]

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

◆ visit() [51/75]

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

◆ visit() [52/75]

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

◆ visit() [53/75]

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

◆ visit() [54/75]

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

◆ visit() [55/75]

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

◆ visit() [56/75]

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

◆ visit() [57/75]

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

◆ visit() [58/75]

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

◆ visit() [59/75]

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

◆ visit() [60/75]

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

◆ visit() [61/75]

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

◆ visit() [62/75]

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

◆ visit() [63/75]

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

◆ visit() [64/75]

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

◆ visit() [65/75]

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

◆ visit() [66/75]

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

◆ visit() [67/75]

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

◆ visit() [68/75]

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

◆ visit() [69/75]

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

◆ visit() [70/75]

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

◆ visit() [71/75]

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

◆ visit() [72/75]

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

◆ visit() [73/75]

void retdec::llvmir2hll::ReadableVarRenamer::visit ( ShPtr< Variable var)
overrideprivatevirtual

Reimplemented from retdec::llvmir2hll::VarRenamer.

◆ visit() [74/75]

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

◆ visit() [75/75]

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

◆ visitFuncBody()

void retdec::llvmir2hll::ReadableVarRenamer::visitFuncBody ( ShPtr< Function func)
private

Visits the body of the given function.

If the function doesn't have a body, this function does nothing. Otherwise, it sets currFunc, calls restart(), and visits the body.

◆ visitSubsequentStmts()

void retdec::llvmir2hll::ReadableVarRenamer::visitSubsequentStmts ( ShPtr< Statement stmt)
private

Visits subsequent statements of stmt (if any).

Member Data Documentation

◆ globalVarNameGen

UPtr<VarNameGen> retdec::llvmir2hll::ReadableVarRenamer::globalVarNameGen
private

Generator of names for global variables.

◆ indVarsNamesInCurrFunc

StringSet retdec::llvmir2hll::ReadableVarRenamer::indVarsNamesInCurrFunc
private

Names of induction variables in the current function. Available only after renameInductionVars() is run.

◆ localVarNameGen

UPtr<VarNameGen> retdec::llvmir2hll::ReadableVarRenamer::localVarNameGen
private

Generator of names for local variables.

◆ renamingArgsOfWellKnownFuncs

bool retdec::llvmir2hll::ReadableVarRenamer::renamingArgsOfWellKnownFuncs
private

Are we renaming variables passed as arguments of calls to well-known functions?

◆ renamingInductionVars

bool retdec::llvmir2hll::ReadableVarRenamer::renamingInductionVars
private

Are we renaming induction variables?

◆ renamingResultsOfWellKnownFuncs

bool retdec::llvmir2hll::ReadableVarRenamer::renamingResultsOfWellKnownFuncs
private

Are we renaming variables storing the results of calls to well-known functions?

◆ renamingReturnVars

bool retdec::llvmir2hll::ReadableVarRenamer::renamingReturnVars
private

Are we renaming return variables?


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