Changes in src/Parser/DeclarationNode.cc [78e2fca:692c1cc]
- File:
-
- 1 edited
-
src/Parser/DeclarationNode.cc (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/DeclarationNode.cc
r78e2fca r692c1cc 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Feb 24 11:10:03 202313 // Update Count : 1 40012 // Last Modified On : Thu Feb 16 14:12:03 2023 13 // Update Count : 1388 14 14 // 15 15 … … 61 61 variable.initializer = nullptr; 62 62 63 // attr.name = nullptr; 64 attr.expr = nullptr; 65 attr.type = nullptr; 66 63 67 assert.condition = nullptr; 64 68 assert.message = nullptr; … … 66 70 67 71 DeclarationNode::~DeclarationNode() { 72 // delete attr.name; 73 delete attr.expr; 74 delete attr.type; 75 68 76 // delete variable.name; 69 77 delete variable.assertions; … … 107 115 newnode->variable.initializer = maybeClone( variable.initializer ); 108 116 117 // newnode->attr.name = attr.name ? new string( *attr.name ) : nullptr; 118 newnode->attr.expr = maybeClone( attr.expr ); 119 newnode->attr.type = maybeClone( attr.type ); 120 109 121 newnode->assert.condition = maybeClone( assert.condition ); 110 122 newnode->assert.message = maybeClone( assert.message ); … … 254 266 newnode->type->enumeration.typed = typed; 255 267 newnode->type->enumeration.hiding = hiding; 256 if ( base && base->type ) {268 if ( base && base->type) { 257 269 newnode->type->base = base->type; 258 270 } // if … … 567 579 568 580 checkQualifiers( type, q->type ); 569 if ( (builtin == Zero || builtin == One) && q->type->qualifiers. any()&& error.length() == 0 ) {581 if ( (builtin == Zero || builtin == One) && q->type->qualifiers.val != 0 && error.length() == 0 ) { 570 582 SemanticWarning( yylloc, Warning::BadQualifiersZeroOne, Type::QualifiersNames[ilog2( q->type->qualifiers.val )], builtinTypeNames[builtin] ); 571 583 } // if … … 984 996 985 997 if ( DeclarationNode * extr = cur->extractAggregate() ) { 986 // Handle the case where a SUE declaration is contained within an object or type declaration. 987 988 assert( cur->type ); 989 // Replace anonymous SUE name with typedef name to prevent anonymous naming problems across translation units. 990 if ( cur->type->kind == TypeData::Symbolic && cur->type->symbolic.isTypedef ) { 991 assert( extr->type ); 992 // Handle anonymous aggregates: typedef struct { int i; } foo 993 extr->type->qualifiers.reset(); // clear any CVs associated with the aggregate 994 if ( extr->type->kind == TypeData::Aggregate && extr->type->aggregate.anon ) { 995 delete extr->type->aggregate.name; 996 extr->type->aggregate.name = new string( "__anonymous_" + *cur->name ); 997 extr->type->aggregate.anon = false; 998 assert( cur->type->base ); 999 if ( cur->type->base ) { 1000 delete cur->type->base->aggInst.aggregate->aggregate.name; 1001 cur->type->base->aggInst.aggregate->aggregate.name = new string( "__anonymous_" + *cur->name ); 1002 cur->type->base->aggInst.aggregate->aggregate.anon = false; 1003 cur->type->base->aggInst.aggregate->qualifiers.reset(); 1004 } // if 1005 } // if 1006 // Handle anonymous enumeration: typedef enum { A, B, C } foo 1007 if ( extr->type->kind == TypeData::Enum && extr->type->enumeration.anon ) { 1008 delete extr->type->enumeration.name; 1009 extr->type->enumeration.name = new string( "__anonymous_" + *cur->name ); 1010 extr->type->enumeration.anon = false; 1011 assert( cur->type->base ); 1012 if ( cur->type->base ) { 1013 delete cur->type->base->aggInst.aggregate->enumeration.name; 1014 cur->type->base->aggInst.aggregate->enumeration.name = new string( "__anonymous_" + *cur->name ); 1015 cur->type->base->aggInst.aggregate->enumeration.anon = false; 1016 } // if 1017 } // if 1018 } // if 998 // handle the case where a structure declaration is contained within an object or type declaration 1019 999 1020 1000 Declaration * decl = extr->build(); … … 1233 1213 assert( type ); 1234 1214 1215 if ( attr.expr ) { 1216 return new AttrType( buildQualifiers( type ), *name, attr.expr->build(), attributes ); 1217 } else if ( attr.type ) { 1218 return new AttrType( buildQualifiers( type ), *name, attr.type->buildType(), attributes ); 1219 } // if 1220 1235 1221 switch ( type->kind ) { 1236 1222 case TypeData::Enum:
Note:
See TracChangeset
for help on using the changeset viewer.