Changeset e874605 for src/SynTree


Ignore:
Timestamp:
Oct 28, 2022, 3:11:57 PM (3 years ago)
Author:
JiadaL <j82liang@…>
Branches:
ADT, ast-experimental, master
Children:
93d2219
Parents:
77de429
Message:

Add class InlineValueDecl, which is a Declaration class that works as a placeholder for aggregration value inherited from other aggregration. Disable inline value overwrite.

Location:
src/SynTree
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Declaration.h

    r77de429 re874605  
    449449};
    450450
     451
     452class InlineValueDecl : public DeclarationWithType {
     453        typedef DeclarationWithType Parent;
     454  public:
     455        Type * type;
     456
     457        InlineValueDecl( const std::string & name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Type * type,
     458                                const std::list< Attribute * > attributes = std::list< Attribute * >(), Type::FuncSpecifiers fs = Type::FuncSpecifiers() );
     459        InlineValueDecl( const InlineValueDecl & other );
     460        virtual ~InlineValueDecl();
     461
     462        virtual Type * get_type() const override { return type; }
     463        virtual void set_type(Type * newType) override { type = newType; }
     464
     465        static InlineValueDecl * newInlineValueDecl( const std::string & name, Type * type );
     466
     467        virtual InlineValueDecl * clone() const override { return new InlineValueDecl( *this ); }
     468        virtual void accept( Visitor & v ) override { v.visit( this ); }
     469        virtual void accept( Visitor & v ) const override { v.visit( this ); }
     470        virtual DeclarationWithType * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
     471        virtual void print( std::ostream & os, Indenter indent = {} ) const override;
     472        virtual void printShort( std::ostream & os, Indenter indent = {} ) const override;
     473
     474};
     475
    451476std::ostream & operator<<( std::ostream & os, const TypeDecl::Data & data );
    452477
  • src/SynTree/Mutator.h

    r77de429 re874605  
    3636        virtual DirectiveDecl * mutate( DirectiveDecl * directiveDecl ) = 0;
    3737        virtual StaticAssertDecl * mutate( StaticAssertDecl * assertDecl ) = 0;
     38        virtual DeclarationWithType * mutate( InlineValueDecl * inlineValueDecl ) = 0;
    3839
    3940        virtual CompoundStmt * mutate( CompoundStmt * compoundStmt ) = 0;
  • src/SynTree/SynTree.h

    r77de429 re874605  
    3838class DirectiveDecl;
    3939class StaticAssertDecl;
     40class InlineValueDecl;
    4041
    4142class Statement;
  • src/SynTree/Visitor.h

    r77de429 re874605  
    4949        virtual void visit( StaticAssertDecl * node ) { visit( const_cast<const StaticAssertDecl *>(node) ); }
    5050        virtual void visit( const StaticAssertDecl * assertDecl ) = 0;
     51        virtual void visit( InlineValueDecl * node ) { visit( const_cast<const InlineValueDecl *>(node) ); }
     52        virtual void visit( const InlineValueDecl * valueDecl ) = 0;
    5153
    5254        virtual void visit( CompoundStmt * node ) { visit( const_cast<const CompoundStmt *>(node) ); }
  • src/SynTree/module.mk

    r77de429 re874605  
    4242      SynTree/Initializer.cc \
    4343      SynTree/Initializer.h \
     44      SynTree/InlineValueDecl.cc \
    4445      SynTree/Label.h \
    4546      SynTree/LinkageSpec.cc \
Note: See TracChangeset for help on using the changeset viewer.