Ignore:
Timestamp:
Nov 8, 2017, 5:43:33 PM (8 years ago)
Author:
Aaron Moss <a3moss@…>
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.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Type.h

    r78315272 r3f7e12cb  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Wed Aug  9 14:25:00 2017
    13 // Update Count     : 152
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Sep 25 14:14:01 2017
     13// Update Count     : 154
    1414//
    1515
     
    181181        virtual void accept( Visitor & v ) = 0;
    182182        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;
    184184};
    185185
     
    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, Indenter indent = {} ) const override;
    201201};
    202202
     
    225225                DoubleImaginary,
    226226                LongDoubleImaginary,
     227                SignedInt128,
     228                UnsignedInt128,
    227229                NUMBER_OF_BASIC_TYPES
    228230        } kind;
     
    235237        void set_kind( Kind newValue ) { kind = newValue; }
    236238
    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;
    241243
    242244        bool isInteger() const;
     
    268270        bool is_array() const { return isStatic || isVarLen || dimension; }
    269271
    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;
    276278};
    277279
     
    296298        void set_isStatic( bool newValue ) { isStatic = newValue; }
    297299
    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;
    304309};
    305310
     
    315320        void set_base( Type *newValue ) { base = newValue; }
    316321
    317         virtual int referenceDepth() const;
     322        virtual int referenceDepth() const override;
    318323
    319324        // Since reference types act like value types, their size is the size of the base.
    320325        // This makes it simple to cast the empty tuple to a reference type, since casts that increase
    321326        // 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;
    328333};
    329334
     
    349354        bool isTtype() const;
    350355
    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;
    355360};
    356361
     
    371376        void set_hoistType( bool newValue ) { hoistType = newValue; }
    372377
    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;
    377382
    378383        virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {}
     
    398403        std::list<TypeDecl*> * get_baseParameters();
    399404
    400         virtual bool isComplete() const;
     405        virtual bool isComplete() const override;
    401406
    402407        /// Looks up the members of this struct named "name" and places them into "foundDecls".
    403408        /// 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;
    411416  private:
    412         virtual std::string typeString() const;
     417        virtual std::string typeString() const override;
    413418};
    414419
     
    430435        std::list< TypeDecl * > * get_baseParameters();
    431436
    432         virtual bool isComplete() const;
     437        virtual bool isComplete() const override;
    433438
    434439        /// looks up the members of this union named "name" and places them into "foundDecls"
    435440        /// 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;
    443448  private:
    444         virtual std::string typeString() const;
     449        virtual std::string typeString() const override;
    445450};
    446451
     
    459464        void set_baseEnum( EnumDecl *newValue ) { baseEnum = newValue; }
    460465
    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;
    466473  private:
    467         virtual std::string typeString() const;
     474        virtual std::string typeString() const override;
    468475};
    469476
     
    480487        ~TraitInstType();
    481488
    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 ); }
    487494  private:
    488         virtual std::string typeString() const;
     495        virtual std::string typeString() const override;
    489496};
    490497
     
    507514        void set_isFtype( bool newValue ) { isFtype = newValue; }
    508515
    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;
    515522  private:
    516         virtual std::string typeString() const;
     523        virtual std::string typeString() const override;
    517524};
    518525
     
    530537
    531538        std::list<Type *> & get_types() { return types; }
    532         virtual unsigned size() const { return types.size(); };
     539        virtual unsigned size() const override { return types.size(); };
    533540
    534541        // For now, this is entirely synthetic -- tuple types always have unnamed members.
     
    539546        iterator end() { return types.end(); }
    540547
    541         virtual Type * getComponent( unsigned i ) {
     548        virtual Type * getComponent( unsigned i ) override {
    542549                assertf( i < size(), "TupleType::getComponent: index %d must be less than size %d", i, size() );
    543550                return *(begin()+i);
    544551        }
    545552
    546         // virtual bool isComplete() const { return true; } // xxx - not sure if this is right, might need to recursively check complete-ness
    547 
    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;
    552559};
    553560
     
    563570        void set_expr( Expression *newValue ) { expr = newValue; }
    564571
    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;
    571578};
    572579
     
    592599        void set_isType( bool newValue ) { isType = newValue; }
    593600
    594         virtual bool isComplete() const { assert( false ); } // xxx - not sure what to do here
    595 
    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;
    600607};
    601608
     
    606613        VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    607614
    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;
    614621};
    615622
     
    620627        ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    621628
    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;
    626633};
    627634
     
    632639        OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
    633640
    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};
    641646
    642647// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.