Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r1a73dbb r07e3652  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Feb 24 14:46:55 2023
    13 // Update Count     : 5983
     12// Last Modified On : Tue Feb 14 21:11:39 2023
     13// Update Count     : 5893
    1414//
    1515
     
    19411941                        // if type_specifier is an anon aggregate => name
    19421942                        typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "4" );
    1943                         $$ = $3->addType( $2 )->addTypedef();           // watchout frees $2 and $3
     1943                        $$ = $3->addType( $2 )->addTypedef();
    19441944                }
    19451945        | typedef_declaration pop ',' push declarator
     
    19831983        | typedef_expression                                                            // deprecated GCC, naming expression type
    19841984        | sue_declaration_specifier
    1985                 {
    1986                         assert( $1->type );
    1987                         if ( $1->type->qualifiers.any() ) {                     // CV qualifiers ?
    1988                                 SemanticError( yylloc, "Useless type qualifier(s) in empty declaration." ); $$ = nullptr;
    1989                         }
    1990                         // enums are never empty declarations because there must have at least one enumeration.
    1991                         if ( $1->type->kind == TypeData::AggregateInst && $1->storageClasses.any() ) { // storage class ?
    1992                                 SemanticError( yylloc, "Useless storage qualifier(s) in empty aggregate declaration." ); $$ = nullptr;
    1993                         }
    1994                 }
    19951985        ;
    19961986
     
    20102000        | sue_declaration_specifier invalid_types
    20112001                {
    2012                         SemanticError( yylloc, ::toString( "Missing ';' after end of ",
    2013                                 $1->type->enumeration.name ? "enum" : AggregateDecl::aggrString( $1->type->aggregate.kind ),
    2014                                 " declaration" ) );
     2002                        SemanticError( yylloc,
     2003                                                  ::toString( "Missing ';' after end of ",
     2004                                                                          $1->type->enumeration.name ? "enum" : AggregateDecl::aggrString( $1->type->aggregate.kind ),
     2005                                                                          " declaration" ) );
    20152006                        $$ = nullptr;
    20162007                }
     
    25912582        | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt '{' enumerator_list comma_opt '}'
    25922583                {
    2593                         if ( $3->storageClasses.val != 0 || $3->type->qualifiers.any() )
     2584                        if ( $3->storageClasses.val != 0 || $3->type->qualifiers.val != 0 )
    25942585                        { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
    25952586
     
    26022593        | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt
    26032594                {
    2604                         if ( $3->storageClasses.any() || $3->type->qualifiers.val != 0 ) { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
     2595                        if ( $3->storageClasses.val != 0 || $3->type->qualifiers.val != 0 ) { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
    26052596                        typedefTable.makeTypedef( *$6 );
    26062597                }
     
    30613052                { $$ = DeclarationNode::newDirectiveStmt( new StatementNode( build_directive( $1 ) ) ); }
    30623053        | declaration
    3063                 {
    3064                         // Variable declarations of anonymous types requires creating a unique type-name across multiple translation
    3065                         // unit, which is a dubious task, especially because C uses name rather than structural typing; hence it is
    3066                         // disallowed at the moment.
    3067                         if ( $1->linkage == LinkageSpec::Cforall && ! $1->storageClasses.is_static && $1->type && $1->type->kind == TypeData::AggregateInst ) {
    3068                                 if ( $1->type->aggInst.aggregate->kind == TypeData::Enum && $1->type->aggInst.aggregate->enumeration.anon ) {
    3069                                         SemanticError( yylloc, "extern anonymous enumeration is currently unimplemented." ); $$ = nullptr;
    3070                                 } else if ( $1->type->aggInst.aggregate->aggregate.anon ) { // handles struct or union
    3071                                         SemanticError( yylloc, "extern anonymous struct/union is currently unimplemented." ); $$ = nullptr;
    3072                                 }
    3073                         }
    3074                 }
    30753054        | IDENTIFIER IDENTIFIER
    30763055                { IdentifierBeforeIdentifier( *$1.str, *$2.str, " declaration" ); $$ = nullptr; }
     
    31183097        | type_qualifier_list
    31193098                {
    3120                         if ( $1->type->qualifiers.any() ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
     3099                        if ( $1->type->qualifiers.val ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
    31213100                        if ( $1->type->forall ) forall = true;          // remember generic type
    31223101                }
     
    31293108        | declaration_qualifier_list
    31303109                {
    3131                         if ( $1->type && $1->type->qualifiers.any() ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
     3110                        if ( $1->type && $1->type->qualifiers.val ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
    31323111                        if ( $1->type && $1->type->forall ) forall = true; // remember generic type
    31333112                }
     
    31403119        | declaration_qualifier_list type_qualifier_list
    31413120                {
    3142                         if ( ($1->type && $1->type->qualifiers.any()) || ($2->type && $2->type->qualifiers.any()) ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
     3121                        if ( ($1->type && $1->type->qualifiers.val) || ($2->type && $2->type->qualifiers.val) ) { SemanticError( yylloc, "CV qualifiers cannot be distributed; only storage-class and forall qualifiers." ); }
    31433122                        if ( ($1->type && $1->type->forall) || ($2->type && $2->type->forall) ) forall = true; // remember generic type
    31443123                }
Note: See TracChangeset for help on using the changeset viewer.