cprover
codet Class Reference

Data structure for representing an arbitrary statement in a program. More...

#include <std_code.h>

+ Inheritance diagram for codet:
+ Collaboration diagram for codet:

Public Member Functions

 codet ()
 
 codet (const irep_idt &statement)
 
void set_statement (const irep_idt &statement)
 
const irep_idtget_statement () const
 
codetfirst_statement ()
 In the case of a codet type that represents multiple statements, return the first of them. More...
 
const codetfirst_statement () const
 In the case of a codet type that represents multiple statements, return the first of them. More...
 
codetlast_statement ()
 In the case of a codet type that represents multiple statements, return the last of them. More...
 
const codetlast_statement () const
 In the case of a codet type that represents multiple statements, return the last of them. More...
 
class code_blocktmake_block ()
 If this codet is a code_blockt (i.e. it represents a block of statements), return the unmodified input. More...
 
- Public Member Functions inherited from exprt
 exprt ()
 
 exprt (const irep_idt &_id)
 
 exprt (const irep_idt &_id, const typet &_type)
 
typettype ()
 Return the type of the expression. More...
 
const typettype () const
 
bool has_operands () const
 Return true if there is at least one operand. More...
 
operandstoperands ()
 
const operandstoperands () const
 
exprtop0 ()
 
exprtop1 ()
 
exprtop2 ()
 
exprtop3 ()
 
const exprtop0 () const
 
const exprtop1 () const
 
const exprtop2 () const
 
const exprtop3 () 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_not ()
 Negate the expression. More...
 
void make_true ()
 Replace the expression by a Boolean expression representing true. More...
 
void make_false ()
 Replace the expression by a Boolean expression representing false. 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_locationtfind_source_location () const
 Get a source_locationt from the expression or from its operands (non-recursively). More...
 
const source_locationtsource_location () const
 
source_locationtadd_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
 
- Public Member Functions inherited from irept
bool is_nil () const
 
bool is_not_nil () const
 
 irept (const irep_idt &_id)
 
 irept ()
 
 irept (const irept &irep)
 
 irept (irept &&irep)
 
ireptoperator= (const irept &irep)
 
ireptoperator= (irept &&irep)
 
 ~irept ()
 
const irep_idtid () const
 
const std::string & id_string () const
 
void id (const irep_idt &_data)
 
const ireptfind (const irep_namet &name) const
 
ireptadd (const irep_namet &name)
 
ireptadd (const irep_namet &name, const irept &irep)
 
const std::string & get_string (const irep_namet &name) const
 
const irep_idtget (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 ()
 
subtget_sub ()
 
const subtget_sub () const
 
named_subtget_named_sub ()
 
const named_subtget_named_sub () const
 
named_subtget_comments ()
 
const named_subtget_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 dtread () const
 
dtwrite ()
 

Static Public Member Functions

static void check (const codet &code, const validation_modet vm=validation_modet::INVARIANT)
 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 &ns, 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 &ns, const validation_modet vm=validation_modet::INVARIANT)
 Check that the code statement is well-formed (full check, including checks of all subexpressions) More...
 
- Static Public Member Functions inherited from exprt
static void check (const exprt &expr, const validation_modet vm=validation_modet::INVARIANT)
 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 &ns, 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

- Public Types inherited from exprt
typedef std::vector< exprtoperandst
 
- Public Types inherited from irept
typedef std::vector< ireptsubt
 
typedef std::map< irep_namet, ireptnamed_subt
 
- Protected Member Functions inherited from exprt
exprtadd_expr (const irep_idt &name)
 
const exprtfind_expr (const irep_idt &name) const
 
- Protected Member Functions inherited from irept
void detach ()
 
- Static Protected Member Functions inherited from irept
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...
 
- Protected Attributes inherited from irept
dtdata
 
- Static Protected Attributes inherited from irept
static dt empty_d
 

Detailed Description

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. codets 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.

Constructor & Destructor Documentation

◆ codet() [1/2]

codet::codet ( )
inline

Definition at line 38 of file std_code.h.

◆ codet() [2/2]

codet::codet ( const irep_idt statement)
inlineexplicit
Parameters
statementSpecifies 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.

Member Function Documentation

◆ check()

static void codet::check ( const codet code,
const validation_modet  vm = validation_modet::INVARIANT 
)
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.

◆ first_statement() [1/2]

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.

◆ first_statement() [2/2]

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.

◆ get_statement()

const irep_idt& codet::get_statement ( ) const
inline

Definition at line 56 of file std_code.h.

◆ last_statement() [1/2]

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.

◆ last_statement() [2/2]

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.

◆ make_block()

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.

◆ set_statement()

void codet::set_statement ( const irep_idt statement)
inline

Definition at line 51 of file std_code.h.

◆ validate()

static void codet::validate ( const codet code,
const namespacet ns,
const validation_modet  vm = validation_modet::INVARIANT 
)
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 90 of file std_code.h.

◆ validate_full()

static void codet::validate_full ( const codet code,
const namespacet ns,
const validation_modet  vm = validation_modet::INVARIANT 
)
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 106 of file std_code.h.


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