CBMC
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | List of all members
irept Class Reference

There are a large number of kinds of tree structured or tree-like data in CPROVER. More...

#include <irep.h>

+ Inheritance diagram for irept:
+ Collaboration diagram for irept:

Public Types

 
 
 
 
  Used to refer to this class from derived classes.
 

Public Member Functions

 
 
 
 
  irept ()=default
 
 
const std::string &  id_string () const
 
void  id (const irep_idt &_data)
 
 
ireptadd (const irep_idt &name)
 
ireptadd (const irep_idt &name, irept irep)
 
const std::string &  get_string (const irep_idt &name) const
 
 
 
 
std::size_t  get_size_t (const irep_idt &name) const
 
 
void  set (const irep_idt &name, const irep_idt &value)
 
void  set (const irep_idt &name, irept irep)
 
void  set (const irep_idt &name, const long long value)
 
void  set_size_t (const irep_idt &name, const std::size_t value)
 
 
 
 
 
 
void  swap (irept &irep)
 
  defines ordering on the internal representation
 
  defines ordering on the internal representation
 
  defines ordering on the internal representation comments are ignored
 
void  clear ()
 
 
subtget_sub ()
 
 
 
 
std::size_t  hash () const
 
std::size_t  full_hash () const
 
 
std::string  pretty (unsigned indent=0, unsigned max_indent=0) const
 
- Public Member Functions inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > >
 
 
 
 
 
 
 
 
const dtread () const
 
dtwrite ()
 

Static Public Member Functions

 
  count the number of named_sub elements that are not comments
 

Additional Inherited Members

- Protected Member Functions inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > >
void  detach ()
 
- Static Protected Member Functions inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > >
 
  Does the same as remove_ref, but using an explicit stack instead of recursion.
 
dtdata
 
- Static Protected Attributes inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > >
 

Detailed Description

There are a large number of kinds of tree structured or tree-like data in CPROVER.

irept provides a single, unified representation for all of these, allowing structure sharing and reference counting of data. As such irept is the basic unit of data in CPROVER. Each irept contains (or references, if reference counted data sharing is enabled, as it is by default - see the SHARING macro) to a node (see tree_nodet). The irept::pretty function outputs the explicit tree structure of an irept and can be used to understand and debug problems with irepts.

On their own irepts do not "mean" anything; they are effectively generic tree nodes. Their interpretation depends on the contents of result of the id() function, i.e. the data field. util/irep_ids.def contains a list of id values. During the build process it is used to generate util/irep_ids.h which gives constants for each id (named ID_). You can also make irep_idts which do not come from util/irep_ids.def . An irep_idt can then be used to identify what kind of data the irept stores and thus what can be done with it.

To simplify this process, there are a variety of classes that inherit from irept, roughly corresponding to the ids listed (i.e. ID_or (the string "or") corresponds to the class \ref or_exprt). These give semantically relevant accessor functions for the data; effectively different APIs for the same underlying data structure. None of these classes add fields (only methods) and so static casting can be used. The inheritance graph of the subclasses of \ref irept is a useful starting point for working out how to manipulate data. There are three main groups of classes (or APIs); those derived from \ref typet, \ref codet and \ref exprt respectively. Although all of these inherit from \ref irept, these are the most abstract level that code should handle data. If code is manipulating plain <tt>irept</tt>s then something is wrong with the architecture of the code. Many of the key descendants of \ref exprt are declared in \ref std_expr.h. All expressions have a named subexpression with ID "type", which gives the type of the expression (slightly simplified from C/C++ as unsignedbv_typet, signedbv_typet, floatbv_typet, etc.). All type conversions are explicit with a typecast_exprt. One key descendant of exprt is symbol_exprt which creates irept instances with ID "symbol". These are used to represent variables; the name of which can be found using the get_identifier accessor function.

codet inherits from exprt and is defined in std_code.h . It represents executable code; statements in a C-like language rather than expressions. In the front-end there are versions of these that hold whole code blocks, but in goto-programs these have been flattened so that each irept represents one sequence point (almost one line of code / one semi-colon). The most common descendant of codet is code_assignt so a common pattern is to cast the codet to an assignment and then recurse on the expression on either side.

Definition at line 351 of file irep.h.

Member Typedef Documentation

◆  baset

Definition at line 366 of file irep.h.

Constructor & Destructor Documentation

◆  irept() [1/3]

irept::irept ( const irep_idt_id )
inlineexplicit

Definition at line 377 of file irep.h.

◆  irept() [2/3]

irept::irept ( const irep_idt_id,
const named_subt_named_sub,
const subt_sub 
)
inline

Definition at line 381 of file irep.h.

◆  irept() [3/3]

irept::irept ( )
default

Member Function Documentation

◆  add() [1/2]

irept & irept::add ( const irep_idtname )

Definition at line 103 of file irep.cpp.

◆  add() [2/2]

irept & irept::add ( const irep_idtname,
irept  irep 
)

Definition at line 109 of file irep.cpp.

