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