1 // =================================
  2 // Copyright (c) 2020 Seppo Laakko
  3 // Distributed under the MIT license
  4 // =================================
  5 
  6 #include <sngcpp/ast/Specifier.hpp>
  7 
  8 namespace sngcpp { namespace ast {
  9 
 10 std::u32string SpecifierStr(Specifier specifiers)
 11 {
 12     std::u32string s;
 13     if ((specifiers & Specifier::public_) != Specifier::none)
 14     {
 15         if (!s.empty())
 16         {
 17             s.append(1' ');
 18         }
 19         s.append(U"public");
 20     }
 21     else if ((specifiers & Specifier::protected_) != Specifier::none)
 22     {
 23         if (!s.empty())
 24         {
 25             s.append(1' ');
 26         }
 27         s.append(U"protected");
 28     }
 29     else if ((specifiers & Specifier::private_) != Specifier::none)
 30     {
 31         if (!s.empty())
 32         {
 33             s.append(1' ');
 34         }
 35         s.append(U"private");
 36     }
 37     if ((specifiers & Specifier::const_) != Specifier::none)
 38     {
 39         if (!s.empty())
 40         {
 41             s.append(1' ');
 42         }
 43         s.append(U"const");
 44     }
 45     if ((specifiers & Specifier::constExpr) != Specifier::none)
 46     {
 47         if (!s.empty())
 48         {
 49             s.append(1' ');
 50         }
 51         s.append(U"constexpr");
 52     }
 53     if ((specifiers & Specifier::volatile_) != Specifier::none)
 54     {
 55         if (!s.empty())
 56         {
 57             s.append(1' ');
 58         }
 59         s.append(U"volatile");
 60     }
 61     if ((specifiers & Specifier::explicit_) != Specifier::none)
 62     {
 63         if (!s.empty())
 64         {
 65             s.append(1' ');
 66         }
 67         s.append(U"explicit");
 68     }
 69     if ((specifiers & Specifier::mutable_) != Specifier::none)
 70     {
 71         if (!s.empty())
 72         {
 73             s.append(1' ');
 74         }
 75         s.append(U"mutable");
 76     }
 77     if ((specifiers & Specifier::inline_) != Specifier::none)
 78     {
 79         if (!s.empty())
 80         {
 81             s.append(1' ');
 82         }
 83         s.append(U"inline");
 84     }
 85     if ((specifiers & Specifier::static_) != Specifier::none)
 86     {
 87         if (!s.empty())
 88         {
 89             s.append(1' ');
 90         }
 91         s.append(U"static");
 92     }
 93     if ((specifiers & Specifier::extern_) != Specifier::none)
 94     {
 95         if (!s.empty())
 96         {
 97             s.append(1' ');
 98         }
 99         s.append(U"extern");
100     }
101     if ((specifiers & Specifier::register_) != Specifier::none)
102     {
103         if (!s.empty())
104         {
105             s.append(1' ');
106         }
107         s.append(U"register");
108     }
109     if ((specifiers & Specifier::threadLocal) != Specifier::none)
110     {
111         if (!s.empty())
112         {
113             s.append(1' ');
114         }
115         s.append(U"thread_local");
116     }
117     if ((specifiers & Specifier::pure_) != Specifier::none)
118     {
119         if (!s.empty())
120         {
121             s.append(1' ');
122         }
123         s.append(U"pure");
124     }
125     if ((specifiers & Specifier::virtual_) != Specifier::none)
126     {
127         if (!s.empty())
128         {
129             s.append(1' ');
130         }
131         s.append(U"virtual");
132     }
133     if ((specifiers & Specifier::override_) != Specifier::none)
134     {
135         if (!s.empty())
136         {
137             s.append(1' ');
138         }
139         s.append(U"override");
140     }
141     if ((specifiers & Specifier::final_) != Specifier::none)
142     {
143         if (!s.empty())
144         {
145             s.append(1' ');
146         }
147         s.append(U"final");
148     }
149     if ((specifiers & Specifier::new_) != Specifier::none)
150     {
151         if (!s.empty())
152         {
153             s.append(1' ');
154         }
155         s.append(U"new");
156     }
157     if ((specifiers & Specifier::default_) != Specifier::none)
158     {
159         if (!s.empty())
160         {
161             s.append(1' ');
162         }
163         s.append(U"default");
164     }
165     if ((specifiers & Specifier::delete_) != Specifier::none)
166     {
167         if (!s.empty())
168         {
169             s.append(1' ');
170         }
171         s.append(U"delete");
172     }
173     if ((specifiers & Specifier::friend_) != Specifier::none)
174     {
175         if (!s.empty())
176         {
177             s.append(1' ');
178         }
179         s.append(U"friend");
180     }
181     return s;
182 }
183 
184 } } // namespace sngcpp::ast