retdec
|
Negation of expressions. More...
#include <expression_negater.h>
Static Public Member Functions | |
static ShPtr< Expression > | negate (ShPtr< Expression > expr) |
Negates the given expression. More... | |
Private Types | |
using | ExpressionStack = std::stack< ShPtr< Expression > > |
Type of a container to store expressions. More... | |
Private Member Functions | |
ExpressionNegater () | |
Constructs a new expression negater. More... | |
ShPtr< Expression > | negateInternal (ShPtr< Expression > expr) |
Negates the given expression. More... | |
Visitor Interface | |
virtual void | visit (ShPtr< Variable > var) override |
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< 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< GlobalVarDef > varDef) override |
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 | 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< ArrayType > 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 |
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 | ~Visitor ()=default |
Visitor ()=default | |
![]() | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
NonCopyable ()=default | |
~NonCopyable ()=default | |
Private Attributes | |
ExpressionStack | exprStack |
A stack to store expressions during negations. More... | |
Negation of expressions.
This class supports negation of expressions. For example, the expression
is negated into the following form
De-Morgan rules are used whenever possible to reduce the size of negated expressions. Also, a double negation is replaced with no negation.
This class implements the "static helper" (or "library") design pattern (it has just static functions and no instances can be created).
|
private |
Type of a container to store expressions.
|
private |
Constructs a new expression negater.
|
static |
Negates the given expression.
See the class description for more details.
|
private |
Negates the given expression.
Since visitation functions return void, we use the private variable exprStack
to manually simulate recursion. Hence, instead of returning a value from a visitation function, we push it onto the stack.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
Implements retdec::llvmir2hll::Visitor.
|
overrideprivatevirtual |
Implements retdec::llvmir2hll::Visitor.
|
private |
A stack to store expressions during negations.