Changeset f3cc5b6 for src/AST/Type.hpp
- Timestamp:
- May 16, 2019, 2:33:48 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 204358b, 9b4f329
- Parents:
- 24afc53
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Type.hpp
r24afc53 rf3cc5b6 29 29 #include "Visitor.hpp" 30 30 31 // Must be included in *all* AST classes; should be #undef'd at the end of the file 32 #define MUTATE_FRIEND template<typename node_t> friend auto mutate(const node_t * node); 33 31 34 namespace ast { 32 35 … … 70 73 private: 71 74 virtual Type * clone() const override = 0; 75 MUTATE_FRIEND 72 76 }; 73 77 … … 84 88 private: 85 89 VoidType * clone() const override { return new VoidType{ *this }; } 90 MUTATE_FRIEND 86 91 }; 87 92 … … 146 151 private: 147 152 BasicType * clone() const override { return new BasicType{ *this }; } 153 MUTATE_FRIEND 148 154 }; 149 155 … … 176 182 private: 177 183 PointerType * clone() const override { return new PointerType{ *this }; } 184 MUTATE_FRIEND 178 185 }; 179 186 … … 197 204 private: 198 205 ArrayType * clone() const override { return new ArrayType{ *this }; } 206 MUTATE_FRIEND 199 207 }; 200 208 … … 216 224 private: 217 225 ReferenceType * clone() const override { return new ReferenceType{ *this }; } 226 MUTATE_FRIEND 218 227 }; 219 228 … … 230 239 private: 231 240 QualifiedType * clone() const override { return new QualifiedType{ *this }; } 241 MUTATE_FRIEND 232 242 }; 233 243 … … 245 255 private: 246 256 virtual ParameterizedType * clone() const override = 0; 257 MUTATE_FRIEND 247 258 }; 248 259 … … 274 285 private: 275 286 FunctionType * clone() const override { return new FunctionType{ *this }; } 287 MUTATE_FRIEND 276 288 }; 277 289 … … 295 307 private: 296 308 virtual ReferenceToType * clone() const override = 0; 309 MUTATE_FRIEND 297 310 298 311 protected: … … 319 332 private: 320 333 StructInstType * clone() const override { return new StructInstType{ *this }; } 334 MUTATE_FRIEND 321 335 322 336 std::string typeString() const override { return "struct"; } … … 341 355 private: 342 356 UnionInstType * clone() const override { return new UnionInstType{ *this }; } 357 MUTATE_FRIEND 343 358 344 359 std::string typeString() const override { return "union"; } … … 363 378 private: 364 379 EnumInstType * clone() const override { return new EnumInstType{ *this }; } 380 MUTATE_FRIEND 365 381 366 382 std::string typeString() const override { return "enum"; } … … 386 402 private: 387 403 TraitInstType * clone() const override { return new TraitInstType{ *this }; } 404 MUTATE_FRIEND 388 405 389 406 std::string typeString() const override { return "trait"; } … … 414 431 private: 415 432 TypeInstType * clone() const override { return new TypeInstType{ *this }; } 433 MUTATE_FRIEND 416 434 417 435 std::string typeString() const override { return "type"; } … … 442 460 private: 443 461 TupleType * clone() const override { return new TupleType{ *this }; } 462 MUTATE_FRIEND 444 463 }; 445 464 … … 456 475 private: 457 476 TypeofType * clone() const override { return new TypeofType{ *this }; } 477 MUTATE_FRIEND 458 478 }; 459 479 … … 466 486 private: 467 487 VarArgsType * clone() const override { return new VarArgsType{ *this }; } 488 MUTATE_FRIEND 468 489 }; 469 490 … … 475 496 const Type * accept( Visitor & v ) const override { return v.visit( this ); } 476 497 private: 477 ZeroType * clone() const override { return new ZeroType{ *this }; } 498 ZeroType * clone() const override { return new ZeroType{ *this }; } 499 MUTATE_FRIEND 478 500 }; 479 501 … … 486 508 private: 487 509 OneType * clone() const override { return new OneType{ *this }; } 510 MUTATE_FRIEND 488 511 }; 489 512 … … 496 519 private: 497 520 GlobalScopeType * clone() const override { return new GlobalScopeType{ *this }; } 521 MUTATE_FRIEND 498 522 }; 499 523 … … 546 570 } 547 571 572 #undef MUTATE_FRIEND 573 548 574 // Local Variables: // 549 575 // tab-width: 4 //
Note: See TracChangeset
for help on using the changeset viewer.