Ignore:
Timestamp:
Aug 15, 2016, 10:18:22 AM (9 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:
b1848a0
Parents:
38736854 (diff), 797347f (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

    r38736854 r6603c1d  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug 11 18:02:57 2016
    13 // Update Count     : 1861
     12// Last Modified On : Sun Aug 14 11:03:22 2016
     13// Update Count     : 1879
    1414//
    1515
     
    143143%type<en> constant_expression                   assignment_expression           assignment_expression_opt
    144144%type<en> comma_expression                              comma_expression_opt
    145 //%type<en> argument_expression_list            argument_expression                     for_control_expression          assignment_opt
    146145%type<en> argument_expression_list              argument_expression                     assignment_opt
    147146%type<fctl> for_control_expression
     
    162161%type<sn> case_value_list                               case_label                                      case_label_list
    163162%type<sn> switch_clause_list_opt                switch_clause_list                      choose_clause_list_opt          choose_clause_list
    164 %type<pn> handler_list                                  handler_clause                          finally_clause
     163%type<sn> handler_list                                  handler_clause                          finally_clause
    165164
    166165// declarations
     
    389388                        Token fn;
    390389                        fn.str = new std::string( "?{}" ); // location undefined
    391                         $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
     390                        $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) );
    392391                }
    393392        ;
     
    396395        argument_expression
    397396        | argument_expression_list ',' argument_expression
    398                 { $$ = (ExpressionNode *)( $1->set_link( $3 )); }
     397                { $$ = (ExpressionNode *)( $1->set_last( $3 )); }
    399398        ;
    400399
     
    407406field_list:                                                                                             // CFA, tuple field selector
    408407        field
    409         | field_list ',' field                                          { $$ = (ExpressionNode *)$1->set_link( $3 ); }
     408        | field_list ',' field                                          { $$ = (ExpressionNode *)$1->set_last( $3 ); }
    410409        ;
    411410
     
    627626                { $$ = new ExpressionNode( build_tuple( $3 ) ); }
    628627        | '[' push ',' tuple_expression_list pop ']'
    629                 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( $4 ) ) ); }
     628                { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
    630629        | '[' push assignment_expression ',' tuple_expression_list pop ']'
    631                 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
     630                { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
    632631        ;
    633632
     
    635634        assignment_expression_opt
    636635        | tuple_expression_list ',' assignment_expression_opt
    637                 { $$ = (ExpressionNode *)$1->set_link( $3 ); }
     636                { $$ = (ExpressionNode *)$1->set_last( $3 ); }
    638637        ;
    639638
     
    665664                        Token fn;
    666665                        fn.str = new std::string( "^?{}" ); // location undefined
    667                         $$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) );
     666                        $$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
    668667                }
    669668        ;
     
    692691        block_item
    693692        | block_item_list push block_item
    694                 { if ( $1 != 0 ) { $1->set_link( $3 ); $$ = $1; } }
     693                { if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
    695694        ;
    696695
    697696block_item:
    698697        declaration                                                                                     // CFA, new & old style declarations
    699                 { $$ = new StatementNode( $1 ); }
     698                { $$ = new StatementNode2( $1 ); }
    700699        | EXTENSION declaration                                                         // GCC
    701700                {       // mark all fields in list
    702                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     701                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    703702                                iter->set_extension( true );
    704                         $$ = new StatementNode( $2 );
     703                        $$ = new StatementNode2( $2 );
    705704                }
    706705        | function_definition
    707                 { $$ = new StatementNode( $1 ); }
     706                { $$ = new StatementNode2( $1 ); }
    708707        | statement pop
    709708        ;
     
    712711        statement
    713712        | statement_list statement
    714                 { if ( $1 != 0 ) { $1->set_link( $2 ); $$ = $1; } }
     713                { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
    715714        ;
    716715
     
    736735                        // therefore, are removed from the grammar even though C allows it. The change also applies to choose
    737736                        // statement.
    738                         $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
     737                        $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( $7 ))->set_last( sw )) ) : sw;
    739738                }
    740739        | CHOOSE '(' comma_expression ')' case_clause           // CFA
     
    743742                {
    744743                        StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
    745                         $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
     744                        $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( $7 ))->set_last( sw )) ) : sw;
    746745                }
    747746        ;
     
    758757
    759758case_value_list:                                                                                // CFA
    760         //case_value                                                                    { $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
    761759        case_value                                                                      { $$ = new StatementNode2( build_case( $1 ) ); }
    762760                // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
    763         | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); }
     761        | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_last( new StatementNode2( build_case( $3 ) ) ) ); }
    764762        ;
    765763
     
    772770case_label_list:                                                                                // CFA
    773771        case_label
    774         | case_label_list case_label                            { $$ = (StatementNode *)( $1->set_link( $2 )); }
     772        | case_label_list case_label                            { $$ = (StatementNode *)( $1->set_last( $2 )); }
    775773        ;
    776774
     
    789787                { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
    790788        | switch_clause_list case_label_list statement_list
    791                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
     789                { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
    792790        ;
    793791
     
    804802                { $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }
    805803        | choose_clause_list case_label_list fall_through
    806                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
     804                { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
    807805        | choose_clause_list case_label_list statement_list fall_through_opt
    808                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
     806                { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
    809807        ;
    810808
     
    871869exception_statement:
    872870        TRY compound_statement handler_list
    873                 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
     871                { $$ = new StatementNode2( build_try( $2, $3, 0 ) ); }
    874872        | TRY compound_statement finally_clause
    875                 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
     873                { $$ = new StatementNode2( build_try( $2, 0, $3 ) ); }
    876874        | TRY compound_statement handler_list finally_clause
    877                 {
    878                         $3->set_link( $4 );
    879                         $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 ))));
    880                 }
     875                { $$ = new StatementNode2( build_try( $2, $3, $4 ) ); }
    881876        ;
    882877
    883878handler_list:
    884                 // There must be at least one catch clause
    885879        handler_clause
    886880                // ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block.
    887881        | CATCH '(' ELLIPSIS ')' compound_statement
    888                 { $$ = StatementNode::newCatchStmt( 0, $5, true ); }
     882                { $$ = new StatementNode2( build_catch( 0, $5, true ) ); }
    889883        | handler_clause CATCH '(' ELLIPSIS ')' compound_statement
    890                 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
     884                { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true ) ) ); }
    891885        | CATCHRESUME '(' ELLIPSIS ')' compound_statement
    892                 { $$ = StatementNode::newCatchStmt( 0, $5, true ); }
     886                { $$ = new StatementNode2( build_catch( 0, $5, true ) ); }
    893887        | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
    894                 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
     888                { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true ) ) ); }
    895889        ;
    896890
    897891handler_clause:
    898892        CATCH '(' push push exception_declaration pop ')' compound_statement pop
    899                 { $$ = StatementNode::newCatchStmt( $5, $8 ); }
     893                { $$ = new StatementNode2( build_catch( $5, $8 ) ); }
    900894        | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
    901                 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
     895        { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 ) ) ); }
    902896        | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
    903                 { $$ = StatementNode::newCatchStmt( $5, $8 ); }
     897                { $$ = new StatementNode2( build_catch( $5, $8 ) ); }
    904898        | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
    905                 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
     899                { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 ) ) ); }
    906900        ;
    907901
     
    909903        FINALLY compound_statement
    910904                {
    911                         $$ = new StatementNode( StatementNode::Finally, 0, $2 );
    912                         std::cout << "Just created a finally node" << std::endl;
     905                        $$ = new StatementNode2( build_finally( $2 ) );
    913906                }
    914907        ;
     
    938931asm_statement:
    939932        ASM asm_volatile_opt '(' string_literal_list ')' ';'
    940                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, 0 ); }
     933                { $$ = new AsmStmtNode( $2, $4, 0 ); }
    941934        | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ')' ';' // remaining GCC
    942                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6 ); }
     935                { $$ = new AsmStmtNode( $2, $4, $6 ); }
    943936        | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ')' ';'
    944                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8 ); }
     937                { $$ = new AsmStmtNode( $2, $4, $6, $8 ); }
    945938        | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
    946                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); }
     939                { $$ = new AsmStmtNode( $2, $4, $6, $8, $10 ); }
    947940        | ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
    948                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
     941                { $$ = new AsmStmtNode( $2, $5, 0, $8, $10, $12 ); }
    949942        ;
    950943
     
    965958        asm_operand
    966959        | asm_operands_list ',' asm_operand
    967                 { $$ = (ExpressionNode *)$1->set_link( $3 ); }
     960                { $$ = (ExpressionNode *)$1->set_last( $3 ); }
    968961        ;
    969962
     
    981974                { $$ = new ExpressionNode( $1 ); }
    982975        | asm_clobbers_list_opt ',' string_literal_list
    983         { $$ = (ExpressionNode *)$1->set_link( new ExpressionNode( $3 ) ); }
     976        { $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
    984977        ;
    985978
     
    15041497        | EXTENSION field_declaring_list ';'                            // GCC
    15051498                {       // mark all fields in list
    1506                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     1499                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    15071500                                iter->set_extension( true );
    15081501                        $$ = $2;
     
    17501743        | initializer
    17511744        | designation initializer                                       { $$ = $2->set_designators( $1 ); }
    1752         | initializer_list ',' initializer                      { $$ = (InitializerNode *)( $1->set_link( $3 ) ); }
     1745        | initializer_list ',' initializer                      { $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
    17531746        | initializer_list ',' designation initializer
    1754                 { $$ = (InitializerNode *)( $1->set_link( $4->set_designators( $3 ) ) ); }
     1747                { $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
    17551748        ;
    17561749
     
    17741767        designator
    17751768        | designator_list designator
    1776                 { $$ = (ExpressionNode *)( $1->set_link( $2 ) ); }
     1769                { $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
    17771770        //| designator_list designator                                          { $$ = new ExpressionNode( $1, $2 ); }
    17781771        ;
     
    18801873        | assignment_expression
    18811874        | type_name_list ',' type_name
    1882                 { $$ = (ExpressionNode *)( $1->set_link( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
     1875                { $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
    18831876        | type_name_list ',' assignment_expression
    1884                 { $$ = (ExpressionNode *)( $1->set_link( $3 )); }
     1877                { $$ = (ExpressionNode *)( $1->set_last( $3 )); }
    18851878        ;
    18861879
     
    20202013        | EXTENSION external_definition
    20212014                {       // mark all fields in list
    2022                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     2015                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    20232016                                iter->set_extension( true );
    20242017                        $$ = $2;
Note: See TracChangeset for help on using the changeset viewer.