CBMC
c_qualifiers.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: 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 
15 {
16  is_constant = other.is_constant;
17  is_volatile = other.is_volatile;
19  is_atomic = other.is_atomic;
20  is_noreturn = other.is_noreturn;
21  is_ptr32 = other.is_ptr32;
22  is_ptr64 = other.is_ptr64;
24  return *this;
25 }
26 
27 std::unique_ptr<qualifierst> c_qualifierst::clone() const
28 {
29  auto other = util_make_unique<c_qualifierst>();
30  *other = *this;
31  return std::move(other);
32 }
33 
34 std::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 
44  if(is_restricted)
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 
62 void 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 
70  if(src.get_bool(ID_C_restricted))
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 
82  if(src.get_bool(ID_C_transparent_union))
84 
85  if(src.get_bool(ID_C_noreturn))
86  is_noreturn=true;
87 }
88 
89 void c_qualifierst::write(typet &dest) const
90 {
91  if(is_constant)
92  dest.set(ID_C_constant, true);
93  else
94  dest.remove(ID_C_constant);
95 
96  if(is_volatile)
97  dest.set(ID_C_volatile, true);
98  else
99  dest.remove(ID_C_volatile);
100 
101  if(is_restricted)
102  dest.set(ID_C_restricted, true);
103  else
104  dest.remove(ID_C_restricted);
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
124  dest.remove(ID_C_transparent_union);
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);
136  dest.remove(ID_C_restricted);
137  dest.remove(ID_C_ptr32);
138  dest.remove(ID_C_ptr64);
139  dest.remove(ID_C_transparent_union);
140  dest.remove(ID_C_noreturn);
141 }
142 
144 std::ostream &operator<<(std::ostream &out, const qualifierst &qualifiers)
145 {
146  return out << qualifiers.as_string();
147 }
c_qualifierst::read
virtual void read(const typet &src) override
Definition: c_qualifiers.cpp:62
typet
The type of an expression, extends irept.
Definition: type.h:28
c_qualifierst::is_ptr64
bool is_ptr64
Definition: c_qualifiers.h:95
c_qualifierst::is_volatile
bool is_volatile
Definition: c_qualifiers.h:92
c_qualifiers.h
qualifierst
Definition: c_qualifiers.h:19
c_qualifierst::clear
virtual void clear() override
Definition: c_qualifiers.h:80
type.h
operator<<
std::ostream & operator<<(std::ostream &out, const qualifierst &qualifiers)
pretty-print the qualifiers
Definition: c_qualifiers.cpp:144
make_unique.h
c_qualifierst::is_constant
bool is_constant
Definition: c_qualifiers.h:92
irept::set
void set(const irep_idt &name, const irep_idt &value)
Definition: irep.h:420
c_qualifierst::clone
virtual std::unique_ptr< qualifierst > clone() const override
Definition: c_qualifiers.cpp:27
c_qualifierst::write
virtual void write(typet &src) const override
Definition: c_qualifiers.cpp:89
c_qualifierst
Definition: c_qualifiers.h:61
c_qualifierst::operator=
c_qualifierst & operator=(const c_qualifierst &other)
Definition: c_qualifiers.cpp:14
c_qualifierst::is_atomic
bool is_atomic
Definition: c_qualifiers.h:92
c_qualifierst::is_restricted
bool is_restricted
Definition: c_qualifiers.h:92
irept::remove
void remove(const irep_idt &name)
Definition: irep.cpp:96
c_qualifierst::is_ptr32
bool is_ptr32
Definition: c_qualifiers.h:95
qualifierst::as_string
virtual std::string as_string() const =0
c_qualifierst::as_string
virtual std::string as_string() const override
Definition: c_qualifiers.cpp:34
c_qualifierst::is_noreturn
bool is_noreturn
Definition: c_qualifiers.h:92
irept::get_bool
bool get_bool(const irep_idt &name) const
Definition: irep.cpp:58
c_qualifierst::is_transparent_union
bool is_transparent_union
Definition: c_qualifiers.h:98