- Timestamp:
- May 14, 2022, 9:41:03 AM (2 years ago)
- Branches:
- ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
- Children:
- 032234bd
- Parents:
- 789f279
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r789f279 rd8454b9 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 4 17:22:48202213 // Update Count : 5 27912 // Last Modified On : Sat May 14 09:16:22 2022 13 // Update Count : 5401 14 14 // 15 15 … … 54 54 #include "Common/SemanticError.h" // error_str 55 55 #include "Common/utility.h" // for maybeMoveBuild, maybeBuild, CodeLo... 56 57 #include "SynTree/Attribute.h" // for Attribute 56 58 57 59 extern DeclarationNode * parseTree; … … 93 95 } // appendStr 94 96 95 DeclarationNode * distAttr( DeclarationNode * specifier, DeclarationNode * declList ) { 96 // distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__. 97 DeclarationNode * cur = declList, * cl = (new DeclarationNode)->addType( specifier ); 97 DeclarationNode * distAttr( DeclarationNode * typeSpec, DeclarationNode * declList ) { 98 // distribute declaration_specifier across all declared variables, e.g., static, const, but not __attribute__. 99 assert( declList ); 100 // printf( "distAttr1 typeSpec %p\n", typeSpec ); typeSpec->print( std::cout ); 101 DeclarationNode * cur = declList, * cl = (new DeclarationNode)->addType( typeSpec ); 102 // printf( "distAttr2 cl %p\n", cl ); cl->type->print( std::cout ); 103 // cl->type->aggregate.name = cl->type->aggInst.aggregate->aggregate.name; 104 98 105 for ( cur = dynamic_cast<DeclarationNode *>( cur->get_next() ); cur != nullptr; cur = dynamic_cast<DeclarationNode *>( cur->get_next() ) ) { 99 106 cl->cloneBaseType( cur ); 100 107 } // for 101 108 declList->addType( cl ); 109 // printf( "distAttr3 declList %p\n", declList ); declList->print( std::cout, 0 ); 102 110 return declList; 103 111 } // distAttr … … 171 179 if ( ! ( typeSpec->type && (typeSpec->type->kind == TypeData::Aggregate || typeSpec->type->kind == TypeData::Enum) ) ) { 172 180 stringstream ss; 173 typeSpec->type->print( ss);181 // printf( "fieldDecl1 typeSpec %p\n", typeSpec ); typeSpec->type->print( std::cout ); 174 182 SemanticWarning( yylloc, Warning::SuperfluousDecl, ss.str().c_str() ); 175 183 return nullptr; 176 184 } // if 185 // printf( "fieldDecl2 typeSpec %p\n", typeSpec ); typeSpec->type->print( std::cout ); 177 186 fieldList = DeclarationNode::newName( nullptr ); 178 187 } // if 179 return distAttr( typeSpec, fieldList ); // mark all fields in list 188 // return distAttr( typeSpec, fieldList ); // mark all fields in list 189 190 // printf( "fieldDecl3 typeSpec %p\n", typeSpec ); typeSpec->print( std::cout, 0 ); 191 DeclarationNode * temp = distAttr( typeSpec, fieldList ); // mark all fields in list 192 // printf( "fieldDecl4 temp %p\n", temp ); temp->print( std::cout, 0 ); 193 return temp; 180 194 } // fieldDecl 181 195 … … 1620 1634 declaration: // old & new style declarations 1621 1635 c_declaration ';' 1636 { 1637 // printf( "C_DECLARATION1 %p %s\n", $$, $$->name ? $$->name->c_str() : "(nil)" ); 1638 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 1639 // printf( "\tattr %s\n", attr->name.c_str() ); 1640 // } // for 1641 } 1622 1642 | cfa_declaration ';' // CFA 1623 1643 | static_assert // C11 … … 1825 1845 basic_type_specifier 1826 1846 | sue_type_specifier 1847 { 1848 // printf( "sue_type_specifier2 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 1849 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 1850 // printf( "\tattr %s\n", attr->name.c_str() ); 1851 // } // for 1852 } 1827 1853 | type_type_specifier 1828 1854 ; … … 2041 2067 sue_declaration_specifier: // struct, union, enum + storage class + type specifier 2042 2068 sue_type_specifier 2069 { 2070 // printf( "sue_declaration_specifier %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 2071 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 2072 // printf( "\tattr %s\n", attr->name.c_str() ); 2073 // } // for 2074 } 2043 2075 | declaration_qualifier_list sue_type_specifier 2044 2076 { $$ = $2->addQualifiers( $1 ); } … … 2051 2083 sue_type_specifier: // struct, union, enum + type specifier 2052 2084 elaborated_type 2085 { 2086 // printf( "sue_type_specifier %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 2087 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 2088 // printf( "\tattr %s\n", attr->name.c_str() ); 2089 // } // for 2090 } 2053 2091 | type_qualifier_list 2054 2092 { if ( $1->type != nullptr && $1->type->forall ) forall = true; } // remember generic type … … 2123 2161 elaborated_type: // struct, union, enum 2124 2162 aggregate_type 2163 { 2164 // printf( "elaborated_type %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 2165 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 2166 // printf( "\tattr %s\n", attr->name.c_str() ); 2167 // } // for 2168 } 2125 2169 | enum_type 2126 2170 ; … … 2142 2186 } 2143 2187 '{' field_declaration_list_opt '}' type_parameters_opt 2144 { $$ = DeclarationNode::newAggregate( $1, $3, $8, $6, true )->addQualifiers( $2 ); } 2188 { 2189 // printf( "aggregate_type1 %s\n", $3.str->c_str() ); 2190 // if ( $2 ) 2191 // for ( Attribute * attr: reverseIterate( $2->attributes ) ) { 2192 // printf( "copySpecifiers12 %s\n", attr->name.c_str() ); 2193 // } // for 2194 $$ = DeclarationNode::newAggregate( $1, $3, $8, $6, true )->addQualifiers( $2 ); 2195 // printf( "aggregate_type2 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 2196 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 2197 // printf( "aggregate_type3 %s\n", attr->name.c_str() ); 2198 // } // for 2199 } 2145 2200 | aggregate_key attribute_list_opt TYPEDEFname // unqualified type name 2146 2201 { … … 2150 2205 '{' field_declaration_list_opt '}' type_parameters_opt 2151 2206 { 2207 // printf( "AGG3\n" ); 2152 2208 DeclarationNode::newFromTypedef( $3 ); 2153 2209 $$ = DeclarationNode::newAggregate( $1, $3, $8, $6, true )->addQualifiers( $2 ); … … 2160 2216 '{' field_declaration_list_opt '}' type_parameters_opt 2161 2217 { 2218 // printf( "AGG4\n" ); 2162 2219 DeclarationNode::newFromTypeGen( $3, nullptr ); 2163 2220 $$ = DeclarationNode::newAggregate( $1, $3, $8, $6, true )->addQualifiers( $2 ); … … 2236 2293 field_declaration: 2237 2294 type_specifier field_declaring_list_opt ';' 2238 { $$ = fieldDecl( $1, $2 ); } 2295 { 2296 // printf( "type_specifier1 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 2297 $$ = fieldDecl( $1, $2 ); 2298 // printf( "type_specifier2 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" ); 2299 // for ( Attribute * attr: reverseIterate( $$->attributes ) ) { 2300 // printf( "\tattr %s\n", attr->name.c_str() ); 2301 // } // for 2302 } 2239 2303 | EXTENSION type_specifier field_declaring_list_opt ';' // GCC 2240 2304 { $$ = fieldDecl( $2, $3 ); distExt( $$ ); } … … 2845 2909 // empty 2846 2910 { $$ = nullptr; forall = false; } 2847 | WITH '(' tuple_expression_list ')' 2848 { $$ = $3; forall = false; } 2911 | WITH '(' tuple_expression_list ')' attribute_list_opt 2912 { 2913 $$ = $3; forall = false; 2914 if ( $5 ) { 2915 SemanticError( yylloc, "Attributes cannot be associated with function body. Move attribute(s) before \"with\" clause." ); 2916 $$ = nullptr; 2917 } // if 2918 } 2849 2919 ; 2850 2920
Note: See TracChangeset
for help on using the changeset viewer.