Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r8b47e50 rcda7889  
    99// Author           : Peter A. Buhr
    1010// Created On       : Sat Sep  1 20:22:55 2001
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jul 12 18:23:36 2017
    13 // Update Count     : 2426
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Fri Jun 30 15:38:00 2017
     13// Update Count     : 2415
    1414//
    1515
     
    129129%token ATTRIBUTE EXTENSION                                                              // GCC
    130130%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 WITH   // CFA
     131%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT        // CFA
    132132%token ASM                                                                                              // C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
    133133%token ALIGNAS ALIGNOF GENERIC STATICASSERT                             // C11
     
    184184// statements
    185185%type<sn> labeled_statement                             compound_statement                      expression_statement            selection_statement
    186 %type<sn> iteration_statement                   jump_statement
    187 %type<sn> with_statement                                exception_statement                     asm_statement
     186%type<sn> iteration_statement                   jump_statement                          exception_statement                     asm_statement
    188187%type<sn> fall_through_opt                              fall_through
    189188%type<sn> statement                                             statement_list
    190189%type<sn> block_item_list                               block_item
    191 %type<sn> with_clause_opt
     190%type<sn> case_clause
    192191%type<en> case_value
    193 %type<sn> case_clause                                   case_value_list                         case_label                                      case_label_list
     192%type<sn> case_value_list                               case_label                                      case_label_list
    194193%type<sn> switch_clause_list_opt                switch_clause_list                      choose_clause_list_opt          choose_clause_list
    195194%type<sn> /* handler_list */                    handler_clause                          finally_clause
     
    666665        conditional_expression
    667666        | unary_expression assignment_operator assignment_expression
    668                 { $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
     667                { $$ = new ExpressionNode( build_binary_val( $2, $1, $3 ) ); }
    669668        ;
    670669
     
    730729        | iteration_statement
    731730        | jump_statement
    732         | with_statement
    733731        | exception_statement
    734732        | asm_statement
     
    936934        | THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
    937935                { $$ = new StatementNode( build_resume_at( $2, $4 ) ); }
    938         ;
    939 
    940 with_statement:
    941         WITH identifier_list compound_statement
    942                 { $$ = (StatementNode *)0; }                                    // FIX ME
    943936        ;
    944937
     
    21832176                {
    21842177                        linkageStack.push( linkage );                           // handle nested extern "C"/"Cforall"
    2185                         linkage = LinkageSpec::linkageUpdate( linkage, $2 );
     2178                        linkage = LinkageSpec::linkageCheck( $2 );
    21862179                }
    21872180          '{' external_definition_list_opt '}'
     
    22192212        ;
    22202213
    2221 with_clause_opt:
    2222         // empty
    2223                 { $$ = (StatementNode *)0; }                                    // FIX ME
    2224         | WITH identifier_list
    2225                 { $$ = (StatementNode *)0; }                                    // FIX ME
    2226         ;
    2227 
    22282214function_definition:
    2229         cfa_function_declaration with_clause_opt compound_statement     // CFA
     2215        cfa_function_declaration compound_statement                     // CFA
    22302216                {
    22312217                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22322218                        typedefTable.leaveScope();
    2233                         $$ = $1->addFunctionBody( $3 );
    2234                 }
    2235         | declaration_specifier function_declarator with_clause_opt compound_statement
     2219                        $$ = $1->addFunctionBody( $2 );
     2220                }
     2221        | declaration_specifier function_declarator compound_statement
    22362222                {
    22372223                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22382224                        typedefTable.leaveScope();
    2239                         $$ = $2->addFunctionBody( $4 )->addType( $1 );
    2240                 }
    2241         | type_qualifier_list function_declarator with_clause_opt compound_statement
     2225                        $$ = $2->addFunctionBody( $3 )->addType( $1 );
     2226                }
     2227        | type_qualifier_list function_declarator compound_statement
    22422228                {
    22432229                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22442230                        typedefTable.leaveScope();
    2245                         $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 );
    2246                 }
    2247         | declaration_qualifier_list function_declarator with_clause_opt compound_statement
     2231                        $$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
     2232                }
     2233        | declaration_qualifier_list function_declarator compound_statement
    22482234                {
    22492235                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22502236                        typedefTable.leaveScope();
    2251                         $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 );
    2252                 }
    2253         | declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement
     2237                        $$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
     2238                }
     2239        | declaration_qualifier_list type_qualifier_list function_declarator compound_statement
    22542240                {
    22552241                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22562242                        typedefTable.leaveScope();
    2257                         $$ = $3->addFunctionBody( $5 )->addQualifiers( $2 )->addQualifiers( $1 );
     2243                        $$ = $3->addFunctionBody( $4 )->addQualifiers( $2 )->addQualifiers( $1 );
    22582244                }
    22592245
    22602246                // Old-style K&R function definition, OBSOLESCENT (see 4)
    2261         | declaration_specifier KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
     2247        | declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement
    22622248                {
    22632249                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22642250                        typedefTable.leaveScope();
    2265                         $$ = $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
     2251                        $$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addType( $1 );
     2252                }
     2253        | type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
    22682254                {
    22692255                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22702256                        typedefTable.leaveScope();
    2271                         $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
     2257                        $$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
    22722258                }
    22732259
    22742260                // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
    2275         | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
     2261        | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
    22762262                {
    22772263                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22782264                        typedefTable.leaveScope();
    2279                         $$ = $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
     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_statement
    22822268                {
    22832269                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22842270                        typedefTable.leaveScope();
    2285                         $$ = $3->addOldDeclList( $5 )->addFunctionBody( $7 )->addQualifiers( $2 )->addQualifiers( $1 );
     2271                        $$ = $3->addOldDeclList( $5 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 );
    22862272                }
    22872273        ;
     
    23462332        | TYPEGENname
    23472333        | CONST
    2348                 { $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; }
     2334                { $$ = Token{ new string( "__const__" ) }; }
    23492335        ;
    23502336
     
    24012387variable_ptr:
    24022388        ptrref_operator variable_declarator
    2403                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2389                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    24042390        | ptrref_operator type_qualifier_list variable_declarator
    2405                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2391                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    24062392        | '(' variable_ptr ')' attribute_list_opt
    24072393                { $$ = $2->addQualifiers( $4 ); }                               // redundant parenthesis
     
    24492435function_ptr:
    24502436        ptrref_operator function_declarator
    2451                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2437                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    24522438        | ptrref_operator type_qualifier_list function_declarator
    2453                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2439                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    24542440        | '(' function_ptr ')'
    24552441                { $$ = $2; }
     
    24892475KR_function_ptr:
    24902476        ptrref_operator KR_function_declarator
    2491                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2477                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    24922478        | ptrref_operator type_qualifier_list KR_function_declarator
    2493                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2479                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    24942480        | '(' KR_function_ptr ')'
    24952481                { $$ = $2; }
     
    25332519type_ptr:
    25342520        ptrref_operator variable_type_redeclarator
    2535                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2521                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    25362522        | ptrref_operator type_qualifier_list variable_type_redeclarator
    2537                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2523                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    25382524        | '(' type_ptr ')' attribute_list_opt
    25392525                { $$ = $2->addQualifiers( $4 ); }
     
    25772563identifier_parameter_ptr:
    25782564        ptrref_operator identifier_parameter_declarator
    2579                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2565                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    25802566        | ptrref_operator type_qualifier_list identifier_parameter_declarator
    2581                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2567                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    25822568        | '(' identifier_parameter_ptr ')' attribute_list_opt
    25832569                { $$ = $2->addQualifiers( $4 ); }
     
    26372623type_parameter_ptr:
    26382624        ptrref_operator type_parameter_redeclarator
    2639                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2625                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    26402626        | ptrref_operator type_qualifier_list type_parameter_redeclarator
    2641                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2627                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    26422628        | '(' type_parameter_ptr ')' attribute_list_opt
    26432629                { $$ = $2->addQualifiers( $4 ); }
     
    26802666abstract_ptr:
    26812667        ptrref_operator
    2682                 { $$ = DeclarationNode::newPointer( 0 ); }
     2668                { $$ = DeclarationNode::newPointer( 0, $1 ); }
    26832669        | ptrref_operator type_qualifier_list
    2684                 { $$ = DeclarationNode::newPointer( $2 ); }
     2670                { $$ = DeclarationNode::newPointer( $2, $1 ); }
    26852671        | ptrref_operator abstract_declarator
    2686                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2672                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    26872673        | ptrref_operator type_qualifier_list abstract_declarator
    2688                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2674                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    26892675        | '(' abstract_ptr ')' attribute_list_opt
    26902676                { $$ = $2->addQualifiers( $4 ); }
     
    27692755abstract_parameter_ptr:
    27702756        ptrref_operator
    2771                 { $$ = DeclarationNode::newPointer( nullptr ); }
     2757                { $$ = DeclarationNode::newPointer( nullptr, $1 ); }
    27722758        | ptrref_operator type_qualifier_list
    2773                 { $$ = DeclarationNode::newPointer( $2 ); }
     2759                { $$ = DeclarationNode::newPointer( $2, $1 ); }
    27742760        | ptrref_operator abstract_parameter_declarator
    2775                 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }
     2761                { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr, $1 ) ); }
    27762762        | ptrref_operator type_qualifier_list abstract_parameter_declarator
    2777                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2763                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    27782764        | '(' abstract_parameter_ptr ')' attribute_list_opt
    27792765                { $$ = $2->addQualifiers( $4 ); }
     
    28482834variable_abstract_ptr:
    28492835        ptrref_operator
    2850                 { $$ = DeclarationNode::newPointer( 0 ); }
     2836                { $$ = DeclarationNode::newPointer( 0, $1 ); }
    28512837        | ptrref_operator type_qualifier_list
    2852                 { $$ = DeclarationNode::newPointer( $2 ); }
     2838                { $$ = DeclarationNode::newPointer( $2, $1 ); }
    28532839        | ptrref_operator variable_abstract_declarator
    2854                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2840                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    28552841        | ptrref_operator type_qualifier_list variable_abstract_declarator
    2856                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2842                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    28572843        | '(' variable_abstract_ptr ')' attribute_list_opt
    28582844                { $$ = $2->addQualifiers( $4 ); }
     
    28942880                // No SUE declaration in parameter list.
    28952881        ptrref_operator type_specifier_nobody
    2896                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2882                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    28972883        | type_qualifier_list ptrref_operator type_specifier_nobody
    2898                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2884                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    28992885        | ptrref_operator cfa_abstract_function
    2900                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2886                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29012887        | type_qualifier_list ptrref_operator cfa_abstract_function
    2902                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2888                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29032889        | ptrref_operator cfa_identifier_parameter_declarator_tuple
    2904                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2890                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29052891        | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple
    2906                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2892                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29072893        ;
    29082894
     
    29822968cfa_abstract_ptr:                                                                               // CFA
    29832969        ptrref_operator type_specifier
    2984                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2970                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29852971        | type_qualifier_list ptrref_operator type_specifier
    2986                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2972                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29872973        | ptrref_operator cfa_abstract_function
    2988                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2974                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29892975        | type_qualifier_list ptrref_operator cfa_abstract_function
    2990                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2976                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29912977        | ptrref_operator cfa_abstract_declarator_tuple
    2992                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2978                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29932979        | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple
    2994                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2980                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29952981        ;
    29962982
Note: See TracChangeset for help on using the changeset viewer.