Changes in src/AST/Expr.hpp [17a0228a:9b4f329]
- File:
-
- 1 edited
-
src/AST/Expr.hpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Expr.hpp
r17a0228a r9b4f329 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 node_t *mutate(const node_t * node);30 #define MUTATE_FRIEND template<typename node_t> friend auto 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 … … 503 503 }; 504 504 505 /// The application of a function to a set of parameters, along with a set of copy constructor 505 /// The application of a function to a set of parameters, along with a set of copy constructor 506 506 /// calls, one for each argument 507 507 class ImplicitCopyCtorExpr final : public Expr { … … 603 603 }; 604 604 605 /// A multiple- or mass-assignment operation, or a tuple ctor/dtor expression. 606 /// multiple-assignment: both sides of the assignment have tuple type, 605 /// A multiple- or mass-assignment operation, or a tuple ctor/dtor expression. 606 /// multiple-assignment: both sides of the assignment have tuple type, 607 607 /// e.g. `[a, b, c] = [d, e, f];` 608 608 /// mass-assignment: left-hand side has tuple type and right-hand side does not: … … 612 612 ptr<StmtExpr> stmtExpr; 613 613 614 TupleAssignExpr( 615 const CodeLocation & loc, std::vector<ptr<Expr>> && assigns, 614 TupleAssignExpr( 615 const CodeLocation & loc, std::vector<ptr<Expr>> && assigns, 616 616 std::vector<ptr<ObjectDecl>> && tempDecls ); 617 617 618 618 const Expr * accept( Visitor & v ) const override { return v.visit( this ); } 619 619 private: … … 754 754 }; 755 755 756 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); } 757 837 } 758 838
Note:
See TracChangeset
for help on using the changeset viewer.