cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
cpp_declaration.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: C++ Language Type Checking
4
5
Author: Daniel Kroening, kroening@cs.cmu.edu
6
7
\*******************************************************************/
8
11
12
#ifndef CPROVER_CPP_CPP_DECLARATION_H
13
#define CPROVER_CPP_CPP_DECLARATION_H
14
15
#include "
cpp_declarator.h
"
16
#include "
cpp_storage_spec.h
"
17
#include "
cpp_member_spec.h
"
18
#include "
cpp_template_type.h
"
19
#include "
cpp_template_args.h
"
20
21
class
cpp_declarationt
:
public
exprt
22
{
23
public
:
24
typedef
std::vector<cpp_declaratort>
declaratorst
;
25
26
cpp_declarationt
():
exprt
(ID_cpp_declaration)
27
{
28
}
29
30
bool
is_empty
()
const
31
{
32
return
type
().
is_nil
() && !
has_operands
();
33
}
34
35
bool
is_constructor
()
const
36
{
37
return
type
().
id
()==ID_constructor;
38
}
39
40
bool
is_static_assert
()
const
41
{
42
return
get_bool
(ID_is_static_assert);
43
}
44
45
bool
is_destructor
()
const
46
{
47
return
type
().
id
()==ID_destructor;
48
}
49
50
bool
is_template
()
const
51
{
52
return
get_bool
(ID_is_template);
53
}
54
55
bool
is_class_template
()
const
56
{
57
return
is_template
() &&
58
type
().
id
()==ID_struct &&
59
declarators
().empty();
60
}
61
62
const
declaratorst
&
declarators
()
const
63
{
64
return
(
const
declaratorst
&)
operands
();
65
}
66
67
declaratorst
&
declarators
()
68
{
69
return
(
declaratorst
&)
operands
();
70
}
71
72
const
cpp_storage_spect
&
storage_spec
()
const
73
{
74
return
static_cast<
const
cpp_storage_spect
&
>
(
75
find
(ID_storage_spec));
76
}
77
78
cpp_storage_spect
&
storage_spec
()
79
{
80
return
static_cast<
cpp_storage_spect
&
>
(
81
add
(ID_storage_spec));
82
}
83
84
const
cpp_member_spect
&
member_spec
()
const
85
{
86
return
static_cast<
const
cpp_member_spect
&
>
(
87
find
(ID_member_spec));
88
}
89
90
cpp_member_spect
&
member_spec
()
91
{
92
return
static_cast<
cpp_member_spect
&
>
(
93
add
(ID_member_spec));
94
}
95
96
template_typet
&
template_type
()
97
{
98
return
static_cast<
template_typet
&
>
(
add
(ID_template_type));
99
}
100
101
const
template_typet
&
template_type
()
const
102
{
103
return
static_cast<
const
template_typet
&
>
(
find
(ID_template_type));
104
}
105
106
cpp_template_args_non_tct
&
partial_specialization_args
()
107
{
108
return
static_cast<
cpp_template_args_non_tct
&
>
(
109
add
(ID_partial_specialization_args));
110
}
111
112
const
cpp_template_args_non_tct
&
partial_specialization_args
()
const
113
{
114
return
static_cast<
const
cpp_template_args_non_tct
&
>
(
115
find
(ID_partial_specialization_args));
116
}
117
118
void
set_specialization_of
(
const
irep_idt
&
id
)
119
{
120
set
(ID_specialization_of,
id
);
121
}
122
123
irep_idt
get_specialization_of
()
const
124
{
125
return
get
(ID_specialization_of);
126
}
127
128
void
set_is_typedef
()
129
{
130
set
(ID_is_typedef,
true
);
131
}
132
133
bool
is_typedef
()
const
134
{
135
return
get_bool
(ID_is_typedef);
136
}
137
138
void
output
(std::ostream &out)
const
;
139
140
// for assigning a tag for struct/union in the type based on
141
// the name of the first declarator
142
void
name_anon_struct_union
() {
name_anon_struct_union
(
type
()); }
143
void
name_anon_struct_union
(
typet
&dest);
144
};
145
146
inline
cpp_declarationt
&
to_cpp_declaration
(
irept
&irep)
147
{
148
PRECONDITION
(irep.
id
() == ID_cpp_declaration);
149
return
static_cast<
cpp_declarationt
&
>
(irep);
150
}
151
152
inline
const
cpp_declarationt
&
to_cpp_declaration
(
const
irept
&irep)
153
{
154
PRECONDITION
(irep.
id
() == ID_cpp_declaration);
155
return
static_cast<
const
cpp_declarationt
&
>
(irep);
156
}
157
158
#endif
// CPROVER_CPP_CPP_DECLARATION_H
cpp_declarationt
Definition
cpp_declaration.h:22
cpp_declarationt::template_type
const template_typet & template_type() const
Definition
cpp_declaration.h:101
cpp_declarationt::declarators
const declaratorst & declarators() const
Definition
cpp_declaration.h:62
cpp_declarationt::is_destructor
bool is_destructor() const
Definition
cpp_declaration.h:45
cpp_declarationt::is_static_assert
bool is_static_assert() const
Definition
cpp_declaration.h:40
cpp_declarationt::output
void output(std::ostream &out) const
Definition
cpp_declaration.cpp:16
cpp_declarationt::member_spec
const cpp_member_spect & member_spec() const
Definition
cpp_declaration.h:84
cpp_declarationt::storage_spec
const cpp_storage_spect & storage_spec() const
Definition
cpp_declaration.h:72
cpp_declarationt::set_specialization_of
void set_specialization_of(const irep_idt &id)
Definition
cpp_declaration.h:118
cpp_declarationt::get_specialization_of
irep_idt get_specialization_of() const
Definition
cpp_declaration.h:123
cpp_declarationt::is_template
bool is_template() const
Definition
cpp_declaration.h:50
cpp_declarationt::cpp_declarationt
cpp_declarationt()
Definition
cpp_declaration.h:26
cpp_declarationt::member_spec
cpp_member_spect & member_spec()
Definition
cpp_declaration.h:90
cpp_declarationt::is_constructor
bool is_constructor() const
Definition
cpp_declaration.h:35
cpp_declarationt::is_class_template
bool is_class_template() const
Definition
cpp_declaration.h:55
cpp_declarationt::is_empty
bool is_empty() const
Definition
cpp_declaration.h:30
cpp_declarationt::declaratorst
std::vector< cpp_declaratort > declaratorst
Definition
cpp_declaration.h:24
cpp_declarationt::partial_specialization_args
const cpp_template_args_non_tct & partial_specialization_args() const
Definition
cpp_declaration.h:112
cpp_declarationt::partial_specialization_args
cpp_template_args_non_tct & partial_specialization_args()
Definition
cpp_declaration.h:106
cpp_declarationt::declarators
declaratorst & declarators()
Definition
cpp_declaration.h:67
cpp_declarationt::template_type
template_typet & template_type()
Definition
cpp_declaration.h:96
cpp_declarationt::is_typedef
bool is_typedef() const
Definition
cpp_declaration.h:133
cpp_declarationt::set_is_typedef
void set_is_typedef()
Definition
cpp_declaration.h:128
cpp_declarationt::name_anon_struct_union
void name_anon_struct_union()
Definition
cpp_declaration.h:142
cpp_declarationt::storage_spec
cpp_storage_spect & storage_spec()
Definition
cpp_declaration.h:78
cpp_member_spect
Definition
cpp_member_spec.h:17
cpp_storage_spect
Definition
cpp_storage_spec.h:18
cpp_template_args_non_tct
Definition
cpp_template_args.h:45
exprt::has_operands
bool has_operands() const
Return true if there is at least one operand.
Definition
expr.h:92
exprt::exprt
exprt()
Definition
expr.h:62
exprt::type
typet & type()
Return the type of the expression.
Definition
expr.h:85
exprt::operands
operandst & operands()
Definition
expr.h:95
irept
There are a large number of kinds of tree structured or tree-like data in CPROVER.
Definition
irep.h:364
irept::get_bool
bool get_bool(const irep_idt &name) const
Definition
irep.cpp:57
irept::find
const irept & find(const irep_idt &name) const
Definition
irep.cpp:93
irept::get
const irep_idt & get(const irep_idt &name) const
Definition
irep.cpp:44
irept::set
void set(const irep_idt &name, const irep_idt &value)
Definition
irep.h:412
irept::id
const irep_idt & id() const
Definition
irep.h:388
irept::add
irept & add(const irep_idt &name)
Definition
irep.cpp:103
irept::is_nil
bool is_nil() const
Definition
irep.h:368
template_typet
Definition
cpp_template_type.h:19
typet
The type of an expression, extends irept.
Definition
type.h:29
to_cpp_declaration
cpp_declarationt & to_cpp_declaration(irept &irep)
Definition
cpp_declaration.h:146
cpp_declarator.h
C++ Language Type Checking.
cpp_member_spec.h
cpp_storage_spec.h
cpp_template_args.h
C++ Language Type Checking.
cpp_template_type.h
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
cpp
cpp_declaration.h
Generated by
1.17.0