Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Init.hpp

    r60aaa51d r87701b6  
    1616#pragma once
    1717
    18 #include <deque>
    1918#include <utility>        // for move
    2019#include <vector>
     
    2322#include "Node.hpp"       // for ptr
    2423#include "Visitor.hpp"
    25 
    26 // Must be included in *all* AST classes; should be #undef'd at the end of the file
    27 #define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
    2824
    2925namespace ast {
     
    3632class Designation final : public ParseNode {
    3733public:
    38         std::deque<ptr<Expr>> designators;
     34        std::vector<ptr<Expr>> designators;
    3935
    40         Designation( const CodeLocation& loc, std::deque<ptr<Expr>>&& ds = {} )
     36        Designation( const CodeLocation& loc, std::vector<ptr<Expr>>&& ds = {} )
    4137        : ParseNode( loc ), designators( std::move(ds) ) {}
    4238
     
    4440private:
    4541        Designation* clone() const override { return new Designation{ *this }; }
    46         MUTATE_FRIEND
    4742};
    4843
     
    6055private:
    6156        Init * clone() const override = 0;
    62         MUTATE_FRIEND
    6357};
    6458
     
    7569private:
    7670        SingleInit * clone() const override { return new SingleInit{ *this }; }
    77         MUTATE_FRIEND
     71
     72        /// Must be copied in ALL derived classes
     73        template<typename node_t>
     74        friend node_t * mutate(const node_t * node);
    7875};
    7976
     
    10097private:
    10198        ListInit * clone() const override { return new ListInit{ *this }; }
    102         MUTATE_FRIEND
     99
     100        /// Must be copied in ALL derived classes
     101        template<typename node_t>
     102        friend node_t * mutate(const node_t * node);
    103103};
    104104
     
    120120private:
    121121        ConstructorInit * clone() const override { return new ConstructorInit{ *this }; }
    122         MUTATE_FRIEND
     122
     123        /// Must be copied in ALL derived classes
     124        template<typename node_t>
     125        friend node_t * mutate(const node_t * node);
    123126};
    124127
    125128}
    126 
    127 #undef MUTATE_FRIEND
    128129
    129130// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.