Changeset 6840e7c for src/SynTree/Expression.h
- Timestamp:
- Oct 19, 2017, 12:01:04 PM (8 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:
- 837ce06
- Parents:
- b96ec83 (diff), a15b72c (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/SynTree/Expression.h
rb96ec83 r6840e7c 36 36 Type * result; 37 37 TypeSubstitution * env; 38 Expression * argName; // if expression is used as an argument, it can be "designated" by this name39 38 bool extension = false; 40 39 41 Expression( Expression * _aname = nullptr);40 Expression(); 42 41 Expression( const Expression & other ); 43 42 virtual ~Expression(); … … 46 45 const Type * get_result() const { return result; } 47 46 void set_result( Type * newValue ) { result = newValue; } 48 bool has_result() const { return result != nullptr; }49 47 50 48 TypeSubstitution * get_env() const { return env; } 51 49 void set_env( TypeSubstitution * newValue ) { env = newValue; } 52 Expression * get_argName() const { return argName; }53 void set_argName( Expression * name ) { argName = name; }54 50 bool get_extension() const { return extension; } 55 51 Expression * set_extension( bool exten ) { extension = exten; return this; } 56 52 57 virtual Expression * clone() const = 0;58 virtual void accept( Visitor & v ) = 0;59 virtual Expression * acceptMutator( Mutator & m ) = 0;60 virtual void print( std::ostream & os, int indent = 0 ) const;53 virtual Expression * clone() const override = 0; 54 virtual void accept( Visitor & v ) override = 0; 55 virtual Expression * acceptMutator( Mutator & m ) override = 0; 56 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 61 57 }; 62 58 … … 101 97 virtual void accept( Visitor & v ) { v.visit( this ); } 102 98 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 103 virtual void print( std::ostream & os, int indent = 0) const;99 virtual void print( std::ostream & os, Indenter indent = {} ) const; 104 100 }; 105 101 … … 112 108 std::list<Expression*> args; 113 109 114 UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() , Expression *_aname = nullptr);110 UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() ); 115 111 UntypedExpr( const UntypedExpr & other ); 116 112 virtual ~UntypedExpr(); … … 119 115 void set_function( Expression * newValue ) { function = newValue; } 120 116 121 void set_args( std::list<Expression *> & listArgs ) { args = listArgs; }122 117 std::list<Expression*>::iterator begin_args() { return args.begin(); } 123 118 std::list<Expression*>::iterator end_args() { return args.end(); } … … 130 125 virtual void accept( Visitor & v ) { v.visit( this ); } 131 126 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 132 virtual void print( std::ostream & os, int indent = 0 ) const; 133 virtual void printArgs(std::ostream & os, int indent = 0) const; 127 virtual void print( std::ostream & os, Indenter indent = {} ) const; 134 128 }; 135 129 … … 139 133 std::string name; 140 134 141 NameExpr( std::string name , Expression *_aname = nullptr);135 NameExpr( std::string name ); 142 136 NameExpr( const NameExpr & other ); 143 137 virtual ~NameExpr(); … … 149 143 virtual void accept( Visitor & v ) { v.visit( this ); } 150 144 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 151 virtual void print( std::ostream & os, int indent = 0) const;145 virtual void print( std::ostream & os, Indenter indent = {} ) const; 152 146 }; 153 147 … … 160 154 Expression * arg; 161 155 162 AddressExpr( Expression * arg , Expression *_aname = nullptr);156 AddressExpr( Expression * arg ); 163 157 AddressExpr( const AddressExpr & other ); 164 158 virtual ~AddressExpr(); … … 170 164 virtual void accept( Visitor & v ) { v.visit( this ); } 171 165 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 172 virtual void print( std::ostream & os, int indent = 0) const;166 virtual void print( std::ostream & os, Indenter indent = {} ) const; 173 167 }; 174 168 … … 186 180 virtual void accept( Visitor & v ) { v.visit( this ); } 187 181 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 188 virtual void print( std::ostream & os, int indent = 0) const;182 virtual void print( std::ostream & os, Indenter indent = {} ) const; 189 183 }; 190 184 … … 194 188 Expression * arg; 195 189 196 CastExpr( Expression * arg , Expression *_aname = nullptr);197 CastExpr( Expression * arg, Type * toType , Expression *_aname = nullptr);190 CastExpr( Expression * arg ); 191 CastExpr( Expression * arg, Type * toType ); 198 192 CastExpr( const CastExpr & other ); 199 193 virtual ~CastExpr(); … … 205 199 virtual void accept( Visitor & v ) { v.visit( this ); } 206 200 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 207 virtual void print( std::ostream & os, int indent = 0) const;201 virtual void print( std::ostream & os, Indenter indent = {} ) const; 208 202 }; 209 203 … … 223 217 virtual void accept( Visitor & v ) { v.visit( this ); } 224 218 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 225 virtual void print( std::ostream & os, int indent = 0) const;219 virtual void print( std::ostream & os, Indenter indent = {} ) const; 226 220 }; 227 221 … … 232 226 Expression * aggregate; 233 227 234 UntypedMemberExpr( Expression * member, Expression * aggregate , Expression *_aname = nullptr);228 UntypedMemberExpr( Expression * member, Expression * aggregate ); 235 229 UntypedMemberExpr( const UntypedMemberExpr & other ); 236 230 virtual ~UntypedMemberExpr(); … … 244 238 virtual void accept( Visitor & v ) { v.visit( this ); } 245 239 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 246 virtual void print( std::ostream & os, int indent = 0) const;240 virtual void print( std::ostream & os, Indenter indent = {} ) const; 247 241 }; 248 242 … … 254 248 Expression * aggregate; 255 249 256 MemberExpr( DeclarationWithType * member, Expression * aggregate , Expression *_aname = nullptr);250 MemberExpr( DeclarationWithType * member, Expression * aggregate ); 257 251 MemberExpr( const MemberExpr & other ); 258 252 virtual ~MemberExpr(); … … 266 260 virtual void accept( Visitor & v ) { v.visit( this ); } 267 261 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 268 virtual void print( std::ostream & os, int indent = 0) const;262 virtual void print( std::ostream & os, Indenter indent = {} ) const; 269 263 }; 270 264 … … 275 269 DeclarationWithType * var; 276 270 277 VariableExpr( DeclarationWithType * var , Expression *_aname = nullptr);271 VariableExpr( DeclarationWithType * var ); 278 272 VariableExpr( const VariableExpr & other ); 279 273 virtual ~VariableExpr(); … … 287 281 virtual void accept( Visitor & v ) { v.visit( this ); } 288 282 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 289 virtual void print( std::ostream & os, int indent = 0) const;283 virtual void print( std::ostream & os, Indenter indent = {} ) const; 290 284 }; 291 285 … … 295 289 Constant constant; 296 290 297 ConstantExpr( Constant constant , Expression *_aname = nullptr);291 ConstantExpr( Constant constant ); 298 292 ConstantExpr( const ConstantExpr & other ); 299 293 virtual ~ConstantExpr(); … … 305 299 virtual void accept( Visitor & v ) { v.visit( this ); } 306 300 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 307 virtual void print( std::ostream & os, int indent = 0) const;301 virtual void print( std::ostream & os, Indenter indent = {} ) const; 308 302 }; 309 303 … … 315 309 bool isType; 316 310 317 SizeofExpr( Expression * expr , Expression *_aname = nullptr);311 SizeofExpr( Expression * expr ); 318 312 SizeofExpr( const SizeofExpr & other ); 319 SizeofExpr( Type * type , Expression *_aname = nullptr);313 SizeofExpr( Type * type ); 320 314 virtual ~SizeofExpr(); 321 315 … … 330 324 virtual void accept( Visitor & v ) { v.visit( this ); } 331 325 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 332 virtual void print( std::ostream & os, int indent = 0) const;326 virtual void print( std::ostream & os, Indenter indent = {} ) const; 333 327 }; 334 328 … … 340 334 bool isType; 341 335 342 AlignofExpr( Expression * expr , Expression *_aname = nullptr);336 AlignofExpr( Expression * expr ); 343 337 AlignofExpr( const AlignofExpr & other ); 344 AlignofExpr( Type * type , Expression *_aname = nullptr);338 AlignofExpr( Type * type ); 345 339 virtual ~AlignofExpr(); 346 340 … … 355 349 virtual void accept( Visitor & v ) { v.visit( this ); } 356 350 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 357 virtual void print( std::ostream & os, int indent = 0) const;351 virtual void print( std::ostream & os, Indenter indent = {} ) const; 358 352 }; 359 353 … … 364 358 std::string member; 365 359 366 UntypedOffsetofExpr( Type * type, const std::string & member , Expression *_aname = nullptr);360 UntypedOffsetofExpr( Type * type, const std::string & member ); 367 361 UntypedOffsetofExpr( const UntypedOffsetofExpr & other ); 368 362 virtual ~UntypedOffsetofExpr(); … … 376 370 virtual void accept( Visitor & v ) { v.visit( this ); } 377 371 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 378 virtual void print( std::ostream & os, int indent = 0) const;372 virtual void print( std::ostream & os, Indenter indent = {} ) const; 379 373 }; 380 374 … … 385 379 DeclarationWithType * member; 386 380 387 OffsetofExpr( Type * type, DeclarationWithType * member , Expression *_aname = nullptr);381 OffsetofExpr( Type * type, DeclarationWithType * member ); 388 382 OffsetofExpr( const OffsetofExpr & other ); 389 383 virtual ~OffsetofExpr(); … … 397 391 virtual void accept( Visitor & v ) { v.visit( this ); } 398 392 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 399 virtual void print( std::ostream & os, int indent = 0) const;393 virtual void print( std::ostream & os, Indenter indent = {} ) const; 400 394 }; 401 395 … … 405 399 StructInstType * type; 406 400 407 OffsetPackExpr( StructInstType * type _, Expression * aname_ = 0);401 OffsetPackExpr( StructInstType * type ); 408 402 OffsetPackExpr( const OffsetPackExpr & other ); 409 403 virtual ~OffsetPackExpr(); … … 415 409 virtual void accept( Visitor & v ) { v.visit( this ); } 416 410 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 417 virtual void print( std::ostream & os, int indent = 0) const;411 virtual void print( std::ostream & os, Indenter indent = {} ) const; 418 412 }; 419 413 … … 426 420 bool isType; 427 421 428 AttrExpr(Expression * attr, Expression * expr , Expression *_aname = nullptr);422 AttrExpr(Expression * attr, Expression * expr ); 429 423 AttrExpr( const AttrExpr & other ); 430 AttrExpr( Expression * attr, Type * type , Expression *_aname = nullptr);424 AttrExpr( Expression * attr, Type * type ); 431 425 virtual ~AttrExpr(); 432 426 … … 443 437 virtual void accept( Visitor & v ) { v.visit( this ); } 444 438 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 445 virtual void print( std::ostream & os, int indent = 0) const;439 virtual void print( std::ostream & os, Indenter indent = {} ) const; 446 440 }; 447 441 … … 452 446 Expression * arg2; 453 447 454 LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true , Expression *_aname = nullptr);448 LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true ); 455 449 LogicalExpr( const LogicalExpr & other ); 456 450 virtual ~LogicalExpr(); … … 465 459 virtual void accept( Visitor & v ) { v.visit( this ); } 466 460 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 467 virtual void print( std::ostream & os, int indent = 0) const;461 virtual void print( std::ostream & os, Indenter indent = {} ) const; 468 462 469 463 private: … … 478 472 Expression * arg3; 479 473 480 ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 , Expression *_aname = nullptr);474 ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 ); 481 475 ConditionalExpr( const ConditionalExpr & other ); 482 476 virtual ~ConditionalExpr(); … … 492 486 virtual void accept( Visitor & v ) { v.visit( this ); } 493 487 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 494 virtual void print( std::ostream & os, int indent = 0) const;488 virtual void print( std::ostream & os, Indenter indent = {} ) const; 495 489 }; 496 490 … … 501 495 Expression * arg2; 502 496 503 CommaExpr( Expression * arg1, Expression * arg2 , Expression *_aname = nullptr);497 CommaExpr( Expression * arg1, Expression * arg2 ); 504 498 CommaExpr( const CommaExpr & other ); 505 499 virtual ~CommaExpr(); … … 513 507 virtual void accept( Visitor & v ) { v.visit( this ); } 514 508 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 515 virtual void print( std::ostream & os, int indent = 0) const;509 virtual void print( std::ostream & os, Indenter indent = {} ) const; 516 510 }; 517 511 … … 531 525 virtual void accept( Visitor & v ) { v.visit( this ); } 532 526 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 533 virtual void print( std::ostream & os, int indent = 0) const;527 virtual void print( std::ostream & os, Indenter indent = {} ) const; 534 528 }; 535 529 … … 557 551 virtual void accept( Visitor & v ) { v.visit( this ); } 558 552 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 559 virtual void print( std::ostream & os, int indent = 0) const;553 virtual void print( std::ostream & os, Indenter indent = {} ) const; 560 554 561 555 // https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Machine-Constraints.html#Machine-Constraints … … 585 579 virtual void accept( Visitor & v ) { v.visit( this ); } 586 580 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 587 virtual void print( std::ostream & os, int indent = 0) const;581 virtual void print( std::ostream & os, Indenter indent = {} ) const; 588 582 }; 589 583 … … 603 597 virtual void accept( Visitor & v ) { v.visit( this ); } 604 598 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 605 virtual void print( std::ostream & os, int indent = 0) const;599 virtual void print( std::ostream & os, Indenter indent = {} ) const; 606 600 }; 607 601 … … 621 615 virtual void accept( Visitor & v ) { v.visit( this ); } 622 616 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 623 virtual void print( std::ostream & os, int indent = 0) const;617 virtual void print( std::ostream & os, Indenter indent = {} ) const; 624 618 }; 625 619 … … 640 634 virtual void accept( Visitor & v ) { v.visit( this ); } 641 635 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 642 virtual void print( std::ostream & os, int indent = 0) const;636 virtual void print( std::ostream & os, Indenter indent = {} ) const; 643 637 }; 644 638 … … 648 642 std::list<Expression*> exprs; 649 643 650 UntypedTupleExpr( const std::list< Expression * > & exprs , Expression *_aname = nullptr);644 UntypedTupleExpr( const std::list< Expression * > & exprs ); 651 645 UntypedTupleExpr( const UntypedTupleExpr & other ); 652 646 virtual ~UntypedTupleExpr(); … … 657 651 virtual void accept( Visitor & v ) { v.visit( this ); } 658 652 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 659 virtual void print( std::ostream & os, int indent = 0) const;653 virtual void print( std::ostream & os, Indenter indent = {} ) const; 660 654 }; 661 655 … … 665 659 std::list<Expression*> exprs; 666 660 667 TupleExpr( const std::list< Expression * > & exprs , Expression *_aname = nullptr);661 TupleExpr( const std::list< Expression * > & exprs ); 668 662 TupleExpr( const TupleExpr & other ); 669 663 virtual ~TupleExpr(); … … 674 668 virtual void accept( Visitor & v ) { v.visit( this ); } 675 669 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 676 virtual void print( std::ostream & os, int indent = 0) const;670 virtual void print( std::ostream & os, Indenter indent = {} ) const; 677 671 }; 678 672 … … 695 689 virtual void accept( Visitor & v ) { v.visit( this ); } 696 690 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 697 virtual void print( std::ostream & os, int indent = 0) const;691 virtual void print( std::ostream & os, Indenter indent = {} ) const; 698 692 }; 699 693 … … 703 697 StmtExpr * stmtExpr = nullptr; 704 698 705 TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls , Expression * _aname = nullptr);699 TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls ); 706 700 TupleAssignExpr( const TupleAssignExpr & other ); 707 701 virtual ~TupleAssignExpr(); … … 713 707 virtual void accept( Visitor & v ) { v.visit( this ); } 714 708 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 715 virtual void print( std::ostream & os, int indent = 0) const;709 virtual void print( std::ostream & os, Indenter indent = {} ) const; 716 710 }; 717 711 … … 736 730 virtual void accept( Visitor & v ) { v.visit( this ); } 737 731 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 738 virtual void print( std::ostream & os, int indent = 0) const;732 virtual void print( std::ostream & os, Indenter indent = {} ) const; 739 733 }; 740 734 … … 763 757 virtual void accept( Visitor & v ) { v.visit( this ); } 764 758 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 765 virtual void print( std::ostream & os, int indent = 0) const;759 virtual void print( std::ostream & os, Indenter indent = {} ) const; 766 760 767 761 private: … … 797 791 virtual void accept( Visitor & v ) { v.visit( this ); } 798 792 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 799 virtual void print( std::ostream & os, int indent = 0) const;793 virtual void print( std::ostream & os, Indenter indent = {} ) const; 800 794 }; 801 795 … … 818 812 virtual void accept( Visitor & v ) { v.visit( this ); } 819 813 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 820 virtual void print( std::ostream & os, int indent = 0) const;814 virtual void print( std::ostream & os, Indenter indent = {} ) const; 821 815 }; 822 816
Note:
See TracChangeset
for help on using the changeset viewer.