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