Changes in src/Parser/parser.yy [cda7889:8b47e50]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (20 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rcda7889 r8b47e50 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 // Last Modified By : Andrew Beach12 // Last Modified On : Fri Jun 30 15:38:00201713 // Update Count : 24 1511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jul 12 18:23:36 2017 13 // Update Count : 2426 14 14 // 15 15 … … 129 129 %token ATTRIBUTE EXTENSION // GCC 130 130 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN 131 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT // CFA131 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA 132 132 %token ASM // C99, extension ISO/IEC 9899:1999 Section J.5.10(1) 133 133 %token ALIGNAS ALIGNOF GENERIC STATICASSERT // C11 … … 184 184 // statements 185 185 %type<sn> labeled_statement compound_statement expression_statement selection_statement 186 %type<sn> iteration_statement jump_statement exception_statement asm_statement 186 %type<sn> iteration_statement jump_statement 187 %type<sn> with_statement exception_statement asm_statement 187 188 %type<sn> fall_through_opt fall_through 188 189 %type<sn> statement statement_list 189 190 %type<sn> block_item_list block_item 190 %type<sn> case_clause191 %type<sn> with_clause_opt 191 192 %type<en> case_value 192 %type<sn> case_ value_list case_label case_label_list193 %type<sn> case_clause case_value_list case_label case_label_list 193 194 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 194 195 %type<sn> /* handler_list */ handler_clause finally_clause … … 665 666 conditional_expression 666 667 | unary_expression assignment_operator assignment_expression 667 { $$ = new ExpressionNode( build_binary_ val( $2, $1, $3 ) ); }668 { $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); } 668 669 ; 669 670 … … 729 730 | iteration_statement 730 731 | jump_statement 732 | with_statement 731 733 | exception_statement 732 734 | asm_statement … … 934 936 | THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume 935 937 { $$ = new StatementNode( build_resume_at( $2, $4 ) ); } 938 ; 939 940 with_statement: 941 WITH identifier_list compound_statement 942 { $$ = (StatementNode *)0; } // FIX ME 936 943 ; 937 944 … … 2176 2183 { 2177 2184 linkageStack.push( linkage ); // handle nested extern "C"/"Cforall" 2178 linkage = LinkageSpec::linkage Check($2 );2185 linkage = LinkageSpec::linkageUpdate( linkage, $2 ); 2179 2186 } 2180 2187 '{' external_definition_list_opt '}' … … 2212 2219 ; 2213 2220 2221 with_clause_opt: 2222 // empty 2223 { $$ = (StatementNode *)0; } // FIX ME 2224 | WITH identifier_list 2225 { $$ = (StatementNode *)0; } // FIX ME 2226 ; 2227 2214 2228 function_definition: 2215 cfa_function_declaration compound_statement// CFA2229 cfa_function_declaration with_clause_opt compound_statement // CFA 2216 2230 { 2217 2231 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2218 2232 typedefTable.leaveScope(); 2219 $$ = $1->addFunctionBody( $ 2);2220 } 2221 | declaration_specifier function_declarator compound_statement2233 $$ = $1->addFunctionBody( $3 ); 2234 } 2235 | declaration_specifier function_declarator with_clause_opt compound_statement 2222 2236 { 2223 2237 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2224 2238 typedefTable.leaveScope(); 2225 $$ = $2->addFunctionBody( $ 3)->addType( $1 );2226 } 2227 | type_qualifier_list function_declarator compound_statement2239 $$ = $2->addFunctionBody( $4 )->addType( $1 ); 2240 } 2241 | type_qualifier_list function_declarator with_clause_opt compound_statement 2228 2242 { 2229 2243 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2230 2244 typedefTable.leaveScope(); 2231 $$ = $2->addFunctionBody( $ 3)->addQualifiers( $1 );2232 } 2233 | declaration_qualifier_list function_declarator compound_statement2245 $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 ); 2246 } 2247 | declaration_qualifier_list function_declarator with_clause_opt compound_statement 2234 2248 { 2235 2249 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2236 2250 typedefTable.leaveScope(); 2237 $$ = $2->addFunctionBody( $ 3)->addQualifiers( $1 );2238 } 2239 | declaration_qualifier_list type_qualifier_list function_declarator compound_statement2251 $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 ); 2252 } 2253 | declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement 2240 2254 { 2241 2255 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2242 2256 typedefTable.leaveScope(); 2243 $$ = $3->addFunctionBody( $ 4)->addQualifiers( $2 )->addQualifiers( $1 );2257 $$ = $3->addFunctionBody( $5 )->addQualifiers( $2 )->addQualifiers( $1 ); 2244 2258 } 2245 2259 2246 2260 // Old-style K&R function definition, OBSOLESCENT (see 4) 2247 | declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement2261 | declaration_specifier KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2248 2262 { 2249 2263 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2250 2264 typedefTable.leaveScope(); 2251 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $ 5)->addType( $1 );2252 } 2253 | type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement2265 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addType( $1 ); 2266 } 2267 | type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2254 2268 { 2255 2269 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2256 2270 typedefTable.leaveScope(); 2257 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $ 5)->addQualifiers( $1 );2271 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 ); 2258 2272 } 2259 2273 2260 2274 // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4) 2261 | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement2275 | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2262 2276 { 2263 2277 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2264 2278 typedefTable.leaveScope(); 2265 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $ 5)->addQualifiers( $1 );2266 } 2267 | declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement2279 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 ); 2280 } 2281 | declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2268 2282 { 2269 2283 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2270 2284 typedefTable.leaveScope(); 2271 $$ = $3->addOldDeclList( $5 )->addFunctionBody( $ 6)->addQualifiers( $2 )->addQualifiers( $1 );2285 $$ = $3->addOldDeclList( $5 )->addFunctionBody( $7 )->addQualifiers( $2 )->addQualifiers( $1 ); 2272 2286 } 2273 2287 ; … … 2332 2346 | TYPEGENname 2333 2347 | CONST 2334 { $$ = Token{ new string( "__const__" ) }; }2348 { $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; } 2335 2349 ; 2336 2350 … … 2387 2401 variable_ptr: 2388 2402 ptrref_operator variable_declarator 2389 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2403 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2390 2404 | ptrref_operator type_qualifier_list variable_declarator 2391 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2405 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2392 2406 | '(' variable_ptr ')' attribute_list_opt 2393 2407 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis … … 2435 2449 function_ptr: 2436 2450 ptrref_operator function_declarator 2437 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2451 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2438 2452 | ptrref_operator type_qualifier_list function_declarator 2439 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2453 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2440 2454 | '(' function_ptr ')' 2441 2455 { $$ = $2; } … … 2475 2489 KR_function_ptr: 2476 2490 ptrref_operator KR_function_declarator 2477 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2491 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2478 2492 | ptrref_operator type_qualifier_list KR_function_declarator 2479 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2493 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2480 2494 | '(' KR_function_ptr ')' 2481 2495 { $$ = $2; } … … 2519 2533 type_ptr: 2520 2534 ptrref_operator variable_type_redeclarator 2521 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2535 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2522 2536 | ptrref_operator type_qualifier_list variable_type_redeclarator 2523 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2537 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2524 2538 | '(' type_ptr ')' attribute_list_opt 2525 2539 { $$ = $2->addQualifiers( $4 ); } … … 2563 2577 identifier_parameter_ptr: 2564 2578 ptrref_operator identifier_parameter_declarator 2565 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2579 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2566 2580 | ptrref_operator type_qualifier_list identifier_parameter_declarator 2567 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2581 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2568 2582 | '(' identifier_parameter_ptr ')' attribute_list_opt 2569 2583 { $$ = $2->addQualifiers( $4 ); } … … 2623 2637 type_parameter_ptr: 2624 2638 ptrref_operator type_parameter_redeclarator 2625 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2639 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2626 2640 | ptrref_operator type_qualifier_list type_parameter_redeclarator 2627 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2641 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2628 2642 | '(' type_parameter_ptr ')' attribute_list_opt 2629 2643 { $$ = $2->addQualifiers( $4 ); } … … 2666 2680 abstract_ptr: 2667 2681 ptrref_operator 2668 { $$ = DeclarationNode::newPointer( 0 , $1); }2682 { $$ = DeclarationNode::newPointer( 0 ); } 2669 2683 | ptrref_operator type_qualifier_list 2670 { $$ = DeclarationNode::newPointer( $2 , $1); }2684 { $$ = DeclarationNode::newPointer( $2 ); } 2671 2685 | ptrref_operator abstract_declarator 2672 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2686 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2673 2687 | ptrref_operator type_qualifier_list abstract_declarator 2674 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2688 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2675 2689 | '(' abstract_ptr ')' attribute_list_opt 2676 2690 { $$ = $2->addQualifiers( $4 ); } … … 2755 2769 abstract_parameter_ptr: 2756 2770 ptrref_operator 2757 { $$ = DeclarationNode::newPointer( nullptr , $1); }2771 { $$ = DeclarationNode::newPointer( nullptr ); } 2758 2772 | ptrref_operator type_qualifier_list 2759 { $$ = DeclarationNode::newPointer( $2 , $1); }2773 { $$ = DeclarationNode::newPointer( $2 ); } 2760 2774 | ptrref_operator abstract_parameter_declarator 2761 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr , $1) ); }2775 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); } 2762 2776 | ptrref_operator type_qualifier_list abstract_parameter_declarator 2763 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2777 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2764 2778 | '(' abstract_parameter_ptr ')' attribute_list_opt 2765 2779 { $$ = $2->addQualifiers( $4 ); } … … 2834 2848 variable_abstract_ptr: 2835 2849 ptrref_operator 2836 { $$ = DeclarationNode::newPointer( 0 , $1); }2850 { $$ = DeclarationNode::newPointer( 0 ); } 2837 2851 | ptrref_operator type_qualifier_list 2838 { $$ = DeclarationNode::newPointer( $2 , $1); }2852 { $$ = DeclarationNode::newPointer( $2 ); } 2839 2853 | ptrref_operator variable_abstract_declarator 2840 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2854 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2841 2855 | ptrref_operator type_qualifier_list variable_abstract_declarator 2842 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2856 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2843 2857 | '(' variable_abstract_ptr ')' attribute_list_opt 2844 2858 { $$ = $2->addQualifiers( $4 ); } … … 2880 2894 // No SUE declaration in parameter list. 2881 2895 ptrref_operator type_specifier_nobody 2882 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2896 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2883 2897 | type_qualifier_list ptrref_operator type_specifier_nobody 2884 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2898 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2885 2899 | ptrref_operator cfa_abstract_function 2886 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2900 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2887 2901 | type_qualifier_list ptrref_operator cfa_abstract_function 2888 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2902 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2889 2903 | ptrref_operator cfa_identifier_parameter_declarator_tuple 2890 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2904 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2891 2905 | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple 2892 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2906 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2893 2907 ; 2894 2908 … … 2968 2982 cfa_abstract_ptr: // CFA 2969 2983 ptrref_operator type_specifier 2970 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2984 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2971 2985 | type_qualifier_list ptrref_operator type_specifier 2972 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2986 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2973 2987 | ptrref_operator cfa_abstract_function 2974 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2988 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2975 2989 | type_qualifier_list ptrref_operator cfa_abstract_function 2976 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2990 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2977 2991 | ptrref_operator cfa_abstract_declarator_tuple 2978 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2992 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2979 2993 | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple 2980 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2994 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2981 2995 ; 2982 2996
Note:
See TracChangeset
for help on using the changeset viewer.