Changeset d67cdb7 for src/SynTree/Type.h


Ignore:
Timestamp:
Sep 26, 2017, 11:27:38 PM (7 years ago)
Author:
Peter A. Buhr <pabuhr@…>
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
Message:

merge

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Type.h

    r201aeb9 rd67cdb7  
    192192        VoidType( const Type::Qualifiers & tq, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
    193193
    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;
    201201};
    202202
     
    237237        void set_kind( Kind newValue ) { kind = newValue; }
    238238
    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;
    243243
    244244        bool isInteger() const;
     
    270270        bool is_array() const { return isStatic || isVarLen || dimension; }
    271271
    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;
    278278};
    279279
     
    298298        void set_isStatic( bool newValue ) { isStatic = newValue; }
    299299
    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;
    306306};
    307307
     
    317317        void set_base( Type *newValue ) { base = newValue; }
    318318
    319         virtual int referenceDepth() const;
     319        virtual int referenceDepth() const override;
    320320
    321321        // Since reference types act like value types, their size is the size of the base.
    322322        // This makes it simple to cast the empty tuple to a reference type, since casts that increase
    323323        // 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;
    330330};
    331331
     
    351351        bool isTtype() const;
    352352
    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;
    357357};
    358358
     
    373373        void set_hoistType( bool newValue ) { hoistType = newValue; }
    374374
    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;
    379379
    380380        virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {}
     
    400400        std::list<TypeDecl*> * get_baseParameters();
    401401
    402         virtual bool isComplete() const;
     402        virtual bool isComplete() const override;
    403403
    404404        /// Looks up the members of this struct named "name" and places them into "foundDecls".
    405405        /// 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;
    413413  private:
    414         virtual std::string typeString() const;
     414        virtual std::string typeString() const override;
    415415};
    416416
     
    432432        std::list< TypeDecl * > * get_baseParameters();
    433433
    434         virtual bool isComplete() const;
     434        virtual bool isComplete() const override;
    435435
    436436        /// looks up the members of this union named "name" and places them into "foundDecls"
    437437        /// 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;
    445445  private:
    446         virtual std::string typeString() const;
     446        virtual std::string typeString() const override;
    447447};
    448448
     
    461461        void set_baseEnum( EnumDecl *newValue ) { baseEnum = newValue; }
    462462
    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 ); }
    468468  private:
    469         virtual std::string typeString() const;
     469        virtual std::string typeString() const override;
    470470};
    471471
     
    482482        ~TraitInstType();
    483483
    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 ); }
    489489  private:
    490         virtual std::string typeString() const;
     490        virtual std::string typeString() const override;
    491491};
    492492
     
    509509        void set_isFtype( bool newValue ) { isFtype = newValue; }
    510510
    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;
    517517  private:
    518         virtual std::string typeString() const;
     518        virtual std::string typeString() const override;
    519519};
    520520
     
    532532
    533533        std::list<Type *> & get_types() { return types; }
    534         virtual unsigned size() const { return types.size(); };
     534        virtual unsigned size() const override { return types.size(); };
    535535
    536536        // For now, this is entirely synthetic -- tuple types always have unnamed members.
     
    541541        iterator end() { return types.end(); }
    542542
    543         virtual Type * getComponent( unsigned i ) {
     543        virtual Type * getComponent( unsigned i ) override {
    544544                assertf( i < size(), "TupleType::getComponent: index %d must be less than size %d", i, size() );
    545545                return *(begin()+i);
    546546        }
    547547
    548         // virtual bool isComplete() const { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness
    549 
    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;
    554554};
    555555
     
    565565        void set_expr( Expression *newValue ) { expr = newValue; }
    566566
    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;
    573573};
    574574
     
    594594        void set_isType( bool newValue ) { isType = newValue; }
    595595
    596         virtual bool isComplete() const { assert( false ); } // xxx - not sure what to do here
    597 
    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;
    602602};
    603603
     
    608608        VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    609609
    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;
    616616};
    617617
     
    622622        ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    623623
    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;
    628628};
    629629
     
    634634        OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    635635
    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};
    643641
    644642// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.