retdec
|
A while loop statement. More...
#include <while_loop_stmt.h>
Public Member Functions | |
virtual ShPtr< Value > | clone () override |
Returns a clone of the value. More... | |
virtual bool | isEqualTo (ShPtr< Value > otherValue) const override |
Returns true if this value is equal to otherValue, false otherwise. More... | |
virtual bool | isCompound () override |
Returns true if the statement is a compound statement, false otherwise. More... | |
virtual void | replace (ShPtr< Expression > oldExpr, ShPtr< Expression > newExpr) override |
Replaces all occurrences of oldExpr with newExpr in the current statement. More... | |
virtual ShPtr< Expression > | asExpression () const override |
Returns the statement as an expression. More... | |
ShPtr< Expression > | getCondition () const |
Returns the loop condition. More... | |
ShPtr< Statement > | getBody () const |
Returns the loop body. More... | |
void | setCondition (ShPtr< Expression > newCond) |
Sets a condition. More... | |
void | setBody (ShPtr< Statement > newBody) |
Sets a new body. More... | |
Observer Interface | |
virtual void | update (ShPtr< Value > subject, ShPtr< Value > arg=nullptr) override |
Updates the statement according to the changes of subject. More... | |
Visitor Interface | |
virtual void | accept (Visitor *v) override |
Visitor pattern implementation. More... | |
![]() | |
ShPtr< Statement > | getParent () const |
Returns the parent of the given statement. More... | |
Address | getAddress () const |
Returns statement's address. More... | |
bool | hasSuccessor () const |
Returns true if the statement has a successor, false otherwise. More... | |
ShPtr< Statement > | getSuccessor () const |
Returns the successor of statement. More... | |
void | setSuccessor (ShPtr< Statement > newSucc) |
Sets newSucc as the current statement's successor. More... | |
void | removeSuccessor () |
Removes the successor of the statement (if there is any). More... | |
void | appendStatement (ShPtr< Statement > stmt) |
Appends stmt to the statement. More... | |
bool | hasPredecessors () const |
Returns true if the statement has any predecessor, false otherwise. More... | |
std::size_t | getNumberOfPredecessors () const |
Returns the number of predecessors of the current statement. More... | |
void | addPredecessor (ShPtr< Statement > stmt) |
Adds a new predecessor: stmt. More... | |
ShPtr< Statement > | getUniquePredecessor () const |
Returns the unique predecessor of the current statement. More... | |
void | removePredecessor (ShPtr< Statement > stmt) |
Removes the predecessor stmt. More... | |
void | removePredecessors (bool onlyNonGoto=false) |
Removes all predecessors of the statement. More... | |
void | prependStatement (ShPtr< Statement > stmt) |
Prepends stmt to the statement. More... | |
predecessor_iterator | predecessor_begin () const |
Returns an iterator to the first predecessor (if any). More... | |
predecessor_iterator | predecessor_end () const |
Returns an iterator past the last predecessor. More... | |
bool | hasLabel () const |
Does the statement has a label set? More... | |
std::string | getLabel () const |
Returns the statement's label. More... | |
void | setLabel (const std::string &newLabel) |
Sets a new label of the statement. More... | |
void | removeLabel () |
Removes the statement's label (if any). More... | |
void | transferLabelFrom (ShPtr< Statement > stmt) |
Transfers the label from the given statement to the current statement. More... | |
void | transferLabelTo (ShPtr< Statement > stmt) |
Transfers the label from the current statement to the given statement. More... | |
bool | isGotoTarget () const |
Returns true if the statement is the target of a goto statement, false otherwise. More... | |
void | redirectGotosTo (ShPtr< Statement > stmt) |
Redirects gotos to the statement to the given statement stmt. More... | |
![]() | |
virtual | ~Value ()=default |
virtual ShPtr< Value > | getSelf () override |
Returns a shared pointer of self. More... | |
std::string | getTextRepr () |
Returns a textual representation of the value. More... | |
![]() | |
void | setMetadata (std::string data) |
Attaches new metadata. More... | |
std::string | getMetadata () const |
Returns the attached metadata. More... | |
bool | hasMetadata () const |
Are there any non-empty metadata? More... | |
![]() | |
Observer ()=default | |
Creates a new observer. More... | |
virtual | ~Observer ()=default |
Destructs the observer. More... | |
![]() | |
Subject () | |
Creates a new subject. More... | |
virtual | ~Subject ()=default |
Destructs the subject. More... | |
void | addObserver (ObserverPtr observer) |
Adds a new observer to the list of observers. More... | |
void | removeObserver (ObserverPtr observer) |
Removes the selected observer from the list of observers. More... | |
void | removeObservers () |
Removes all observers. More... | |
void | notifyObservers (ShPtr< Value > arg=nullptr) |
Notifies all observers by calling Observer::update() on them. More... | |
Static Public Member Functions | |
static ShPtr< WhileLoopStmt > | create (ShPtr< Expression > cond, ShPtr< Statement > body, ShPtr< Statement > succ=nullptr, Address a=Address::Undefined) |
Constructs a new while loop statement. More... | |
![]() | |
static void | removeStatement (ShPtr< Statement > stmt) |
Removes this statement from a block which contains it. More... | |
static void | removeStatementButKeepDebugComment (ShPtr< Statement > stmt) |
Removes the given statement, but keeps its debug comment (if any). More... | |
static bool | areEqualStatements (ShPtr< Statement > stmts1, ShPtr< Statement > stmts2) |
Returns true if stmts1 and stmts are equal, false otherwise. More... | |
static bool | isStatementInStatements (ShPtr< Statement > stmt, ShPtr< Statement > stmts) |
Returns true if statement stmt is in the sequence of statements stmts, false otherwise. More... | |
static void | replaceStatement (ShPtr< Statement > oldStmt, ShPtr< Statement > newStmt) |
Replaces oldStmt with newStmt. More... | |
static void | removeLastStatement (ShPtr< Statement > stmts) |
Removes the last statements in the sequence of statements stmts. More... | |
static ShPtr< Statement > | mergeStatements (ShPtr< Statement > stmt1, ShPtr< Statement > stmt2) |
Merges the two given statements. More... | |
static ShPtr< Statement > | cloneStatements (ShPtr< Statement > stmts) |
Clones the given list of statements. More... | |
static ShPtr< Statement > | getLastStatement (ShPtr< Statement > stmts) |
Returns the last statement in stmts. More... | |
Private Member Functions | |
WhileLoopStmt (ShPtr< Expression > cond, ShPtr< Statement > body, Address a=Address::Undefined) | |
Constructs a new while loop statement. More... | |
Private Attributes | |
ShPtr< Expression > | cond |
Loop condition. More... | |
ShPtr< Statement > | body |
Loop body. More... | |
Additional Inherited Members | |
![]() | |
using | predecessor_iterator = StmtSet::const_iterator |
Predecessor iterator. More... | |
![]() | |
using | ConcreteObserver = Observer< Value, Value > |
A concrete observer. More... | |
using | ObserverPtr = WkPtr< ConcreteObserver > |
A pointer to an observer. More... | |
![]() | |
using | ObserverContainer = std::vector< ObserverPtr > |
A container to store observers. More... | |
using | observer_iterator = typename ObserverContainer::const_iterator |
![]() | |
Statement (Address a=Address::Undefined) | |
Constructs a new statement. More... | |
![]() | |
Value ()=default | |
![]() | |
Visitable ()=default | |
~Visitable ()=default | |
![]() | |
Metadatable () | |
Constructs a new metadatable object. More... | |
![]() | |
observer_iterator | observer_begin () const |
Returns a constant iterator to the first observer. More... | |
observer_iterator | observer_end () const |
Returns a constant iterator past the last observer. More... | |
![]() | |
ShPtr< Statement > | succ |
Successor statement. More... | |
StmtSet | preds |
Predecessor statements. More... | |
std::string | label |
Label. More... | |
Address | address |
Address of ASM instruction from which this statement was created from. More... | |
A while loop statement.
Use create() to create instances. Instances of this class have reference object semantics. This class is not meant to be subclassed.
|
private |
Constructs a new while loop statement.
See create() for more information.
|
overridevirtual |
Visitor pattern implementation.
Subclasses should implement this method as:
where T
is the name of the subclass, and shared_from_this() and ucast<>
are from Decompiler/Support/SmartPtr.h.
Implements retdec::llvmir2hll::Visitable.
|
overridevirtual |
Returns the statement as an expression.
If the statement cannot be converted into an expression, the null pointer is returned.
Parts of the statement are not cloned (if you want a clone, call clone()
on the returned expression).
Implements retdec::llvmir2hll::Statement.
Returns a clone of the value.
A clone is (in most cases) an exact copy of the value. This member function provides the copy mechanism for reference objects.
The following parts of values are not cloned:
The following subclasses of Value are not cloned, i.e. they are returned without any copying:
Statements in compound statements (i.e. statements where isCompound()
returns true
) are cloned without their successors; therefore, e.g., just the first statement of every if's clause is cloned.
Implements retdec::llvmir2hll::Value.
|
static |
Constructs a new while loop statement.
[in] | cond | Loop condition. |
[in] | body | Loop body. |
[in] | succ | Follower of the statement in the program flow. |
[in] | a | Address. |
An equivalent to the while loop in C, i.e. while (cond) body
.
ShPtr< Expression > retdec::llvmir2hll::WhileLoopStmt::getCondition | ( | ) | const |
Returns the loop condition.
|
inlineoverridevirtual |
Returns true
if the statement is a compound statement, false
otherwise.
A compound statement is a statement with nested statements, e.g. an if statement, a switch statement, a while loop, and a for loop.
Implements retdec::llvmir2hll::Statement.
|
overridevirtual |
Returns true
if this value is equal to otherValue, false
otherwise.
This member function brings the support of value object semantics into reference objects, namely equality based not only on identity.
This function doesn't consider observers, metadata, etc.
Implements retdec::llvmir2hll::Value.
|
overridevirtual |
Replaces all occurrences of oldExpr with newExpr in the current statement.
[in] | oldExpr | Old expression to be replaced. |
[in] | newExpr | Replacement. |
In compound statements, their body is left untouched, i.e. this function doesn't replace expressions in the bodies of statements.
Implements retdec::llvmir2hll::Statement.
Sets a new body.
void retdec::llvmir2hll::WhileLoopStmt::setCondition | ( | ShPtr< Expression > | newCond | ) |
Sets a condition.
|
overridevirtual |
Updates the statement according to the changes of subject.
[in] | subject | Observable object. |
[in] | arg | Optional argument. |
Replaces subject with
This function does nothing when:
Reimplemented from retdec::llvmir2hll::Observer< Value >.
|
private |
Loop condition.