Changeset 1d4580a for src/Parser/parser.yy
- Timestamp:
- Aug 14, 2016, 8:36:29 AM (8 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:
- 777bfcf
- Parents:
- 46b4259
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r46b4259 r1d4580a 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 : Sat Aug 13 18:59:02 2016 13 // Update Count : 1877 14 14 // 15 15 … … 162 162 %type<sn> case_value_list case_label case_label_list 163 163 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 164 %type< pn> handler_list handler_clause finally_clause164 %type<sn> handler_list handler_clause finally_clause 165 165 166 166 // declarations … … 389 389 Token fn; 390 390 fn.str = new std::string( "?{}" ); // location undefined 391 $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_l ink( $3 ) ) );391 $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ); 392 392 } 393 393 ; … … 396 396 argument_expression 397 397 | argument_expression_list ',' argument_expression 398 { $$ = (ExpressionNode *)( $1->set_l ink( $3 )); }398 { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 399 399 ; 400 400 … … 407 407 field_list: // CFA, tuple field selector 408 408 field 409 | field_list ',' field { $$ = (ExpressionNode *)$1->set_l ink( $3 ); }409 | field_list ',' field { $$ = (ExpressionNode *)$1->set_last( $3 ); } 410 410 ; 411 411 … … 627 627 { $$ = new ExpressionNode( build_tuple( $3 ) ); } 628 628 | '[' push ',' tuple_expression_list pop ']' 629 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_l ink( $4 ) ) ); }629 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); } 630 630 | '[' push assignment_expression ',' tuple_expression_list pop ']' 631 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_l ink( $5 ) ) ); }631 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); } 632 632 ; 633 633 … … 635 635 assignment_expression_opt 636 636 | tuple_expression_list ',' assignment_expression_opt 637 { $$ = (ExpressionNode *)$1->set_l ink( $3 ); }637 { $$ = (ExpressionNode *)$1->set_last( $3 ); } 638 638 ; 639 639 … … 665 665 Token fn; 666 666 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 ) ) ) ) );667 $$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) ); 668 668 } 669 669 ; … … 692 692 block_item 693 693 | block_item_list push block_item 694 { if ( $1 != 0 ) { $1->set_l ink( $3 ); $$ = $1; } }694 { if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } } 695 695 ; 696 696 697 697 block_item: 698 698 declaration // CFA, new & old style declarations 699 { $$ = new StatementNode ( $1 ); }699 { $$ = new StatementNode2( $1 ); } 700 700 | EXTENSION declaration // GCC 701 701 { // mark all fields in list 702 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ link() )702 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 703 703 iter->set_extension( true ); 704 $$ = new StatementNode ( $2 );704 $$ = new StatementNode2( $2 ); 705 705 } 706 706 | function_definition 707 { $$ = new StatementNode ( $1 ); }707 { $$ = new StatementNode2( $1 ); } 708 708 | statement pop 709 709 ; … … 712 712 statement 713 713 | statement_list statement 714 { if ( $1 != 0 ) { $1->set_l ink( $2 ); $$ = $1; } }714 { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } } 715 715 ; 716 716 … … 736 736 // therefore, are removed from the grammar even though C allows it. The change also applies to choose 737 737 // statement. 738 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode ( $7 ))->set_link( sw )) ) : sw;738 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( $7 ))->set_last( sw )) ) : sw; 739 739 } 740 740 | CHOOSE '(' comma_expression ')' case_clause // CFA … … 743 743 { 744 744 StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) ); 745 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode ( $7 ))->set_link( sw )) ) : sw;745 $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( $7 ))->set_last( sw )) ) : sw; 746 746 } 747 747 ; … … 758 758 759 759 case_value_list: // CFA 760 //case_value { $$ = new StatementNode( StatementNode::Case, $1, 0 ); }761 760 case_value { $$ = new StatementNode2( build_case( $1 ) ); } 762 761 // 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 ) ) ) ); }762 | case_value_list ',' case_value { $$ = (StatementNode *)($1->set_last( new StatementNode2( build_case( $3 ) ) ) ); } 764 763 ; 765 764 … … 772 771 case_label_list: // CFA 773 772 case_label 774 | case_label_list case_label { $$ = (StatementNode *)( $1->set_l ink( $2 )); }773 | case_label_list case_label { $$ = (StatementNode *)( $1->set_last( $2 )); } 775 774 ; 776 775 … … 789 788 { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); } 790 789 | switch_clause_list case_label_list statement_list 791 { $$ = (StatementNode *)( $1->set_l ink( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }790 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); } 792 791 ; 793 792 … … 804 803 { $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); } 805 804 | choose_clause_list case_label_list fall_through 806 { $$ = (StatementNode *)( $1->set_l ink( $2->append_last_case( $3 ))); }805 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); } 807 806 | 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 ) ) ) ) ) ); }807 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); } 809 808 ; 810 809 … … 871 870 exception_statement: 872 871 TRY compound_statement handler_list 873 { $$ = new StatementNode ( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }872 { $$ = new StatementNode2( build_try( $2, $3, 0 ) ); } 874 873 | TRY compound_statement finally_clause 875 { $$ = new StatementNode ( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }874 { $$ = new StatementNode2( build_try( $2, 0, $3 ) ); } 876 875 | TRY compound_statement handler_list finally_clause 877 { 878 $3->set_link( $4 ); 879 $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); 880 } 876 { $$ = new StatementNode2( build_try( $2, $3, $4 ) ); } 881 877 ; 882 878 883 879 handler_list: 884 // There must be at least one catch clause885 880 handler_clause 886 881 // ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block. 887 882 | CATCH '(' ELLIPSIS ')' compound_statement 888 { $$ = StatementNode::newCatchStmt( 0, $5, true); }883 { $$ = new StatementNode2( build_catch( 0, $5, true ) ); } 889 884 | handler_clause CATCH '(' ELLIPSIS ')' compound_statement 890 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true) ); }885 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true ) ) ); } 891 886 | CATCHRESUME '(' ELLIPSIS ')' compound_statement 892 { $$ = StatementNode::newCatchStmt( 0, $5, true); }887 { $$ = new StatementNode2( build_catch( 0, $5, true ) ); } 893 888 | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement 894 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true) ); }889 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true ) ) ); } 895 890 ; 896 891 897 892 handler_clause: 898 893 CATCH '(' push push exception_declaration pop ')' compound_statement pop 899 { $$ = StatementNode::newCatchStmt( $5, $8); }894 { $$ = new StatementNode2( build_catch( $5, $8 ) ); } 900 895 | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop 901 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9) ); }896 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 ) ) ); } 902 897 | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 903 { $$ = StatementNode::newCatchStmt( $5, $8); }898 { $$ = new StatementNode2( build_catch( $5, $8 ) ); } 904 899 | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 905 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9) ); }900 { $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 ) ) ); } 906 901 ; 907 902 … … 909 904 FINALLY compound_statement 910 905 { 911 $$ = new StatementNode( StatementNode::Finally, 0, $2 ); 912 std::cout << "Just created a finally node" << std::endl; 906 $$ = new StatementNode2( build_finally( $2 ) ); 913 907 } 914 908 ; … … 965 959 asm_operand 966 960 | asm_operands_list ',' asm_operand 967 { $$ = (ExpressionNode *)$1->set_l ink( $3 ); }961 { $$ = (ExpressionNode *)$1->set_last( $3 ); } 968 962 ; 969 963 … … 981 975 { $$ = new ExpressionNode( $1 ); } 982 976 | asm_clobbers_list_opt ',' string_literal_list 983 { $$ = (ExpressionNode *)$1->set_l ink( new ExpressionNode( $3 ) ); }977 { $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); } 984 978 ; 985 979 … … 1504 1498 | EXTENSION field_declaring_list ';' // GCC 1505 1499 { // mark all fields in list 1506 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ link() )1500 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 1507 1501 iter->set_extension( true ); 1508 1502 $$ = $2; … … 1750 1744 | initializer 1751 1745 | designation initializer { $$ = $2->set_designators( $1 ); } 1752 | initializer_list ',' initializer { $$ = (InitializerNode *)( $1->set_l ink( $3 ) ); }1746 | initializer_list ',' initializer { $$ = (InitializerNode *)( $1->set_last( $3 ) ); } 1753 1747 | initializer_list ',' designation initializer 1754 { $$ = (InitializerNode *)( $1->set_l ink( $4->set_designators( $3 ) ) ); }1748 { $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); } 1755 1749 ; 1756 1750 … … 1774 1768 designator 1775 1769 | designator_list designator 1776 { $$ = (ExpressionNode *)( $1->set_l ink( $2 ) ); }1770 { $$ = (ExpressionNode *)( $1->set_last( $2 ) ); } 1777 1771 //| designator_list designator { $$ = new ExpressionNode( $1, $2 ); } 1778 1772 ; … … 1880 1874 | assignment_expression 1881 1875 | type_name_list ',' type_name 1882 { $$ = (ExpressionNode *)( $1->set_l ink( new ExpressionNode( build_typevalue( $3 ) ) ) ); }1876 { $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); } 1883 1877 | type_name_list ',' assignment_expression 1884 { $$ = (ExpressionNode *)( $1->set_l ink( $3 )); }1878 { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 1885 1879 ; 1886 1880 … … 2020 2014 | EXTENSION external_definition 2021 2015 { // mark all fields in list 2022 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_ link() )2016 for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() ) 2023 2017 iter->set_extension( true ); 2024 2018 $$ = $2;
Note: See TracChangeset
for help on using the changeset viewer.