Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Init.hpp

    r87701b6 r60aaa51d  
    1616#pragma once
    1717
     18#include <deque>
    1819#include <utility>        // for move
    1920#include <vector>
     
    2223#include "Node.hpp"       // for ptr
    2324#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);
    2428
    2529namespace ast {
     
    3236class Designation final : public ParseNode {
    3337public:
    34         std::vector<ptr<Expr>> designators;
     38        std::deque<ptr<Expr>> designators;
    3539
    36         Designation( const CodeLocation& loc, std::vector<ptr<Expr>>&& ds = {} )
     40        Designation( const CodeLocation& loc, std::deque<ptr<Expr>>&& ds = {} )
    3741        : ParseNode( loc ), designators( std::move(ds) ) {}
    3842
     
    4044private:
    4145        Designation* clone() const override { return new Designation{ *this }; }
     46        MUTATE_FRIEND
    4247};
    4348
     
    5560private:
    5661        Init * clone() const override = 0;
     62        MUTATE_FRIEND
    5763};
    5864
     
    6975private:
    7076        SingleInit * clone() const override { return new SingleInit{ *this }; }
    71 
    72         /// Must be copied in ALL derived classes
    73         template<typename node_t>
    74         friend node_t * mutate(const node_t * node);
     77        MUTATE_FRIEND
    7578};
    7679
     
    97100private:
    98101        ListInit * clone() const override { return new ListInit{ *this }; }
    99 
    100         /// Must be copied in ALL derived classes
    101         template<typename node_t>
    102         friend node_t * mutate(const node_t * node);
     102        MUTATE_FRIEND
    103103};
    104104
     
    120120private:
    121121        ConstructorInit * clone() const override { return new ConstructorInit{ *this }; }
    122 
    123         /// Must be copied in ALL derived classes
    124         template<typename node_t>
    125         friend node_t * mutate(const node_t * node);
     122        MUTATE_FRIEND
    126123};
    127124
    128125}
     126
     127#undef MUTATE_FRIEND
    129128
    130129// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.