Changeset 8dbedfc for src/Parser
- Timestamp:
- May 25, 2018, 1:37:38 PM (7 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:
- 58e822a
- Parents:
- 13073be (diff), 34ca532 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r13073be r8dbedfc 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue May 22 08:41:57201813 // Update Count : 33 5312 // Last Modified On : Thu May 24 18:11:59 2018 13 // Update Count : 3369 14 14 // 15 15 … … 837 837 // '[' push assignment_expression pop ']' 838 838 // { $$ = new ExpressionNode( build_tuple( $3 ) ); } 839 '[' ',' tuple_expression_list']'840 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $ 3) ) ); }841 | '[' assignment_expression ',' tuple_expression_list']'842 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$ 2->set_last( $4) ) ); }839 '[' push ',' tuple_expression_list pop ']' 840 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); } 841 | '[' push assignment_expression ',' tuple_expression_list pop ']' 842 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); } 843 843 ; 844 844 … … 866 866 labeled_statement 867 867 | compound_statement 868 | expression_statement { $$ = $1; }868 | expression_statement 869 869 | selection_statement 870 870 | iteration_statement … … 1183 1183 type_specifier_nobody 1184 1184 | type_specifier_nobody declarator 1185 { 1186 $$ = $2->addType( $1 ); 1187 } 1185 { $$ = $2->addType( $1 ); } 1188 1186 | type_specifier_nobody variable_abstract_declarator 1189 1187 { $$ = $2->addType( $1 ); } 1190 1188 | cfa_abstract_declarator_tuple no_attr_identifier // CFA 1191 { 1192 $$ = $1->addName( $2 ); 1193 } 1189 { $$ = $1->addName( $2 ); } 1194 1190 | cfa_abstract_declarator_tuple // CFA 1195 1191 ; … … 1269 1265 1270 1266 declaration_list_opt: // used at beginning of switch statement 1271 pop 1267 pop // empty 1272 1268 { $$ = nullptr; } 1273 1269 | declaration_list … … 1304 1300 1305 1301 local_label_list: // GCC, local label 1306 no_attr_identifier_or_type_name {}1307 | local_label_list ',' no_attr_identifier_or_type_name {}1302 no_attr_identifier_or_type_name 1303 | local_label_list ',' no_attr_identifier_or_type_name 1308 1304 ; 1309 1305 … … 1400 1396 // type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be 1401 1397 // flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name. 1402 cfa_abstract_tuple identifier_or_type_name '(' cfa_parameter_type_list_opt')'1398 cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' 1403 1399 // To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator). 1404 { $$ = DeclarationNode::newFunction( $2, $1, $ 4, 0 ); }1405 | cfa_function_return identifier_or_type_name '(' cfa_parameter_type_list_opt')'1406 { $$ = DeclarationNode::newFunction( $2, $1, $ 4, 0 ); }1400 { $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); } 1401 | cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' 1402 { $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); } 1407 1403 ; 1408 1404 1409 1405 cfa_function_return: // CFA 1410 '[' cfa_parameter_list ']' 1411 { $$ = DeclarationNode::newTuple( $2 ); } 1412 | '[' cfa_parameter_list ',' cfa_abstract_parameter_list ']' 1413 // To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the 1414 // ']'. 1415 { $$ = DeclarationNode::newTuple( $2->appendList( $4 ) ); } 1406 '[' push cfa_parameter_list pop ']' 1407 { $$ = DeclarationNode::newTuple( $3 ); } 1408 | '[' push cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ']' 1409 // To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the ']'. 1410 { $$ = DeclarationNode::newTuple( $3->appendList( $7 ) ); } 1416 1411 ; 1417 1412 … … 1587 1582 1588 1583 forall: 1589 FORALL '(' 1590 { 1591 typedefTable.enterScope(); 1592 } 1593 type_parameter_list ')' // CFA 1594 { 1595 typedefTable.leaveScope(); 1596 $$ = DeclarationNode::newForall( $4 ); 1597 } 1584 FORALL '(' push type_parameter_list pop ')' // CFA 1585 { $$ = DeclarationNode::newForall( $4 ); } 1598 1586 ; 1599 1587 … … 1970 1958 | cfa_abstract_parameter_list 1971 1959 | cfa_parameter_list 1972 | cfa_parameter_list ','cfa_abstract_parameter_list1973 { $$ = $1->appendList( $ 3); }1974 | cfa_abstract_parameter_list ','ELLIPSIS1960 | cfa_parameter_list pop ',' push cfa_abstract_parameter_list 1961 { $$ = $1->appendList( $5 ); } 1962 | cfa_abstract_parameter_list pop ',' push ELLIPSIS 1975 1963 { $$ = $1->addVarArgs(); } 1976 | cfa_parameter_list ','ELLIPSIS1964 | cfa_parameter_list pop ',' push ELLIPSIS 1977 1965 { $$ = $1->addVarArgs(); } 1978 1966 ; … … 1982 1970 // factored out from cfa_parameter_list, flattening the rules to get lookahead to the ']'. 1983 1971 cfa_parameter_declaration 1984 | cfa_abstract_parameter_list ','cfa_parameter_declaration1985 { $$ = $1->appendList( $ 3); }1986 | cfa_parameter_list ','cfa_parameter_declaration1987 { $$ = $1->appendList( $ 3); }1988 | cfa_parameter_list ',' cfa_abstract_parameter_list ','cfa_parameter_declaration1989 { $$ = $1->appendList( $ 3 )->appendList( $5); }1972 | cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration 1973 { $$ = $1->appendList( $5 ); } 1974 | cfa_parameter_list pop ',' push cfa_parameter_declaration 1975 { $$ = $1->appendList( $5 ); } 1976 | cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration 1977 { $$ = $1->appendList( $5 )->appendList( $9 ); } 1990 1978 ; 1991 1979 1992 1980 cfa_abstract_parameter_list: // CFA, new & old style abstract 1993 1981 cfa_abstract_parameter_declaration 1994 | cfa_abstract_parameter_list ','cfa_abstract_parameter_declaration1995 { $$ = $1->appendList( $ 3); }1982 | cfa_abstract_parameter_list pop ',' push cfa_abstract_parameter_declaration 1983 { $$ = $1->appendList( $5 ); } 1996 1984 ; 1997 1985 … … 2142 2130 '.' no_attr_identifier // C99, field name 2143 2131 { $$ = new ExpressionNode( build_varref( $2 ) ); } 2144 | '[' assignment_expression ']'// C99, single array element2132 | '[' push assignment_expression pop ']' // C99, single array element 2145 2133 // assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple. 2146 { $$ = $2; }2147 | '[' subrange ']' // CFA, multiple array elements2148 { $$ = $2; }2149 | '[' constant_expression ELLIPSIS constant_expression ']' // GCC, multiple array elements2150 { $$ = new ExpressionNode( new RangeExpr( maybeMoveBuild< Expression >( $2 ), maybeMoveBuild< Expression >( $4 ) ) ); }2151 | '.' '[' field_list ']' // CFA, tuple field selector2152 2134 { $$ = $3; } 2135 | '[' push subrange pop ']' // CFA, multiple array elements 2136 { $$ = $3; } 2137 | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements 2138 { $$ = new ExpressionNode( new RangeExpr( maybeMoveBuild< Expression >( $3 ), maybeMoveBuild< Expression >( $5 ) ) ); } 2139 | '.' '[' push field_list pop ']' // CFA, tuple field selector 2140 { $$ = $4; } 2153 2141 ; 2154 2142 … … 2269 2257 TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}' 2270 2258 { $$ = DeclarationNode::newTrait( $2, $5, 0 ); } 2271 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' 2272 { typedefTable.enterScope(); } 2273 trait_declaration_list '}' 2259 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' 2274 2260 { $$ = DeclarationNode::newTrait( $2, $5, $10 ); } 2275 2261 ; … … 2288 2274 cfa_trait_declaring_list: // CFA 2289 2275 cfa_variable_specifier 2290 { $$ = $1; }2291 2276 | cfa_function_specifier 2292 { $$ = $1; }2293 2277 | cfa_trait_declaring_list pop ',' push identifier_or_type_name 2294 2278 { $$ = $1->appendList( $1->cloneType( $5 ) ); } … … 2349 2333 } 2350 2334 | type_qualifier_list 2351 { 2352 if ( $1->type->forall ) xxx = forall = true; // remember generic type 2353 } 2335 { if ( $1->type->forall ) xxx = forall = true; } // remember generic type 2354 2336 push '{' external_definition_list '}' // CFA, namespace 2355 2337 { … … 2364 2346 } 2365 2347 | declaration_qualifier_list 2366 { 2367 if ( $1->type->forall ) xxx = forall = true; // remember generic type 2368 } 2348 { if ( $1->type->forall ) xxx = forall = true; } // remember generic type 2369 2349 push '{' external_definition_list '}' // CFA, namespace 2370 2350 { … … 2406 2386 // declaration must still have a type_specifier. OBSOLESCENT (see 1) 2407 2387 | function_declarator compound_statement 2408 { 2409 typedefTable.leaveScope(); 2410 $$ = $1->addFunctionBody( $2 ); 2411 } 2388 { $$ = $1->addFunctionBody( $2 ); } 2412 2389 | KR_function_declarator KR_declaration_list_opt compound_statement 2413 { 2414 typedefTable.leaveScope(); 2415 $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 ); 2416 } 2390 { $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 ); } 2417 2391 ; 2418 2392 … … 2427 2401 cfa_function_declaration with_clause_opt compound_statement // CFA 2428 2402 { 2429 typedefTable.leaveScope();2430 2403 // Add the function body to the last identifier in the function definition list, i.e., foo3: 2431 2404 // [const double] foo1(), foo2( int ), foo3( double ) { return 3.0; } … … 2436 2409 { 2437 2410 rebindForall( $1, $2 ); 2438 typedefTable.leaveScope();2439 2411 $$ = $2->addFunctionBody( $4, $3 )->addType( $1 ); 2440 2412 } … … 2442 2414 { 2443 2415 rebindForall( $1, $2 ); 2444 typedefTable.leaveScope();2445 2416 $$ = $2->addFunctionBody( $4, $3 )->addType( $1 ); 2446 2417 } 2447 2418 // handles default int return type, OBSOLESCENT (see 1) 2448 2419 | type_qualifier_list function_declarator with_clause_opt compound_statement 2449 { 2450 typedefTable.leaveScope(); 2451 $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); 2452 } 2420 { $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); } 2453 2421 // handles default int return type, OBSOLESCENT (see 1) 2454 2422 | declaration_qualifier_list function_declarator with_clause_opt compound_statement 2455 { 2456 typedefTable.leaveScope(); 2457 $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); 2458 } 2423 { $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); } 2459 2424 // handles default int return type, OBSOLESCENT (see 1) 2460 2425 | declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement 2461 { 2462 typedefTable.leaveScope(); 2463 $$ = $3->addFunctionBody( $5, $4 )->addQualifiers( $2 )->addQualifiers( $1 ); 2464 } 2426 { $$ = $3->addFunctionBody( $5, $4 )->addQualifiers( $2 )->addQualifiers( $1 ); } 2465 2427 2466 2428 // Old-style K&R function definition, OBSOLESCENT (see 4) … … 2468 2430 { 2469 2431 rebindForall( $1, $2 ); 2470 typedefTable.leaveScope();2471 2432 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addType( $1 ); 2472 2433 } 2473 2434 // handles default int return type, OBSOLESCENT (see 1) 2474 2435 | type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2475 { 2476 typedefTable.leaveScope(); 2477 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); 2478 } 2436 { $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); } 2479 2437 // handles default int return type, OBSOLESCENT (see 1) 2480 2438 | declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2481 { 2482 typedefTable.leaveScope(); 2483 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); 2484 } 2439 { $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); } 2485 2440 // handles default int return type, OBSOLESCENT (see 1) 2486 2441 | declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2487 { 2488 typedefTable.leaveScope(); 2489 $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6, $5 )->addQualifiers( $2 )->addQualifiers( $1 ); 2490 } 2442 { $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6, $5 )->addQualifiers( $2 )->addQualifiers( $1 ); } 2491 2443 ; 2492 2444 … … 2685 2637 paren_identifier '(' identifier_list ')' // function_declarator handles empty parameter 2686 2638 { $$ = $1->addIdList( $3 ); } 2687 | '(' KR_function_ptr ')' '(' p arameter_type_list_opt')'2688 { $$ = $2->addParamList( $ 5); }2639 | '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')' 2640 { $$ = $2->addParamList( $6 ); } 2689 2641 | '(' KR_function_no_ptr ')' // redundant parenthesis 2690 2642 { $$ = $2; } … … 2804 2756 2805 2757 identifier_parameter_function: 2806 paren_identifier '(' p arameter_type_list_opt ')'// empty parameter list OBSOLESCENT (see 3)2807 { $$ = $1->addParamList( $ 3); }2808 | '(' identifier_parameter_ptr ')' '(' p arameter_type_list_opt')' // empty parameter list OBSOLESCENT (see 3)2809 { $$ = $2->addParamList( $ 5); }2758 paren_identifier '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2759 { $$ = $1->addParamList( $4 ); } 2760 | '(' identifier_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2761 { $$ = $2->addParamList( $6 ); } 2810 2762 | '(' identifier_parameter_function ')' // redundant parenthesis 2811 2763 { $$ = $2; } … … 2857 2809 2858 2810 type_parameter_function: 2859 typedef '(' p arameter_type_list_opt ')'// empty parameter list OBSOLESCENT (see 3)2860 { $$ = $1->addParamList( $ 3); }2861 | '(' type_parameter_ptr ')' '(' p arameter_type_list_opt')' // empty parameter list OBSOLESCENT (see 3)2862 { $$ = $2->addParamList( $ 5); }2811 typedef '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2812 { $$ = $1->addParamList( $4 ); } 2813 | '(' type_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2814 { $$ = $2->addParamList( $6 ); } 2863 2815 ; 2864 2816 … … 2907 2859 2908 2860 abstract_function: 2909 '(' p arameter_type_list_opt ')'// empty parameter list OBSOLESCENT (see 3)2910 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $ 2, nullptr ); }2911 | '(' abstract_ptr ')' '(' p arameter_type_list_opt')' // empty parameter list OBSOLESCENT (see 3)2912 { $$ = $2->addParamList( $ 5); }2861 '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2862 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $3, nullptr ); } 2863 | '(' abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2864 { $$ = $2->addParamList( $6 ); } 2913 2865 | '(' abstract_function ')' // redundant parenthesis 2914 2866 { $$ = $2; } … … 2925 2877 2926 2878 multi_array_dimension: 2927 '[' assignment_expression']'2928 { $$ = DeclarationNode::newArray( $ 2, 0, false ); }2929 | '[' '*' ']'// C992879 '[' push assignment_expression pop ']' 2880 { $$ = DeclarationNode::newArray( $3, 0, false ); } 2881 | '[' push '*' pop ']' // C99 2930 2882 { $$ = DeclarationNode::newVarArray( 0 ); } 2931 | multi_array_dimension '[' assignment_expression']'2932 { $$ = $1->addArray( DeclarationNode::newArray( $ 3, 0, false ) ); }2933 | multi_array_dimension '[' '*' ']'// C992883 | multi_array_dimension '[' push assignment_expression pop ']' 2884 { $$ = $1->addArray( DeclarationNode::newArray( $4, 0, false ) ); } 2885 | multi_array_dimension '[' push '*' pop ']' // C99 2934 2886 { $$ = $1->addArray( DeclarationNode::newVarArray( 0 ) ); } 2935 2887 ; … … 2998 2950 2999 2951 abstract_parameter_function: 3000 '(' p arameter_type_list_opt ')'// empty parameter list OBSOLESCENT (see 3)3001 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $ 2, nullptr ); }3002 | '(' abstract_parameter_ptr ')' '(' p arameter_type_list_opt')' // empty parameter list OBSOLESCENT (see 3)3003 { $$ = $2->addParamList( $ 5); }2952 '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2953 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $3, nullptr ); } 2954 | '(' abstract_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2955 { $$ = $2->addParamList( $6 ); } 3004 2956 | '(' abstract_parameter_function ')' // redundant parenthesis 3005 2957 { $$ = $2; } … … 3023 2975 { $$ = DeclarationNode::newArray( 0, 0, false ); } 3024 2976 // multi_array_dimension handles the '[' '*' ']' case 3025 | '[' type_qualifier_list '*' ']'// remaining C993026 { $$ = DeclarationNode::newVarArray( $ 2); }3027 | '[' type_qualifier_list']'3028 { $$ = DeclarationNode::newArray( 0, $ 2, false ); }2977 | '[' push type_qualifier_list '*' pop ']' // remaining C99 2978 { $$ = DeclarationNode::newVarArray( $3 ); } 2979 | '[' push type_qualifier_list pop ']' 2980 { $$ = DeclarationNode::newArray( 0, $3, false ); } 3029 2981 // multi_array_dimension handles the '[' assignment_expression ']' case 3030 | '[' type_qualifier_list assignment_expression']'3031 { $$ = DeclarationNode::newArray( $ 3, $2, false ); }3032 | '[' STATIC type_qualifier_list_opt assignment_expression']'3033 { $$ = DeclarationNode::newArray( $ 4, $3, true ); }3034 | '[' type_qualifier_list STATIC assignment_expression']'3035 { $$ = DeclarationNode::newArray( $ 4, $2, true ); }2982 | '[' push type_qualifier_list assignment_expression pop ']' 2983 { $$ = DeclarationNode::newArray( $4, $3, false ); } 2984 | '[' push STATIC type_qualifier_list_opt assignment_expression pop ']' 2985 { $$ = DeclarationNode::newArray( $5, $4, true ); } 2986 | '[' push type_qualifier_list STATIC assignment_expression pop ']' 2987 { $$ = DeclarationNode::newArray( $5, $3, true ); } 3036 2988 ; 3037 2989 … … 3077 3029 3078 3030 variable_abstract_function: 3079 '(' variable_abstract_ptr ')' '(' p arameter_type_list_opt')' // empty parameter list OBSOLESCENT (see 3)3080 { $$ = $2->addParamList( $ 5); }3031 '(' variable_abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 3032 { $$ = $2->addParamList( $6 ); } 3081 3033 | '(' variable_abstract_function ')' // redundant parenthesis 3082 3034 { $$ = $2; } … … 3141 3093 3142 3094 cfa_array_parameter_1st_dimension: 3143 '[' type_qualifier_list '*' ']'// remaining C993144 { $$ = DeclarationNode::newVarArray( $ 2); }3145 | '[' type_qualifier_list assignment_expression']'3146 { $$ = DeclarationNode::newArray( $ 3, $2, false ); }3147 | '[' declaration_qualifier_list assignment_expression']'3095 '[' push type_qualifier_list '*' pop ']' // remaining C99 3096 { $$ = DeclarationNode::newVarArray( $3 ); } 3097 | '[' push type_qualifier_list assignment_expression pop ']' 3098 { $$ = DeclarationNode::newArray( $4, $3, false ); } 3099 | '[' push declaration_qualifier_list assignment_expression pop ']' 3148 3100 // declaration_qualifier_list must be used because of shift/reduce conflict with 3149 3101 // assignment_expression, so a semantic check is necessary to preclude them as a type_qualifier cannot 3150 3102 // appear in this context. 3151 { $$ = DeclarationNode::newArray( $ 3, $2, true ); }3152 | '[' declaration_qualifier_list type_qualifier_list assignment_expression']'3153 { $$ = DeclarationNode::newArray( $ 4, $3->addQualifiers( $3 ), true ); }3103 { $$ = DeclarationNode::newArray( $4, $3, true ); } 3104 | '[' push declaration_qualifier_list type_qualifier_list assignment_expression pop ']' 3105 { $$ = DeclarationNode::newArray( $5, $4->addQualifiers( $3 ), true ); } 3154 3106 ; 3155 3107 … … 3220 3172 3221 3173 cfa_abstract_tuple: // CFA 3222 '[' cfa_abstract_parameter_list']'3223 { $$ = DeclarationNode::newTuple( $ 2); }3174 '[' push cfa_abstract_parameter_list pop ']' 3175 { $$ = DeclarationNode::newTuple( $3 ); } 3224 3176 ; 3225 3177 … … 3227 3179 // '[' ']' '(' cfa_parameter_type_list_opt ')' 3228 3180 // { $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); } 3229 cfa_abstract_tuple '(' cfa_parameter_type_list_opt')'3230 { $$ = DeclarationNode::newFunction( nullptr, $1, $ 3, nullptr ); }3231 | cfa_function_return '(' cfa_parameter_type_list_opt')'3232 { $$ = DeclarationNode::newFunction( nullptr, $1, $ 3, nullptr ); }3181 cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop ')' 3182 { $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); } 3183 | cfa_function_return '(' push cfa_parameter_type_list_opt pop ')' 3184 { $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); } 3233 3185 ; 3234 3186
Note:
See TracChangeset
for help on using the changeset viewer.