Changes in src/SynTree/Expression.h [d807ca28:849720f]
- File:
-
- 1 edited
-
src/SynTree/Expression.h (modified) (53 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Expression.h
rd807ca28 r849720f 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Sun Sep 3 19:23:46 201713 // Update Count : 4811 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Aug 15 13:46:00 2019 13 // Update Count : 54 14 14 // 15 15 … … 21 21 #include <memory> // for allocator, unique_ptr 22 22 #include <string> // for string 23 #include <vector> // for vector 23 24 24 25 #include "BaseSyntaxNode.h" // for BaseSyntaxNode … … 38 39 /// but subject to decay-to-pointer and type parameter renaming 39 40 struct ParamEntry { 40 ParamEntry(): decl( 0 ), actualType( 0 ), formalType( 0 ), expr( 0 ), inferParams( new InferredParams) {}41 ParamEntry( UniqueId decl, Type * actualType, Type * formalType, Expression* expr ): decl( decl ), actualType( actualType ), formalType( formalType ), expr( expr ), inferParams( new InferredParams ) {}41 ParamEntry(): decl( 0 ), declptr( nullptr ), actualType( nullptr ), formalType( nullptr ), expr( nullptr ) {} 42 ParamEntry( UniqueId decl, Declaration * declptr, Type * actualType, Type * formalType, Expression* expr ); 42 43 ParamEntry( const ParamEntry & other ); 43 44 ParamEntry( ParamEntry && other ); 44 45 ~ParamEntry(); 45 ParamEntry & operator=( const ParamEntry & other );46 46 ParamEntry & operator=( ParamEntry && other ); 47 47 48 UniqueId decl; 49 Type * actualType; 50 Type * formalType; 48 UniqueId const decl; 49 Declaration * const declptr; 50 Type * const actualType; 51 Type * const formalType; 51 52 Expression * expr; 52 std::unique_ptr< InferredParams > inferParams;53 53 }; 54 54 … … 59 59 TypeSubstitution * env; 60 60 bool extension = false; 61 InferredParams inferParams; 61 InferredParams inferParams; ///< Post-resolution inferred parameter slots 62 std::vector<UniqueId> resnSlots; ///< Pre-resolution inferred parameter slots 63 64 // xxx - should turn inferParams+resnSlots into a union to save some memory 62 65 63 66 Expression(); … … 68 71 const Type * get_result() const { return result; } 69 72 void set_result( Type * newValue ) { result = newValue; } 73 virtual bool get_lvalue() const; 70 74 71 75 TypeSubstitution * get_env() const { return env; } … … 74 78 Expression * set_extension( bool exten ) { extension = exten; return this; } 75 79 76 InferredParams & get_inferParams() { return inferParams; }77 78 80 // move other's inferParams to this 79 81 void spliceInferParams( Expression * other ); … … 81 83 virtual Expression * clone() const override = 0; 82 84 virtual void accept( Visitor & v ) override = 0; 85 virtual void accept( Visitor & v ) const override = 0; 83 86 virtual Expression * acceptMutator( Mutator & m ) override = 0; 84 87 virtual void print( std::ostream & os, Indenter indent = {} ) const override; … … 96 99 virtual ~ApplicationExpr(); 97 100 101 bool get_lvalue() const final; 102 98 103 Expression * get_function() const { return function; } 99 104 void set_function( Expression * newValue ) { function = newValue; } 100 105 std::list<Expression *>& get_args() { return args; } 101 106 102 virtual ApplicationExpr * clone() const { return new ApplicationExpr( * this ); } 103 virtual void accept( Visitor & v ) { v.visit( this ); } 104 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 105 virtual void print( std::ostream & os, Indenter indent = {} ) const; 107 virtual ApplicationExpr * clone() const override { return new ApplicationExpr( * this ); } 108 virtual void accept( Visitor & v ) override { v.visit( this ); } 109 virtual void accept( Visitor & v ) const override { v.visit( this ); } 110 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 111 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 106 112 }; 107 113 … … 118 124 virtual ~UntypedExpr(); 119 125 126 bool get_lvalue() const final; 127 120 128 Expression * get_function() const { return function; } 121 129 void set_function( Expression * newValue ) { function = newValue; } … … 128 136 static UntypedExpr * createAssign( Expression * arg1, Expression * arg2 ); 129 137 130 virtual UntypedExpr * clone() const { return new UntypedExpr( * this ); } 131 virtual void accept( Visitor & v ) { v.visit( this ); } 132 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 133 virtual void print( std::ostream & os, Indenter indent = {} ) const; 138 virtual UntypedExpr * clone() const override { return new UntypedExpr( * this ); } 139 virtual void accept( Visitor & v ) override { v.visit( this ); } 140 virtual void accept( Visitor & v ) const override { v.visit( this ); } 141 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 142 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 134 143 }; 135 144 … … 146 155 void set_name( std::string newValue ) { name = newValue; } 147 156 148 virtual NameExpr * clone() const { return new NameExpr( * this ); } 149 virtual void accept( Visitor & v ) { v.visit( this ); } 150 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 151 virtual void print( std::ostream & os, Indenter indent = {} ) const; 157 virtual NameExpr * clone() const override { return new NameExpr( * this ); } 158 virtual void accept( Visitor & v ) override { v.visit( this ); } 159 virtual void accept( Visitor & v ) const override { v.visit( this ); } 160 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 161 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 152 162 }; 153 163 … … 167 177 void set_arg(Expression * newValue ) { arg = newValue; } 168 178 169 virtual AddressExpr * clone() const { return new AddressExpr( * this ); } 170 virtual void accept( Visitor & v ) { v.visit( this ); } 171 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 172 virtual void print( std::ostream & os, Indenter indent = {} ) const; 179 virtual AddressExpr * clone() const override { return new AddressExpr( * this ); } 180 virtual void accept( Visitor & v ) override { v.visit( this ); } 181 virtual void accept( Visitor & v ) const override { v.visit( this ); } 182 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 183 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 173 184 }; 174 185 … … 183 194 virtual ~LabelAddressExpr(); 184 195 185 virtual LabelAddressExpr * clone() const { return new LabelAddressExpr( * this ); } 186 virtual void accept( Visitor & v ) { v.visit( this ); } 187 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 188 virtual void print( std::ostream & os, Indenter indent = {} ) const; 196 virtual LabelAddressExpr * clone() const override { return new LabelAddressExpr( * this ); } 197 virtual void accept( Visitor & v ) override { v.visit( this ); } 198 virtual void accept( Visitor & v ) const override { v.visit( this ); } 199 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 200 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 189 201 }; 190 202 … … 193 205 public: 194 206 Expression * arg; 195 bool isGenerated = true; // whether this cast appeared in the sourceprogram207 bool isGenerated = true; // cast generated implicitly by code generation or explicit in program 196 208 197 209 CastExpr( Expression * arg, bool isGenerated = true ); … … 201 213 virtual ~CastExpr(); 202 214 215 bool get_lvalue() const final; 216 203 217 Expression * get_arg() const { return arg; } 204 218 void set_arg( Expression * newValue ) { arg = newValue; } 205 219 206 virtual CastExpr * clone() const { return new CastExpr( * this ); } 207 virtual void accept( Visitor & v ) { v.visit( this ); } 208 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 209 virtual void print( std::ostream & os, Indenter indent = {} ) const; 220 virtual CastExpr * clone() const override { return new CastExpr( * this ); } 221 virtual void accept( Visitor & v ) override { v.visit( this ); } 222 virtual void accept( Visitor & v ) const override { v.visit( this ); } 223 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 224 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 210 225 }; 211 226 … … 224 239 const std::string & targetString() const; 225 240 226 virtual KeywordCastExpr * clone() const { return new KeywordCastExpr( * this ); } 227 virtual void accept( Visitor & v ) { v.visit( this ); } 228 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 229 virtual void print( std::ostream & os, Indenter indent = {} ) const; 241 virtual KeywordCastExpr * clone() const override { return new KeywordCastExpr( * this ); } 242 virtual void accept( Visitor & v ) override { v.visit( this ); } 243 virtual void accept( Visitor & v ) const override { v.visit( this ); } 244 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 245 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 230 246 }; 231 247 … … 242 258 void set_arg( Expression * newValue ) { arg = newValue; } 243 259 244 virtual VirtualCastExpr * clone() const { return new VirtualCastExpr( * this ); } 245 virtual void accept( Visitor & v ) { v.visit( this ); } 246 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 247 virtual void print( std::ostream & os, Indenter indent = {} ) const; 260 virtual VirtualCastExpr * clone() const override { return new VirtualCastExpr( * this ); } 261 virtual void accept( Visitor & v ) override { v.visit( this ); } 262 virtual void accept( Visitor & v ) const override { v.visit( this ); } 263 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 264 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 248 265 }; 249 266 … … 257 274 UntypedMemberExpr( const UntypedMemberExpr & other ); 258 275 virtual ~UntypedMemberExpr(); 276 277 bool get_lvalue() const final; 259 278 260 279 Expression * get_member() const { return member; } … … 263 282 void set_aggregate( Expression * newValue ) { aggregate = newValue; } 264 283 265 virtual UntypedMemberExpr * clone() const { return new UntypedMemberExpr( * this ); } 266 virtual void accept( Visitor & v ) { v.visit( this ); } 267 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 268 virtual void print( std::ostream & os, Indenter indent = {} ) const; 284 virtual UntypedMemberExpr * clone() const override { return new UntypedMemberExpr( * this ); } 285 virtual void accept( Visitor & v ) override { v.visit( this ); } 286 virtual void accept( Visitor & v ) const override { v.visit( this ); } 287 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 288 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 269 289 }; 270 290 … … 279 299 MemberExpr( const MemberExpr & other ); 280 300 virtual ~MemberExpr(); 301 302 bool get_lvalue() const final; 281 303 282 304 DeclarationWithType * get_member() const { return member; } … … 285 307 void set_aggregate( Expression * newValue ) { aggregate = newValue; } 286 308 287 virtual MemberExpr * clone() const { return new MemberExpr( * this ); } 288 virtual void accept( Visitor & v ) { v.visit( this ); } 289 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 290 virtual void print( std::ostream & os, Indenter indent = {} ) const; 309 virtual MemberExpr * clone() const override { return new MemberExpr( * this ); } 310 virtual void accept( Visitor & v ) override { v.visit( this ); } 311 virtual void accept( Visitor & v ) const override { v.visit( this ); } 312 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 313 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 291 314 }; 292 315 … … 297 320 DeclarationWithType * var; 298 321 322 VariableExpr(); 299 323 VariableExpr( DeclarationWithType * var ); 300 324 VariableExpr( const VariableExpr & other ); 301 325 virtual ~VariableExpr(); 302 326 327 bool get_lvalue() const final; 328 303 329 DeclarationWithType * get_var() const { return var; } 304 330 void set_var( DeclarationWithType * newValue ) { var = newValue; } … … 306 332 static VariableExpr * functionPointer( FunctionDecl * decl ); 307 333 308 virtual VariableExpr * clone() const { return new VariableExpr( * this ); } 309 virtual void accept( Visitor & v ) { v.visit( this ); } 310 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 311 virtual void print( std::ostream & os, Indenter indent = {} ) const; 334 virtual VariableExpr * clone() const override { return new VariableExpr( * this ); } 335 virtual void accept( Visitor & v ) override { v.visit( this ); } 336 virtual void accept( Visitor & v ) const override { v.visit( this ); } 337 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 338 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 312 339 }; 313 340 … … 327 354 long long int intValue() const; 328 355 329 virtual ConstantExpr * clone() const { return new ConstantExpr( * this ); } 330 virtual void accept( Visitor & v ) { v.visit( this ); } 331 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 332 virtual void print( std::ostream & os, Indenter indent = {} ) const; 356 virtual ConstantExpr * clone() const override { return new ConstantExpr( * this ); } 357 virtual void accept( Visitor & v ) override { v.visit( this ); } 358 virtual void accept( Visitor & v ) const override { v.visit( this ); } 359 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 360 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 333 361 }; 334 362 … … 352 380 void set_isType( bool newValue ) { isType = newValue; } 353 381 354 virtual SizeofExpr * clone() const { return new SizeofExpr( * this ); } 355 virtual void accept( Visitor & v ) { v.visit( this ); } 356 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 357 virtual void print( std::ostream & os, Indenter indent = {} ) const; 382 virtual SizeofExpr * clone() const override { return new SizeofExpr( * this ); } 383 virtual void accept( Visitor & v ) override { v.visit( this ); } 384 virtual void accept( Visitor & v ) const override { v.visit( this ); } 385 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 386 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 358 387 }; 359 388 … … 377 406 void set_isType( bool newValue ) { isType = newValue; } 378 407 379 virtual AlignofExpr * clone() const { return new AlignofExpr( * this ); } 380 virtual void accept( Visitor & v ) { v.visit( this ); } 381 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 382 virtual void print( std::ostream & os, Indenter indent = {} ) const; 408 virtual AlignofExpr * clone() const override { return new AlignofExpr( * this ); } 409 virtual void accept( Visitor & v ) override { v.visit( this ); } 410 virtual void accept( Visitor & v ) const override { v.visit( this ); } 411 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 412 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 383 413 }; 384 414 … … 398 428 void set_type( Type * newValue ) { type = newValue; } 399 429 400 virtual UntypedOffsetofExpr * clone() const { return new UntypedOffsetofExpr( * this ); } 401 virtual void accept( Visitor & v ) { v.visit( this ); } 402 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 403 virtual void print( std::ostream & os, Indenter indent = {} ) const; 430 virtual UntypedOffsetofExpr * clone() const override { return new UntypedOffsetofExpr( * this ); } 431 virtual void accept( Visitor & v ) override { v.visit( this ); } 432 virtual void accept( Visitor & v ) const override { v.visit( this ); } 433 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 434 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 404 435 }; 405 436 … … 419 450 void set_member( DeclarationWithType * newValue ) { member = newValue; } 420 451 421 virtual OffsetofExpr * clone() const { return new OffsetofExpr( * this ); } 422 virtual void accept( Visitor & v ) { v.visit( this ); } 423 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 424 virtual void print( std::ostream & os, Indenter indent = {} ) const; 452 virtual OffsetofExpr * clone() const override { return new OffsetofExpr( * this ); } 453 virtual void accept( Visitor & v ) override { v.visit( this ); } 454 virtual void accept( Visitor & v ) const override { v.visit( this ); } 455 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 456 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 425 457 }; 426 458 … … 437 469 void set_type( StructInstType * newValue ) { type = newValue; } 438 470 439 virtual OffsetPackExpr * clone() const { return new OffsetPackExpr( * this ); } 440 virtual void accept( Visitor & v ) { v.visit( this ); } 441 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 442 virtual void print( std::ostream & os, Indenter indent = {} ) const; 443 }; 444 445 /// AttrExpr represents an @attribute expression (like sizeof, but user-defined) 446 class AttrExpr : public Expression { 447 public: 448 Expression * attr; 449 Expression * expr; 450 Type * type; 451 bool isType; 452 453 AttrExpr(Expression * attr, Expression * expr ); 454 AttrExpr( const AttrExpr & other ); 455 AttrExpr( Expression * attr, Type * type ); 456 virtual ~AttrExpr(); 457 458 Expression * get_attr() const { return attr; } 459 void set_attr( Expression * newValue ) { attr = newValue; } 460 Expression * get_expr() const { return expr; } 461 void set_expr( Expression * newValue ) { expr = newValue; } 462 Type * get_type() const { return type; } 463 void set_type( Type * newValue ) { type = newValue; } 464 bool get_isType() const { return isType; } 465 void set_isType( bool newValue ) { isType = newValue; } 466 467 virtual AttrExpr * clone() const { return new AttrExpr( * this ); } 468 virtual void accept( Visitor & v ) { v.visit( this ); } 469 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 470 virtual void print( std::ostream & os, Indenter indent = {} ) const; 471 virtual OffsetPackExpr * clone() const override { return new OffsetPackExpr( * this ); } 472 virtual void accept( Visitor & v ) override { v.visit( this ); } 473 virtual void accept( Visitor & v ) const override { v.visit( this ); } 474 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 475 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 471 476 }; 472 477 … … 487 492 void set_arg2( Expression * newValue ) { arg2 = newValue; } 488 493 489 virtual LogicalExpr * clone() const { return new LogicalExpr( * this ); } 490 virtual void accept( Visitor & v ) { v.visit( this ); } 491 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 492 virtual void print( std::ostream & os, Indenter indent = {} ) const; 494 virtual LogicalExpr * clone() const override { return new LogicalExpr( * this ); } 495 virtual void accept( Visitor & v ) override { v.visit( this ); } 496 virtual void accept( Visitor & v ) const override { v.visit( this ); } 497 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 498 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 493 499 494 500 private: … … 506 512 ConditionalExpr( const ConditionalExpr & other ); 507 513 virtual ~ConditionalExpr(); 514 515 bool get_lvalue() const final; 508 516 509 517 Expression * get_arg1() const { return arg1; } … … 514 522 void set_arg3( Expression * newValue ) { arg3 = newValue; } 515 523 516 virtual ConditionalExpr * clone() const { return new ConditionalExpr( * this ); } 517 virtual void accept( Visitor & v ) { v.visit( this ); } 518 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 519 virtual void print( std::ostream & os, Indenter indent = {} ) const; 524 virtual ConditionalExpr * clone() const override { return new ConditionalExpr( * this ); } 525 virtual void accept( Visitor & v ) override { v.visit( this ); } 526 virtual void accept( Visitor & v ) const override { v.visit( this ); } 527 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 528 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 520 529 }; 521 530 … … 529 538 CommaExpr( const CommaExpr & other ); 530 539 virtual ~CommaExpr(); 540 541 bool get_lvalue() const final; 531 542 532 543 Expression * get_arg1() const { return arg1; } … … 535 546 void set_arg2( Expression * newValue ) { arg2 = newValue; } 536 547 537 virtual CommaExpr * clone() const { return new CommaExpr( * this ); } 538 virtual void accept( Visitor & v ) { v.visit( this ); } 539 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 540 virtual void print( std::ostream & os, Indenter indent = {} ) const; 548 virtual CommaExpr * clone() const override { return new CommaExpr( * this ); } 549 virtual void accept( Visitor & v ) override { v.visit( this ); } 550 virtual void accept( Visitor & v ) const override { v.visit( this ); } 551 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 552 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 541 553 }; 542 554 … … 553 565 void set_type( Type * newValue ) { type = newValue; } 554 566 555 virtual TypeExpr * clone() const { return new TypeExpr( * this ); } 556 virtual void accept( Visitor & v ) { v.visit( this ); } 557 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 558 virtual void print( std::ostream & os, Indenter indent = {} ) const; 567 virtual TypeExpr * clone() const override { return new TypeExpr( * this ); } 568 virtual void accept( Visitor & v ) override { v.visit( this ); } 569 virtual void accept( Visitor & v ) const override { v.visit( this ); } 570 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 571 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 559 572 }; 560 573 … … 579 592 void set_operand( Expression * newValue ) { operand = newValue; } 580 593 581 virtual AsmExpr * clone() const { return new AsmExpr( * this ); } 582 virtual void accept( Visitor & v ) { v.visit( this ); } 583 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 584 virtual void print( std::ostream & os, Indenter indent = {} ) const; 594 virtual AsmExpr * clone() const override { return new AsmExpr( * this ); } 595 virtual void accept( Visitor & v ) override { v.visit( this ); } 596 virtual void accept( Visitor & v ) const override { v.visit( this ); } 597 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 598 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 585 599 586 600 // https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Machine-Constraints.html#Machine-Constraints … … 591 605 class ImplicitCopyCtorExpr : public Expression { 592 606 public: 593 ApplicationExpr * callExpr; 594 std::list< ObjectDecl * > tempDecls; 595 std::list< ObjectDecl * > returnDecls; 596 std::list< Expression * > dtors; 607 ApplicationExpr * callExpr = nullptr; 597 608 598 609 ImplicitCopyCtorExpr( ApplicationExpr * callExpr ); … … 600 611 virtual ~ImplicitCopyCtorExpr(); 601 612 602 ApplicationExpr * get_callExpr() const { return callExpr; } 603 void set_callExpr( ApplicationExpr * newValue ) { callExpr = newValue; } 604 605 std::list< ObjectDecl * > & get_tempDecls() { return tempDecls; } 606 std::list< ObjectDecl * > & get_returnDecls() { return returnDecls; } 607 std::list< Expression * > & get_dtors() { return dtors; } 608 609 virtual ImplicitCopyCtorExpr * clone() const { return new ImplicitCopyCtorExpr( * this ); } 610 virtual void accept( Visitor & v ) { v.visit( this ); } 611 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 612 virtual void print( std::ostream & os, Indenter indent = {} ) const; 613 virtual ImplicitCopyCtorExpr * clone() const override { return new ImplicitCopyCtorExpr( * this ); } 614 virtual void accept( Visitor & v ) override { v.visit( this ); } 615 virtual void accept( Visitor & v ) const override { v.visit( this ); } 616 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 617 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 613 618 }; 614 619 … … 622 627 ~ConstructorExpr(); 623 628 629 bool get_lvalue() const final; 630 624 631 Expression * get_callExpr() const { return callExpr; } 625 632 void set_callExpr( Expression * newValue ) { callExpr = newValue; } 626 633 627 virtual ConstructorExpr * clone() const { return new ConstructorExpr( * this ); } 628 virtual void accept( Visitor & v ) { v.visit( this ); } 629 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 630 virtual void print( std::ostream & os, Indenter indent = {} ) const; 634 virtual ConstructorExpr * clone() const override { return new ConstructorExpr( * this ); } 635 virtual void accept( Visitor & v ) override { v.visit( this ); } 636 virtual void accept( Visitor & v ) const override { v.visit( this ); } 637 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 638 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 631 639 }; 632 640 … … 640 648 virtual ~CompoundLiteralExpr(); 641 649 650 bool get_lvalue() const final; 651 642 652 Initializer * get_initializer() const { return initializer; } 643 653 void set_initializer( Initializer * i ) { initializer = i; } 644 654 645 virtual CompoundLiteralExpr * clone() const { return new CompoundLiteralExpr( * this ); } 646 virtual void accept( Visitor & v ) { v.visit( this ); } 647 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 648 virtual void print( std::ostream & os, Indenter indent = {} ) const; 655 virtual CompoundLiteralExpr * clone() const override { return new CompoundLiteralExpr( * this ); } 656 virtual void accept( Visitor & v ) override { v.visit( this ); } 657 virtual void accept( Visitor & v ) const override { v.visit( this ); } 658 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 659 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 649 660 }; 650 661 … … 662 673 RangeExpr * set_high( Expression * high ) { RangeExpr::high = high; return this; } 663 674 664 virtual RangeExpr * clone() const { return new RangeExpr( * this ); } 665 virtual void accept( Visitor & v ) { v.visit( this ); } 666 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 667 virtual void print( std::ostream & os, Indenter indent = {} ) const; 675 virtual RangeExpr * clone() const override { return new RangeExpr( * this ); } 676 virtual void accept( Visitor & v ) override { v.visit( this ); } 677 virtual void accept( Visitor & v ) const override { v.visit( this ); } 678 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 679 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 668 680 }; 669 681 … … 679 691 std::list<Expression*>& get_exprs() { return exprs; } 680 692 681 virtual UntypedTupleExpr * clone() const { return new UntypedTupleExpr( * this ); } 682 virtual void accept( Visitor & v ) { v.visit( this ); } 683 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 684 virtual void print( std::ostream & os, Indenter indent = {} ) const; 693 virtual UntypedTupleExpr * clone() const override { return new UntypedTupleExpr( * this ); } 694 virtual void accept( Visitor & v ) override { v.visit( this ); } 695 virtual void accept( Visitor & v ) const override { v.visit( this ); } 696 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 697 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 685 698 }; 686 699 … … 694 707 virtual ~TupleExpr(); 695 708 709 bool get_lvalue() const final; 710 696 711 std::list<Expression*>& get_exprs() { return exprs; } 697 712 698 virtual TupleExpr * clone() const { return new TupleExpr( * this ); } 699 virtual void accept( Visitor & v ) { v.visit( this ); } 700 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 701 virtual void print( std::ostream & os, Indenter indent = {} ) const; 713 virtual TupleExpr * clone() const override { return new TupleExpr( * this ); } 714 virtual void accept( Visitor & v ) override { v.visit( this ); } 715 virtual void accept( Visitor & v ) const override { v.visit( this ); } 716 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 717 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 702 718 }; 703 719 … … 711 727 TupleIndexExpr( const TupleIndexExpr & other ); 712 728 virtual ~TupleIndexExpr(); 729 730 bool get_lvalue() const final; 713 731 714 732 Expression * get_tuple() const { return tuple; } … … 717 735 TupleIndexExpr * set_index( unsigned int newValue ) { index = newValue; return this; } 718 736 719 virtual TupleIndexExpr * clone() const { return new TupleIndexExpr( * this ); } 720 virtual void accept( Visitor & v ) { v.visit( this ); } 721 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 722 virtual void print( std::ostream & os, Indenter indent = {} ) const; 737 virtual TupleIndexExpr * clone() const override { return new TupleIndexExpr( * this ); } 738 virtual void accept( Visitor & v ) override { v.visit( this ); } 739 virtual void accept( Visitor & v ) const override { v.visit( this ); } 740 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 741 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 723 742 }; 724 743 … … 735 754 StmtExpr * get_stmtExpr() const { return stmtExpr; } 736 755 737 virtual TupleAssignExpr * clone() const { return new TupleAssignExpr( * this ); } 738 virtual void accept( Visitor & v ) { v.visit( this ); } 739 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 740 virtual void print( std::ostream & os, Indenter indent = {} ) const; 756 virtual TupleAssignExpr * clone() const override { return new TupleAssignExpr( * this ); } 757 virtual void accept( Visitor & v ) override { v.visit( this ); } 758 virtual void accept( Visitor & v ) const override { v.visit( this ); } 759 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 760 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 761 762 friend class ConverterNewToOld; 763 private: 764 TupleAssignExpr( StmtExpr * stmts ); 741 765 }; 742 766 … … 748 772 std::list< Expression * > dtors; // destructor(s) for return variable(s) 749 773 774 // readonly 775 ExprStmt * resultExpr = nullptr; 776 750 777 StmtExpr( CompoundStmt * statements ); 751 778 StmtExpr( const StmtExpr & other ); 752 779 virtual ~StmtExpr(); 753 780 781 bool get_lvalue() const final; 782 754 783 CompoundStmt * get_statements() const { return statements; } 755 784 StmtExpr * set_statements( CompoundStmt * newValue ) { statements = newValue; return this; } … … 761 790 std::list< Expression * > & get_dtors() { return dtors; } 762 791 763 virtual StmtExpr * clone() const { return new StmtExpr( * this ); } 764 virtual void accept( Visitor & v ) { v.visit( this ); } 765 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 766 virtual void print( std::ostream & os, Indenter indent = {} ) const; 792 virtual StmtExpr * clone() const override { return new StmtExpr( * this ); } 793 virtual void accept( Visitor & v ) override { v.visit( this ); } 794 virtual void accept( Visitor & v ) const override { v.visit( this ); } 795 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 796 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 767 797 }; 768 798 … … 788 818 int get_id() const { return id; } 789 819 790 virtual UniqueExpr * clone() const { return new UniqueExpr( * this ); } 791 virtual void accept( Visitor & v ) { v.visit( this ); } 792 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 793 virtual void print( std::ostream & os, Indenter indent = {} ) const; 820 virtual UniqueExpr * clone() const override { return new UniqueExpr( * this ); } 821 virtual void accept( Visitor & v ) override { v.visit( this ); } 822 virtual void accept( Visitor & v ) const override { v.visit( this ); } 823 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 824 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 794 825 795 826 private: … … 822 853 std::list<InitAlternative> & get_initAlts() { return initAlts; } 823 854 824 virtual UntypedInitExpr * clone() const { return new UntypedInitExpr( * this ); } 825 virtual void accept( Visitor & v ) { v.visit( this ); } 826 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 827 virtual void print( std::ostream & os, Indenter indent = {} ) const; 855 virtual UntypedInitExpr * clone() const override { return new UntypedInitExpr( * this ); } 856 virtual void accept( Visitor & v ) override { v.visit( this ); } 857 virtual void accept( Visitor & v ) const override { v.visit( this ); } 858 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 859 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 828 860 }; 829 861 … … 843 875 InitExpr * set_designation( Designation * newValue ) { designation = newValue; return this; } 844 876 845 virtual InitExpr * clone() const { return new InitExpr( * this ); } 846 virtual void accept( Visitor & v ) { v.visit( this ); } 847 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 848 virtual void print( std::ostream & os, Indenter indent = {} ) const; 877 virtual InitExpr * clone() const override { return new InitExpr( * this ); } 878 virtual void accept( Visitor & v ) override { v.visit( this ); } 879 virtual void accept( Visitor & v ) const override { v.visit( this ); } 880 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 881 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 849 882 }; 850 883 … … 853 886 public: 854 887 Expression * expr; 855 BaseSyntaxNode* deleteStmt;856 857 DeletedExpr( Expression * expr, BaseSyntaxNode* deleteStmt );888 Declaration * deleteStmt; 889 890 DeletedExpr( Expression * expr, Declaration * deleteStmt ); 858 891 DeletedExpr( const DeletedExpr & other ); 859 892 ~DeletedExpr(); 860 893 861 virtual DeletedExpr * clone() const { return new DeletedExpr( * this ); } 862 virtual void accept( Visitor & v ) { v.visit( this ); } 863 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 864 virtual void print( std::ostream & os, Indenter indent = {} ) const; 894 virtual DeletedExpr * clone() const override { return new DeletedExpr( * this ); } 895 virtual void accept( Visitor & v ) override { v.visit( this ); } 896 virtual void accept( Visitor & v ) const override { v.visit( this ); } 897 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 898 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 899 }; 900 901 /// expression wrapping the use of a default argument - should never make it past the resolver. 902 class DefaultArgExpr : public Expression { 903 public: 904 Expression * expr; 905 906 DefaultArgExpr( Expression * expr ); 907 DefaultArgExpr( const DefaultArgExpr & other ); 908 ~DefaultArgExpr(); 909 910 virtual DefaultArgExpr * clone() const override { return new DefaultArgExpr( * this ); } 911 virtual void accept( Visitor & v ) override { v.visit( this ); } 912 virtual void accept( Visitor & v ) const override { v.visit( this ); } 913 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 914 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 865 915 }; 866 916 … … 887 937 virtual ~GenericExpr(); 888 938 889 virtual GenericExpr * clone() const { return new GenericExpr( * this ); } 890 virtual void accept( Visitor & v ) { v.visit( this ); } 891 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 892 virtual void print( std::ostream & os, Indenter indent = {} ) const; 939 virtual GenericExpr * clone() const override { return new GenericExpr( * this ); } 940 virtual void accept( Visitor & v ) override { v.visit( this ); } 941 virtual void accept( Visitor & v ) const override { v.visit( this ); } 942 virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 943 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 893 944 }; 894 945
Note:
See TracChangeset
for help on using the changeset viewer.