Changes in src/AST/Init.hpp [23f99e1:f3cc5b6]
- File:
-
- 1 edited
-
src/AST/Init.hpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Init.hpp
r23f99e1 rf3cc5b6 23 23 #include "Visitor.hpp" 24 24 25 // Must be included in *all* AST classes; should be #undef'd at the end of the file 26 #define MUTATE_FRIEND template<typename node_t> friend auto mutate(const node_t * node); 27 25 28 namespace ast { 26 29 … … 40 43 private: 41 44 Designation* clone() const override { return new Designation{ *this }; } 45 MUTATE_FRIEND 42 46 }; 47 48 /// Flag for whether to construct from initialzier 49 enum ConstructFlag { DoConstruct, MaybeConstruct }; 43 50 44 51 /// Object initializer base class 45 52 class Init : public ParseNode { 46 53 public: 47 boolmaybeConstructed;54 ConstructFlag maybeConstructed; 48 55 49 Init( const CodeLocation& loc, boolmc ) : ParseNode( loc ), maybeConstructed( mc ) {}56 Init( const CodeLocation& loc, ConstructFlag mc ) : ParseNode( loc ), maybeConstructed( mc ) {} 50 57 51 58 const Init * accept( Visitor& v ) const override = 0; 52 59 private: 53 60 const Init * clone() const override = 0; 61 MUTATE_FRIEND 54 62 }; 55 63 … … 60 68 ptr<Expr> value; 61 69 62 SingleInit( const CodeLocation& loc, Expr* val, bool mc = false)70 SingleInit( const CodeLocation& loc, Expr* val, ConstructFlag mc = DoConstruct ) 63 71 : Init( loc, mc ), value( val ) {} 64 72 … … 66 74 private: 67 75 SingleInit * clone() const override { return new SingleInit{ *this }; } 68 69 /// Must be copied in ALL derived classes 70 template<typename node_t> 71 friend auto mutate(const node_t * node); 76 MUTATE_FRIEND 72 77 }; 73 78 … … 82 87 83 88 ListInit( const CodeLocation& loc, std::vector<ptr<Init>>&& is, 84 std::vector<ptr<Designation>>&& ds = {}, bool mc = false);89 std::vector<ptr<Designation>>&& ds = {}, ConstructFlag mc = DoConstruct ); 85 90 86 91 using iterator = std::vector<ptr<Init>>::iterator; … … 94 99 private: 95 100 ListInit * clone() const override { return new ListInit{ *this }; } 96 97 /// Must be copied in ALL derived classes 98 template<typename node_t> 99 friend auto mutate(const node_t * node); 101 MUTATE_FRIEND 100 102 }; 101 103 … … 112 114 113 115 ConstructorInit( const CodeLocation& loc, Stmt* ctor, Stmt* dtor, Init* init ) 114 : Init( loc, true), ctor( ctor ), dtor( dtor ), init( init ) {}116 : Init( loc, DoConstruct ), ctor( ctor ), dtor( dtor ), init( init ) {} 115 117 116 118 const Init * accept( Visitor & v ) const override { return v.visit( this ); } 117 119 private: 118 120 ConstructorInit * clone() const override { return new ConstructorInit{ *this }; } 119 120 /// Must be copied in ALL derived classes 121 template<typename node_t> 122 friend auto mutate(const node_t * node); 121 MUTATE_FRIEND 123 122 }; 124 123 … … 139 138 } 140 139 140 #undef MUTATE_FRIEND 141 141 142 // Local Variables: // 142 143 // tab-width: 4 //
Note:
See TracChangeset
for help on using the changeset viewer.