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