Changes in src/Parser/parser.yy [c4f68dc:26ef3b2]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rc4f68dc r26ef3b2 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jul 25 15:54:35 201813 // Update Count : 3 84112 // Last Modified On : Thu Jul 12 16:16:25 2018 13 // Update Count : 3756 14 14 // 15 15 … … 114 114 } // for 115 115 } // distExt 116 117 void distInl( DeclarationNode * declaration ) {118 // distribute EXTENSION across all declarations119 for ( DeclarationNode *iter = declaration; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {120 iter->set_inLine( true );121 } // for122 } // distInl123 116 124 117 void distQual( DeclarationNode * declaration, DeclarationNode * qualifiers ) { … … 173 166 } // build_postfix_name 174 167 175 DeclarationNode * fieldDecl( DeclarationNode * typeSpec, DeclarationNode * fieldList ) {176 if ( ! fieldList ) { // field declarator ?177 if ( ! ( typeSpec->type && typeSpec->type->kind == TypeData::Aggregate ) ) {178 stringstream ss;179 typeSpec->type->print( ss );180 SemanticWarning( yylloc, Warning::SuperfluousDecl, ss.str().c_str() );181 return nullptr;182 } // if183 fieldList = DeclarationNode::newName( nullptr );184 } // if185 return distAttr( typeSpec, fieldList ); // mark all fields in list186 } // fieldDecl187 188 168 bool forall = false, yyy = false; // aggregate have one or more forall qualifiers ? 189 169 … … 358 338 %type<decl> exception_declaration 359 339 360 %type<decl> field_declaration _list_opt field_declaration field_declaring_list_opt field_declarator field_abstract_list_opt field_abstract361 %type<en> field field_ name_list field_name fraction_constants_opt340 %type<decl> field_declaration field_declaration_list_opt field_declarator_opt field_declaring_list 341 %type<en> field field_list field_name fraction_constants_opt 362 342 363 343 %type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr … … 372 352 %type<decl> cfa_array_parameter_1st_dimension 373 353 374 %type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list cfa_field_abstract_list354 %type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list 375 355 %type<decl> cfa_function_declaration cfa_function_return cfa_function_specifier 376 356 … … 512 492 ; 513 493 494 identifier: 495 IDENTIFIER 496 | ATTR_IDENTIFIER // CFA 497 | quasi_keyword 498 ; 499 514 500 no_attr_identifier: 515 501 IDENTIFIER 516 502 | quasi_keyword 517 | '@' // CFA518 { Token tok = { new string( DeclarationNode::anonymous.newName() ), yylval.tok.loc }; $$ = tok; }519 ;520 521 identifier:522 no_attr_identifier523 | ATTR_IDENTIFIER // CFA524 503 ; 525 504 … … 562 541 | type_name '.' no_attr_identifier // CFA, nested type 563 542 { SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; } 564 | type_name '.' '[' field_ name_list ']'// CFA, nested type / tuple field selector543 | type_name '.' '[' field_list ']' // CFA, nested type / tuple field selector 565 544 { SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; } 566 545 | GENERIC '(' assignment_expression ',' generic_assoc_list ')' // C11 … … 615 594 | postfix_expression FLOATING_FRACTIONconstant // CFA, tuple index 616 595 { $$ = new ExpressionNode( build_fieldSel( $1, build_field_name_FLOATING_FRACTIONconstant( *$2 ) ) ); } 617 | postfix_expression '.' '[' field_ name_list ']'// CFA, tuple field selector596 | postfix_expression '.' '[' field_list ']' // CFA, tuple field selector 618 597 { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $4 ) ) ); } 619 598 | postfix_expression ARROW no_attr_identifier … … 623 602 | postfix_expression ARROW INTEGERconstant // CFA, tuple index 624 603 { $$ = new ExpressionNode( build_pfieldSel( $1, build_constantInteger( *$3 ) ) ); } 625 | postfix_expression ARROW '[' field_ name_list ']'// CFA, tuple field selector604 | postfix_expression ARROW '[' field_list ']' // CFA, tuple field selector 626 605 { $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $4 ) ) ); } 627 606 | postfix_expression ICR … … 650 629 // empty 651 630 { $$ = nullptr; } 652 | '?' // CFA, default parameter 653 { SemanticError( yylloc, "Default parameter for argument is currently unimplemented." ); $$ = nullptr; } 654 // { $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); } 631 // | '@' // use default argument 632 // { $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); } 655 633 | assignment_expression 656 634 ; 657 635 658 field_ name_list:// CFA, tuple field selector636 field_list: // CFA, tuple field selector 659 637 field 660 | field_ name_list ',' field{ $$ = (ExpressionNode *)$1->set_last( $3 ); }638 | field_list ',' field { $$ = (ExpressionNode *)$1->set_last( $3 ); } 661 639 ; 662 640 … … 665 643 | FLOATING_DECIMALconstant field 666 644 { $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_FLOATING_DECIMALconstant( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); } 667 | FLOATING_DECIMALconstant '[' field_ name_list ']'645 | FLOATING_DECIMALconstant '[' field_list ']' 668 646 { $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_FLOATING_DECIMALconstant( *$1 ) ), build_tuple( $3 ) ) ); } 669 647 | field_name '.' field 670 648 { $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); } 671 | field_name '.' '[' field_ name_list ']'649 | field_name '.' '[' field_list ']' 672 650 { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $4 ) ) ); } 673 651 | field_name ARROW field 674 652 { $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); } 675 | field_name ARROW '[' field_ name_list ']'653 | field_name ARROW '[' field_list ']' 676 654 { $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $4 ) ) ); } 677 655 ; … … 1954 1932 1955 1933 field_declaration: 1956 type_specifier field_declaring_list_opt ';' 1957 { $$ = fieldDecl( $1, $2 ); } 1958 | EXTENSION type_specifier field_declaring_list_opt ';' // GCC 1959 { $$ = fieldDecl( $2, $3 ); distExt( $$ ); } 1960 | INLINE type_specifier field_abstract_list_opt ';' // CFA 1961 { 1962 if ( ! $3 ) { // field declarator ? 1963 $3 = DeclarationNode::newName( nullptr ); 1964 } // if 1965 $3->inLine = true; 1966 $$ = distAttr( $2, $3 ); // mark all fields in list 1967 distInl( $3 ); 1934 type_specifier field_declaring_list ';' 1935 { $$ = distAttr( $1, $2 ); } 1936 | EXTENSION type_specifier field_declaring_list ';' // GCC 1937 { distExt( $3 ); $$ = distAttr( $2, $3 ); } // mark all fields in list 1938 | INLINE type_specifier field_declaring_list ';' // CFA 1939 { 1940 if ( $2->type && ( $2->type->kind == TypeData::Aggregate || $2->type->kind == TypeData::AggregateInst ) ) { 1941 if ( $2->type->kind == TypeData::Aggregate ) { 1942 $2->type->aggregate.inLine = true; 1943 } else { 1944 $2->type->aggInst.inLine = true; 1945 } // if 1946 $$ = distAttr( $2, $3 ); 1947 } else { 1948 SemanticError( yylloc, "inline qualifier only allowed for aggregate field declarations." ); $$ = nullptr; 1949 } // if 1968 1950 } 1969 1951 | typedef_declaration ';' // CFA … … 1971 1953 | EXTENSION cfa_field_declaring_list ';' // GCC 1972 1954 { distExt( $2 ); $$ = $2; } // mark all fields in list 1973 | INLINE cfa_field_abstract_list ';' // CFA, new style field declaration1974 { $$ = $2; } // mark all fields in list1975 1955 | cfa_typedef_declaration ';' // CFA 1976 1956 | static_assert // C11 1977 1957 ; 1978 1958 1979 field_declaring_list_opt:1980 // empty1981 { $$ = nullptr; }1982 | field_declarator1983 | field_declaring_list_opt ',' attribute_list_opt field_declarator1984 { $$ = $1->appendList( $4->addQualifiers( $3 ) ); }1985 ;1986 1987 field_declarator:1988 bit_subrange_size // C special case, no field name1989 { $$ = DeclarationNode::newBitfield( $1 ); }1990 | variable_declarator bit_subrange_size_opt1991 // A semantic check is required to ensure bit_subrange only appears on integral types.1992 { $$ = $1->addBitfield( $2 ); }1993 | variable_type_redeclarator bit_subrange_size_opt1994 // A semantic check is required to ensure bit_subrange only appears on integral types.1995 { $$ = $1->addBitfield( $2 ); }1996 ;1997 1998 field_abstract_list_opt:1999 // empty2000 { $$ = nullptr; }2001 | field_abstract2002 | field_abstract_list_opt ',' attribute_list_opt field_abstract2003 { $$ = $1->appendList( $4->addQualifiers( $3 ) ); }2004 ;2005 2006 field_abstract:2007 // no bit fields2008 variable_abstract_declarator2009 ;2010 2011 1959 cfa_field_declaring_list: // CFA, new style field declaration 2012 // bit-fields are handled by C declarations2013 cfa_abstract_declarator_tuple no_attr_identifier_or_type_name1960 cfa_abstract_declarator_tuple // CFA, no field name 1961 | cfa_abstract_declarator_tuple no_attr_identifier_or_type_name 2014 1962 { $$ = $1->addName( $2 ); } 2015 1963 | cfa_field_declaring_list ',' no_attr_identifier_or_type_name 2016 1964 { $$ = $1->appendList( $1->cloneType( $3 ) ); } 2017 ; 2018 2019 cfa_field_abstract_list: // CFA, new style field declaration 2020 // bit-fields are handled by C declarations 2021 cfa_abstract_declarator_tuple 2022 | cfa_field_abstract_list ',' 1965 | cfa_field_declaring_list ',' // CFA, no field name 2023 1966 { $$ = $1->appendList( $1->cloneType( 0 ) ); } 1967 ; 1968 1969 field_declaring_list: 1970 field_declarator_opt 1971 | field_declaring_list ',' attribute_list_opt field_declarator_opt 1972 { $$ = $1->appendList( $4->addQualifiers( $3 ) ); } 1973 ; 1974 1975 field_declarator_opt: 1976 // empty 1977 { $$ = DeclarationNode::newName( 0 ); /* XXX */ } // CFA, no field name 1978 // '@' 1979 // { $$ = DeclarationNode::newName( new string( DeclarationNode::anonymous.newName() ) ); } // CFA, no field name 1980 | bit_subrange_size // no field name 1981 { $$ = DeclarationNode::newBitfield( $1 ); } 1982 | variable_declarator bit_subrange_size_opt 1983 // A semantic check is required to ensure bit_subrange only appears on base type int. 1984 { $$ = $1->addBitfield( $2 ); } 1985 | variable_type_redeclarator bit_subrange_size_opt 1986 // A semantic check is required to ensure bit_subrange only appears on base type int. 1987 { $$ = $1->addBitfield( $2 ); } 1988 | variable_abstract_declarator // CFA, no field name 2024 1989 ; 2025 1990 … … 2261 2226 | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements 2262 2227 { $$ = new ExpressionNode( new RangeExpr( maybeMoveBuild< Expression >( $3 ), maybeMoveBuild< Expression >( $5 ) ) ); } 2263 | '.' '[' push field_ name_list pop ']'// CFA, tuple field selector2228 | '.' '[' push field_list pop ']' // CFA, tuple field selector 2264 2229 { $$ = $4; } 2265 2230 ; … … 2342 2307 { $$ = new ExpressionNode( new TypeExpr( maybeMoveBuildType( $1 ) ) ); } 2343 2308 | assignment_expression 2344 { SemanticError( yylloc, toString("Expression generic parameters are currently unimplemented: ", $1->build()) ); $$ = nullptr; }2345 2309 | type_list ',' type 2346 2310 { $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( new TypeExpr( maybeMoveBuildType( $3 ) ) ) ) ); } 2347 2311 | type_list ',' assignment_expression 2348 { SemanticError( yylloc, toString("Expression generic parameters are currently unimplemented: ", $3->build()) ); $$ = nullptr; } 2349 // { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 2312 { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 2350 2313 ; 2351 2314 … … 2804 2767 typedef 2805 2768 // hide type name in enclosing scope by variable name 2806 { 2807 // if ( ! typedefTable.existsCurr( *$1->name ) ) { 2808 typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" ); 2809 // } else { 2810 // SemanticError( yylloc, string("'") + *$1->name + "' redeclared as different kind of symbol." ); $$ = nullptr; 2811 // } // if 2812 } 2769 { typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" ); } 2813 2770 | '(' paren_type ')' 2814 2771 { $$ = $2; } … … 2821 2778 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2822 2779 | '(' type_ptr ')' attribute_list_opt 2823 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis2780 { $$ = $2->addQualifiers( $4 ); } 2824 2781 ; 2825 2782
Note:
See TracChangeset
for help on using the changeset viewer.