Changeset e149f77 for src/SynTree/Type.h
- Timestamp:
- Sep 15, 2017, 10:50:13 AM (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:
- 695e00d
- Parents:
- 310e5b7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Type.h
r310e5b7 re149f77 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 … … 235 235 void set_kind( Kind newValue ) { kind = newValue; } 236 236 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 ;237 virtual BasicType *clone() const override { return new BasicType( *this ); } 238 virtual void accept( Visitor & v ) override { v.visit( this ); } 239 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 240 virtual void print( std::ostream & os, int indent = 0 ) const override; 241 241 242 242 bool isInteger() const; … … 268 268 bool is_array() const { return isStatic || isVarLen || dimension; } 269 269 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 ;270 virtual bool isComplete() const override { return ! isVarLen; } 271 272 virtual PointerType *clone() const override { return new PointerType( *this ); } 273 virtual void accept( Visitor & v ) override { v.visit( this ); } 274 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 275 virtual void print( std::ostream & os, int indent = 0 ) const override; 276 276 }; 277 277 … … 296 296 void set_isStatic( bool newValue ) { isStatic = newValue; } 297 297 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 ;298 virtual bool isComplete() const override { return ! isVarLen; } 299 300 virtual ArrayType *clone() const override { return new ArrayType( *this ); } 301 virtual void accept( Visitor & v ) override { v.visit( this ); } 302 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 303 virtual void print( std::ostream & os, int indent = 0 ) const override; 304 304 }; 305 305 … … 315 315 void set_base( Type *newValue ) { base = newValue; } 316 316 317 virtual int referenceDepth() const ;317 virtual int referenceDepth() const override; 318 318 319 319 // Since reference types act like value types, their size is the size of the base. 320 320 // This makes it simple to cast the empty tuple to a reference type, since casts that increase 321 321 // 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 ;322 virtual unsigned size() const override { return base->size(); } 323 324 virtual ReferenceType *clone() const override { return new ReferenceType( *this ); } 325 virtual void accept( Visitor & v ) override { v.visit( this ); } 326 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 327 virtual void print( std::ostream & os, int indent = 0 ) const override; 328 328 }; 329 329 … … 349 349 bool isTtype() const; 350 350 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 ;351 virtual FunctionType *clone() const override { return new FunctionType( *this ); } 352 virtual void accept( Visitor & v ) override { v.visit( this ); } 353 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 354 virtual void print( std::ostream & os, int indent = 0 ) const override; 355 355 }; 356 356 … … 371 371 void set_hoistType( bool newValue ) { hoistType = newValue; } 372 372 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 ;373 virtual ReferenceToType *clone() const override = 0; 374 virtual void accept( Visitor & v ) override = 0; 375 virtual Type *acceptMutator( Mutator & m ) override = 0; 376 virtual void print( std::ostream & os, int indent = 0 ) const override; 377 377 378 378 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {} … … 398 398 std::list<TypeDecl*> * get_baseParameters(); 399 399 400 virtual bool isComplete() const ;400 virtual bool isComplete() const override; 401 401 402 402 /// Looks up the members of this struct named "name" and places them into "foundDecls". 403 403 /// 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 ;404 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override; 405 406 virtual StructInstType *clone() const override { return new StructInstType( *this ); } 407 virtual void accept( Visitor & v ) override { v.visit( this ); } 408 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 409 410 virtual void print( std::ostream & os, int indent = 0 ) const override; 411 411 private: 412 virtual std::string typeString() const ;412 virtual std::string typeString() const override; 413 413 }; 414 414 … … 430 430 std::list< TypeDecl * > * get_baseParameters(); 431 431 432 virtual bool isComplete() const ;432 virtual bool isComplete() const override; 433 433 434 434 /// looks up the members of this union named "name" and places them into "foundDecls" 435 435 /// 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 ;436 void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const override; 437 438 virtual UnionInstType *clone() const override { return new UnionInstType( *this ); } 439 virtual void accept( Visitor & v ) override { v.visit( this ); } 440 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 441 442 virtual void print( std::ostream & os, int indent = 0 ) const override; 443 443 private: 444 virtual std::string typeString() const ;444 virtual std::string typeString() const override; 445 445 }; 446 446 … … 459 459 void set_baseEnum( EnumDecl *newValue ) { baseEnum = newValue; } 460 460 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 ); }461 virtual bool isComplete() const override; 462 463 virtual EnumInstType *clone() const override { return new EnumInstType( *this ); } 464 virtual void accept( Visitor & v ) override { v.visit( this ); } 465 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 466 466 private: 467 virtual std::string typeString() const ;467 virtual std::string typeString() const override; 468 468 }; 469 469 … … 480 480 ~TraitInstType(); 481 481 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 ); }482 virtual bool isComplete() const override; 483 484 virtual TraitInstType *clone() const override { return new TraitInstType( *this ); } 485 virtual void accept( Visitor & v ) override { v.visit( this ); } 486 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 487 487 private: 488 virtual std::string typeString() const ;488 virtual std::string typeString() const override; 489 489 }; 490 490 … … 507 507 void set_isFtype( bool newValue ) { isFtype = newValue; } 508 508 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 ;509 virtual bool isComplete() const override; 510 511 virtual TypeInstType *clone() const override { return new TypeInstType( *this ); } 512 virtual void accept( Visitor & v ) override { v.visit( this ); } 513 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 514 virtual void print( std::ostream & os, int indent = 0 ) const override; 515 515 private: 516 virtual std::string typeString() const ;516 virtual std::string typeString() const override; 517 517 }; 518 518 … … 530 530 531 531 std::list<Type *> & get_types() { return types; } 532 virtual unsigned size() const { return types.size(); };532 virtual unsigned size() const override { return types.size(); }; 533 533 534 534 // For now, this is entirely synthetic -- tuple types always have unnamed members. … … 539 539 iterator end() { return types.end(); } 540 540 541 virtual Type * getComponent( unsigned i ) {541 virtual Type * getComponent( unsigned i ) override { 542 542 assertf( i < size(), "TupleType::getComponent: index %d must be less than size %d", i, size() ); 543 543 return *(begin()+i); 544 544 } 545 545 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 ;546 // virtual bool isComplete() const override { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness 547 548 virtual TupleType *clone() const override { return new TupleType( *this ); } 549 virtual void accept( Visitor & v ) override { v.visit( this ); } 550 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 551 virtual void print( std::ostream & os, int indent = 0 ) const override; 552 552 }; 553 553 … … 563 563 void set_expr( Expression *newValue ) { expr = newValue; } 564 564 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 ;565 virtual bool isComplete() const override { assert( false ); return false; } 566 567 virtual TypeofType *clone() const override { return new TypeofType( *this ); } 568 virtual void accept( Visitor & v ) override { v.visit( this ); } 569 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 570 virtual void print( std::ostream & os, int indent = 0 ) const override; 571 571 }; 572 572 … … 592 592 void set_isType( bool newValue ) { isType = newValue; } 593 593 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 ;594 virtual bool isComplete() const override { assert( false ); } // xxx - not sure what to do here 595 596 virtual AttrType *clone() const override { return new AttrType( *this ); } 597 virtual void accept( Visitor & v ) override { v.visit( this ); } 598 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 599 virtual void print( std::ostream & os, int indent = 0 ) const override; 600 600 }; 601 601 … … 606 606 VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 607 607 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 ;608 virtual bool isComplete() const override{ return true; } // xxx - is this right? 609 610 virtual VarArgsType *clone() const override { return new VarArgsType( *this ); } 611 virtual void accept( Visitor & v ) override { v.visit( this ); } 612 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 613 virtual void print( std::ostream & os, int indent = 0 ) const override; 614 614 }; 615 615 … … 620 620 ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 621 621 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 ;622 virtual ZeroType *clone() const override { return new ZeroType( *this ); } 623 virtual void accept( Visitor & v ) override { v.visit( this ); } 624 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 625 virtual void print( std::ostream & os, int indent = 0 ) const override; 626 626 }; 627 627 … … 632 632 OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 633 633 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 ); 634 virtual OneType *clone() const override { return new OneType( *this ); } 635 virtual void accept( Visitor & v ) override { v.visit( this ); } 636 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 637 virtual void print( std::ostream & os, int indent = 0 ) const override; 638 }; 641 639 642 640 // Local Variables: //
Note: See TracChangeset
for help on using the changeset viewer.