Changeset f3cc5b6 for src/AST/Expr.hpp


Ignore:
Timestamp:
May 16, 2019, 2:33:48 PM (5 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
ADT, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
204358b, 9b4f329
Parents:
24afc53
Message:

Ensure all node types have mutate() as friend

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Expr.hpp

    r24afc53 rf3cc5b6  
    2727#include "Visitor.hpp"
    2828
     29// Must be included in *all* AST classes; should be #undef'd at the end of the file
     30#define MUTATE_FRIEND template<typename node_t> friend auto mutate(const node_t * node);
     31
    2932namespace ast {
    3033
     
    127130private:
    128131        Expr * clone() const override = 0;
     132        MUTATE_FRIEND
    129133};
    130134
     
    141145private:
    142146        ApplicationExpr * clone() const override { return new ApplicationExpr{ *this }; }
     147        MUTATE_FRIEND
    143148};
    144149
     
    160165private:
    161166        UntypedExpr * clone() const override { return new UntypedExpr{ *this }; }
     167        MUTATE_FRIEND
    162168};
    163169
     
    173179private:
    174180        NameExpr * clone() const override { return new NameExpr{ *this }; }
     181        MUTATE_FRIEND
    175182};
    176183
     
    185192private:
    186193        AddressExpr * clone() const override { return new AddressExpr{ *this }; }
     194        MUTATE_FRIEND
    187195};
    188196
     
    198206private:
    199207        LabelAddressExpr * clone() const override { return new LabelAddressExpr{ *this }; }
     208        MUTATE_FRIEND
    200209};
    201210
     
    217226private:
    218227        CastExpr * clone() const override { return new CastExpr{ *this }; }
     228        MUTATE_FRIEND
    219229};
    220230
     
    234244private:
    235245        KeywordCastExpr * clone() const override { return new KeywordCastExpr{ *this }; }
     246        MUTATE_FRIEND
    236247};
    237248
     
    247258private:
    248259        VirtualCastExpr * clone() const override { return new VirtualCastExpr{ *this }; }
     260        MUTATE_FRIEND
    249261};
    250262
     
    261273private:
    262274        UntypedMemberExpr * clone() const override { return new UntypedMemberExpr{ *this }; }
     275        MUTATE_FRIEND
    263276};
    264277
     
    274287private:
    275288        MemberExpr * clone() const override { return new MemberExpr{ *this }; }
     289        MUTATE_FRIEND
    276290};
    277291
     
    289303private:
    290304        VariableExpr * clone() const override { return new VariableExpr{ *this }; }
     305        MUTATE_FRIEND
    291306};
    292307
     
    332347private:
    333348        ConstantExpr * clone() const override { return new ConstantExpr{ *this }; }
     349        MUTATE_FRIEND
    334350};
    335351
     
    347363private:
    348364        SizeofExpr * clone() const override { return new SizeofExpr{ *this }; }
     365        MUTATE_FRIEND
    349366};
    350367
     
    362379private:
    363380        AlignofExpr * clone() const override { return new AlignofExpr{ *this }; }
     381        MUTATE_FRIEND
    364382};
    365383
     
    376394private:
    377395        UntypedOffsetofExpr * clone() const override { return new UntypedOffsetofExpr{ *this }; }
     396        MUTATE_FRIEND
    378397};
    379398
     
    389408private:
    390409        OffsetofExpr * clone() const override { return new OffsetofExpr{ *this }; }
     410        MUTATE_FRIEND
    391411};
    392412
     
    401421private:
    402422        OffsetPackExpr * clone() const override { return new OffsetPackExpr{ *this }; }
     423        MUTATE_FRIEND
    403424};
    404425
     
    418439private:
    419440        LogicalExpr * clone() const override { return new LogicalExpr{ *this }; }
     441        MUTATE_FRIEND
    420442};
    421443
     
    433455private:
    434456        ConditionalExpr * clone() const override { return new ConditionalExpr{ *this }; }
     457        MUTATE_FRIEND
    435458};
    436459
     
    447470private:
    448471        CommaExpr * clone() const override { return new CommaExpr{ *this }; }
     472        MUTATE_FRIEND
    449473};
    450474
     
    459483private:
    460484        TypeExpr * clone() const override { return new TypeExpr{ *this }; }
     485        MUTATE_FRIEND
    461486};
    462487
     
    554579}
    555580
     581#undef MUTATE_FRIEND
     582
    556583// Local Variables: //
    557584// tab-width: 4 //
Note: See TracChangeset for help on using the changeset viewer.