◆  clear()

void irept::clear ( )
inline

Definition at line 444 of file irep.h.

◆  compare()

int irept::compare ( const irepti ) const

defines ordering on the internal representation comments are ignored

Definition at line 301 of file irep.cpp.

◆  find()

const irept & irept::find ( const irep_idtname ) const

Definition at line 93 of file irep.cpp.

◆  full_eq()

bool irept::full_eq ( const ireptother ) const

Definition at line 192 of file irep.cpp.

◆  full_hash()

std::size_t irept::full_hash ( ) const

Definition at line 453 of file irep.cpp.

◆  get()

const irep_idt & irept::get ( const irep_idtname ) const

Definition at line 44 of file irep.cpp.

◆  get_bool()

bool irept::get_bool ( const irep_idtname ) const

Definition at line 57 of file irep.cpp.

◆  get_int()

int irept::get_int ( const irep_idtname ) const

Definition at line 62 of file irep.cpp.

◆  get_long_long()

long long irept::get_long_long ( const irep_idtname ) const

Definition at line 72 of file irep.cpp.

◆  get_named_sub() [1/2]

named_subt & irept::get_named_sub ( )
inline

Definition at line 450 of file irep.h.

◆  get_named_sub() [2/2]

const named_subt & irept::get_named_sub ( ) const
inline

Definition at line 451 of file irep.h.

◆  get_size_t()

std::size_t irept::get_size_t ( const irep_idtname ) const

Definition at line 67 of file irep.cpp.

◆  get_string()

const std::string & irept::get_string ( const irep_idtname ) const
inline

Definition at line 401 of file irep.h.

◆  get_sub() [1/2]

subt & irept::get_sub ( )
inline

Definition at line 448 of file irep.h.

◆  get_sub() [2/2]

const subt & irept::get_sub ( ) const
inline

Definition at line 449 of file irep.h.

◆  hash()

std::size_t irept::hash ( ) const

Definition at line 415 of file irep.cpp.

◆  id() [1/2]

const irep_idt & irept::id ( ) const
inline

Definition at line 388 of file irep.h.

◆  id() [2/2]

void irept::id ( const irep_idt_data )
inline

Definition at line 394 of file irep.h.

◆  id_string()

const std::string & irept::id_string ( ) const
inline

Definition at line 391 of file irep.h.

◆  is_comment()

static bool irept::is_comment ( const irep_idtname )
inlinestatic

Definition at line 460 of file irep.h.

◆  is_nil()

bool irept::is_nil ( ) const
inline

Definition at line 368 of file irep.h.

◆  is_not_nil()

bool irept::is_not_nil ( ) const
inline

Definition at line 372 of file irep.h.

◆  make_nil()

void irept::make_nil ( )
inline

Definition at line 446 of file irep.h.

◆  move_to_named_sub()

void irept::move_to_named_sub ( const irep_idtname,
ireptirep 
)

Definition at line 26 of file irep.cpp.

◆  move_to_sub()

void irept::move_to_sub ( ireptirep )

Definition at line 35 of file irep.cpp.

◆  number_of_non_comments()

std::size_t irept::number_of_non_comments ( const named_subtnamed_sub )
static

count the number of named_sub elements that are not comments

Definition at line 404 of file irep.cpp.

◆  operator!=()

bool irept::operator!= ( const ireptother ) const
inline

Definition at line 429 of file irep.h.

◆  operator<()

bool irept::operator< ( const ireptother ) const

defines ordering on the internal representation

Definition at line 395 of file irep.cpp.

◆  operator==()

bool irept::operator== ( const ireptother ) const

Definition at line 133 of file irep.cpp.

◆  ordering()

bool irept::ordering ( const ireptother ) const

defines ordering on the internal representation

Definition at line 232 of file irep.cpp.

◆  pretty()

std::string irept::pretty ( unsigned  indent = 0,
unsigned  max_indent = 0 
) const

Definition at line 482 of file irep.cpp.

◆  remove()

void irept::remove ( const irep_idtname )

Definition at line 87 of file irep.cpp.

◆  set() [1/3]

void irept::set ( const irep_idtname,
const irep_idtvalue 
)
inline

Definition at line 412 of file irep.h.

◆  set() [2/3]

void irept::set ( const irep_idtname,
const long long  value 
)

Definition at line 77 of file irep.cpp.

◆  set() [3/3]

void irept::set ( const irep_idtname,
irept  irep 
)
inline

Definition at line 416 of file irep.h.

◆  set_size_t()

void irept::set_size_t ( const irep_idtname,
const std::size_t  value 
)

Definition at line 82 of file irep.cpp.

◆  swap()

void irept::swap ( ireptirep )
inline

Definition at line 434 of file irep.h.


The documentation for this class was generated from the following files:
  • /home/runner/work/cbmc/cbmc/src/util/irep.h
  • /home/runner/work/cbmc/cbmc/src/util/irep.cpp

AltStyle によって変換されたページ (->オリジナル) /