Changeset bf32bb8 for src/Parser
- Timestamp:
- Oct 18, 2016, 4:23:04 PM (9 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, with_gc
- Children:
- f0121d7
- Parents:
- 848ce71
- Location:
- src/Parser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.cc
r848ce71 rbf32bb8 1023 1023 static const yytype_uint16 yyrline[] = 1024 1024 { 1025 0, 30 2, 302, 306, 313, 314, 315, 319, 320, 321,1026 32 5, 326, 330, 331, 335, 336, 340, 344, 345, 356,1027 35 8, 360, 362, 367, 368, 374, 378, 380, 382, 384,1028 38 6, 388, 390, 392, 394, 403, 404, 410, 411, 415,1029 41 6, 420, 424, 426, 428, 430, 435, 436, 440, 443,1025 0, 301, 301, 305, 312, 313, 314, 318, 319, 320, 1026 324, 325, 329, 330, 334, 335, 339, 343, 344, 355, 1027 357, 359, 361, 366, 367, 373, 377, 379, 381, 383, 1028 385, 387, 389, 391, 393, 402, 403, 409, 410, 414, 1029 415, 419, 422, 424, 426, 428, 433, 435, 440, 443, 1030 1030 445, 447, 452, 465, 467, 469, 471, 473, 475, 477, 1031 1031 479, 481, 483, 485, 492, 493, 499, 500, 501, 502, … … 4977 4977 4978 4978 /* Line 1806 of yacc.c */ 4979 #line 30 2"parser.yy"4979 #line 301 "parser.yy" 4980 4980 { typedefTable.enterScope(); } 4981 4981 break; … … 4984 4984 4985 4985 /* Line 1806 of yacc.c */ 4986 #line 30 6"parser.yy"4986 #line 305 "parser.yy" 4987 4987 { typedefTable.leaveScope(); } 4988 4988 break; … … 4991 4991 4992 4992 /* Line 1806 of yacc.c */ 4993 #line 312 "parser.yy" 4994 { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); } 4995 break; 4996 4997 case 5: 4998 4999 /* Line 1806 of yacc.c */ 4993 5000 #line 313 "parser.yy" 4994 { (yyval.en) = new ExpressionNode( build_constant Integer( *(yyvsp[(1) - (1)].tok) ) ); }4995 break; 4996 4997 case 5:5001 { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); } 5002 break; 5003 5004 case 6: 4998 5005 4999 5006 /* Line 1806 of yacc.c */ 5000 5007 #line 314 "parser.yy" 5001 { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }5002 break;5003 5004 case 6:5005 5006 /* Line 1806 of yacc.c */5007 #line 315 "parser.yy"5008 5008 { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); } 5009 5009 break; … … 5012 5012 5013 5013 /* Line 1806 of yacc.c */ 5014 #line 3 40"parser.yy"5014 #line 339 "parser.yy" 5015 5015 { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); } 5016 5016 break; … … 5019 5019 5020 5020 /* Line 1806 of yacc.c */ 5021 #line 34 4"parser.yy"5021 #line 343 "parser.yy" 5022 5022 { (yyval.str) = (yyvsp[(1) - (1)].tok); } 5023 5023 break; … … 5026 5026 5027 5027 /* Line 1806 of yacc.c */ 5028 #line 34 6"parser.yy"5028 #line 345 "parser.yy" 5029 5029 { 5030 5030 appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) ); // append 2nd juxtaposed string to 1st … … 5037 5037 5038 5038 /* Line 1806 of yacc.c */ 5039 #line 35 7"parser.yy"5039 #line 356 "parser.yy" 5040 5040 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); } 5041 5041 break; … … 5044 5044 5045 5045 /* Line 1806 of yacc.c */ 5046 #line 35 9"parser.yy"5046 #line 358 "parser.yy" 5047 5047 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); } 5048 5048 break; … … 5051 5051 5052 5052 /* Line 1806 of yacc.c */ 5053 #line 36 1"parser.yy"5053 #line 360 "parser.yy" 5054 5054 { (yyval.en) = (yyvsp[(2) - (3)].en); } 5055 5055 break; … … 5058 5058 5059 5059 /* Line 1806 of yacc.c */ 5060 #line 36 3"parser.yy"5060 #line 362 "parser.yy" 5061 5061 { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); } 5062 5062 break; … … 5065 5065 5066 5066 /* Line 1806 of yacc.c */ 5067 #line 37 3"parser.yy"5067 #line 372 "parser.yy" 5068 5068 { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); } 5069 5069 break; … … 5072 5072 5073 5073 /* Line 1806 of yacc.c */ 5074 #line 37 5"parser.yy"5074 #line 374 "parser.yy" 5075 5075 { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); } 5076 5076 break; … … 5079 5079 5080 5080 /* Line 1806 of yacc.c */ 5081 #line 37 9"parser.yy"5081 #line 378 "parser.yy" 5082 5082 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); } 5083 5083 break; … … 5086 5086 5087 5087 /* Line 1806 of yacc.c */ 5088 #line 38 1"parser.yy"5088 #line 380 "parser.yy" 5089 5089 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); } 5090 5090 break; … … 5093 5093 5094 5094 /* Line 1806 of yacc.c */ 5095 #line 38 3"parser.yy"5095 #line 382 "parser.yy" 5096 5096 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_constantInteger( *(yyvsp[(3) - (3)].tok) ) ) ); } 5097 5097 break; … … 5100 5100 5101 5101 /* Line 1806 of yacc.c */ 5102 #line 38 5"parser.yy"5102 #line 384 "parser.yy" 5103 5103 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); } 5104 5104 break; … … 5107 5107 5108 5108 /* Line 1806 of yacc.c */ 5109 #line 38 7"parser.yy"5109 #line 386 "parser.yy" 5110 5110 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); } 5111 5111 break; … … 5114 5114 5115 5115 /* Line 1806 of yacc.c */ 5116 #line 38 9"parser.yy"5116 #line 388 "parser.yy" 5117 5117 { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); } 5118 5118 break; … … 5121 5121 5122 5122 /* Line 1806 of yacc.c */ 5123 #line 39 1"parser.yy"5123 #line 390 "parser.yy" 5124 5124 { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); } 5125 5125 break; … … 5128 5128 5129 5129 /* Line 1806 of yacc.c */ 5130 #line 39 3"parser.yy"5130 #line 392 "parser.yy" 5131 5131 { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); } 5132 5132 break; … … 5135 5135 5136 5136 /* Line 1806 of yacc.c */ 5137 #line 39 5"parser.yy"5137 #line 394 "parser.yy" 5138 5138 { 5139 5139 Token fn; … … 5146 5146 5147 5147 /* Line 1806 of yacc.c */ 5148 #line 40 5"parser.yy"5148 #line 404 "parser.yy" 5149 5149 { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); } 5150 5150 break; … … 5153 5153 5154 5154 /* Line 1806 of yacc.c */ 5155 #line 4 10"parser.yy"5155 #line 409 "parser.yy" 5156 5156 { (yyval.en) = 0; } 5157 5157 break; … … 5160 5160 5161 5161 /* Line 1806 of yacc.c */ 5162 #line 41 6"parser.yy"5162 #line 415 "parser.yy" 5163 5163 { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); } 5164 5164 break; 5165 5165 5166 case 4 1:5166 case 42: 5167 5167 5168 5168 /* Line 1806 of yacc.c */ 5169 5169 #line 423 "parser.yy" 5170 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); } 5171 break; 5172 5173 case 43: 5174 5175 /* Line 1806 of yacc.c */ 5176 #line 425 "parser.yy" 5177 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); } 5178 break; 5179 5180 case 44: 5181 5182 /* Line 1806 of yacc.c */ 5183 #line 427 "parser.yy" 5184 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); } 5185 break; 5186 5187 case 45: 5188 5189 /* Line 1806 of yacc.c */ 5190 #line 429 "parser.yy" 5191 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); } 5192 break; 5193 5194 case 46: 5195 5196 /* Line 1806 of yacc.c */ 5197 #line 434 "parser.yy" 5170 5198 { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); } 5171 5199 break; 5172 5200 5173 case 42: 5174 5175 /* Line 1806 of yacc.c */ 5176 #line 425 "parser.yy" 5177 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); } 5178 break; 5179 5180 case 43: 5181 5182 /* Line 1806 of yacc.c */ 5183 #line 427 "parser.yy" 5184 { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); } 5185 break; 5186 5187 case 44: 5188 5189 /* Line 1806 of yacc.c */ 5190 #line 429 "parser.yy" 5191 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); } 5192 break; 5193 5194 case 45: 5195 5196 /* Line 1806 of yacc.c */ 5197 #line 431 "parser.yy" 5198 { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); } 5201 case 47: 5202 5203 /* Line 1806 of yacc.c */ 5204 #line 436 "parser.yy" 5205 { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); } 5199 5206 break; 5200 5207 … … 9208 9215 9209 9216 /* Line 1806 of yacc.c */ 9210 #line 921 1"Parser/parser.cc"9217 #line 9218 "Parser/parser.cc" 9211 9218 default: break; 9212 9219 } -
src/Parser/parser.yy
r848ce71 rbf32bb8 195 195 196 196 %type<decl> field_declaration field_declaration_list field_declarator field_declaring_list 197 %type<en> field field_list 198 %type<tok> field_name 197 %type<en> field field_list field_name 199 198 200 199 %type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr … … 421 420 // ambiguity with .0 so space required after field-selection, e.g. 422 421 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 423 { $$ = new ExpressionNode( build_varref( $1 ) ); }424 422 | field_name '.' field 425 { $$ = new ExpressionNode( build_fieldSel( $ 3, build_varref( $1) ) ); }423 { $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); } 426 424 | field_name '.' '[' push field_list pop ']' 427 { $$ = new ExpressionNode( build_fieldSel( $ 5, build_varref( $1) ) ); }425 { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); } 428 426 | field_name ARROW field 429 { $$ = new ExpressionNode( build_pfieldSel( $ 3, build_varref( $1) ) ); }427 { $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); } 430 428 | field_name ARROW '[' push field_list pop ']' 431 { $$ = new ExpressionNode( build_pfieldSel( $ 5, build_varref( $1) ) ); }429 { $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); } 432 430 ; 433 431 434 432 field_name: 435 433 no_attr_identifier 434 { $$ = new ExpressionNode( build_varref( $1 ) ); } 436 435 | INTEGERconstant 436 { $$ = new ExpressionNode( build_constantInteger( *$1 ) ); } 437 437 ; 438 438
Note:
See TracChangeset
for help on using the changeset viewer.