Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r4941716 rdaa4cc1  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Aug 13 11:25:16 2024
    13 // Update Count     : 6740
     12// Last Modified On : Fri Jul 26 14:09:30 2024
     13// Update Count     : 6733
    1414//
    1515
     
    952952                }
    953953        | COUNTOF unary_expression
    954                 { $$ = new ExpressionNode( new ast::CountExpr( yylloc, maybeMoveBuild( $2 ) ) ); }
     954                {  $$ = new ExpressionNode( new ast::CountExpr( yylloc, maybeMoveBuild( $2 ) ) ); }
    955955        | COUNTOF '(' type_no_function ')'
    956956                { $$ = new ExpressionNode( new ast::CountExpr( yylloc, maybeMoveBuildType( $3 ) ) ); }
     
    16261626enum_key:
    16271627        type_name
    1628                 {
    1629                         typedefTable.makeTypedef( *$1->symbolic.name, "enum_type_nobody 1" );
    1630                         $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false );
    1631                 }
     1628                {       typedefTable.makeTypedef( *$1->symbolic.name, "enum_type_nobody 1" );
     1629                        $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false ); }
    16321630        | ENUM identifier
    1633                 {
    1634                         typedefTable.makeTypedef( *$2, "enum_type_nobody 2" );
    1635                         $$ = DeclarationNode::newEnum( $2, nullptr, false, false );
    1636                 }
     1631                {       typedefTable.makeTypedef( *$2, "enum_type_nobody 2" );
     1632                        $$ = DeclarationNode::newEnum( $2, nullptr, false, false ); }
    16371633        | ENUM type_name
    1638                 {
    1639                         typedefTable.makeTypedef( *$2->symbolic.name, "enum_type_nobody 3" );
    1640                         $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false );
    1641                 }
     1634                {       typedefTable.makeTypedef( *$2->symbolic.name, "enum_type_nobody 3" );
     1635                        $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false ); }
    16421636        ;
    16431637
     
    18551849
    18561850handler_clause:
    1857         handler_key '(' exception_declaration handler_predicate_opt ')' compound_statement
    1858                 { $$ = new ClauseNode( build_catch( yylloc, $1, $3, $4, $6 ) ); }
    1859         | handler_clause handler_key '(' exception_declaration handler_predicate_opt ')' compound_statement
    1860                 { $$ = $1->set_last( new ClauseNode( build_catch( yylloc, $2, $4, $5, $7 ) ) ); }
     1851        handler_key '(' push exception_declaration pop handler_predicate_opt ')' compound_statement
     1852                { $$ = new ClauseNode( build_catch( yylloc, $1, $4, $6, $8 ) ); }
     1853        | handler_clause handler_key '(' push exception_declaration pop handler_predicate_opt ')' compound_statement
     1854                { $$ = $1->set_last( new ClauseNode( build_catch( yylloc, $2, $5, $7, $9 ) ) ); }
    18611855        ;
    18621856
     
    28562850
    28572851enumerator_list:
    2858         // empty
    2859                 { SemanticError( yylloc, "enumeration must have a minimum of one enumerator, empty enumerator list is meaningless." );  $$ = nullptr; }
    2860         | visible_hide_opt identifier_or_type_name enumerator_value_opt
     2852        visible_hide_opt identifier_or_type_name enumerator_value_opt
    28612853                { $$ = DeclarationNode::newEnumValueGeneric( $2, $3 ); }
    28622854        | INLINE type_name
     
    31633155        '|' identifier_or_type_name '(' type_list ')'
    31643156                { $$ = DeclarationNode::newTraitUse( $2, $4 ); }
    3165         | '|' '{' trait_declaration_list '}'
    3166                 { $$ = $3; }
     3157        | '|' '{' push trait_declaration_list pop '}'
     3158                { $$ = $4; }
    31673159        // | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list pop '}' '(' type_list ')'
    31683160        //      { SemanticError( yylloc, "Generic data-type assertion is currently unimplemented." ); $$ = nullptr; }
     
    32163208        | forall TRAIT identifier_or_type_name '{' '}'          // alternate
    32173209                { $$ = DeclarationNode::newTrait( $3, $1, nullptr ); }
    3218         | TRAIT identifier_or_type_name '(' type_parameter_list ')' '{' trait_declaration_list '}'
     3210        | TRAIT identifier_or_type_name '(' type_parameter_list ')' '{' push trait_declaration_list pop '}'
    32193211                {
    32203212                        SemanticWarning( yylloc, Warning::DeprecTraitSyntax );
    3221                         $$ = DeclarationNode::newTrait( $2, $4, $7 );
    3222                 }
    3223         | forall TRAIT identifier_or_type_name '{' trait_declaration_list '}' // alternate
    3224                 { $$ = DeclarationNode::newTrait( $3, $1, $5 ); }
     3213                        $$ = DeclarationNode::newTrait( $2, $4, $8 );
     3214                }
     3215        | forall TRAIT identifier_or_type_name '{' push trait_declaration_list pop '}' // alternate
     3216                { $$ = DeclarationNode::newTrait( $3, $1, $6 ); }
    32253217        ;
    32263218
    32273219trait_declaration_list:                                                                 // CFA
    32283220        trait_declaration
    3229         | trait_declaration_list trait_declaration
    3230                 { $$ = $1->set_last( $2 ); }
     3221        | trait_declaration_list pop push trait_declaration
     3222                { $$ = $1->set_last( $4 ); }
    32313223        ;
    32323224
     
    32393231        cfa_variable_specifier
    32403232        | cfa_function_specifier
    3241         | cfa_trait_declaring_list ',' identifier_or_type_name
    3242                 { $$ = $1->set_last( $1->cloneType( $3 ) ); }
     3233        | cfa_trait_declaring_list pop ',' push identifier_or_type_name
     3234                { $$ = $1->set_last( $1->cloneType( $5 ) ); }
    32433235        ;
    32443236
    32453237trait_declaring_list:                                                                   // CFA
    3246                 // Cannot declare an aggregate or enumeration in a trait.
    3247         type_specifier_nobody declarator
     3238        type_specifier declarator
    32483239                { $$ = $2->addType( $1 ); }
    3249         | trait_declaring_list ',' declarator
    3250                 { $$ = $1->set_last( $1->cloneBaseType( $3 ) ); }
    3251         | error
    3252                 { SemanticError( yylloc, "Possible cause is declaring an aggregate or enumeration type in a trait." ); $$ = nullptr; }
     3240        | trait_declaring_list pop ',' push declarator
     3241                { $$ = $1->set_last( $1->cloneBaseType( $5 ) ); }
    32533242        ;
    32543243
Note: See TracChangeset for help on using the changeset viewer.