Changeset 3f7e12cb for src/SynTree/Type.h
- Timestamp:
- Nov 8, 2017, 5:43:33 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 954908d
- Parents:
- 78315272 (diff), e35f30a (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/Type.h
r78315272 r3f7e12cb 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Aug 9 14:25:00201713 // Update Count : 15 211 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 25 14:14:01 2017 13 // Update Count : 154 14 14 // 15 15 … … 181 181 virtual void accept( Visitor & v ) = 0; 182 182 virtual Type *acceptMutator( Mutator & m ) = 0; 183 virtual void print( std::ostream & os, int indent = 0) const;183 virtual void print( std::ostream & os, Indenter indent = {} ) const; 184 184 }; 185 185 … … 192 192 VoidType( const Type::Qualifiers & tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 193 193 194 virtual unsigned size() const { return 0; };195 virtual bool isComplete() const { return false; }196 197 virtual VoidType *clone() const { return new VoidType( *this ); }198 virtual void accept( Visitor & v ) { v.visit( this ); }199 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }200 virtual void print( std::ostream & os, int indent = 0 ) const;194 virtual unsigned size() const override { return 0; }; 195 virtual bool isComplete() const override { return false; } 196 197 virtual VoidType *clone() const override { return new VoidType( *this ); } 198 virtual void accept( Visitor & v ) override { v.visit( this ); } 199 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 200 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 201 201 }; 202 202 … … 225 225 DoubleImaginary, 226 226 LongDoubleImaginary, 227 SignedInt128, 228 UnsignedInt128, 227 229 NUMBER_OF_BASIC_TYPES 228 230 } kind; … … 235 237 void set_kind( Kind newValue ) { kind = newValue; } 236 238 237 virtual BasicType *clone() const { return new BasicType( *this ); }238 virtual void accept( Visitor & v ) { v.visit( this ); }239 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }240 virtual void print( std::ostream & os, int indent = 0 ) const;239 virtual BasicType *clone() const override { return new BasicType( *this ); } 240 virtual void accept( Visitor & v ) override { v.visit( this ); } 241 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 242 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 241 243 242 244 bool isInteger() const; … … 268 270 bool is_array() const { return isStatic || isVarLen || dimension; } 269 271 270 virtual bool isComplete() const { return ! isVarLen; }271 272 virtual PointerType *clone() const { return new PointerType( *this ); }273 virtual void accept( Visitor & v ) { v.visit( this ); }274 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }275 virtual void print( std::ostream & os, int indent = 0 ) const;272 virtual bool isComplete() const override { return ! isVarLen; } 273 274 virtual PointerType *clone() const override { return new PointerType( *this ); } 275 virtual void accept( Visitor & v ) override { v.visit( this ); } 276 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 277 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 276 278 }; 277 279 … … 296 298 void set_isStatic( bool newValue ) { isStatic = newValue; } 297 299 298 virtual bool isComplete() const { return ! isVarLen; } 299 300 virtual ArrayType *clone() const { return new ArrayType( *this ); } 301 virtual void accept( Visitor & v ) { v.visit( this ); } 302 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); } 303 virtual void print( std::ostream & os, int indent = 0 ) const; 300 // array types are complete if they have a dimension expression or are 301 // VLAs ('*' in parameter declaration), and incomplete otherwise. 302 // See 6.7.6.2 303 virtual bool isComplete() const override { return dimension || isVarLen; } 304 305 virtual ArrayType *clone() const override { return new ArrayType( *this ); } 306 virtual void accept( Visitor & v ) override { v.visit( this ); } 307 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 308 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 304 309 }; 305 310 … … 315 320 void set_base( Type *newValue ) { base = newValue; } 316 321 317 virtual int referenceDepth() const ;322 virtual int referenceDepth() const override; 318 323 319 324 // Since reference types act like value types, their size is the size of the base. 320 325 // This makes it simple to cast the empty tuple to a reference type, since casts that increase 321 326 // the number of values are disallowed. 322 virtual unsigned size() const { return base->size(); }323 324 virtual ReferenceType *clone() const { return new ReferenceType( *this ); }325 virtual void accept( Visitor & v ) { v.visit( this ); }326 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }327 virtual void print( std::ostream & os, int indent = 0 ) const;327 virtual unsigned size() const override { return base->size(); } 328 329 virtual ReferenceType *clone() const override { return new ReferenceType( *this ); } 330 virtual void accept( Visitor & v ) override { v.visit( this ); } 331 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 332 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 328 333 }; 329 334 … … 349 354 bool isTtype() const; 350 355 351 virtual FunctionType *clone() const { return new FunctionType( *this ); }352 virtual void accept( Visitor & v ) { v.visit( this ); }353 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }354 virtual void print( std::ostream & os, int indent = 0 ) const;356 virtual FunctionType *clone() const override { return new FunctionType( *this ); } 357 virtual void accept( Visitor & v ) override { v.visit( this ); } 358 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 359 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 355 360 }; 356 361 … … 371 376 void set_hoistType( bool newValue ) { hoistType = newValue; } 372 377 373 virtual ReferenceToType *clone() const = 0;374 virtual void accept( Visitor & v ) = 0;375 virtual Type *acceptMutator( Mutator & m ) = 0;376 virtual void print( std::ostream & os, int indent = 0 ) const;378 virtual ReferenceToType *clone() const override = 0; 379 virtual void accept( Visitor & v ) override = 0; 380 virtual Type *acceptMutator( Mutator & m ) override = 0; 381 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 377 382 378 383 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {} … … 398 403 std::list<TypeDecl*> * get_baseParameters(); 399 404 400 virtual bool isComplete() const ;405 virtual bool isComplete() const override; 401 406 402 407 /// Looks up the members of this struct named "name" and places them into "foundDecls". 403 408 /// Clones declarations into "foundDecls", caller responsible for freeing 404 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const ;405 406 virtual StructInstType *clone() const { return new StructInstType( *this ); }407 virtual void accept( Visitor & v ) { v.visit( this ); }408 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }409 410 virtual void print( std::ostream & os, int indent = 0 ) const;409 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override; 410 411 virtual StructInstType *clone() const override { return new StructInstType( *this ); } 412 virtual void accept( Visitor & v ) override { v.visit( this ); } 413 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 414 415 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 411 416 private: 412 virtual std::string typeString() const ;417 virtual std::string typeString() const override; 413 418 }; 414 419 … … 430 435 std::list< TypeDecl * > * get_baseParameters(); 431 436 432 virtual bool isComplete() const ;437 virtual bool isComplete() const override; 433 438 434 439 /// looks up the members of this union named "name" and places them into "foundDecls" 435 440 /// Clones declarations into "foundDecls", caller responsible for freeing 436 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const ;437 438 virtual UnionInstType *clone() const { return new UnionInstType( *this ); }439 virtual void accept( Visitor & v ) { v.visit( this ); }440 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }441 442 virtual void print( std::ostream & os, int indent = 0 ) const;441 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override; 442 443 virtual UnionInstType *clone() const override { return new UnionInstType( *this ); } 444 virtual void accept( Visitor & v ) override { v.visit( this ); } 445 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 446 447 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 443 448 private: 444 virtual std::string typeString() const ;449 virtual std::string typeString() const override; 445 450 }; 446 451 … … 459 464 void set_baseEnum( EnumDecl *newValue ) { baseEnum = newValue; } 460 465 461 virtual bool isComplete() const; 462 463 virtual EnumInstType *clone() const { return new EnumInstType( *this ); } 464 virtual void accept( Visitor & v ) { v.visit( this ); } 465 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); } 466 virtual bool isComplete() const override; 467 468 virtual EnumInstType *clone() const override { return new EnumInstType( *this ); } 469 virtual void accept( Visitor & v ) override { v.visit( this ); } 470 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 471 472 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 466 473 private: 467 virtual std::string typeString() const ;474 virtual std::string typeString() const override; 468 475 }; 469 476 … … 480 487 ~TraitInstType(); 481 488 482 virtual bool isComplete() const ;483 484 virtual TraitInstType *clone() const { return new TraitInstType( *this ); }485 virtual void accept( Visitor & v ) { v.visit( this ); }486 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }489 virtual bool isComplete() const override; 490 491 virtual TraitInstType *clone() const override { return new TraitInstType( *this ); } 492 virtual void accept( Visitor & v ) override { v.visit( this ); } 493 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 487 494 private: 488 virtual std::string typeString() const ;495 virtual std::string typeString() const override; 489 496 }; 490 497 … … 507 514 void set_isFtype( bool newValue ) { isFtype = newValue; } 508 515 509 virtual bool isComplete() const ;510 511 virtual TypeInstType *clone() const { return new TypeInstType( *this ); }512 virtual void accept( Visitor & v ) { v.visit( this ); }513 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }514 virtual void print( std::ostream & os, int indent = 0 ) const;516 virtual bool isComplete() const override; 517 518 virtual TypeInstType *clone() const override { return new TypeInstType( *this ); } 519 virtual void accept( Visitor & v ) override { v.visit( this ); } 520 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 521 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 515 522 private: 516 virtual std::string typeString() const ;523 virtual std::string typeString() const override; 517 524 }; 518 525 … … 530 537 531 538 std::list<Type *> & get_types() { return types; } 532 virtual unsigned size() const { return types.size(); };539 virtual unsigned size() const override { return types.size(); }; 533 540 534 541 // For now, this is entirely synthetic -- tuple types always have unnamed members. … … 539 546 iterator end() { return types.end(); } 540 547 541 virtual Type * getComponent( unsigned i ) {548 virtual Type * getComponent( unsigned i ) override { 542 549 assertf( i < size(), "TupleType::getComponent: index %d must be less than size %d", i, size() ); 543 550 return *(begin()+i); 544 551 } 545 552 546 // virtual bool isComplete() const { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness547 548 virtual TupleType *clone() const { return new TupleType( *this ); }549 virtual void accept( Visitor & v ) { v.visit( this ); }550 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }551 virtual void print( std::ostream & os, int indent = 0 ) const;553 // virtual bool isComplete() const override { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness 554 555 virtual TupleType *clone() const override { return new TupleType( *this ); } 556 virtual void accept( Visitor & v ) override { v.visit( this ); } 557 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 558 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 552 559 }; 553 560 … … 563 570 void set_expr( Expression *newValue ) { expr = newValue; } 564 571 565 virtual bool isComplete() const { assert( false ); return false; }566 567 virtual TypeofType *clone() const { return new TypeofType( *this ); }568 virtual void accept( Visitor & v ) { v.visit( this ); }569 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }570 virtual void print( std::ostream & os, int indent = 0 ) const;572 virtual bool isComplete() const override { assert( false ); return false; } 573 574 virtual TypeofType *clone() const override { return new TypeofType( *this ); } 575 virtual void accept( Visitor & v ) override { v.visit( this ); } 576 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 577 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 571 578 }; 572 579 … … 592 599 void set_isType( bool newValue ) { isType = newValue; } 593 600 594 virtual bool isComplete() const { assert( false ); } // xxx - not sure what to do here595 596 virtual AttrType *clone() const { return new AttrType( *this ); }597 virtual void accept( Visitor & v ) { v.visit( this ); }598 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }599 virtual void print( std::ostream & os, int indent = 0 ) const;601 virtual bool isComplete() const override { assert( false ); } // xxx - not sure what to do here 602 603 virtual AttrType *clone() const override { return new AttrType( *this ); } 604 virtual void accept( Visitor & v ) override { v.visit( this ); } 605 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 606 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 600 607 }; 601 608 … … 606 613 VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 607 614 608 virtual bool isComplete() const { return true; } // xxx - is this right?609 610 virtual VarArgsType *clone() const { return new VarArgsType( *this ); }611 virtual void accept( Visitor & v ) { v.visit( this ); }612 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }613 virtual void print( std::ostream & os, int indent = 0 ) const;615 virtual bool isComplete() const override{ return true; } // xxx - is this right? 616 617 virtual VarArgsType *clone() const override { return new VarArgsType( *this ); } 618 virtual void accept( Visitor & v ) override { v.visit( this ); } 619 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 620 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 614 621 }; 615 622 … … 620 627 ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 621 628 622 virtual ZeroType *clone() const { return new ZeroType( *this ); }623 virtual void accept( Visitor & v ) { v.visit( this ); }624 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }625 virtual void print( std::ostream & os, int indent = 0 ) const;629 virtual ZeroType *clone() const override { return new ZeroType( *this ); } 630 virtual void accept( Visitor & v ) override { v.visit( this ); } 631 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 632 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 626 633 }; 627 634 … … 632 639 OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 633 640 634 virtual OneType *clone() const { return new OneType( *this ); } 635 virtual void accept( Visitor & v ) { v.visit( this ); } 636 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); } 637 virtual void print( std::ostream & os, int indent = 0 ) const; 638 }; 639 640 std::ostream & operator<<( std::ostream & out, const Type * type ); 641 virtual OneType *clone() const override { return new OneType( *this ); } 642 virtual void accept( Visitor & v ) override { v.visit( this ); } 643 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 644 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 645 }; 641 646 642 647 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.