cprover
|
Data structure for representing an arbitrary statement in a program. More...
#include <std_code.h>
Public Member Functions | |
codet () | |
codet (const irep_idt &statement) | |
void | set_statement (const irep_idt &statement) |
const irep_idt & | get_statement () const |
codet & | first_statement () |
In the case of a codet type that represents multiple statements, return the first of them. More... | |
const codet & | first_statement () const |
In the case of a codet type that represents multiple statements, return the first of them. More... | |
codet & | last_statement () |
In the case of a codet type that represents multiple statements, return the last of them. More... | |
const codet & | last_statement () const |
In the case of a codet type that represents multiple statements, return the last of them. More... | |
class code_blockt & | make_block () |
If this codet is a code_blockt (i.e. it represents a block of statements), return the unmodified input. More... | |
![]() | |
exprt () | |
exprt (const irep_idt &_id) | |
exprt (const irep_idt &_id, const typet &_type) | |
typet & | type () |
Return the type of the expression. More... | |
const typet & | type () const |
bool | has_operands () const |
Return true if there is at least one operand. More... | |
operandst & | operands () |
const operandst & | operands () const |
exprt & | op0 () |
exprt & | op1 () |
exprt & | op2 () |
exprt & | op3 () |
const exprt & | op0 () const |
const exprt & | op1 () const |
const exprt & | op2 () const |
const exprt & | op3 () const |
void | reserve_operands (operandst::size_type n) |
void | move_to_operands (exprt &expr) |
Move the given argument to the end of exprt 's operands. More... | |
void | move_to_operands (exprt &e1, exprt &e2) |
Move the given arguments to the end of exprt 's operands. More... | |
void | move_to_operands (exprt &e1, exprt &e2, exprt &e3) |
Move the given arguments to the end of exprt 's operands. More... | |
void | copy_to_operands (const exprt &expr) |
Copy the given argument to the end of exprt 's operands. More... | |
void | add_to_operands (const exprt &expr) |
Add the given argument to the end of exprt 's operands. More... | |
void | add_to_operands (exprt &&expr) |
Add the given argument to the end of exprt 's operands. More... | |
void | copy_to_operands (const exprt &e1, const exprt &e2) |
Copy the given arguments to the end of exprt 's operands. More... | |
void | add_to_operands (const exprt &e1, const exprt &e2) |
Add the given arguments to the end of exprt 's operands. More... | |
void | add_to_operands (exprt &&e1, exprt &&e2) |
Add the given arguments to the end of exprt 's operands. More... | |
void | add_to_operands (const exprt &e1, const exprt &e2, const exprt &e3) |
Add the given arguments to the end of exprt 's operands. More... | |
void | copy_to_operands (const exprt &e1, const exprt &e2, const exprt &e3) |
Copy the given arguments to the end of exprt 's operands. More... | |
void | add_to_operands (exprt &&e1, exprt &&e2, exprt &&e3) |
Add the given arguments to the end of exprt 's operands. More... | |
void | make_typecast (const typet &_type) |
Create a typecast_exprt to the given type. More... | |
void | make_bool (bool value) |
Replace the expression by a Boolean expression representing value . More... | |
bool | is_constant () const |
Return whether the expression is a constant. More... | |
bool | is_true () const |
Return whether the expression is a constant representing true . More... | |
bool | is_false () const |
Return whether the expression is a constant representing false . More... | |
bool | is_zero () const |
Return whether the expression is a constant representing 0. More... | |
bool | is_one () const |
Return whether the expression is a constant representing 1. More... | |
bool | is_boolean () const |
Return whether the expression represents a Boolean. More... | |
const source_locationt & | find_source_location () const |
Get a source_locationt from the expression or from its operands (non-recursively). More... | |
const source_locationt & | source_location () const |
source_locationt & | add_source_location () |
void | visit (class expr_visitort &visitor) |
void | visit (class const_expr_visitort &visitor) const |
depth_iteratort | depth_begin () |
depth_iteratort | depth_end () |
const_depth_iteratort | depth_begin () const |
const_depth_iteratort | depth_end () const |
const_depth_iteratort | depth_cbegin () const |
const_depth_iteratort | depth_cend () const |
depth_iteratort | depth_begin (std::function< exprt &()> mutate_root) const |
const_unique_depth_iteratort | unique_depth_begin () const |
const_unique_depth_iteratort | unique_depth_end () const |
const_unique_depth_iteratort | unique_depth_cbegin () const |
const_unique_depth_iteratort | unique_depth_cend () const |
![]() | |
bool | is_nil () const |
bool | is_not_nil () const |
irept (const irep_idt &_id) | |
irept () | |
irept (const irept &irep) | |
irept (irept &&irep) | |
irept & | operator= (const irept &irep) |
irept & | operator= (irept &&irep) |
~irept () | |
const irep_idt & | id () const |
const std::string & | id_string () const |
void | id (const irep_idt &_data) |
const irept & | find (const irep_namet &name) const |
irept & | add (const irep_namet &name) |
irept & | add (const irep_namet &name, const irept &irep) |
const std::string & | get_string (const irep_namet &name) const |
const irep_idt & | get (const irep_namet &name) const |
bool | get_bool (const irep_namet &name) const |
signed int | get_int (const irep_namet &name) const |
unsigned int | get_unsigned_int (const irep_namet &name) const |
std::size_t | get_size_t (const irep_namet &name) const |
long long | get_long_long (const irep_namet &name) const |
void | set (const irep_namet &name, const irep_idt &value) |
void | set (const irep_namet &name, const irept &irep) |
void | set (const irep_namet &name, const long long value) |
void | remove (const irep_namet &name) |
void | move_to_sub (irept &irep) |
void | move_to_named_sub (const irep_namet &name, irept &irep) |
bool | operator== (const irept &other) const |
bool | operator!= (const irept &other) const |
void | swap (irept &irep) |
bool | operator< (const irept &other) const |
defines ordering on the internal representation More... | |
bool | ordering (const irept &other) const |
defines ordering on the internal representation More... | |
int | compare (const irept &i) const |
defines ordering on the internal representation More... | |
void | clear () |
void | make_nil () |
subt & | get_sub () |
const subt & | get_sub () const |
named_subt & | get_named_sub () |
const named_subt & | get_named_sub () const |
named_subt & | get_comments () |
const named_subt & | get_comments () const |
std::size_t | hash () const |
std::size_t | full_hash () const |
bool | full_eq (const irept &other) const |
std::string | pretty (unsigned indent=0, unsigned max_indent=0) const |
const dt & | read () const |
dt & | write () |
Static Public Member Functions | |
static void | check (const codet &, const validation_modet) |
Check that the code statement is well-formed (shallow checks only, i.e., enclosed statements, subexpressions, etc. More... | |
static void | validate (const codet &code, const namespacet &, const validation_modet vm=validation_modet::INVARIANT) |
Check that the code statement is well-formed, assuming that all its enclosed statements, subexpressions, etc. More... | |
static void | validate_full (const codet &code, const namespacet &, const validation_modet vm=validation_modet::INVARIANT) |
Check that the code statement is well-formed (full check, including checks of all subexpressions) More... | |
![]() | |
static void | check (const exprt &, const validation_modet) |
Check that the expression is well-formed (shallow checks only, i.e., subexpressions and its type are not checked). More... | |
static void | validate (const exprt &expr, const namespacet &, const validation_modet vm=validation_modet::INVARIANT) |
Check that the expression is well-formed, assuming that its subexpressions and type have all ready been checked for well-formedness. More... | |
static void | validate_full (const exprt &expr, const namespacet &ns, const validation_modet vm=validation_modet::INVARIANT) |
Check that the expression is well-formed (full check, including checks of all subexpressions and the type) More... | |
Additional Inherited Members | |
![]() | |
typedef std::vector< exprt > | operandst |
![]() | |
typedef std::vector< irept > | subt |
typedef std::map< irep_namet, irept > | named_subt |
![]() | |
exprt & | add_expr (const irep_idt &name) |
const exprt & | find_expr (const irep_idt &name) const |
![]() | |
void | detach () |
![]() | |
static bool | is_comment (const irep_namet &name) |
static void | remove_ref (dt *old_data) |
static void | nonrecursive_destructor (dt *old_data) |
Does the same as remove_ref, but using an explicit stack instead of recursion. More... | |
![]() | |
dt * | data |
![]() | |
static dt | empty_d |
Data structure for representing an arbitrary statement in a program.
Every specific type of statement (e.g. block of statements, assignment, if-then-else statement...) is represented by a subtype of codet
. codet
s are represented to be subtypes of exprt since statements can occur in an expression context in C: for example, the assignment x = y;
is an expression with return value y
. For other types of statements in an expression context, see e.g. https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html. To distinguish a codet
from other exprts, we set its id() to ID_code
. To distinguish different types of codet
, we use a named sub ID_statement
.
Definition at line 34 of file std_code.h.
|
inline |
Definition at line 38 of file std_code.h.
|
inlineexplicit |
statement | Specifies the type of the codet to be constructed, e.g. ID_block for a code_blockt or ID_assign for a code_assignt. |
Definition at line 45 of file std_code.h.
|
inlinestatic |
Check that the code statement is well-formed (shallow checks only, i.e., enclosed statements, subexpressions, etc.
are not checked)
Subclasses may override this function to provide specific well-formedness checks for the corresponding types.
The validation mode indicates whether well-formedness check failures are reported via DATA_INVARIANT violations or exceptions.
Definition at line 75 of file std_code.h.
codet & codet::first_statement | ( | ) |
In the case of a codet
type that represents multiple statements, return the first of them.
Otherwise return the codet
itself.
Definition at line 36 of file std_code.cpp.
const codet & codet::first_statement | ( | ) | const |
In the case of a codet
type that represents multiple statements, return the first of them.
Otherwise return the codet
itself.
Definition at line 52 of file std_code.cpp.
|
inline |
Definition at line 56 of file std_code.h.
codet & codet::last_statement | ( | ) |
In the case of a codet
type that represents multiple statements, return the last of them.
Otherwise return the codet
itself.
Definition at line 69 of file std_code.cpp.
const codet & codet::last_statement | ( | ) | const |
In the case of a codet
type that represents multiple statements, return the last of them.
Otherwise return the codet
itself.
Definition at line 85 of file std_code.cpp.
code_blockt & codet::make_block | ( | ) |
If this codet
is a code_blockt (i.e. it represents a block of statements), return the unmodified input.
Otherwise (i.e. the codet
represents a single statement), convert it to a code_blockt with the original statement as its only operand and return the result.
Definition at line 20 of file std_code.cpp.
|
inline |
Definition at line 51 of file std_code.h.
|
inlinestatic |
Check that the code statement is well-formed, assuming that all its enclosed statements, subexpressions, etc.
have all ready been checked for well-formedness.
Subclasses may override this function to provide specific well-formedness checks for the corresponding types.
The validation mode indicates whether well-formedness check failures are reported via DATA_INVARIANT violations or exceptions.
Definition at line 88 of file std_code.h.
|
inlinestatic |
Check that the code statement is well-formed (full check, including checks of all subexpressions)
Subclasses may override this function to provide specific well-formedness checks for the corresponding types.
The validation mode indicates whether well-formedness check failures are reported via DATA_INVARIANT violations or exceptions.
Definition at line 104 of file std_code.h.