Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Declaration.h

    re67991f r3ed994e  
    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 : Thr May  2 10:47:00 2019
    13 // Update Count     : 135
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Sun Sep  3 19:24:06 2017
     13// Update Count     : 131
    1414//
    1515
     
    1919#include <iosfwd>                // for ostream
    2020#include <list>                  // for list
    21 #include <unordered_map>         // for unordered_map
    2221#include <string>                // for string, operator+, allocator, to_string
    2322
     
    6362        void fixUniqueId( void );
    6463        virtual Declaration *clone() const override = 0;
    65         virtual void accept( Visitor & v ) override = 0;
    66         virtual void accept( Visitor & v ) const override = 0;
     64        virtual void accept( Visitor &v ) override = 0;
    6765        virtual Declaration *acceptMutator( Mutator &m ) override = 0;
    6866        virtual void print( std::ostream &os, Indenter indent = {} ) const override = 0;
    6967        virtual void printShort( std::ostream &os, Indenter indent = {} ) const = 0;
    7068
     69        static void dumpIds( std::ostream &os );
     70        static Declaration *declFromId( UniqueId id );
     71
     72  private:
     73        Type::StorageClasses storageClasses;
    7174        UniqueId uniqueId;
    72         Type::StorageClasses storageClasses;
    73   private:
    7475};
    7576
     
    140141
    141142        virtual ObjectDecl *clone() const override { return new ObjectDecl( *this ); }
    142         virtual void accept( Visitor & v ) override { v.visit( this ); }
    143         virtual void accept( Visitor & v ) const override { v.visit( this ); }
     143        virtual void accept( Visitor &v ) override { v.visit( this ); }
    144144        virtual DeclarationWithType *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    145145        virtual void print( std::ostream &os, Indenter indent = {} ) const override;
     
    166166        CompoundStmt *get_statements() const { return statements; }
    167167        void set_statements( CompoundStmt *newValue ) { statements = newValue; }
    168         bool has_body() const { return NULL != statements; }
    169168
    170169        static FunctionDecl * newFunction( const std::string & name, FunctionType * type, CompoundStmt * statements );
    171170
    172171        virtual FunctionDecl *clone() const override { return new FunctionDecl( *this ); }
    173         virtual void accept( Visitor & v ) override { v.visit( this ); }
    174         virtual void accept( Visitor & v ) const override { v.visit( this ); }
     172        virtual void accept( Visitor &v ) override { v.visit( this ); }
    175173        virtual DeclarationWithType *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    176174        virtual void print( std::ostream &os, Indenter indent = {} ) const override;
     
    204202        typedef NamedTypeDecl Parent;
    205203  public:
    206         enum Kind { Dtype, Ftype, Ttype, NUMBER_OF_KINDS };
     204        enum Kind { Dtype, Ftype, Ttype };
    207205
    208206        Type * init;
     
    213211                TypeDecl::Kind kind;
    214212                bool isComplete;
    215 
    216213                Data() : kind( (TypeDecl::Kind)-1 ), isComplete( false ) {}
    217214                Data( TypeDecl * typeDecl ) : Data( typeDecl->get_kind(), typeDecl->isComplete() ) {}
    218215                Data( Kind kind, bool isComplete ) : kind( kind ), isComplete( isComplete ) {}
    219                 Data( const Data& d1, const Data& d2 )
    220                 : kind( d1.kind ), isComplete ( d1.isComplete || d2.isComplete ) {}
    221 
    222216                bool operator==(const Data & other) const { return kind == other.kind && isComplete == other.isComplete; }
    223217                bool operator!=(const Data & other) const { return !(*this == other);}
     
    241235
    242236        virtual TypeDecl *clone() const override { return new TypeDecl( *this ); }
    243         virtual void accept( Visitor & v ) override { v.visit( this ); }
    244         virtual void accept( Visitor & v ) const override { v.visit( this ); }
    245         virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    246         virtual void print( std::ostream &os, Indenter indent = {} ) const override;
    247 
     237        virtual void accept( Visitor &v ) override { v.visit( this ); }
     238        virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
     239        virtual void print( std::ostream &os, Indenter indent = {} ) const override;
     240
     241  private:
    248242        Kind kind;
    249243};
     
    260254
    261255        virtual TypedefDecl *clone() const override { return new TypedefDecl( *this ); }
    262         virtual void accept( Visitor & v ) override { v.visit( this ); }
    263         virtual void accept( Visitor & v ) const override { v.visit( this ); }
     256        virtual void accept( Visitor &v ) override { v.visit( this ); }
    264257        virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    265258  private:
     
    273266        bool body;
    274267        std::list< Attribute * > attributes;
    275         AggregateDecl * parent = nullptr;
    276268
    277269        AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall );
     
    288280        AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; }
    289281
    290         virtual void print( std::ostream &os, Indenter indent = {} ) const override final;
     282        virtual void print( std::ostream &os, Indenter indent = {} ) const override;
    291283        virtual void printShort( std::ostream &os, Indenter indent = {} ) const override;
    292284  protected:
     
    305297
    306298        virtual StructDecl *clone() const override { return new StructDecl( *this ); }
    307         virtual void accept( Visitor & v ) override { v.visit( this ); }
    308         virtual void accept( Visitor & v ) const override { v.visit( this ); }
    309         virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
     299        virtual void accept( Visitor &v ) override { v.visit( this ); }
     300        virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
     301  private:
    310302        DeclarationNode::Aggregate kind;
    311   private:
    312303        virtual std::string typeString() const override;
    313304};
     
    320311
    321312        virtual UnionDecl *clone() const override { return new UnionDecl( *this ); }
    322         virtual void accept( Visitor & v ) override { v.visit( this ); }
    323         virtual void accept( Visitor & v ) const override { v.visit( this ); }
     313        virtual void accept( Visitor &v ) override { v.visit( this ); }
    324314        virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    325315  private:
     
    336326
    337327        virtual EnumDecl *clone() const override { return new EnumDecl( *this ); }
    338         virtual void accept( Visitor & v ) override { v.visit( this ); }
    339         virtual void accept( Visitor & v ) const override { v.visit( this ); }
    340         virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    341   private:
    342         std::unordered_map< std::string, long long int > enumValues;
     328        virtual void accept( Visitor &v ) override { v.visit( this ); }
     329        virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
     330  private:
     331        std::map< std::string, long long int > enumValues;
    343332        virtual std::string typeString() const override;
    344333};
     
    353342
    354343        virtual TraitDecl *clone() const override { return new TraitDecl( *this ); }
    355         virtual void accept( Visitor & v ) override { v.visit( this ); }
    356         virtual void accept( Visitor & v ) const override { v.visit( this ); }
    357         virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    358   private:
    359         virtual std::string typeString() const override;
    360 };
    361 
    362 class WithStmt : public Declaration {
    363 public:
    364         std::list< Expression * > exprs;
    365         Statement * stmt;
    366 
    367         WithStmt( const std::list< Expression * > & exprs, Statement * stmt );
    368         WithStmt( const WithStmt & other );
    369         virtual ~WithStmt();
    370 
    371         virtual WithStmt * clone() const override { return new WithStmt( *this ); }
    372         virtual void accept( Visitor & v ) override { v.visit( this ); }
    373         virtual void accept( Visitor & v ) const override { v.visit( this ); }
    374         virtual Declaration * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
    375         virtual void print( std::ostream & os, Indenter indent = {} ) const override;
    376         virtual void printShort( std::ostream & os, Indenter indent = {} ) const override { print(os, indent); }
     344        virtual void accept( Visitor &v ) override { v.visit( this ); }
     345        virtual Declaration *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
     346  private:
     347        virtual std::string typeString() const override;
    377348};
    378349
     
    389360
    390361        virtual AsmDecl *clone() const override { return new AsmDecl( *this ); }
    391         virtual void accept( Visitor & v ) override { v.visit( this ); }
    392         virtual void accept( Visitor & v ) const override { v.visit( this ); }
     362        virtual void accept( Visitor &v ) override { v.visit( this ); }
    393363        virtual AsmDecl *acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    394364        virtual void print( std::ostream &os, Indenter indent = {} ) const override;
     
    406376
    407377        virtual StaticAssertDecl * clone() const override { return new StaticAssertDecl( *this ); }
    408         virtual void accept( Visitor & v ) override { v.visit( this ); }
    409         virtual void accept( Visitor & v ) const override { v.visit( this ); }
     378        virtual void accept( Visitor &v ) override { v.visit( this ); }
    410379        virtual StaticAssertDecl * acceptMutator( Mutator &m )  override { return m.mutate( this ); }
    411380        virtual void print( std::ostream &os, Indenter indent = {} ) const override;
Note: See TracChangeset for help on using the changeset viewer.