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