Changeset 4941716


Ignore:
Timestamp:
Aug 13, 2024, 11:26:54 AM (4 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
661e7b0
Parents:
dee680c
Message:

preclude aggregate/enumeration type declaration in trait body

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    rdee680c r4941716  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Aug 12 10:21:46 2024
    13 // Update Count     : 6737
     12// Last Modified On : Tue Aug 13 11:25:16 2024
     13// Update Count     : 6740
    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                 {       typedefTable.makeTypedef( *$1->symbolic.name, "enum_type_nobody 1" );
    1629                         $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false ); }
     1628                {
     1629                        typedefTable.makeTypedef( *$1->symbolic.name, "enum_type_nobody 1" );
     1630                        $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false );
     1631                }
    16301632        | ENUM identifier
    1631                 {       typedefTable.makeTypedef( *$2, "enum_type_nobody 2" );
    1632                         $$ = DeclarationNode::newEnum( $2, nullptr, false, false ); }
     1633                {
     1634                        typedefTable.makeTypedef( *$2, "enum_type_nobody 2" );
     1635                        $$ = DeclarationNode::newEnum( $2, nullptr, false, false );
     1636                }
    16331637        | ENUM type_name
    1634                 {       typedefTable.makeTypedef( *$2->symbolic.name, "enum_type_nobody 3" );
    1635                         $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false ); }
     1638                {
     1639                        typedefTable.makeTypedef( *$2->symbolic.name, "enum_type_nobody 3" );
     1640                        $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false );
     1641                }
    16361642        ;
    16371643
     
    32383244
    32393245trait_declaring_list:                                                                   // CFA
    3240         type_specifier declarator
     3246                // Cannot declare an aggregate or enumeration in a trait.
     3247        type_specifier_nobody declarator
    32413248                { $$ = $2->addType( $1 ); }
    32423249        | trait_declaring_list ',' declarator
    32433250                { $$ = $1->set_last( $1->cloneBaseType( $3 ) ); }
     3251        | error
     3252                { SemanticError( yylloc, "Possible cause is declaring an aggregate or enumeration type in a trait." ); $$ = nullptr; }
    32443253        ;
    32453254
Note: See TracChangeset for help on using the changeset viewer.