Changeset e50e9ff for src/Parser
- Timestamp:
- Aug 22, 2017, 11:42:06 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, stuck-waitfor-destruct, with_gc
- Children:
- 90c4df0
- Parents:
- 6ac5223 (diff), b3d413b (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. - Location:
- src/Parser
- Files:
-
- 2 edited
-
StatementNode.cc (modified) (3 diffs)
-
parser.yy (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/StatementNode.cc
r6ac5223 re50e9ff 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 16 16:39:43201713 // Update Count : 34 012 // Last Modified On : Thu Aug 17 16:01:31 2017 13 // Update Count : 345 14 14 // 15 15 … … 24 24 #include "SynTree/Expression.h" // for Expression, ConstantExpr 25 25 #include "SynTree/Label.h" // for Label, noLabels 26 #include "SynTree/Declaration.h" 26 27 #include "SynTree/Statement.h" // for Statement, BranchStmt, CaseStmt 27 28 #include "parserutility.h" // for notZeroExpr … … 98 99 } // if 99 100 100 return new IfStmt( noLabels, notZeroExpr( 101 /*ctl->condition 102 ?*/ maybeMoveBuild< Expression >(ctl->condition) 103 /*: new VariableExpr( init.end() )*/ ) 104 , thenb, elseb ); 105 // ret->initialization = init; 106 // delete ctl; 107 // assert( ret ); 108 // return ret; 101 Expression * cond = ctl->condition ? maybeMoveBuild< Expression >(ctl->condition) : new VariableExpr( dynamic_cast<DeclarationWithType *>( dynamic_cast<DeclStmt *>( init.back() )->decl ) ); 102 delete ctl; 103 return new IfStmt( noLabels, notZeroExpr( cond ), thenb, elseb, init ); 109 104 } 110 105 -
src/Parser/parser.yy
r6ac5223 re50e9ff 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 16 18:09:14 201713 // Update Count : 2 48512 // Last Modified On : Sun Aug 20 09:21:54 2017 13 // Update Count : 2573 14 14 // 15 15 … … 131 131 %token ATTRIBUTE EXTENSION // GCC 132 132 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN 133 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA133 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA 134 134 %token ASM // C99, extension ISO/IEC 9899:1999 Section J.5.10(1) 135 135 %token ALIGNAS ALIGNOF GENERIC STATICASSERT // C11 … … 796 796 797 797 selection_statement: 798 IF '(' if_control_expression ')' statement %prec THEN798 IF '(' push if_control_expression ')' statement %prec THEN 799 799 // explicitly deal with the shift/reduce conflict on if/else 800 { $$ = new StatementNode( build_if( $ 3, $5, nullptr ) ); }801 | IF '(' if_control_expression ')' statement ELSE statement802 { $$ = new StatementNode( build_if( $ 3, $5, $7) ); }803 | SWITCH '(' comma_expression ')' case_clause // CFA800 { $$ = new StatementNode( build_if( $4, $6, nullptr ) ); } 801 | IF '(' push if_control_expression ')' statement ELSE statement 802 { $$ = new StatementNode( build_if( $4, $6, $8 ) ); } 803 | SWITCH '(' comma_expression ')' case_clause 804 804 { $$ = new StatementNode( build_switch( $3, $5 ) ); } 805 805 | SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA … … 823 823 824 824 if_control_expression: 825 comma_expression 825 comma_expression pop 826 826 { $$ = new IfCtl( nullptr, $1 ); } 827 | c_declaration // no semi-coln827 | c_declaration pop // no semi-colon 828 828 { $$ = new IfCtl( $1, nullptr ); } 829 | cfa_declaration // no semi-colon829 | cfa_declaration pop // no semi-colon 830 830 { $$ = new IfCtl( $1, nullptr ); } 831 | declaration comma_expression 831 | declaration comma_expression // semi-colon separated 832 832 { $$ = new IfCtl( $1, $2 ); } 833 833 ; … … 1104 1104 1105 1105 KR_declaration_list_opt: // used to declare parameter types in K&R style functions 1106 pop1106 // empty 1107 1107 { $$ = nullptr; } 1108 1108 | KR_declaration_list … … 1110 1110 1111 1111 KR_declaration_list: 1112 c_declaration ';' 1113 | KR_declaration_list push c_declaration ';' 1112 push c_declaration pop ';' 1113 { $$ = $2; } 1114 | KR_declaration_list push c_declaration pop ';' 1114 1115 { $$ = $1->appendList( $3 ); } 1115 1116 ; … … 1131 1132 1132 1133 declaration: // old & new style declarations 1133 c_declaration ';'1134 | cfa_declaration ';'// CFA1134 c_declaration pop ';' 1135 | cfa_declaration pop ';' // CFA 1135 1136 ; 1136 1137 … … 1147 1148 1148 1149 cfa_declaration: // CFA 1149 cfa_variable_declaration pop1150 | cfa_typedef_declaration pop1151 | cfa_function_declaration pop1152 | type_declaring_list pop1153 | trait_specifier pop1150 cfa_variable_declaration 1151 | cfa_typedef_declaration 1152 | cfa_function_declaration 1153 | type_declaring_list 1154 | trait_specifier 1154 1155 ; 1155 1156 … … 1351 1352 1352 1353 c_declaration: 1353 declaration_specifier declaring_list pop1354 declaration_specifier declaring_list 1354 1355 { 1355 1356 $$ = distAttr( $1, $2 ); 1356 1357 } 1357 | typedef_declaration pop1358 | typedef_expression pop// GCC, naming expression type1359 | sue_declaration_specifier pop1358 | typedef_declaration 1359 | typedef_expression // GCC, naming expression type 1360 | sue_declaration_specifier 1360 1361 ; 1361 1362 … … 2230 2231 $$ = $1->addFunctionBody( $2 ); 2231 2232 } 2232 | KR_function_declarator pushKR_declaration_list_opt compound_statement2233 | KR_function_declarator KR_declaration_list_opt compound_statement 2233 2234 { 2234 2235 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2235 2236 typedefTable.leaveScope(); 2236 $$ = $1->addOldDeclList( $ 3 )->addFunctionBody( $4);2237 $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 ); 2237 2238 } 2238 2239 ; … … 2278 2279 2279 2280 // Old-style K&R function definition, OBSOLESCENT (see 4) 2280 | declaration_specifier KR_function_declarator pushKR_declaration_list_opt with_clause_opt compound_statement2281 | declaration_specifier KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2281 2282 { 2282 2283 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2283 2284 typedefTable.leaveScope(); 2284 $$ = $2->addOldDeclList( $ 4 )->addFunctionBody( $6)->addType( $1 );2285 } 2286 | type_qualifier_list KR_function_declarator pushKR_declaration_list_opt with_clause_opt compound_statement2285 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addType( $1 ); 2286 } 2287 | type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2287 2288 { 2288 2289 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2289 2290 typedefTable.leaveScope(); 2290 $$ = $2->addOldDeclList( $ 4 )->addFunctionBody( $6)->addQualifiers( $1 );2291 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 ); 2291 2292 } 2292 2293 2293 2294 // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4) 2294 | declaration_qualifier_list KR_function_declarator pushKR_declaration_list_opt with_clause_opt compound_statement2295 | declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2295 2296 { 2296 2297 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2297 2298 typedefTable.leaveScope(); 2298 $$ = $2->addOldDeclList( $ 4 )->addFunctionBody( $6)->addQualifiers( $1 );2299 } 2300 | declaration_qualifier_list type_qualifier_list KR_function_declarator pushKR_declaration_list_opt with_clause_opt compound_statement2299 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 ); 2300 } 2301 | declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2301 2302 { 2302 2303 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2303 2304 typedefTable.leaveScope(); 2304 $$ = $3->addOldDeclList( $ 5 )->addFunctionBody( $7)->addQualifiers( $2 )->addQualifiers( $1 );2305 $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 ); 2305 2306 } 2306 2307 ;
Note:
See TracChangeset
for help on using the changeset viewer.