Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Init.hpp

    re0115286 r6d51bd7  
    3737        : ParseNode( loc ), designators( std::move(ds) ) {}
    3838
    39         Designation* accept( Visitor& v ) override { return v.visit( this ); }
     39        virtual const Designation* accept( Visitor& v ) const override { return v.visit( this ); }
    4040private:
    41         Designation* clone() const override { return new Designation{ *this }; }
     41        virtual Designation* clone() const override { return new Designation{ *this }; }
    4242};
    4343
     
    4949        Init( const CodeLocation& loc, bool mc ) : ParseNode( loc ), maybeConstructed( mc ) {}
    5050
    51         virtual Init* accept( Visitor& v ) override = 0;
     51        virtual const Init * accept( Visitor& v ) const override = 0;
    5252private:
    53         virtual Init* clone() const override = 0;
     53        virtual const Init * clone() const override = 0;
    5454};
    5555
     
    6363        : Init( loc, mc ), value( val ) {}
    6464
    65         Init* accept( Visitor& v ) override { return v.visit( this ); }
     65        virtual const Init * accept( Visitor & v ) const override { return v.visit( this ); }
    6666private:
    67         SingleInit* clone() const override { return new SingleInit{ *this }; }
     67        virtual 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);
    6872};
    6973
     
    8791        const_iterator end() const { return initializers.end(); }
    8892
    89         Init* accept( Visitor& v ) override { return v.visit( this ); }
     93        virtual const Init * accept( Visitor & v ) const override { return v.visit( this ); }
    9094private:
    91         ListInit* clone() const override { return new ListInit{ *this }; }
     95        virtual 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);
    92100};
    93101
     
    106114        : Init( loc, true ), ctor( ctor ), dtor( dtor ), init( init ) {}
    107115
    108         Init* accept( Visitor& v ) override { return v.visit( this ); }
     116        virtual const Init * accept( Visitor & v ) const override { return v.visit( this ); }
    109117private:
    110         ConstructorInit* clone() const override { return new ConstructorInit{ *this }; }
     118        virtual 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);
    111123};
    112124
Note: See TracChangeset for help on using the changeset viewer.