Changes in src/AST/Decl.hpp [f3cc5b6:8a5530c]
- File:
-
- 1 edited
-
src/AST/Decl.hpp (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Decl.hpp
rf3cc5b6 r8a5530c 30 30 #include "Parser/ParseNode.h" // for DeclarationNode::Aggregate 31 31 32 // Must be included in *all* AST classes; should be #undef'd at the end of the file33 #define MUTATE_FRIEND template<typename node_t> friend auto mutate(const node_t * node);34 35 32 namespace ast { 33 34 class Attribute; 35 class Expr; 36 class Init; 37 class TypeDecl; 36 38 37 39 /// Base declaration class … … 58 60 private: 59 61 Decl * clone() const override = 0; 60 MUTATE_FRIEND61 62 }; 62 63 … … 91 92 private: 92 93 DeclWithType * clone() const override = 0; 93 MUTATE_FRIEND94 94 }; 95 95 … … 113 113 private: 114 114 ObjectDecl * clone() const override { return new ObjectDecl{ *this }; } 115 MUTATE_FRIEND 115 116 /// Must be copied in ALL derived classes 117 template<typename node_t> 118 friend auto mutate(const node_t * node); 116 119 }; 117 120 … … 137 140 private: 138 141 FunctionDecl * clone() const override { return new FunctionDecl( *this ); } 139 MUTATE_FRIEND 142 143 /// Must be copied in ALL derived classes 144 template<typename node_t> 145 friend auto mutate(const node_t * node); 140 146 }; 141 147 … … 144 150 public: 145 151 ptr<Type> base; 146 std::vector<ptr<TypeDecl>> param s;152 std::vector<ptr<TypeDecl>> parameters; 147 153 std::vector<ptr<DeclWithType>> assertions; 148 154 149 155 NamedTypeDecl( const CodeLocation& loc, const std::string& name, Storage::Classes storage, 150 156 Type* b, Linkage::Spec spec = Linkage::Cforall ) 151 : Decl( loc, name, storage, spec ), base( b ), param s(), assertions() {}157 : Decl( loc, name, storage, spec ), base( b ), parameters(), assertions() {} 152 158 153 159 /// Produces a name for the kind of alias … … 156 162 private: 157 163 NamedTypeDecl* clone() const override = 0; 158 MUTATE_FRIEND159 164 }; 160 165 … … 198 203 private: 199 204 TypeDecl * clone() const override { return new TypeDecl{ *this }; } 200 MUTATE_FRIEND 205 206 /// Must be copied in ALL derived classes 207 template<typename node_t> 208 friend auto mutate(const node_t * node); 201 209 }; 202 210 … … 213 221 private: 214 222 TypedefDecl * clone() const override { return new TypedefDecl{ *this }; } 215 MUTATE_FRIEND 223 224 /// Must be copied in ALL derived classes 225 template<typename node_t> 226 friend auto mutate(const node_t * node); 216 227 }; 217 228 … … 220 231 public: 221 232 std::vector<ptr<Decl>> members; 222 std::vector<ptr<TypeDecl>> param s;233 std::vector<ptr<TypeDecl>> parameters; 223 234 std::vector<ptr<Attribute>> attributes; 224 235 bool body = false; … … 227 238 AggregateDecl( const CodeLocation& loc, const std::string& name, 228 239 std::vector<ptr<Attribute>>&& attrs = {}, Linkage::Spec linkage = Linkage::Cforall ) 229 : Decl( loc, name, Storage::Classes{}, linkage ), members(), param s(),240 : Decl( loc, name, Storage::Classes{}, linkage ), members(), parameters(), 230 241 attributes( std::move(attrs) ) {} 231 242 232 243 AggregateDecl* set_body( bool b ) { body = b; return this; } 233 234 private:235 AggregateDecl * clone() const override = 0;236 MUTATE_FRIEND237 244 238 245 protected: … … 258 265 private: 259 266 StructDecl * clone() const override { return new StructDecl{ *this }; } 260 MUTATE_FRIEND 267 268 /// Must be copied in ALL derived classes 269 template<typename node_t> 270 friend auto mutate(const node_t * node); 261 271 262 272 std::string typeString() const override { return "struct"; } … … 273 283 private: 274 284 UnionDecl * clone() const override { return new UnionDecl{ *this }; } 275 MUTATE_FRIEND 285 286 /// Must be copied in ALL derived classes 287 template<typename node_t> 288 friend auto mutate(const node_t * node); 276 289 277 290 std::string typeString() const override { return "union"; } … … 291 304 private: 292 305 EnumDecl * clone() const override { return new EnumDecl{ *this }; } 293 MUTATE_FRIEND 306 307 /// Must be copied in ALL derived classes 308 template<typename node_t> 309 friend auto mutate(const node_t * node); 294 310 295 311 std::string typeString() const override { return "enum"; } … … 309 325 private: 310 326 TraitDecl * clone() const override { return new TraitDecl{ *this }; } 311 MUTATE_FRIEND 327 328 /// Must be copied in ALL derived classes 329 template<typename node_t> 330 friend auto mutate(const node_t * node); 312 331 313 332 std::string typeString() const override { return "trait"; } … … 324 343 private: 325 344 AsmDecl *clone() const override { return new AsmDecl( *this ); } 326 MUTATE_FRIEND 345 346 /// Must be copied in ALL derived classes 347 template<typename node_t> 348 friend auto mutate(const node_t * node); 327 349 }; 328 350 … … 338 360 private: 339 361 StaticAssertDecl * clone() const override { return new StaticAssertDecl( *this ); } 340 MUTATE_FRIEND 362 363 /// Must be copied in ALL derived classes 364 template<typename node_t> 365 friend auto mutate(const node_t * node); 341 366 }; 342 367 … … 377 402 } 378 403 379 #undef MUTATE_FRIEND380 381 404 // Local Variables: // 382 405 // tab-width: 4 //
Note:
See TracChangeset
for help on using the changeset viewer.