Changeset 04273e9 for src/Parser/parser.yy
- Timestamp:
- Aug 8, 2016, 5:29:03 PM (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, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 03da511
- Parents:
- 0853178 (diff), 7bf7fb9 (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) (29 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r0853178 r04273e9 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Aug 5 08:15:57201613 // Update Count : 17 2112 // Last Modified On : Sun Aug 7 09:37:48 2016 13 // Update Count : 1764 14 14 // 15 15 … … 60 60 std::stack< LinkageSpec::Type > linkageStack; 61 61 TypedefTable typedefTable; 62 63 void appendStr( std::string &to, std::string *from ) { 64 // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string. 65 to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) ); 66 } // appendStr 62 67 %} 63 68 … … 119 124 LabelNode *label; 120 125 InitializerNode *in; 121 Oper atorNode::Typeop;126 OperKinds op; 122 127 bool flag; 123 128 } … … 130 135 %type<constant> constant 131 136 %type<en> tuple tuple_expression_list 132 %type<op> ptrref_operator 133 %type<en> unary_operator assignment_operator 137 %type<op> ptrref_operator unary_operator assignment_operator 134 138 %type<en> primary_expression postfix_expression unary_expression 135 139 %type<en> cast_expression multiplicative_expression additive_expression shift_expression … … 305 309 constant: 306 310 // ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant". 307 INTEGERconstant { $$ = makeConstantInteger( *$1 ); }308 | FLOATINGconstant { $$ = makeConstantFloat( *$1 ); }309 | CHARACTERconstant { $$ = makeConstantChar( *$1 ); }311 INTEGERconstant { $$ = build_constantInteger( *$1 ); } 312 | FLOATINGconstant { $$ = build_constantFloat( *$1 ); } 313 | CHARACTERconstant { $$ = build_constantChar( *$1 ); } 310 314 ; 311 315 … … 332 336 333 337 string_literal_list: // juxtaposed strings are concatenated 334 STRINGliteral { $$ = makeConstantStr( *$1 ); } 335 | string_literal_list STRINGliteral { $$ = $1->appendstr( $2 ); } 338 STRINGliteral { $$ = build_constantStr( *$1 ); } 339 | string_literal_list STRINGliteral 340 { 341 appendStr( $1->get_expr()->get_constant()->get_value(), $2 ); 342 delete $2; // allocated by lexer 343 $$ = $1; 344 } 336 345 ; 337 346 … … 356 365 // little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is 357 366 // equivalent to the old x[i,j]. 358 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Index, $1, $4 ) ); }367 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Index, $1, $4 ) ); } 359 368 | postfix_expression '(' argument_expression_list ')' 360 { $$ = new CompositeExprNode( $1, $3); }369 { $$ = new CompositeExprNode( build_func( $1, $3 ) ); } 361 370 // ambiguity with .0 so space required after field-selection, e.g. 362 371 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 363 372 | postfix_expression '.' no_attr_identifier 364 { $$ = new CompositeExprNode 2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }373 { $$ = new CompositeExprNode( build_fieldSel( $1, new VarRefNode( $3 ) ) ); } 365 374 | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector 366 375 | postfix_expression ARROW no_attr_identifier 367 { $$ = new CompositeExprNode 2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }376 { $$ = new CompositeExprNode( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); } 368 377 | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector 369 378 | postfix_expression ICR 370 { $$ = new CompositeExprNode 2( build_opr1( OperatorNode::IncrPost, $1 ) ); }379 { $$ = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); } 371 380 | postfix_expression DECR 372 { $$ = new CompositeExprNode 2( build_opr1( OperatorNode::DecrPost, $1 ) ); }381 { $$ = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); } 373 382 | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99 374 383 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); } 375 384 | postfix_expression '{' argument_expression_list '}' // CFA 376 385 { 377 Token fn; fn.str = new std::string( "?{}" ); // location undefined 378 $$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ); 386 Token fn; 387 fn.str = new std::string( "?{}" ); // location undefined 388 $$ = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ) ); 379 389 } 380 390 ; … … 398 408 { $$ = $7->set_argName( $3 ); } 399 409 | '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression 400 { $$ = $9->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 )))); }410 { $$ = $9->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ) ); } 401 411 ; 402 412 … … 412 422 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 413 423 | no_attr_identifier '.' field 414 { $$ = new CompositeExprNode 2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }424 { $$ = new CompositeExprNode( build_fieldSel( $3, new VarRefNode( $1 ) ) ); } 415 425 | no_attr_identifier '.' '[' push field_list pop ']' 416 { $$ = new CompositeExprNode 2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }426 { $$ = new CompositeExprNode( build_fieldSel( $5, new VarRefNode( $1 ) ) ); } 417 427 | no_attr_identifier ARROW field 418 { $$ = new CompositeExprNode 2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }428 { $$ = new CompositeExprNode( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); } 419 429 | no_attr_identifier ARROW '[' push field_list pop ']' 420 { $$ = new CompositeExprNode 2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }430 { $$ = new CompositeExprNode( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); } 421 431 ; 422 432 … … 435 445 // { * int X; } // CFA declaration of pointer to int 436 446 | ptrref_operator cast_expression // CFA 437 { $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) ) 438 : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); } 447 { 448 switch ( $1 ) { 449 case OperKinds::AddressOf: 450 $$ = new CompositeExprNode( build_addressOf( $2 ) ); 451 break; 452 case OperKinds::PointTo: 453 $$ = new CompositeExprNode( build_unary_val( $1, $2 ) ); 454 break; 455 default: 456 assert( false ); 457 } 458 } 439 459 | unary_operator cast_expression 440 { $$ = new CompositeExprNode( $1, $2); }460 { $$ = new CompositeExprNode( build_unary_val( $1, $2 ) ); } 441 461 | ICR unary_expression 442 { $$ = new CompositeExprNode 2( build_opr1( OperatorNode::Incr, $2 ) ); }462 { $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, $2 ) ); } 443 463 | DECR unary_expression 444 { $$ = new CompositeExprNode 2( build_opr1( OperatorNode::Decr, $2 ) ); }464 { $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, $2 ) ); } 445 465 | SIZEOF unary_expression 446 { $$ = new CompositeExprNode 2( build_sizeOf( $2 ) ); }466 { $$ = new CompositeExprNode( build_sizeOf( $2 ) ); } 447 467 | SIZEOF '(' type_name_no_function ')' 448 { $$ = new CompositeExprNode 2( build_sizeOf( new TypeValueNode( $3 ) ) ); }468 { $$ = new CompositeExprNode( build_sizeOf( new TypeValueNode( $3 ) ) ); } 449 469 | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')' 450 { $$ = new CompositeExprNode 2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }470 { $$ = new CompositeExprNode( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); } 451 471 | ATTR_IDENTIFIER 452 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1) ); }472 { $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ) ) ); } 453 473 | ATTR_IDENTIFIER '(' type_name ')' 454 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3) ); }474 { $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), new TypeValueNode( $3 ) ) ); } 455 475 | ATTR_IDENTIFIER '(' argument_expression ')' 456 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3); }476 { $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), $3 ) ); } 457 477 | ALIGNOF unary_expression // GCC, variable alignment 458 { $$ = new CompositeExprNode 2( build_alignOf( $2 ) ); }478 { $$ = new CompositeExprNode( build_alignOf( $2 ) ); } 459 479 | ALIGNOF '(' type_name_no_function ')' // GCC, type alignment 460 { $$ = new CompositeExprNode 2( build_alignOf( new TypeValueNode( $3 ) ) ); }480 { $$ = new CompositeExprNode( build_alignOf( new TypeValueNode( $3 ) ) ); } 461 481 // | ANDAND IDENTIFIER // GCC, address of label 462 // { $$ = new CompositeExprNode( new OperatorNode( Oper atorNode::LabelAddress ), new VarRefNode( $2, true ) ); }482 // { $$ = new CompositeExprNode( new OperatorNode( OperKinds::LabelAddress ), new VarRefNode( $2, true ) ); } 463 483 ; 464 484 465 485 ptrref_operator: 466 '*' { $$ = Oper atorNode::PointTo; }467 | '&' { $$ = Oper atorNode::AddressOf; }486 '*' { $$ = OperKinds::PointTo; } 487 | '&' { $$ = OperKinds::AddressOf; } 468 488 // GCC, address of label must be handled by semantic check for ref,ref,label 469 | ANDAND { $$ = OperatorNode::And; }489 // | ANDAND { $$ = OperKinds::And; } 470 490 ; 471 491 472 492 unary_operator: 473 '+' { $$ = new OperatorNode( OperatorNode::UnPlus ); }474 | '-' { $$ = new OperatorNode( OperatorNode::UnMinus ); }475 | '!' { $$ = new OperatorNode( OperatorNode::Neg ); }476 | '~' { $$ = new OperatorNode( OperatorNode::BitNeg ); }493 '+' { $$ = OperKinds::UnPlus; } 494 | '-' { $$ = OperKinds::UnMinus; } 495 | '!' { $$ = OperKinds::Neg; } 496 | '~' { $$ = OperKinds::BitNeg; } 477 497 ; 478 498 … … 480 500 unary_expression 481 501 | '(' type_name_no_function ')' cast_expression 482 { $$ = new CompositeExprNode 2( build_cast( new TypeValueNode( $2 ), $4 ) ); }502 { $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); } 483 503 | '(' type_name_no_function ')' tuple 484 { $$ = new CompositeExprNode 2( build_cast( new TypeValueNode( $2 ), $4 ) ); }504 { $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); } 485 505 ; 486 506 … … 488 508 cast_expression 489 509 | multiplicative_expression '*' cast_expression 490 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Mul, $1, $3 ) ); }510 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); } 491 511 | multiplicative_expression '/' cast_expression 492 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Div, $1, $3 ) ); }512 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Div, $1, $3 ) ); } 493 513 | multiplicative_expression '%' cast_expression 494 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Mod, $1, $3 ) ); }514 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); } 495 515 ; 496 516 … … 498 518 multiplicative_expression 499 519 | additive_expression '+' multiplicative_expression 500 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Plus, $1, $3 ) ); }520 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); } 501 521 | additive_expression '-' multiplicative_expression 502 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Minus, $1, $3 ) ); }522 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); } 503 523 ; 504 524 … … 506 526 additive_expression 507 527 | shift_expression LS additive_expression 508 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::LShift, $1, $3 ) ); }528 { $$ = new CompositeExprNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); } 509 529 | shift_expression RS additive_expression 510 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::RShift, $1, $3 ) ); }530 { $$ = new CompositeExprNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); } 511 531 ; 512 532 … … 514 534 shift_expression 515 535 | relational_expression '<' shift_expression 516 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::LThan, $1, $3 ) ); }536 { $$ = new CompositeExprNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); } 517 537 | relational_expression '>' shift_expression 518 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::GThan, $1, $3 ) ); }538 { $$ = new CompositeExprNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); } 519 539 | relational_expression LE shift_expression 520 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::LEThan, $1, $3 ) ); }540 { $$ = new CompositeExprNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); } 521 541 | relational_expression GE shift_expression 522 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::GEThan, $1, $3 ) ); }542 { $$ = new CompositeExprNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); } 523 543 ; 524 544 … … 526 546 relational_expression 527 547 | equality_expression EQ relational_expression 528 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Eq, $1, $3 ) ); }548 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); } 529 549 | equality_expression NE relational_expression 530 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Neq, $1, $3 ) ); }550 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); } 531 551 ; 532 552 … … 534 554 equality_expression 535 555 | AND_expression '&' equality_expression 536 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::BitAnd, $1, $3 ) ); }556 { $$ = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); } 537 557 ; 538 558 … … 540 560 AND_expression 541 561 | exclusive_OR_expression '^' AND_expression 542 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Xor, $1, $3 ) ); }562 { $$ = new CompositeExprNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); } 543 563 ; 544 564 … … 546 566 exclusive_OR_expression 547 567 | inclusive_OR_expression '|' exclusive_OR_expression 548 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::BitOr, $1, $3 ) ); }568 { $$ = new CompositeExprNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); } 549 569 ; 550 570 … … 552 572 inclusive_OR_expression 553 573 | logical_AND_expression ANDAND inclusive_OR_expression 554 { $$ = new CompositeExprNode 2( build_and_or( $1, $3, true ) ); }574 { $$ = new CompositeExprNode( build_and_or( $1, $3, true ) ); } 555 575 ; 556 576 … … 558 578 logical_AND_expression 559 579 | logical_OR_expression OROR logical_AND_expression 560 { $$ = new CompositeExprNode 2( build_and_or( $1, $3, false ) ); }580 { $$ = new CompositeExprNode( build_and_or( $1, $3, false ) ); } 561 581 ; 562 582 … … 564 584 logical_OR_expression 565 585 | logical_OR_expression '?' comma_expression ':' conditional_expression 566 { $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); } 586 { $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); } 587 // FIX ME: this hack computes $1 twice 567 588 | logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand 568 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4); }589 { $$ = new CompositeExprNode( build_cond( $1, $1, $4 ) ); } 569 590 | logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression 570 { $$ = new CompositeExprNode 2( build_cond( $1, $3, $5 ) ); }591 { $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); } 571 592 ; 572 593 … … 578 599 // CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples 579 600 conditional_expression 580 | unary_expression '=' assignment_expression581 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }582 601 | unary_expression assignment_operator assignment_expression 583 { $$ = new CompositeExprNode( $2, $1, $3); }602 { $$ = new CompositeExprNode( build_binary_ptr( $2, $1, $3 ) ); } 584 603 | tuple assignment_opt // CFA, tuple expression 585 { $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2); }604 { $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); } 586 605 ; 587 606 … … 592 611 ; 593 612 613 assignment_operator: 614 '=' { $$ = OperKinds::Assign; } 615 | MULTassign { $$ = OperKinds::MulAssn; } 616 | DIVassign { $$ = OperKinds::DivAssn; } 617 | MODassign { $$ = OperKinds::ModAssn; } 618 | PLUSassign { $$ = OperKinds::PlusAssn; } 619 | MINUSassign { $$ = OperKinds::MinusAssn; } 620 | LSassign { $$ = OperKinds::LSAssn; } 621 | RSassign { $$ = OperKinds::RSAssn; } 622 | ANDassign { $$ = OperKinds::AndAssn; } 623 | ERassign { $$ = OperKinds::ERAssn; } 624 | ORassign { $$ = OperKinds::OrAssn; } 625 ; 626 594 627 tuple: // CFA, tuple 595 628 // CFA, one assignment_expression is factored out of comma_expression to eliminate a shift/reduce conflict with 596 629 // comma_expression in new_identifier_parameter_array and new_abstract_array 597 630 '[' ']' 598 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC) ); }631 { $$ = new CompositeExprNode( build_tuple() ); } 599 632 | '[' push assignment_expression pop ']' 600 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), $3); }633 { $$ = new CompositeExprNode( build_tuple( $3 ) ); } 601 634 | '[' push ',' tuple_expression_list pop ']' 602 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( $4) ); }635 { $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ) ); } 603 636 | '[' push assignment_expression ',' tuple_expression_list pop ']' 604 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 ) ) ); }637 { $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); } 605 638 ; 606 639 … … 611 644 ; 612 645 613 assignment_operator:614 MULTassign { $$ = new OperatorNode( OperatorNode::MulAssn ); }615 | DIVassign { $$ = new OperatorNode( OperatorNode::DivAssn ); }616 | MODassign { $$ = new OperatorNode( OperatorNode::ModAssn ); }617 | PLUSassign { $$ = new OperatorNode( OperatorNode::PlusAssn ); }618 | MINUSassign { $$ = new OperatorNode( OperatorNode::MinusAssn ); }619 | LSassign { $$ = new OperatorNode( OperatorNode::LSAssn ); }620 | RSassign { $$ = new OperatorNode( OperatorNode::RSAssn ); }621 | ANDassign { $$ = new OperatorNode( OperatorNode::AndAssn ); }622 | ERassign { $$ = new OperatorNode( OperatorNode::ERAssn ); }623 | ORassign { $$ = new OperatorNode( OperatorNode::OrAssn ); }624 ;625 626 646 comma_expression: 627 647 assignment_expression 628 | comma_expression ',' assignment_expression // { $$ = (ExpressionNode *)$1->add_to_list( $3 ); } 629 //{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); } 630 { $$ = new CompositeExprNode2( build_comma( $1, $3 ) ); } 648 | comma_expression ',' assignment_expression 649 { $$ = new CompositeExprNode( build_comma( $1, $3 ) ); } 631 650 ; 632 651 … … 650 669 | '^' postfix_expression '{' argument_expression_list '}' ';' // CFA 651 670 { 652 Token fn; fn.str = new std::string( "^?{}" ); // location undefined653 $$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),654 (ExpressionNode *)( $2 )->set_link( $4) ), 0 );671 Token fn; 672 fn.str = new std::string( "^?{}" ); // location undefined 673 $$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 ); 655 674 } 656 675 ; … … 740 759 constant_expression { $$ = $1; } 741 760 | constant_expression ELLIPSIS constant_expression // GCC, subrange 742 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Range,$1, $3 ) ); }761 { $$ = new CompositeExprNode( build_range( $1, $3 ) ); } 743 762 | subrange // CFA, subrange 744 763 ; … … 1781 1800 { $$ = new DesignatorNode( $3, true ); } 1782 1801 | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements 1783 { $$ = new DesignatorNode( new CompositeExprNode 2( build_opr2( OperatorNode::Range,$3, $5 ) ), true ); }1802 { $$ = new DesignatorNode( new CompositeExprNode( build_range( $3, $5 ) ), true ); } 1784 1803 | '.' '[' push field_list pop ']' // CFA, tuple field selector 1785 1804 { $$ = new DesignatorNode( $4 ); } … … 2110 2129 subrange: 2111 2130 constant_expression '~' constant_expression // CFA, integer subrange 2112 { $$ = new CompositeExprNode 2( build_opr2( OperatorNode::Range,$1, $3 ) ); }2131 { $$ = new CompositeExprNode( build_range( $1, $3 ) ); } 2113 2132 ; 2114 2133
Note:
See TracChangeset
for help on using the changeset viewer.