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