1 // =================================
  2 // Copyright (c) 2021 Seppo Laakko
  3 // Distributed under the MIT license
  4 // =================================
  5 
  6 #include <sngcm/ast/Specifier.hpp>
  7 
  8 namespace sngcm { namespace ast {
  9 
 10 std::string SpecifierStr(Specifiers specifiers)
 11 {
 12     std::string s;
 13     if ((specifiers & Specifiers::public_) != Specifiers::none)
 14     {
 15         s.append("public");
 16     }
 17     if ((specifiers & Specifiers::protected_) != Specifiers::none)
 18     {
 19         if (!s.empty())
 20         {
 21             s.append(1' ');
 22         }
 23         s.append("protected");
 24     }
 25     if ((specifiers & Specifiers::private_) != Specifiers::none)
 26     {
 27         if (!s.empty())
 28         {
 29             s.append(1' ');
 30         }
 31         s.append("private");
 32     }
 33     if ((specifiers & Specifiers::internal_) != Specifiers::none)
 34     {
 35         if (!s.empty())
 36         {
 37             s.append(1' ');
 38         }
 39         s.append("internal");
 40     }
 41     if ((specifiers & Specifiers::static_) != Specifiers::none)
 42     {
 43         if (!s.empty())
 44         {
 45             s.append(1' ');
 46         }
 47         s.append("static");
 48     }
 49     if ((specifiers & Specifiers::virtual_) != Specifiers::none)
 50     {
 51         if (!s.empty())
 52         {
 53             s.append(1' ');
 54         }
 55         s.append("virtual");
 56     }
 57     if ((specifiers & Specifiers::override_) != Specifiers::none)
 58     {
 59         if (!s.empty())
 60         {
 61             s.append(1' ');
 62         }
 63         s.append("override");
 64     }
 65     if ((specifiers & Specifiers::abstract_) != Specifiers::none)
 66     {
 67         if (!s.empty())
 68         {
 69             s.append(1' ');
 70         }
 71         s.append("abstract");
 72     }
 73     if ((specifiers & Specifiers::inline_) != Specifiers::none)
 74     {
 75         if (!s.empty())
 76         {
 77             s.append(1' ');
 78         }
 79         s.append("inline");
 80     }
 81     if ((specifiers & Specifiers::explicit_) != Specifiers::none)
 82     {
 83         if (!s.empty())
 84         {
 85             s.append(1' ');
 86         }
 87         s.append("explicit");
 88     }
 89     if ((specifiers & Specifiers::external_) != Specifiers::none)
 90     {
 91         if (!s.empty())
 92         {
 93             s.append(1' ');
 94         }
 95         s.append("extern");
 96     }
 97     if ((specifiers & Specifiers::suppress_) != Specifiers::none)
 98     {
 99         if (!s.empty())
100         {
101             s.append(1' ');
102         }
103         s.append("suppress");
104     }
105     if ((specifiers & Specifiers::default_) != Specifiers::none)
106     {
107         if (!s.empty())
108         {
109             s.append(1' ');
110         }
111         s.append("default");
112     }
113     if ((specifiers & Specifiers::constexpr_) != Specifiers::none)
114     {
115         if (!s.empty())
116         {
117             s.append(1' ');
118         }
119         s.append("constexpr");
120     }
121     if ((specifiers & Specifiers::cdecl_) != Specifiers::none)
122     {
123         if (!s.empty())
124         {
125             s.append(1' ');
126         }
127         s.append("cdecl");
128     }
129     if ((specifiers & Specifiers::nothrow_) != Specifiers::none)
130     {
131         if (!s.empty())
132         {
133             s.append(1' ');
134         }
135         s.append("nothrow");
136     }
137     if ((specifiers & Specifiers::throw_) != Specifiers::none)
138     {
139         if (!s.empty())
140         {
141             s.append(1' ');
142         }
143         s.append("throw");
144     }
145     if ((specifiers & Specifiers::new_) != Specifiers::none)
146     {
147         if (!s.empty())
148         {
149             s.append(1' ');
150         }
151         s.append("new");
152     }
153     if ((specifiers & Specifiers::unit_test_) != Specifiers::none)
154     {
155         if (!s.empty())
156         {
157             s.append(1' ');
158         }
159         s.append("unit_test");
160     }
161     return s;
162 }
163 
164 bool StaticConstructorSpecifiers(Specifiers specifiers)
165 {
166     if ((specifiers & Specifiers::static_) == Specifiers::none) return false;
167     return true;
168 }
169 
170 } } // namespace sngcm::ast