Changes in src/Parser/DeclarationNode.cc [a46b69c:b66d14a]
- File:
-
- 1 edited
-
src/Parser/DeclarationNode.cc (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/DeclarationNode.cc
ra46b69c rb66d14a 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Mar 23 08:44:08202113 // Update Count : 11 4912 // Last Modified On : Mon Jan 11 20:58:07 2021 13 // Update Count : 1137 14 14 // 15 15 … … 167 167 } 168 168 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 169 186 DeclarationNode * DeclarationNode::newStorageClass( Type::StorageClasses sc ) { 170 187 DeclarationNode * newnode = new DeclarationNode; … … 220 237 return newnode; 221 238 } // 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 222 248 223 249 DeclarationNode * DeclarationNode::newFromGlobalScope() { … … 263 289 } // DeclarationNode::newEnum 264 290 291 DeclarationNode * 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 265 298 DeclarationNode * DeclarationNode::newName( const string * name ) { 266 299 DeclarationNode * newnode = new DeclarationNode; 267 assert( ! newnode->name );268 300 newnode->name = name; 269 301 return newnode; 270 302 } // 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::newEnumConstant277 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::newFromTypedef286 303 287 304 DeclarationNode * DeclarationNode::newFromTypeGen( const string * name, ExpressionNode * params ) { … … 295 312 296 313 DeclarationNode * DeclarationNode::newTypeParam( TypeDecl::Kind tc, const string * name ) { 297 DeclarationNode * newnode = new Name( name );314 DeclarationNode * newnode = new DeclarationNode; 298 315 newnode->type = nullptr; 316 assert( ! newnode->name ); 317 // newnode->variable.name = name; 318 newnode->name = name; 299 319 newnode->variable.tyClass = tc; 300 320 newnode->variable.assertions = nullptr; … … 323 343 324 344 DeclarationNode * DeclarationNode::newTypeDecl( const string * name, DeclarationNode * typeParams ) { 325 DeclarationNode * newnode = newName( name ); 345 DeclarationNode * newnode = new DeclarationNode; 346 newnode->name = name; 326 347 newnode->type = new TypeData( TypeData::Symbolic ); 327 348 newnode->type->symbolic.isTypedef = false; … … 396 417 } // DeclarationNode::newBuiltinType 397 418 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 } // if409 410 return newnode;411 } // DeclarationNode::newFunction412 413 419 DeclarationNode * DeclarationNode::newAttribute( const string * name, ExpressionNode * expr ) { 414 420 DeclarationNode * newnode = new DeclarationNode; … … 418 424 newnode->attributes.push_back( new Attribute( *name, exprs ) ); 419 425 delete name; 420 return newnode;421 }422 423 DeclarationNode * DeclarationNode::newDirectiveStmt( StatementNode * stmt ) {424 DeclarationNode * newnode = new DeclarationNode;425 newnode->directiveStmt = stmt;426 426 return newnode; 427 427 } … … 879 879 } 880 880 881 DeclarationNode * DeclarationNode::cloneType( string * n ame ) {882 DeclarationNode * newnode = new Name( name );881 DeclarationNode * DeclarationNode::cloneType( string * newName ) { 882 DeclarationNode * newnode = new DeclarationNode; 883 883 newnode->type = maybeClone( type ); 884 884 newnode->copySpecifiers( this ); 885 assert( newName ); 886 newnode->name = newName; 885 887 return newnode; 886 888 } … … 1070 1072 return new AsmDecl( strict_dynamic_cast<AsmStmt *>( asmStmt->build() ) ); 1071 1073 } // if 1072 if ( directiveStmt ) {1073 return new DirectiveDecl( strict_dynamic_cast<DirectiveStmt *>( directiveStmt->build() ) );1074 } // if1075 1074 1076 1075 if ( variable.tyClass != TypeDecl::NUMBER_OF_KINDS ) {
Note:
See TracChangeset
for help on using the changeset viewer.