Ignore:
Timestamp:
Aug 12, 2016, 9:56:23 AM (8 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
38736854, bf1a2bf, dac593fd
Parents:
5a11e07 (diff), 8cc5cb0 (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' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r5a11e07 r1ca15c1  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug 10 23:03:05 2016
    13 // Update Count     : 1846
     12// Last Modified On : Thu Aug 11 18:02:57 2016
     13// Update Count     : 1861
    1414//
    1515
     
    665665                        Token fn;
    666666                        fn.str = new std::string( "^?{}" ); // location undefined
    667                         $$ = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
     667                        $$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) );
    668668                }
    669669        ;
     
    717717expression_statement:
    718718        comma_expression_opt ';'
    719                 { $$ = new StatementNode( StatementNode::Exp, $1, 0 ); }
     719                { $$ = new StatementNode2( build_expr( $1 ) ); }
    720720        ;
    721721
     
    758758
    759759case_value_list:                                                                                // CFA
    760         case_value                                                                      { $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
     760        //case_value                                                                    { $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
     761        case_value                                                                      { $$ = new StatementNode2( build_case( $1 ) ); }
    761762                // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
    762         | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); }
     763        | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); }
    763764        ;
    764765
    765766case_label:                                                                                             // CFA
    766767        CASE case_value_list ':'                                        { $$ = $2; }
    767         | DEFAULT ':'                                                           { $$ = new StatementNode( StatementNode::Default ); }
     768        | DEFAULT ':'                                                           { $$ = new StatementNode2( build_default() ); }
    768769                // A semantic check is required to ensure only one default clause per switch/choose statement.
    769770        ;
     
    810811fall_through_opt:                                                                               // CFA
    811812        // empty
    812                 { $$ = new StatementNode( StatementNode::Break ); }     // insert implicit break
     813                { $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); } // insert implicit break
    813814        | fall_through
    814815        ;
     
    839840jump_statement:
    840841        GOTO IDENTIFIER ';'
    841                 //{ $$ = new StatementNode( StatementNode::Goto, $2 ); }
    842842                { $$ = new StatementNode2( build_branch( *$2, BranchStmt::Goto ) ); }
    843843        | GOTO '*' comma_expression ';'                                         // GCC, computed goto
    844844                // The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
    845845                // whereas normal operator precedence yields goto (*i)+3;
    846                 { $$ = new StatementNode( StatementNode::Goto, $3 ); }
     846                { $$ = new StatementNode2( build_computedgoto( $3 ) ); }
    847847        | CONTINUE ';'
    848848                // A semantic check is required to ensure this statement appears only in the body of an iteration statement.
    849                 //{ $$ = new StatementNode( StatementNode::Continue ); }
    850849                { $$ = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
    851850        | CONTINUE IDENTIFIER ';'                                                       // CFA, multi-level continue
    852851                // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
    853852                // the target of the transfer appears only at the start of an iteration statement.
    854                 //{ $$ = new StatementNode( StatementNode::Continue, $2 ); }
    855853                { $$ = new StatementNode2( build_branch( *$2, BranchStmt::Continue ) ); delete $2; }
    856854        | BREAK ';'
    857855                // A semantic check is required to ensure this statement appears only in the body of an iteration statement.
    858                 //{ $$ = new StatementNode( StatementNode::Break ); }
    859856                { $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
    860857        | BREAK IDENTIFIER ';'                                                          // CFA, multi-level exit
    861858                // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
    862859                // the target of the transfer appears only at the start of an iteration statement.
    863                 //{ $$ = new StatementNode( StatementNode::Break, $2 ); }
    864860                { $$ = new StatementNode2( build_branch( *$2, BranchStmt::Break ) ); delete $2; }
    865861        | RETURN comma_expression_opt ';'
    866                 { $$ = new StatementNode( StatementNode::Return, $2, 0 ); }
    867         | THROW assignment_expression_opt ';'
    868                 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
    869 //      | THROW ';'
    870 //              { $$ = new StatementNode( StatementNode::Throw ); }
    871         | THROWRESUME assignment_expression_opt ';'
    872                 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
    873         | THROWRESUME assignment_expression_opt AT assignment_expression ';'
    874                 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
    875 //      | THROWRESUME ';'
    876 //              { $$ = new StatementNode( StatementNode::Throw ); }
     862                { $$ = new StatementNode2( build_return( $2 ) ); }
     863        | THROW assignment_expression_opt ';'                           // handles rethrow
     864                { $$ = new StatementNode2( build_throw( $2 ) ); }
     865        | THROWRESUME assignment_expression_opt ';'                     // handles reresume
     866                { $$ = new StatementNode2( build_throw( $2 ) ); }
     867        | THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
     868                { $$ = new StatementNode2( build_throw( $2 ) ); }
    877869        ;
    878870
Note: See TracChangeset for help on using the changeset viewer.