CBMC
Loading...
Searching...
No Matches
symbol.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module:
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
9
10#ifndef CPROVER_UTIL_SYMBOL_H
11#define CPROVER_UTIL_SYMBOL_H
12
17
18#include <iosfwd>
19
20#include "expr.h"
21#include "invariant.h"
22
28{
29public:
32
35
38
41
43 irep_idt module;
44
47
50
53
55 const irep_idt &display_name() const
56 {
58 }
59
60 // global use
61 bool is_type = false;
62 bool is_macro = false;
63 bool is_exported = false;
64 bool is_input = false;
65 bool is_output = false;
66 bool is_state_var = false;
67 bool is_property = false;
68
69 // ANSI-C
70 bool is_static_lifetime = false;
71 bool is_thread_local = false;
72 bool is_lvalue = false;
73 bool is_file_local = false;
74 bool is_extern = false;
75 bool is_volatile = false;
76 bool is_parameter = false;
77 bool is_auxiliary = false;
78 bool is_weak = false;
79
86
87 symbolt(const irep_idt &_name, typet _type, const irep_idt &_mode)
88 : type(std::move(_type)),
91 name(_name),
92 mode(_mode)
93 {
94 }
95
96 void swap(symbolt &b);
97 void show(std::ostream &out) const;
98
100
101 bool is_shared() const
102 {
103 return !is_thread_local;
104 }
105
106 bool is_function() const
107 {
108 return !is_type && !is_macro && type.id()==ID_code;
109 }
110
113 bool is_compiled() const
114 {
115 return type.id() == ID_code && value == exprt(ID_compiled);
116 }
117
121 {
124 }
125
127 bool is_well_formed() const;
128
129 bool operator==(const symbolt &other) const;
130 bool operator!=(const symbolt &other) const;
131};
132
133std::ostream &operator<<(std::ostream &out, const symbolt &symbol);
134
139{
140public:
142 : symbolt(_name, _type, _mode)
143 {
144 is_type = true;
145 }
146};
147
153{
154public:
156 {
157 is_lvalue=true;
158 is_state_var=true;
159 is_thread_local=true;
160 is_file_local=true;
161 is_auxiliary=true;
162 }
163
165 : symbolt(name, type, mode)
166 {
167 is_lvalue = true;
168 is_state_var = true;
169 is_thread_local = true;
170 is_file_local = true;
171 is_auxiliary = true;
172 }
173};
174
179{
180public:
182 {
183 is_lvalue=true;
184 is_state_var=true;
185 is_thread_local=true;
186 is_file_local=true;
187 is_parameter=true;
188 }
189};
190
191#endif // CPROVER_UTIL_SYMBOL_H
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
Internally generated symbol table entryThis is a symbol generated as part of translation to or modifi...
Definition symbol.h:153
auxiliary_symbolt(const irep_idt &name, typet type, const irep_idt &mode)
Definition symbol.h:164
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
bool empty() const
Definition dstring.h:89
Base class for all expressions.
Definition expr.h:56
const irep_idt & id() const
Definition irep.h:388
Symbol table entry of function parameterThis is a symbol generated as part of type checking.
Definition symbol.h:179
Expression to hold a symbol (variable)
Definition std_expr.h:131
Symbol table entry.
Definition symbol.h:28
void swap(symbolt &b)
Swap values between two symbols.
Definition symbol.cpp:85
bool is_auxiliary
Definition symbol.h:77
bool is_volatile
Definition symbol.h:75
symbolt()
Definition symbol.h:80
bool is_extern
Definition symbol.h:74
bool is_macro
Definition symbol.h:62
bool operator==(const symbolt &other) const
Definition symbol.cpp:202
void show(std::ostream &out) const
Dump the state of a symbol object to a given output stream.
Definition symbol.cpp:19
bool is_file_local
Definition symbol.h:73
bool is_well_formed() const
Check that a symbol is well formed.
Definition symbol.cpp:128
bool is_static_lifetime
Definition symbol.h:70
symbolt(const irep_idt &_name, typet _type, const irep_idt &_mode)
Definition symbol.h:87
void set_compiled()
Set the symbol's value to "compiled"; to be used once the code-typed value has been converted to a go...
Definition symbol.h:120
bool is_property
Definition symbol.h:67
bool is_parameter
Definition symbol.h:76
bool is_thread_local
Definition symbol.h:71
bool is_type
Definition symbol.h:61
source_locationt location
Source code location of definition of symbol.
Definition symbol.h:37
bool is_compiled() const
Returns true iff the the symbol's value has been compiled to a goto program.
Definition symbol.h:113
bool is_state_var
Definition symbol.h:66
class symbol_exprt symbol_expr() const
Produces a symbol_exprt for a symbol.
Definition symbol.cpp:121
bool is_function() const
Definition symbol.h:106
bool is_output
Definition symbol.h:65
typet type
Type of symbol.
Definition symbol.h:31
bool is_weak
Definition symbol.h:78
irep_idt name
The unique identifier.
Definition symbol.h:40
bool is_exported
Definition symbol.h:63
irep_idt pretty_name
Language-specific display name.
Definition symbol.h:52
irep_idt irep_idt base_name
Name of module the symbol belongs to.
Definition symbol.h:46
bool operator!=(const symbolt &other) const
Definition symbol.cpp:233
bool is_shared() const
Definition symbol.h:101
const irep_idt & display_name() const
Return language specific display name if present.
Definition symbol.h:55
bool is_lvalue
Definition symbol.h:72
exprt value
Initial value of symbol.
Definition symbol.h:34
irep_idt mode
Language mode.
Definition symbol.h:49
bool is_input
Definition symbol.h:64
Symbol table entry describing a data typeThis is a symbol generated as part of type checking.
Definition symbol.h:139
type_symbolt(const irep_idt &_name, typet _type, const irep_idt &_mode)
Definition symbol.h:141
The type of an expression, extends irept.
Definition type.h:29
const irept & get_nil_irep()
Definition irep.cpp:19
STL namespace.
#define PRECONDITION(CONDITION)
Definition invariant.h:463
std::ostream & operator<<(std::ostream &out, const symbolt &symbol)
Overload of stream operator to work with symbols.
Definition symbol.cpp:76