Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    ra46b69c rb66d14a  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 23 08:44:08 2021
    13 // Update Count     : 1149
     12// Last Modified On : Mon Jan 11 20:58:07 2021
     13// Update Count     : 1137
    1414//
    1515
     
    167167}
    168168
     169DeclarationNode * 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
    169186DeclarationNode * DeclarationNode::newStorageClass( Type::StorageClasses sc ) {
    170187        DeclarationNode * newnode = new DeclarationNode;
     
    220237        return newnode;
    221238} // DeclarationNode::newForall
     239
     240DeclarationNode * 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
    222248
    223249DeclarationNode * DeclarationNode::newFromGlobalScope() {
     
    263289} // DeclarationNode::newEnum
    264290
     291DeclarationNode * DeclarationNode::newEnumConstant( const string * name, ExpressionNode * constant ) {
     292        DeclarationNode * newnode = new DeclarationNode;
     293        newnode->name = name;
     294        newnode->enumeratorValue.reset( constant );
     295        return newnode;
     296} // DeclarationNode::newEnumConstant
     297
    265298DeclarationNode * DeclarationNode::newName( const string * name ) {
    266299        DeclarationNode * newnode = new DeclarationNode;
    267         assert( ! newnode->name );
    268300        newnode->name = name;
    269301        return newnode;
    270302} // DeclarationNode::newName
    271 
    272 DeclarationNode * DeclarationNode::newEnumConstant( const string * name, ExpressionNode * constant ) {
    273         DeclarationNode * newnode = newName( name );
    274         newnode->enumeratorValue.reset( constant );
    275         return newnode;
    276 } // DeclarationNode::newEnumConstant
    277 
    278 DeclarationNode * 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
    286303
    287304DeclarationNode * DeclarationNode::newFromTypeGen( const string * name, ExpressionNode * params ) {
     
    295312
    296313DeclarationNode * DeclarationNode::newTypeParam( TypeDecl::Kind tc, const string * name ) {
    297         DeclarationNode * newnode = newName( name );
     314        DeclarationNode * newnode = new DeclarationNode;
    298315        newnode->type = nullptr;
     316        assert( ! newnode->name );
     317//      newnode->variable.name = name;
     318        newnode->name = name;
    299319        newnode->variable.tyClass = tc;
    300320        newnode->variable.assertions = nullptr;
     
    323343
    324344DeclarationNode * DeclarationNode::newTypeDecl( const string * name, DeclarationNode * typeParams ) {
    325         DeclarationNode * newnode = newName( name );
     345        DeclarationNode * newnode = new DeclarationNode;
     346        newnode->name = name;
    326347        newnode->type = new TypeData( TypeData::Symbolic );
    327348        newnode->type->symbolic.isTypedef = false;
     
    396417} // DeclarationNode::newBuiltinType
    397418
    398 DeclarationNode * 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 
    413419DeclarationNode * DeclarationNode::newAttribute( const string * name, ExpressionNode * expr ) {
    414420        DeclarationNode * newnode = new DeclarationNode;
     
    418424        newnode->attributes.push_back( new Attribute( *name, exprs ) );
    419425        delete name;
    420         return newnode;
    421 }
    422 
    423 DeclarationNode * DeclarationNode::newDirectiveStmt( StatementNode * stmt ) {
    424         DeclarationNode * newnode = new DeclarationNode;
    425         newnode->directiveStmt = stmt;
    426426        return newnode;
    427427}
     
    879879}
    880880
    881 DeclarationNode * DeclarationNode::cloneType( string * name ) {
    882         DeclarationNode * newnode = newName( name );
     881DeclarationNode * DeclarationNode::cloneType( string * newName ) {
     882        DeclarationNode * newnode = new DeclarationNode;
    883883        newnode->type = maybeClone( type );
    884884        newnode->copySpecifiers( this );
     885        assert( newName );
     886        newnode->name = newName;
    885887        return newnode;
    886888}
     
    10701072                return new AsmDecl( strict_dynamic_cast<AsmStmt *>( asmStmt->build() ) );
    10711073        } // if
    1072         if ( directiveStmt ) {
    1073                 return new DirectiveDecl( strict_dynamic_cast<DirectiveStmt *>( directiveStmt->build() ) );
    1074         } // if
    10751074
    10761075        if ( variable.tyClass != TypeDecl::NUMBER_OF_KINDS ) {
Note: See TracChangeset for help on using the changeset viewer.