cprover
Loading...
Searching...
No Matches
c_qualifiers.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module:
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
9#include "c_qualifiers.h"
10
11#include <util/make_unique.h>
12#include <util/type.h>
13
26
27std::unique_ptr<qualifierst> c_qualifierst::clone() const
28{
30 *other = *this;
31 return std::move(other);
32}
33
34std::string c_qualifierst::as_string() const
35{
36 std::string qualifiers;
37
38 if(is_constant)
39 qualifiers+="const ";
40
41 if(is_volatile)
42 qualifiers+="volatile ";
43
45 qualifiers+="restrict ";
46
47 if(is_atomic)
48 qualifiers+="_Atomic ";
49
50 if(is_ptr32)
51 qualifiers+="__ptr32 ";
52
53 if(is_ptr64)
54 qualifiers+="__ptr64 ";
55
56 if(is_noreturn)
57 qualifiers+="_Noreturn ";
58
59 return qualifiers;
60}
61
62void c_qualifierst::read(const typet &src)
63{
64 if(src.get_bool(ID_C_constant))
65 is_constant=true;
66
67 if(src.get_bool(ID_C_volatile))
68 is_volatile=true;
69
71 is_restricted=true;
72
73 if(src.get_bool(ID_C_atomic))
74 is_atomic=true;
75
76 if(src.get_bool(ID_C_ptr32))
77 is_ptr32=true;
78
79 if(src.get_bool(ID_C_ptr64))
80 is_ptr64=true;
81
84
85 if(src.get_bool(ID_C_noreturn))
86 is_noreturn=true;
87}
88
89void c_qualifierst::write(typet &dest) const
90{
91 if(is_constant)
92 dest.set(ID_C_constant, true);
93 else
95
96 if(is_volatile)
97 dest.set(ID_C_volatile, true);
98 else
100
101 if(is_restricted)
102 dest.set(ID_C_restricted, true);
103 else
105
106 if(is_atomic)
107 dest.set(ID_C_atomic, true);
108 else
109 dest.remove(ID_C_atomic);
110
111 if(is_ptr32)
112 dest.set(ID_C_ptr32, true);
113 else
114 dest.remove(ID_C_ptr32);
115
116 if(is_ptr64)
117 dest.set(ID_C_ptr64, true);
118 else
119 dest.remove(ID_C_ptr64);
120
122 dest.set(ID_C_transparent_union, true);
123 else
125
126 if(is_noreturn)
127 dest.set(ID_C_noreturn, true);
128 else
129 dest.remove(ID_C_noreturn);
130}
131
133{
134 dest.remove(ID_C_constant);
135 dest.remove(ID_C_volatile);
137 dest.remove(ID_C_ptr32);
138 dest.remove(ID_C_ptr64);
140 dest.remove(ID_C_noreturn);
141}
142
144std::ostream &operator<<(std::ostream &out, const qualifierst &qualifiers)
145{
146 return out << qualifiers.as_string();
147}
std::ostream & operator<<(std::ostream &out, const qualifierst &qualifiers)
pretty-print the qualifiers
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:563
virtual void clear() override
virtual std::string as_string() const override
virtual void write(typet &src) const override
bool is_transparent_union
virtual std::unique_ptr< qualifierst > clone() const override
virtual void read(const typet &src) override
c_qualifierst & operator=(const c_qualifierst &other)
bool get_bool(const irep_idt &name) const
Definition irep.cpp:57
void remove(const irep_idt &name)
Definition irep.cpp:95
void set(const irep_idt &name, const irep_idt &value)
Definition irep.h:420
The type of an expression, extends irept.
Definition type.h:29
Defines typet, type_with_subtypet and type_with_subtypest.