Ignore:
Timestamp:
Apr 28, 2021, 4:56:50 PM (4 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
8d66610
Parents:
feacef9 (diff), b7fd2db6 (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/Parser/DeclarationNode.cc

    rfeacef9 r5407cdc  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 11 20:58:07 2021
    13 // Update Count     : 1137
     12// Last Modified On : Tue Mar 23 08:44:08 2021
     13// Update Count     : 1149
    1414//
    1515
     
    167167}
    168168
    169 DeclarationNode * DeclarationNode::newFunction( const string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body ) {
    170         DeclarationNode * newnode = new DeclarationNode;
    171         newnode->name = name;
    172         newnode->type = new TypeData( TypeData::Function );
    173         newnode->type->function.params = param;
    174         newnode->type->function.body = body;
    175 
    176         if ( ret ) {
    177                 newnode->type->base = ret->type;
    178                 ret->type = nullptr;
    179                 delete ret;
    180         } // if
    181 
    182         return newnode;
    183 } // DeclarationNode::newFunction
    184 
    185 
    186169DeclarationNode * DeclarationNode::newStorageClass( Type::StorageClasses sc ) {
    187170        DeclarationNode * newnode = new DeclarationNode;
     
    237220        return newnode;
    238221} // DeclarationNode::newForall
    239 
    240 DeclarationNode * DeclarationNode::newFromTypedef( const string * name ) {
    241         DeclarationNode * newnode = new DeclarationNode;
    242         newnode->type = new TypeData( TypeData::SymbolicInst );
    243         newnode->type->symbolic.name = name;
    244         newnode->type->symbolic.isTypedef = true;
    245         newnode->type->symbolic.params = nullptr;
    246         return newnode;
    247 } // DeclarationNode::newFromTypedef
    248222
    249223DeclarationNode * DeclarationNode::newFromGlobalScope() {
     
    289263} // DeclarationNode::newEnum
    290264
     265DeclarationNode * DeclarationNode::newName( const string * name ) {
     266        DeclarationNode * newnode = new DeclarationNode;
     267        assert( ! newnode->name );
     268        newnode->name = name;
     269        return newnode;
     270} // DeclarationNode::newName
     271
    291272DeclarationNode * DeclarationNode::newEnumConstant( const string * name, ExpressionNode * constant ) {
    292         DeclarationNode * newnode = new DeclarationNode;
    293         newnode->name = name;
     273        DeclarationNode * newnode = newName( name );
    294274        newnode->enumeratorValue.reset( constant );
    295275        return newnode;
    296276} // DeclarationNode::newEnumConstant
    297277
    298 DeclarationNode * DeclarationNode::newName( const string * name ) {
    299         DeclarationNode * newnode = new DeclarationNode;
    300         newnode->name = name;
    301         return newnode;
    302 } // DeclarationNode::newName
     278DeclarationNode * DeclarationNode::newFromTypedef( const string * name ) {
     279        DeclarationNode * newnode = new DeclarationNode;
     280        newnode->type = new TypeData( TypeData::SymbolicInst );
     281        newnode->type->symbolic.name = name;
     282        newnode->type->symbolic.isTypedef = true;
     283        newnode->type->symbolic.params = nullptr;
     284        return newnode;
     285} // DeclarationNode::newFromTypedef
    303286
    304287DeclarationNode * DeclarationNode::newFromTypeGen( const string * name, ExpressionNode * params ) {
     
    312295
    313296DeclarationNode * DeclarationNode::newTypeParam( TypeDecl::Kind tc, const string * name ) {
    314         DeclarationNode * newnode = new DeclarationNode;
     297        DeclarationNode * newnode = newName( name );
    315298        newnode->type = nullptr;
    316         assert( ! newnode->name );
    317 //      newnode->variable.name = name;
    318         newnode->name = name;
    319299        newnode->variable.tyClass = tc;
    320300        newnode->variable.assertions = nullptr;
     
    343323
    344324DeclarationNode * DeclarationNode::newTypeDecl( const string * name, DeclarationNode * typeParams ) {
    345         DeclarationNode * newnode = new DeclarationNode;
    346         newnode->name = name;
     325        DeclarationNode * newnode = newName( name );
    347326        newnode->type = new TypeData( TypeData::Symbolic );
    348327        newnode->type->symbolic.isTypedef = false;
     
    417396} // DeclarationNode::newBuiltinType
    418397
     398DeclarationNode * DeclarationNode::newFunction( const string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body ) {
     399        DeclarationNode * newnode = newName( name );
     400        newnode->type = new TypeData( TypeData::Function );
     401        newnode->type->function.params = param;
     402        newnode->type->function.body = body;
     403
     404        if ( ret ) {
     405                newnode->type->base = ret->type;
     406                ret->type = nullptr;
     407                delete ret;
     408        } // if
     409
     410        return newnode;
     411} // DeclarationNode::newFunction
     412
    419413DeclarationNode * DeclarationNode::newAttribute( const string * name, ExpressionNode * expr ) {
    420414        DeclarationNode * newnode = new DeclarationNode;
     
    424418        newnode->attributes.push_back( new Attribute( *name, exprs ) );
    425419        delete name;
     420        return newnode;
     421}
     422
     423DeclarationNode * DeclarationNode::newDirectiveStmt( StatementNode * stmt ) {
     424        DeclarationNode * newnode = new DeclarationNode;
     425        newnode->directiveStmt = stmt;
    426426        return newnode;
    427427}
     
    879879}
    880880
    881 DeclarationNode * DeclarationNode::cloneType( string * newName ) {
    882         DeclarationNode * newnode = new DeclarationNode;
     881DeclarationNode * DeclarationNode::cloneType( string * name ) {
     882        DeclarationNode * newnode = newName( name );
    883883        newnode->type = maybeClone( type );
    884884        newnode->copySpecifiers( this );
    885         assert( newName );
    886         newnode->name = newName;
    887885        return newnode;
    888886}
     
    10721070                return new AsmDecl( strict_dynamic_cast<AsmStmt *>( asmStmt->build() ) );
    10731071        } // if
     1072        if ( directiveStmt ) {
     1073                return new DirectiveDecl( strict_dynamic_cast<DirectiveStmt *>( directiveStmt->build() ) );
     1074        } // if
    10741075
    10751076        if ( variable.tyClass != TypeDecl::NUMBER_OF_KINDS ) {
Note: See TracChangeset for help on using the changeset viewer.