Changeset 246c245 for src/AST/Expr.hpp


Ignore:
Timestamp:
May 16, 2019, 6:51:18 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:
8ff178d, d66e7b7
Parents:
9b4f329 (diff), 6f8e87d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Expr.hpp

    r9b4f329 r246c245  
    2828
    2929// 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);
     30#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
    3131
    3232namespace ast {
     
    133133};
    134134
    135 /// The application of a function to a set of parameters. 
     135/// The application of a function to a set of parameters.
    136136/// Post-resolver form of `UntypedExpr`
    137137class ApplicationExpr final : public Expr {
     
    218218        GeneratedFlag isGenerated;
    219219
    220         CastExpr( const CodeLocation & loc, const Expr * a, const Type * to, 
     220        CastExpr( const CodeLocation & loc, const Expr * a, const Type * to,
    221221                GeneratedFlag g = GeneratedCast ) : Expr( loc, to ), arg( a ), isGenerated( g ) {}
    222222        /// Cast-to-void
     
    311311                unsigned long long ival;
    312312                double dval;
    313                
     313
    314314                Val( unsigned long long i ) : ival( i ) {}
    315315                Val( double d ) : dval( d ) {}
     
    318318        std::string rep;
    319319
    320         ConstantExpr( 
     320        ConstantExpr(
    321321                const CodeLocation & loc, const Type * ty, const std::string & r, unsigned long long v )
    322322        : Expr( loc, ty ), val( v ), rep( r ) {}
    323323        ConstantExpr( const CodeLocation & loc, const Type * ty, const std::string & r, double v )
    324324        : Expr( loc, ty ), val( v ), rep( r ) {}
    325        
     325
    326326        /// Gets the value of this constant as an integer
    327327        long long int intValue() const;
     
    464464        ptr<Expr> arg2;
    465465
    466         CommaExpr( const CodeLocation & loc, const Expr * a1, const Expr * a2 ) 
     466        CommaExpr( const CodeLocation & loc, const Expr * a1, const Expr * a2 )
    467467        : Expr( loc ), arg1( a1 ), arg2( a2 ) {}
    468468
     
    754754};
    755755
    756 //=================================================================================================
    757 /// This disgusting and giant piece of boiler-plate is here to solve a cyclic dependency
    758 /// remove only if there is a better solution
    759 /// The problem is that ast::ptr< ... > uses increment/decrement which won't work well with
    760 /// forward declarations
    761 inline void increment( const class Expr * node, Node::ref_type ref ) { node->increment(ref); }
    762 inline void decrement( const class Expr * node, Node::ref_type ref ) { node->decrement(ref); }
    763 inline void increment( const class ApplicationExpr * node, Node::ref_type ref ) { node->increment(ref); }
    764 inline void decrement( const class ApplicationExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    765 inline void increment( const class UntypedExpr * node, Node::ref_type ref ) { node->increment(ref); }
    766 inline void decrement( const class UntypedExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    767 inline void increment( const class NameExpr * node, Node::ref_type ref ) { node->increment(ref); }
    768 inline void decrement( const class NameExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    769 inline void increment( const class AddressExpr * node, Node::ref_type ref ) { node->increment(ref); }
    770 inline void decrement( const class AddressExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    771 inline void increment( const class LabelAddressExpr * node, Node::ref_type ref ) { node->increment(ref); }
    772 inline void decrement( const class LabelAddressExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    773 inline void increment( const class CastExpr * node, Node::ref_type ref ) { node->increment(ref); }
    774 inline void decrement( const class CastExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    775 inline void increment( const class KeywordCastExpr * node, Node::ref_type ref ) { node->increment(ref); }
    776 inline void decrement( const class KeywordCastExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    777 inline void increment( const class VirtualCastExpr * node, Node::ref_type ref ) { node->increment(ref); }
    778 inline void decrement( const class VirtualCastExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    779 inline void increment( const class MemberExpr * node, Node::ref_type ref ) { node->increment(ref); }
    780 inline void decrement( const class MemberExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    781 inline void increment( const class UntypedMemberExpr * node, Node::ref_type ref ) { node->increment(ref); }
    782 inline void decrement( const class UntypedMemberExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    783 inline void increment( const class VariableExpr * node, Node::ref_type ref ) { node->increment(ref); }
    784 inline void decrement( const class VariableExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    785 inline void increment( const class ConstantExpr * node, Node::ref_type ref ) { node->increment(ref); }
    786 inline void decrement( const class ConstantExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    787 inline void increment( const class SizeofExpr * node, Node::ref_type ref ) { node->increment(ref); }
    788 inline void decrement( const class SizeofExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    789 inline void increment( const class AlignofExpr * node, Node::ref_type ref ) { node->increment(ref); }
    790 inline void decrement( const class AlignofExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    791 inline void increment( const class UntypedOffsetofExpr * node, Node::ref_type ref ) { node->increment(ref); }
    792 inline void decrement( const class UntypedOffsetofExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    793 inline void increment( const class OffsetofExpr * node, Node::ref_type ref ) { node->increment(ref); }
    794 inline void decrement( const class OffsetofExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    795 inline void increment( const class OffsetPackExpr * node, Node::ref_type ref ) { node->increment(ref); }
    796 inline void decrement( const class OffsetPackExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    797 inline void increment( const class LogicalExpr * node, Node::ref_type ref ) { node->increment(ref); }
    798 inline void decrement( const class LogicalExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    799 inline void increment( const class ConditionalExpr * node, Node::ref_type ref ) { node->increment(ref); }
    800 inline void decrement( const class ConditionalExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    801 inline void increment( const class CommaExpr * node, Node::ref_type ref ) { node->increment(ref); }
    802 inline void decrement( const class CommaExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    803 inline void increment( const class TypeExpr * node, Node::ref_type ref ) { node->increment(ref); }
    804 inline void decrement( const class TypeExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    805 inline void increment( const class AsmExpr * node, Node::ref_type ref ) { node->increment(ref); }
    806 inline void decrement( const class AsmExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    807 inline void increment( const class ImplicitCopyCtorExpr * node, Node::ref_type ref ) { node->increment(ref); }
    808 inline void decrement( const class ImplicitCopyCtorExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    809 inline void increment( const class ConstructorExpr * node, Node::ref_type ref ) { node->increment(ref); }
    810 inline void decrement( const class ConstructorExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    811 inline void increment( const class CompoundLiteralExpr * node, Node::ref_type ref ) { node->increment(ref); }
    812 inline void decrement( const class CompoundLiteralExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    813 inline void increment( const class RangeExpr * node, Node::ref_type ref ) { node->increment(ref); }
    814 inline void decrement( const class RangeExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    815 inline void increment( const class UntypedTupleExpr * node, Node::ref_type ref ) { node->increment(ref); }
    816 inline void decrement( const class UntypedTupleExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    817 inline void increment( const class TupleExpr * node, Node::ref_type ref ) { node->increment(ref); }
    818 inline void decrement( const class TupleExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    819 inline void increment( const class TupleIndexExpr * node, Node::ref_type ref ) { node->increment(ref); }
    820 inline void decrement( const class TupleIndexExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    821 inline void increment( const class TupleAssignExpr * node, Node::ref_type ref ) { node->increment(ref); }
    822 inline void decrement( const class TupleAssignExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    823 inline void increment( const class StmtExpr * node, Node::ref_type ref ) { node->increment(ref); }
    824 inline void decrement( const class StmtExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    825 inline void increment( const class UniqueExpr * node, Node::ref_type ref ) { node->increment(ref); }
    826 inline void decrement( const class UniqueExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    827 inline void increment( const class UntypedInitExpr * node, Node::ref_type ref ) { node->increment(ref); }
    828 inline void decrement( const class UntypedInitExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    829 inline void increment( const class InitExpr * node, Node::ref_type ref ) { node->increment(ref); }
    830 inline void decrement( const class InitExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    831 inline void increment( const class DeletedExpr * node, Node::ref_type ref ) { node->increment(ref); }
    832 inline void decrement( const class DeletedExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    833 inline void increment( const class DefaultArgExpr * node, Node::ref_type ref ) { node->increment(ref); }
    834 inline void decrement( const class DefaultArgExpr * node, Node::ref_type ref ) { node->decrement(ref); }
    835 inline void increment( const class GenericExpr * node, Node::ref_type ref ) { node->increment(ref); }
    836 inline void decrement( const class GenericExpr * node, Node::ref_type ref ) { node->decrement(ref); }
     756
    837757}
    838758
Note: See TracChangeset for help on using the changeset viewer.