Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Init.hpp

    r23f99e1 r9e1d485  
    3737        : ParseNode( loc ), designators( std::move(ds) ) {}
    3838
    39         const Designation* accept( Visitor& v ) const override { return v.visit( this ); }
     39        Designation* accept( Visitor& v ) override { return v.visit( this ); }
    4040private:
    4141        Designation* clone() const override { return new Designation{ *this }; }
    4242};
    4343
     44/// Flag for whether to construct from initialzier
     45enum ConstructFlag { DoConstruct, MaybeConstruct };
     46
    4447/// Object initializer base class
    4548class Init : public ParseNode {
    4649public:
    47         bool maybeConstructed;
     50        ConstructFlag maybeConstructed;
    4851
    49         Init( const CodeLocation& loc, bool mc ) : ParseNode( loc ), maybeConstructed( mc ) {}
     52        Init( const CodeLocation& loc, ConstructFlag mc ) : ParseNode( loc ), maybeConstructed( mc ) {}
    5053
    51         const Init * accept( Visitor& v ) const override = 0;
     54        virtual Init* accept( Visitor& v ) override = 0;
    5255private:
    53         const Init * clone() const override = 0;
     56        virtual Init* clone() const override = 0;
    5457};
    5558
     
    6063        ptr<Expr> value;
    6164
    62         SingleInit( const CodeLocation& loc, Expr* val, bool mc = false )
     65        SingleInit( const CodeLocation& loc, Expr* val, ConstructFlag mc = DoConstruct )
    6366        : Init( loc, mc ), value( val ) {}
    6467
    65         const Init * accept( Visitor & v ) const override { return v.visit( this ); }
     68        Init* accept( Visitor& v ) override { return v.visit( this ); }
    6669private:
    67         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);
     70        SingleInit* clone() const override { return new SingleInit{ *this }; }
    7271};
    7372
     
    8281
    8382        ListInit( const CodeLocation& loc, std::vector<ptr<Init>>&& is,
    84                 std::vector<ptr<Designation>>&& ds = {}, bool mc = false );
     83                std::vector<ptr<Designation>>&& ds = {}, ConstructFlag mc = DoConstruct );
    8584
    8685        using iterator = std::vector<ptr<Init>>::iterator;
     
    9190        const_iterator end() const { return initializers.end(); }
    9291
    93         const Init * accept( Visitor & v ) const override { return v.visit( this ); }
     92        Init* accept( Visitor& v ) override { return v.visit( this ); }
    9493private:
    95         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);
     94        ListInit* clone() const override { return new ListInit{ *this }; }
    10095};
    10196
     
    112107
    113108        ConstructorInit( const CodeLocation& loc, Stmt* ctor, Stmt* dtor, Init* init )
    114         : Init( loc, true ), ctor( ctor ), dtor( dtor ), init( init ) {}
     109        : Init( loc, DoConstruct ), ctor( ctor ), dtor( dtor ), init( init ) {}
    115110
    116         const Init * accept( Visitor & v ) const override { return v.visit( this ); }
     111        Init* accept( Visitor& v ) override { return v.visit( this ); }
    117112private:
    118         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);
     113        ConstructorInit* clone() const override { return new ConstructorInit{ *this }; }
    123114};
    124115
Note: See TracChangeset for help on using the changeset viewer.