cprover
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 <ostream>
12 
13 std::string c_qualifierst::as_string() const
14 {
15  std::string qualifiers;
16 
17  if(is_constant)
18  qualifiers+="const ";
19 
20  if(is_volatile)
21  qualifiers+="volatile ";
22 
23  if(is_restricted)
24  qualifiers+="restrict ";
25 
26  if(is_atomic)
27  qualifiers+="_Atomic ";
28 
29  if(is_ptr32)
30  qualifiers+="__ptr32 ";
31 
32  if(is_ptr64)
33  qualifiers+="__ptr64 ";
34 
35  if(is_noreturn)
36  qualifiers+="_Noreturn ";
37 
38  return qualifiers;
39 }
40 
41 void c_qualifierst::read(const typet &src)
42 {
43  if(src.get_bool(ID_C_constant))
44  is_constant=true;
45 
46  if(src.get_bool(ID_C_volatile))
47  is_volatile=true;
48 
49  if(src.get_bool(ID_C_restricted))
50  is_restricted=true;
51 
52  if(src.get_bool(ID_C_atomic))
53  is_atomic=true;
54 
55  if(src.get_bool(ID_C_ptr32))
56  is_ptr32=true;
57 
58  if(src.get_bool(ID_C_ptr64))
59  is_ptr64=true;
60 
61  if(src.get_bool(ID_C_transparent_union))
63 
64  if(src.get_bool(ID_C_noreturn))
65  is_noreturn=true;
66 }
67 
68 void c_qualifierst::write(typet &dest) const
69 {
70  if(is_constant)
71  dest.set(ID_C_constant, true);
72  else
73  dest.remove(ID_C_constant);
74 
75  if(is_volatile)
76  dest.set(ID_C_volatile, true);
77  else
78  dest.remove(ID_C_volatile);
79 
80  if(is_restricted)
81  dest.set(ID_C_restricted, true);
82  else
83  dest.remove(ID_C_restricted);
84 
85  if(is_atomic)
86  dest.set(ID_C_atomic, true);
87  else
88  dest.remove(ID_C_atomic);
89 
90  if(is_ptr32)
91  dest.set(ID_C_ptr32, true);
92  else
93  dest.remove(ID_C_ptr32);
94 
95  if(is_ptr64)
96  dest.set(ID_C_ptr64, true);
97  else
98  dest.remove(ID_C_ptr64);
99 
101  dest.set(ID_C_transparent_union, true);
102  else
103  dest.remove(ID_C_transparent_union);
104 
105  if(is_noreturn)
106  dest.set(ID_C_noreturn, true);
107  else
108  dest.remove(ID_C_noreturn);
109 }
110 
112 {
113  dest.remove(ID_C_constant);
114  dest.remove(ID_C_volatile);
115  dest.remove(ID_C_restricted);
116  dest.remove(ID_C_ptr32);
117  dest.remove(ID_C_ptr64);
118  dest.remove(ID_C_transparent_union);
119  dest.remove(ID_C_noreturn);
120 }
121 
123 std::ostream &operator << (
124  std::ostream &out,
125  const c_qualifierst &c_qualifiers)
126 {
127  return out << c_qualifiers.as_string();
128 }
The type of an expression.
Definition: type.h:20
bool get_bool(const irep_namet &name) const
Definition: irep.cpp:240
void read(const typet &src)
void write(typet &src) const
bool is_transparent_union
Definition: c_qualifiers.h:49
std::string as_string() const
std::ostream & operator<<(std::ostream &out, const c_qualifierst &c_qualifiers)
pretty-print the qualifiers
bool is_restricted
Definition: c_qualifiers.h:43
void remove(const irep_namet &name)
Definition: irep.cpp:270
void set(const irep_namet &name, const irep_idt &value)
Definition: irep.h:214