retdec
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
retdec::llvmir2hll::Validator Class Referenceabstract

A base class for all validators. More...

#include <validator.h>

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

Public Member Functions

virtual std::string getId () const =0
 
bool validate (ShPtr< Module > module, bool printMessageOnError=false)
 Validates the given module. More...
 

Protected Member Functions

 Validator ()
 Constructs a new validator. More...
 
void traverseAllGlobalVariables ()
 Traverses all global variables in the current module and calls accept() on every one of them. More...
 
void traverseAllFunctions ()
 Traverses all functions in the current module and calls accept() on every one of them. More...
 
void validationError (const std::string &warningMessage)
 Function to be called when there is a validation error. More...
 
- 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< 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::Visitor
 Visitor ()=default
 
virtual ~Visitor ()=default
 

Protected Attributes

ShPtr< Modulemodule
 The validated module. More...
 
ShPtr< Functionfunc
 The currently traversed 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...
 

Private Member Functions

virtual void runValidation ()
 Runs the validation over the module. More...
 

Private Attributes

bool printMessageOnError
 Should we print a warning message when encountering an error? More...
 
bool moduleIsCorrect
 true if there has not been an error, false otherwise. More...
 

Detailed Description

A base class for all validators.

Every concrete validator has to:

A concrete validator can utilize protected members of this base class.

Instances of this class have reference object semantics.

Constructor & Destructor Documentation

◆ Validator()

retdec::llvmir2hll::Validator::Validator ( )
protected

Constructs a new validator.

Member Function Documentation

◆ getId()

virtual std::string retdec::llvmir2hll::Validator::getId ( ) const
pure virtual

◆ runValidation()

void retdec::llvmir2hll::Validator::runValidation ( )
privatevirtual

Runs the validation over the module.

By default, this function calls traverseAllGlobalVariables() and traverseAllFunctions(). If you want to do anything else, redefine this member function.

◆ traverseAllFunctions()

void retdec::llvmir2hll::Validator::traverseAllFunctions ( )
protected

Traverses all functions in the current module and calls accept() on every one of them.

Furthermore, before traversing a function, it sets the data member func to the traversed function.

◆ traverseAllGlobalVariables()

void retdec::llvmir2hll::Validator::traverseAllGlobalVariables ( )
protected

Traverses all global variables in the current module and calls accept() on every one of them.

◆ validate()

bool retdec::llvmir2hll::Validator::validate ( ShPtr< Module module,
bool  printMessageOnError = false 
)

Validates the given module.

Parameters
[in]moduleModule to be validated.
[in]printMessageOnErrorIf true and the module is not valid, it prints a warning message to standard error.
Returns
true if the module is correct, false otherwise.

The details depend on the concrete validator. See its class description. If there are multiple errors and printMessageOnError is true, it prints a warning message for each of these errors.

Preconditions
  • module is non-null

◆ validationError()

void retdec::llvmir2hll::Validator::validationError ( const std::string &  warningMessage)
inlineprotected

Function to be called when there is a validation error.

Member Data Documentation

◆ func

ShPtr<Function> retdec::llvmir2hll::Validator::func
protected

The currently traversed function.

◆ module

ShPtr<Module> retdec::llvmir2hll::Validator::module
protected

The validated module.

◆ moduleIsCorrect

bool retdec::llvmir2hll::Validator::moduleIsCorrect
private

true if there has not been an error, false otherwise.

◆ printMessageOnError

bool retdec::llvmir2hll::Validator::printMessageOnError
private

Should we print a warning message when encountering an error?


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