Changeset d67cdb7 for src/SynTree/Type.h
- Timestamp:
- Sep 26, 2017, 11:27:38 PM (7 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:
- 5dc26f5
- Parents:
- 201aeb9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Type.h
r201aeb9 rd67cdb7 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, int indent = 0 ) const override; 201 201 }; 202 202 … … 237 237 void set_kind( Kind newValue ) { kind = newValue; } 238 238 239 virtual BasicType *clone() const { return new BasicType( *this ); }240 virtual void accept( Visitor & v ) { v.visit( this ); }241 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }242 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, int indent = 0 ) const override; 243 243 244 244 bool isInteger() const; … … 270 270 bool is_array() const { return isStatic || isVarLen || dimension; } 271 271 272 virtual bool isComplete() const { return ! isVarLen; }273 274 virtual PointerType *clone() const { return new PointerType( *this ); }275 virtual void accept( Visitor & v ) { v.visit( this ); }276 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }277 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, int indent = 0 ) const override; 278 278 }; 279 279 … … 298 298 void set_isStatic( bool newValue ) { isStatic = newValue; } 299 299 300 virtual bool isComplete() const { return ! isVarLen; }301 302 virtual ArrayType *clone() const { return new ArrayType( *this ); }303 virtual void accept( Visitor & v ) { v.visit( this ); }304 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }305 virtual void print( std::ostream & os, int indent = 0 ) const ;300 virtual bool isComplete() const override { return ! isVarLen; } 301 302 virtual ArrayType *clone() const override { return new ArrayType( *this ); } 303 virtual void accept( Visitor & v ) override { v.visit( this ); } 304 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 305 virtual void print( std::ostream & os, int indent = 0 ) const override; 306 306 }; 307 307 … … 317 317 void set_base( Type *newValue ) { base = newValue; } 318 318 319 virtual int referenceDepth() const ;319 virtual int referenceDepth() const override; 320 320 321 321 // Since reference types act like value types, their size is the size of the base. 322 322 // This makes it simple to cast the empty tuple to a reference type, since casts that increase 323 323 // the number of values are disallowed. 324 virtual unsigned size() const { return base->size(); }325 326 virtual ReferenceType *clone() const { return new ReferenceType( *this ); }327 virtual void accept( Visitor & v ) { v.visit( this ); }328 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }329 virtual void print( std::ostream & os, int indent = 0 ) const ;324 virtual unsigned size() const override { return base->size(); } 325 326 virtual ReferenceType *clone() const override { return new ReferenceType( *this ); } 327 virtual void accept( Visitor & v ) override { v.visit( this ); } 328 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 329 virtual void print( std::ostream & os, int indent = 0 ) const override; 330 330 }; 331 331 … … 351 351 bool isTtype() const; 352 352 353 virtual FunctionType *clone() const { return new FunctionType( *this ); }354 virtual void accept( Visitor & v ) { v.visit( this ); }355 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }356 virtual void print( std::ostream & os, int indent = 0 ) const ;353 virtual FunctionType *clone() const override { return new FunctionType( *this ); } 354 virtual void accept( Visitor & v ) override { v.visit( this ); } 355 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 356 virtual void print( std::ostream & os, int indent = 0 ) const override; 357 357 }; 358 358 … … 373 373 void set_hoistType( bool newValue ) { hoistType = newValue; } 374 374 375 virtual ReferenceToType *clone() const = 0;376 virtual void accept( Visitor & v ) = 0;377 virtual Type *acceptMutator( Mutator & m ) = 0;378 virtual void print( std::ostream & os, int indent = 0 ) const ;375 virtual ReferenceToType *clone() const override = 0; 376 virtual void accept( Visitor & v ) override = 0; 377 virtual Type *acceptMutator( Mutator & m ) override = 0; 378 virtual void print( std::ostream & os, int indent = 0 ) const override; 379 379 380 380 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {} … … 400 400 std::list<TypeDecl*> * get_baseParameters(); 401 401 402 virtual bool isComplete() const ;402 virtual bool isComplete() const override; 403 403 404 404 /// Looks up the members of this struct named "name" and places them into "foundDecls". 405 405 /// Clones declarations into "foundDecls", caller responsible for freeing 406 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const ;407 408 virtual StructInstType *clone() const { return new StructInstType( *this ); }409 virtual void accept( Visitor & v ) { v.visit( this ); }410 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }411 412 virtual void print( std::ostream & os, int indent = 0 ) const ;406 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override; 407 408 virtual StructInstType *clone() const override { return new StructInstType( *this ); } 409 virtual void accept( Visitor & v ) override { v.visit( this ); } 410 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 411 412 virtual void print( std::ostream & os, int indent = 0 ) const override; 413 413 private: 414 virtual std::string typeString() const ;414 virtual std::string typeString() const override; 415 415 }; 416 416 … … 432 432 std::list< TypeDecl * > * get_baseParameters(); 433 433 434 virtual bool isComplete() const ;434 virtual bool isComplete() const override; 435 435 436 436 /// looks up the members of this union named "name" and places them into "foundDecls" 437 437 /// Clones declarations into "foundDecls", caller responsible for freeing 438 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const ;439 440 virtual UnionInstType *clone() const { return new UnionInstType( *this ); }441 virtual void accept( Visitor & v ) { v.visit( this ); }442 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }443 444 virtual void print( std::ostream & os, int indent = 0 ) const ;438 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override; 439 440 virtual UnionInstType *clone() const override { return new UnionInstType( *this ); } 441 virtual void accept( Visitor & v ) override { v.visit( this ); } 442 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 443 444 virtual void print( std::ostream & os, int indent = 0 ) const override; 445 445 private: 446 virtual std::string typeString() const ;446 virtual std::string typeString() const override; 447 447 }; 448 448 … … 461 461 void set_baseEnum( EnumDecl *newValue ) { baseEnum = newValue; } 462 462 463 virtual bool isComplete() const ;464 465 virtual EnumInstType *clone() const { return new EnumInstType( *this ); }466 virtual void accept( Visitor & v ) { v.visit( this ); }467 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }463 virtual bool isComplete() const override; 464 465 virtual EnumInstType *clone() const override { return new EnumInstType( *this ); } 466 virtual void accept( Visitor & v ) override { v.visit( this ); } 467 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 468 468 private: 469 virtual std::string typeString() const ;469 virtual std::string typeString() const override; 470 470 }; 471 471 … … 482 482 ~TraitInstType(); 483 483 484 virtual bool isComplete() const ;485 486 virtual TraitInstType *clone() const { return new TraitInstType( *this ); }487 virtual void accept( Visitor & v ) { v.visit( this ); }488 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }484 virtual bool isComplete() const override; 485 486 virtual TraitInstType *clone() const override { return new TraitInstType( *this ); } 487 virtual void accept( Visitor & v ) override { v.visit( this ); } 488 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 489 489 private: 490 virtual std::string typeString() const ;490 virtual std::string typeString() const override; 491 491 }; 492 492 … … 509 509 void set_isFtype( bool newValue ) { isFtype = newValue; } 510 510 511 virtual bool isComplete() const ;512 513 virtual TypeInstType *clone() const { return new TypeInstType( *this ); }514 virtual void accept( Visitor & v ) { v.visit( this ); }515 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }516 virtual void print( std::ostream & os, int indent = 0 ) const ;511 virtual bool isComplete() const override; 512 513 virtual TypeInstType *clone() const override { return new TypeInstType( *this ); } 514 virtual void accept( Visitor & v ) override { v.visit( this ); } 515 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 516 virtual void print( std::ostream & os, int indent = 0 ) const override; 517 517 private: 518 virtual std::string typeString() const ;518 virtual std::string typeString() const override; 519 519 }; 520 520 … … 532 532 533 533 std::list<Type *> & get_types() { return types; } 534 virtual unsigned size() const { return types.size(); };534 virtual unsigned size() const override { return types.size(); }; 535 535 536 536 // For now, this is entirely synthetic -- tuple types always have unnamed members. … … 541 541 iterator end() { return types.end(); } 542 542 543 virtual Type * getComponent( unsigned i ) {543 virtual Type * getComponent( unsigned i ) override { 544 544 assertf( i < size(), "TupleType::getComponent: index %d must be less than size %d", i, size() ); 545 545 return *(begin()+i); 546 546 } 547 547 548 // virtual bool isComplete() const { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness549 550 virtual TupleType *clone() const { return new TupleType( *this ); }551 virtual void accept( Visitor & v ) { v.visit( this ); }552 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }553 virtual void print( std::ostream & os, int indent = 0 ) const ;548 // virtual bool isComplete() const override { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness 549 550 virtual TupleType *clone() const override { return new TupleType( *this ); } 551 virtual void accept( Visitor & v ) override { v.visit( this ); } 552 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 553 virtual void print( std::ostream & os, int indent = 0 ) const override; 554 554 }; 555 555 … … 565 565 void set_expr( Expression *newValue ) { expr = newValue; } 566 566 567 virtual bool isComplete() const { assert( false ); return false; }568 569 virtual TypeofType *clone() const { return new TypeofType( *this ); }570 virtual void accept( Visitor & v ) { v.visit( this ); }571 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }572 virtual void print( std::ostream & os, int indent = 0 ) const ;567 virtual bool isComplete() const override { assert( false ); return false; } 568 569 virtual TypeofType *clone() const override { return new TypeofType( *this ); } 570 virtual void accept( Visitor & v ) override { v.visit( this ); } 571 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 572 virtual void print( std::ostream & os, int indent = 0 ) const override; 573 573 }; 574 574 … … 594 594 void set_isType( bool newValue ) { isType = newValue; } 595 595 596 virtual bool isComplete() const { assert( false ); } // xxx - not sure what to do here597 598 virtual AttrType *clone() const { return new AttrType( *this ); }599 virtual void accept( Visitor & v ) { v.visit( this ); }600 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }601 virtual void print( std::ostream & os, int indent = 0 ) const ;596 virtual bool isComplete() const override { assert( false ); } // xxx - not sure what to do here 597 598 virtual AttrType *clone() const override { return new AttrType( *this ); } 599 virtual void accept( Visitor & v ) override { v.visit( this ); } 600 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 601 virtual void print( std::ostream & os, int indent = 0 ) const override; 602 602 }; 603 603 … … 608 608 VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 609 609 610 virtual bool isComplete() const { return true; } // xxx - is this right?611 612 virtual VarArgsType *clone() const { return new VarArgsType( *this ); }613 virtual void accept( Visitor & v ) { v.visit( this ); }614 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }615 virtual void print( std::ostream & os, int indent = 0 ) const ;610 virtual bool isComplete() const override{ return true; } // xxx - is this right? 611 612 virtual VarArgsType *clone() const override { return new VarArgsType( *this ); } 613 virtual void accept( Visitor & v ) override { v.visit( this ); } 614 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 615 virtual void print( std::ostream & os, int indent = 0 ) const override; 616 616 }; 617 617 … … 622 622 ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 623 623 624 virtual ZeroType *clone() const { return new ZeroType( *this ); }625 virtual void accept( Visitor & v ) { v.visit( this ); }626 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }627 virtual void print( std::ostream & os, int indent = 0 ) const ;624 virtual ZeroType *clone() const override { return new ZeroType( *this ); } 625 virtual void accept( Visitor & v ) override { v.visit( this ); } 626 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 627 virtual void print( std::ostream & os, int indent = 0 ) const override; 628 628 }; 629 629 … … 634 634 OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 635 635 636 virtual OneType *clone() const { return new OneType( *this ); } 637 virtual void accept( Visitor & v ) { v.visit( this ); } 638 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); } 639 virtual void print( std::ostream & os, int indent = 0 ) const; 640 }; 641 642 std::ostream & operator<<( std::ostream & out, const Type * type ); 636 virtual OneType *clone() const override { return new OneType( *this ); } 637 virtual void accept( Visitor & v ) override { v.visit( this ); } 638 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 639 virtual void print( std::ostream & os, int indent = 0 ) const override; 640 }; 643 641 644 642 // Local Variables: //
Note: See TracChangeset
for help on using the changeset viewer.