Changes in src/Parser/parser.yy [777bfcf:8cc5cb0]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (27 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r777bfcf r8cc5cb0 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 14 11:03:22201613 // Update Count : 18 7912 // Last Modified On : Thu Aug 11 18:02:57 2016 13 // Update Count : 1861 14 14 // 15 15 … … 143 143 %type<en> constant_expression assignment_expression assignment_expression_opt 144 144 %type<en> comma_expression comma_expression_opt 145 //%type<en> argument_expression_list argument_expression for_control_expression assignment_opt 145 146 %type<en> argument_expression_list argument_expression assignment_opt 146 147 %type<fctl> for_control_expression … … 161 162 %type<sn> case_value_list case_label case_label_list 162 163 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 163 %type< sn> handler_list handler_clause finally_clause164 %type<pn> handler_list handler_clause finally_clause 164 165 165 166 // declarations … … 388 389 Token fn; 389 390 fn.str = new std::string( "?{}" ); // location undefined 390 $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_l ast( $3 ) ) );391 $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_link( $3 ) ) ); 391 392 } 392 393 ; … … 395 396 argument_expression 396 397 | argument_expression_list ',' argument_expression 397 { $$ = (ExpressionNode *)( $1->set_l ast( $3 )); }398 { $$ = (ExpressionNode *)( $1->set_link( $3 )); } 398 399 ; 399 400 … … 406 407 field_list: // CFA, tuple field selector 407 408 field 408 | field_list ',' field { $$ = (ExpressionNode *)$1->set_l ast( $3 ); }409 | field_list ',' field { $$ = (ExpressionNode *)$1->set_link( $3 ); } 409 410 ; 410 411 … … 626 627 { $$ = new ExpressionNode( build_tuple( $3 ) ); } 627 628 | '[' push ',' tuple_expression_list pop ']' 628 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_l ast( $4 ) ) ); }629 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( $4 ) ) ); } 629 630 | '[' push assignment_expression ',' tuple_expression_list pop ']' 630 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_l ast( $5 ) ) ); }631 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); } 631 632 ; 632 633 … … 634 635 assignment_expression_opt 635 636 | tuple_expression_list ',' assignment_expression_opt 636 { $$ = (ExpressionNode *)$1->set_l ast( $3 ); }637 { $$ = (ExpressionNode *)$1->set_link( $3 ); } 637 638 ; 638 639 … … 664 665 Token fn; 665 666 fn.str = new std::string( "^?{}" ); // location undefined 666 $$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_l ast( $4 ) ) ) ) );667 $$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) ); 667 668 } 668 669 ; … … 691 692 block_item 692 693 | block_item_list push block_item 693 { if ( $1 != 0 ) { $1->set_l ast( $3 ); $$ = $1; } }694 { if ( $1 != 0 ) { $1->set_link( $3 ); $$ = $1; } } 694 695 ; 695 696 696 697 block_item: 697 698 declaration // CFA, new & old style declarations 698 { $$ = new StatementNode 2( $1 ); }699 { $$ = new StatementNode( $1 ); } 699 700 | EXTENSION declaration // GCC 700 701 { // mark all fields in list 701 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ next() )702 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() ) 702 703 iter->set_extension( true ); 703 $$ = new StatementNode 2( $2 );704 $$ = new StatementNode( $2 ); 704 705 } 705 706 | function_definition 706 { $$ = new StatementNode 2( $1 ); }707 { $$ = new StatementNode( $1 ); } 707 708 | statement pop 708 709 ; … … 711 712 statement 712 713 | statement_list statement 713 { if ( $1 != 0 ) { $1->set_l ast( $2 ); $$ = $1; } }714 { if ( $1 != 0 ) { $1->set_link( $2 ); $$ = $1; } } 714 715 ; 715 716 … … 735 736 // therefore, are removed from the grammar even though C allows it. The change also applies to choose 736 737 // statement. 737 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode 2( $7 ))->set_last( sw )) ) : sw;738 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw; 738 739 } 739 740 | CHOOSE '(' comma_expression ')' case_clause // CFA … … 742 743 { 743 744 StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) ); 744 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode 2( $7 ))->set_last( sw )) ) : sw;745 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw; 745 746 } 746 747 ; … … 757 758 758 759 case_value_list: // CFA 760 //case_value { $$ = new StatementNode( StatementNode::Case, $1, 0 ); } 759 761 case_value { $$ = new StatementNode2( build_case( $1 ) ); } 760 762 // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5" 761 | case_value_list ',' case_value { $$ = (StatementNode *)($1->set_l ast( new StatementNode2( build_case( $3 ) ) ) ); }763 | case_value_list ',' case_value { $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); } 762 764 ; 763 765 … … 770 772 case_label_list: // CFA 771 773 case_label 772 | case_label_list case_label { $$ = (StatementNode *)( $1->set_l ast( $2 )); }774 | case_label_list case_label { $$ = (StatementNode *)( $1->set_link( $2 )); } 773 775 ; 774 776 … … 787 789 { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); } 788 790 | switch_clause_list case_label_list statement_list 789 { $$ = (StatementNode *)( $1->set_l ast( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }791 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); } 790 792 ; 791 793 … … 802 804 { $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); } 803 805 | choose_clause_list case_label_list fall_through 804 { $$ = (StatementNode *)( $1->set_l ast( $2->append_last_case( $3 ))); }806 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); } 805 807 | choose_clause_list case_label_list statement_list fall_through_opt 806 { $$ = (StatementNode *)( $1->set_l ast( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }808 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); } 807 809 ; 808 810 … … 869 871 exception_statement: 870 872 TRY compound_statement handler_list 871 { $$ = new StatementNode 2( build_try( $2, $3, 0 )); }873 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); } 872 874 | TRY compound_statement finally_clause 873 { $$ = new StatementNode 2( build_try( $2, 0, $3 )); }875 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); } 874 876 | TRY compound_statement handler_list finally_clause 875 { $$ = new StatementNode2( build_try( $2, $3, $4 ) ); } 877 { 878 $3->set_link( $4 ); 879 $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); 880 } 876 881 ; 877 882 878 883 handler_list: 884 // There must be at least one catch clause 879 885 handler_clause 880 886 // ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block. 881 887 | CATCH '(' ELLIPSIS ')' compound_statement 882 { $$ = new StatementNode2( build_catch( 0, $5, true )); }888 { $$ = StatementNode::newCatchStmt( 0, $5, true ); } 883 889 | handler_clause CATCH '(' ELLIPSIS ')' compound_statement 884 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true )) ); }890 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); } 885 891 | CATCHRESUME '(' ELLIPSIS ')' compound_statement 886 { $$ = new StatementNode2( build_catch( 0, $5, true )); }892 { $$ = StatementNode::newCatchStmt( 0, $5, true ); } 887 893 | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement 888 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true )) ); }894 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); } 889 895 ; 890 896 891 897 handler_clause: 892 898 CATCH '(' push push exception_declaration pop ')' compound_statement pop 893 { $$ = new StatementNode2( build_catch( $5, $8 )); }899 { $$ = StatementNode::newCatchStmt( $5, $8 ); } 894 900 | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop 895 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 )) ); }901 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); } 896 902 | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 897 { $$ = new StatementNode2( build_catch( $5, $8 )); }903 { $$ = StatementNode::newCatchStmt( $5, $8 ); } 898 904 | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 899 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 )) ); }905 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); } 900 906 ; 901 907 … … 903 909 FINALLY compound_statement 904 910 { 905 $$ = new StatementNode2( build_finally( $2 ) ); 911 $$ = new StatementNode( StatementNode::Finally, 0, $2 ); 912 std::cout << "Just created a finally node" << std::endl; 906 913 } 907 914 ; … … 931 938 asm_statement: 932 939 ASM asm_volatile_opt '(' string_literal_list ')' ';' 933 { $$ = new AsmStmtNode( $2, $4, 0 ); }940 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, 0 ); } 934 941 | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ')' ';' // remaining GCC 935 { $$ = new AsmStmtNode( $2, $4, $6 ); }942 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6 ); } 936 943 | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ')' ';' 937 { $$ = new AsmStmtNode( $2, $4, $6, $8 ); }944 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8 ); } 938 945 | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';' 939 { $$ = new AsmStmtNode( $2, $4, $6, $8, $10 ); }946 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); } 940 947 | ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';' 941 { $$ = new AsmStmtNode( $2, $5, 0, $8, $10, $12 ); }948 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); } 942 949 ; 943 950 … … 958 965 asm_operand 959 966 | asm_operands_list ',' asm_operand 960 { $$ = (ExpressionNode *)$1->set_l ast( $3 ); }967 { $$ = (ExpressionNode *)$1->set_link( $3 ); } 961 968 ; 962 969 … … 974 981 { $$ = new ExpressionNode( $1 ); } 975 982 | asm_clobbers_list_opt ',' string_literal_list 976 { $$ = (ExpressionNode *)$1->set_l ast( new ExpressionNode( $3 ) ); }983 { $$ = (ExpressionNode *)$1->set_link( new ExpressionNode( $3 ) ); } 977 984 ; 978 985 … … 1497 1504 | EXTENSION field_declaring_list ';' // GCC 1498 1505 { // mark all fields in list 1499 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ next() )1506 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() ) 1500 1507 iter->set_extension( true ); 1501 1508 $$ = $2; … … 1743 1750 | initializer 1744 1751 | designation initializer { $$ = $2->set_designators( $1 ); } 1745 | initializer_list ',' initializer { $$ = (InitializerNode *)( $1->set_l ast( $3 ) ); }1752 | initializer_list ',' initializer { $$ = (InitializerNode *)( $1->set_link( $3 ) ); } 1746 1753 | initializer_list ',' designation initializer 1747 { $$ = (InitializerNode *)( $1->set_l ast( $4->set_designators( $3 ) ) ); }1754 { $$ = (InitializerNode *)( $1->set_link( $4->set_designators( $3 ) ) ); } 1748 1755 ; 1749 1756 … … 1767 1774 designator 1768 1775 | designator_list designator 1769 { $$ = (ExpressionNode *)( $1->set_l ast( $2 ) ); }1776 { $$ = (ExpressionNode *)( $1->set_link( $2 ) ); } 1770 1777 //| designator_list designator { $$ = new ExpressionNode( $1, $2 ); } 1771 1778 ; … … 1873 1880 | assignment_expression 1874 1881 | type_name_list ',' type_name 1875 { $$ = (ExpressionNode *)( $1->set_l ast( new ExpressionNode( build_typevalue( $3 ) ) ) ); }1882 { $$ = (ExpressionNode *)( $1->set_link( new ExpressionNode( build_typevalue( $3 ) ) ) ); } 1876 1883 | type_name_list ',' assignment_expression 1877 { $$ = (ExpressionNode *)( $1->set_l ast( $3 )); }1884 { $$ = (ExpressionNode *)( $1->set_link( $3 )); } 1878 1885 ; 1879 1886 … … 2013 2020 | EXTENSION external_definition 2014 2021 { // mark all fields in list 2015 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ next() )2022 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() ) 2016 2023 iter->set_extension( true ); 2017 2024 $$ = $2;
Note:
See TracChangeset
for help on using the changeset viewer.