Ignore:
Timestamp:
Aug 22, 2017, 7:31:52 PM (7 years ago)
Author:
Rob Schluntz <rschlunt@…>
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, resolv-new, with_gc
Children:
9aaac6e9
Parents:
fc56cdbf (diff), b3d413b (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.
Message:

Merge branch 'master' into references

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    rfc56cdbf r8135d4c  
    99// Author           : Peter A. Buhr
    1010// Created On       : Sat Sep  1 20:22:55 2001
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Wed Aug  4 13:33:00 2017
    13 // Update Count     : 2475
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Sun Aug 20 09:21:54 2017
     13// Update Count     : 2573
    1414//
    1515
     
    9898        StatementNode * sn;
    9999        ConstantExpr * constant;
     100        IfCtl * ifctl;
    100101        ForCtl * fctl;
    101102        LabelNode * label;
     
    130131%token ATTRIBUTE EXTENSION                                                              // GCC
    131132%token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
    132 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH   // CFA
     133%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA
    133134%token ASM                                                                                              // C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
    134135%token ALIGNAS ALIGNOF GENERIC STATICASSERT                             // C11
     
    175176%type<en> comma_expression                              comma_expression_opt
    176177%type<en> argument_expression_list              argument_expression                     default_initialize_opt
     178%type<ifctl> if_control_expression
    177179%type<fctl> for_control_expression
    178180%type<en> subrange
     
    794796
    795797selection_statement:
    796         IF '(' comma_expression ')' statement                           %prec THEN
     798        IF '(' push if_control_expression ')' statement                         %prec THEN
    797799                // explicitly deal with the shift/reduce conflict on if/else
    798                 { $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
    799         | IF '(' comma_expression ')' statement ELSE statement
    800                 { $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
    801         | SWITCH '(' comma_expression ')' case_clause           // CFA
     800                { $$ = new StatementNode( build_if( $4, $6, nullptr ) ); }
     801        | IF '(' push if_control_expression ')' statement ELSE statement
     802                { $$ = new StatementNode( build_if( $4, $6, $8 ) ); }
     803        | SWITCH '(' comma_expression ')' case_clause
    802804                { $$ = new StatementNode( build_switch( $3, $5 ) ); }
    803805        | SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
     
    819821                }
    820822        ;
     823
     824if_control_expression:
     825        comma_expression pop
     826                { $$ = new IfCtl( nullptr, $1 ); }
     827        | c_declaration pop                                                                     // no semi-colon
     828                { $$ = new IfCtl( $1, nullptr ); }
     829        | cfa_declaration pop                                                           // no semi-colon
     830                { $$ = new IfCtl( $1, nullptr ); }
     831        | declaration comma_expression                                          // semi-colon separated
     832                { $$ = new IfCtl( $1, $2 ); }
     833        ;
    821834
    822835// CASE and DEFAULT clauses are only allowed in the SWITCH statement, precluding Duff's device. In addition, a case
     
    10911104
    10921105KR_declaration_list_opt:                                                                // used to declare parameter types in K&R style functions
    1093         pop
     1106        // empty
    10941107                { $$ = nullptr; }
    10951108        | KR_declaration_list
     
    10971110
    10981111KR_declaration_list:
    1099         c_declaration
    1100         | KR_declaration_list push c_declaration
     1112        push c_declaration pop ';'
     1113                { $$ = $2; }
     1114        | KR_declaration_list push c_declaration pop ';'
    11011115                { $$ = $1->appendList( $3 ); }
    11021116        ;
     
    11171131        ;
    11181132
    1119 declaration:                                                                                    // CFA, new & old style declarations
    1120         cfa_declaration
    1121         | c_declaration
     1133declaration:                                                                                    // old & new style declarations
     1134        c_declaration pop ';'
     1135        | cfa_declaration pop ';'                                                       // CFA
    11221136        ;
    11231137
     
    11341148
    11351149cfa_declaration:                                                                                // CFA
    1136         cfa_variable_declaration pop ';'
    1137         | cfa_typedef_declaration pop ';'
    1138         | cfa_function_declaration pop ';'
    1139         | type_declaring_list pop ';'
    1140         | trait_specifier pop ';'
     1150        cfa_variable_declaration
     1151        | cfa_typedef_declaration
     1152        | cfa_function_declaration
     1153        | type_declaring_list
     1154        | trait_specifier
    11411155        ;
    11421156
     
    13381352
    13391353c_declaration:
    1340         declaration_specifier declaring_list pop ';'
     1354        declaration_specifier declaring_list
    13411355                {
    13421356                        $$ = distAttr( $1, $2 );
    13431357                }
    1344         | typedef_declaration pop ';'
    1345         | typedef_expression pop ';'                                            // GCC, naming expression type
    1346         | sue_declaration_specifier pop ';'
     1358        | typedef_declaration
     1359        | typedef_expression                                                            // GCC, naming expression type
     1360        | sue_declaration_specifier
    13471361        ;
    13481362
     
    22152229                        $$ = $1->addFunctionBody( $2 );
    22162230                }
    2217         | KR_function_declarator push KR_declaration_list_opt compound_statement
     2231        | KR_function_declarator KR_declaration_list_opt compound_statement
    22182232                {
    22192233                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22202234                        typedefTable.leaveScope();
    2221                         $$ = $1->addOldDeclList( $3 )->addFunctionBody( $4 );
     2235                        $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 );
    22222236                }
    22232237        ;
     
    22632277
    22642278                // Old-style K&R function definition, OBSOLESCENT (see 4)
    2265         | declaration_specifier KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
     2279        | declaration_specifier KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    22662280                {
    22672281                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22682282                        typedefTable.leaveScope();
    2269                         $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addType( $1 );
    2270                 }
    2271         | type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
     2283                        $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addType( $1 );
     2284                }
     2285        | type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    22722286                {
    22732287                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22742288                        typedefTable.leaveScope();
    2275                         $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
     2289                        $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 );
    22762290                }
    22772291
    22782292                // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
    2279         | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
     2293        | declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    22802294                {
    22812295                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22822296                        typedefTable.leaveScope();
    2283                         $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
    2284                 }
    2285         | declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
     2297                        $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 );
     2298                }
     2299        | declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
    22862300                {
    22872301                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22882302                        typedefTable.leaveScope();
    2289                         $$ = $3->addOldDeclList( $5 )->addFunctionBody( $7 )->addQualifiers( $2 )->addQualifiers( $1 );
     2303                        $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 );
    22902304                }
    22912305        ;
Note: See TracChangeset for help on using the changeset viewer.