Changeset 246c245 for src/AST/Expr.hpp
- Timestamp:
- May 16, 2019, 6:51:18 PM (6 years ago)
- 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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Expr.hpp
r9b4f329 r246c245 28 28 29 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 automutate(const node_t * node);30 #define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node); 31 31 32 32 namespace ast { … … 133 133 }; 134 134 135 /// The application of a function to a set of parameters. 135 /// The application of a function to a set of parameters. 136 136 /// Post-resolver form of `UntypedExpr` 137 137 class ApplicationExpr final : public Expr { … … 218 218 GeneratedFlag isGenerated; 219 219 220 CastExpr( const CodeLocation & loc, const Expr * a, const Type * to, 220 CastExpr( const CodeLocation & loc, const Expr * a, const Type * to, 221 221 GeneratedFlag g = GeneratedCast ) : Expr( loc, to ), arg( a ), isGenerated( g ) {} 222 222 /// Cast-to-void … … 311 311 unsigned long long ival; 312 312 double dval; 313 313 314 314 Val( unsigned long long i ) : ival( i ) {} 315 315 Val( double d ) : dval( d ) {} … … 318 318 std::string rep; 319 319 320 ConstantExpr( 320 ConstantExpr( 321 321 const CodeLocation & loc, const Type * ty, const std::string & r, unsigned long long v ) 322 322 : Expr( loc, ty ), val( v ), rep( r ) {} 323 323 ConstantExpr( const CodeLocation & loc, const Type * ty, const std::string & r, double v ) 324 324 : Expr( loc, ty ), val( v ), rep( r ) {} 325 325 326 326 /// Gets the value of this constant as an integer 327 327 long long int intValue() const; … … 464 464 ptr<Expr> arg2; 465 465 466 CommaExpr( const CodeLocation & loc, const Expr * a1, const Expr * a2 ) 466 CommaExpr( const CodeLocation & loc, const Expr * a1, const Expr * a2 ) 467 467 : Expr( loc ), arg1( a1 ), arg2( a2 ) {} 468 468 … … 754 754 }; 755 755 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 837 757 } 838 758
Note: See TracChangeset
for help on using the changeset viewer.