Changeset 40de461 for src/Parser/parser.yy
- Timestamp:
- May 27, 2018, 10:19:55 PM (6 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- 1213f21
- Parents:
- 91cfa34
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r91cfa34 r40de461 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu May 24 18:11:59201813 // Update Count : 33 6912 // Last Modified On : Sun May 27 12:01:51 2018 13 // Update Count : 3373 14 14 // 15 15 … … 324 324 %type<decl> cfa_identifier_parameter_declarator_tuple cfa_identifier_parameter_ptr 325 325 326 %type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_ type_list_opt326 %type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_ellipsis_list_opt 327 327 328 328 %type<decl> cfa_typedef_declaration cfa_variable_declaration cfa_variable_specifier … … 1364 1364 | declaration_qualifier_list type_qualifier_list cfa_function_specifier 1365 1365 { $$ = $3->addQualifiers( $1 )->addQualifiers( $2 ); } 1366 | cfa_function_declaration ',' identifier_or_type_name '(' cfa_parameter_type_list_opt')'1366 | cfa_function_declaration ',' identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')' 1367 1367 { 1368 1368 // Append the return type at the start (left-hand-side) to each identifier in the list. 1369 1369 DeclarationNode * ret = new DeclarationNode; 1370 1370 ret->type = maybeClone( $1->type->base ); 1371 $$ = $1->appendList( DeclarationNode::newFunction( $3, ret, $ 5, nullptr ) );1371 $$ = $1->appendList( DeclarationNode::newFunction( $3, ret, $6, nullptr ) ); 1372 1372 } 1373 1373 ; 1374 1374 1375 1375 cfa_function_specifier: // CFA 1376 // '[' ']' identifier_or_type_name '(' push cfa_parameter_ type_list_opt pop ')' // S/R conflict1376 // '[' ']' identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')' // S/R conflict 1377 1377 // { 1378 1378 // $$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true ); 1379 1379 // } 1380 // '[' ']' identifier '(' push cfa_parameter_ type_list_opt pop ')'1380 // '[' ']' identifier '(' push cfa_parameter_ellipsis_list_opt pop ')' 1381 1381 // { 1382 1382 // typedefTable.setNextIdentifier( *$5 ); 1383 1383 // $$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true ); 1384 1384 // } 1385 // | '[' ']' TYPEDEFname '(' push cfa_parameter_ type_list_opt pop ')'1385 // | '[' ']' TYPEDEFname '(' push cfa_parameter_ellipsis_list_opt pop ')' 1386 1386 // { 1387 1387 // typedefTable.setNextIdentifier( *$5 ); … … 1391 1391 // identifier_or_type_name must be broken apart because of the sequence: 1392 1392 // 1393 // '[' ']' identifier_or_type_name '(' cfa_parameter_ type_list_opt ')'1393 // '[' ']' identifier_or_type_name '(' cfa_parameter_ellipsis_list_opt ')' 1394 1394 // '[' ']' type_specifier 1395 1395 // 1396 1396 // type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be 1397 1397 // flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name. 1398 cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_ type_list_opt pop ')'1398 cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')' 1399 1399 // To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator). 1400 1400 { $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); } 1401 | cfa_function_return identifier_or_type_name '(' push cfa_parameter_ type_list_opt pop ')'1401 | cfa_function_return identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')' 1402 1402 { $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); } 1403 1403 ; … … 1951 1951 ; 1952 1952 1953 cfa_parameter_ type_list_opt: // CFA, abstract + real1953 cfa_parameter_ellipsis_list_opt: // CFA, abstract + real 1954 1954 // empty 1955 1955 { $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); } … … 3115 3115 // 3116 3116 // cfa_abstract_tuple identifier_or_type_name 3117 // '[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_ type_list_opt ')'3117 // '[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_ellipsis_list_opt ')' 3118 3118 // 3119 3119 // since a function return type can be syntactically identical to a tuple type: … … 3177 3177 3178 3178 cfa_abstract_function: // CFA 3179 // '[' ']' '(' cfa_parameter_ type_list_opt ')'3179 // '[' ']' '(' cfa_parameter_ellipsis_list_opt ')' 3180 3180 // { $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); } 3181 cfa_abstract_tuple '(' push cfa_parameter_ type_list_opt pop ')'3181 cfa_abstract_tuple '(' push cfa_parameter_ellipsis_list_opt pop ')' 3182 3182 { $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); } 3183 | cfa_function_return '(' push cfa_parameter_ type_list_opt pop ')'3183 | cfa_function_return '(' push cfa_parameter_ellipsis_list_opt pop ')' 3184 3184 { $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); } 3185 3185 ;
Note: See TracChangeset
for help on using the changeset viewer.