Changeset dea36ee


Ignore:
Timestamp:
Jul 19, 2018, 11:21:02 PM (6 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
Children:
69efef81, f7e4db27
Parents:
68bceeb
Message:

simplify code for field declarations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r68bceeb rdea36ee  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 19 16:42:16 2018
    13 // Update Count     : 3820
     12// Last Modified On : Thu Jul 19 22:21:56 2018
     13// Update Count     : 3827
    1414//
    1515
     
    19431943        type_specifier field_declaring_list_opt ';'
    19441944                {
    1945                         if ( $2 ) {                                                                     // field declarator ?
    1946                                 $$ = distAttr( $1, $2 );
    1947                         } else if ( $1->type && $1->type->kind == TypeData::Aggregate ) {
    1948                                 $$ = DeclarationNode::newName( nullptr );
    1949                                 $$ = distAttr( $1, $$ );                                // mark all fields in list
    1950                         } else {
    1951                                 //SemanticError( yylloc, "Superfluous declaration, does not allocate storage." ); $$ = nullptr;
    1952                                 SemanticWarning( yylloc, Warning::SuperfluousDecl, "" );
     1945                        if ( ! $2 ) {                                                           // field declarator ?
     1946                                $2 = DeclarationNode::newName( nullptr );
     1947                                if ( ! ( $1->type && $1->type->kind == TypeData::Aggregate ) ) {
     1948                                        SemanticWarning( yylloc, Warning::SuperfluousDecl, "" );
     1949                                } // if
    19531950                        } // if
     1951                        $$ = distAttr( $1, $2 );                                        // mark all fields in list
    19541952                }
    19551953        | EXTENSION type_specifier field_declaring_list_opt ';' // GCC
    19561954                {
    1957                         if ( $3 ) {                                                                     // field declarator ?
    1958                                 $$ = distAttr( $2, $3 );                                // mark all fields in list
    1959                                 distExt( $3 );
    1960                         } else if ( $2->type && $2->type->kind == TypeData::Aggregate && $2->type->aggregate.anon ) {
    1961                                 $$ = DeclarationNode::newName( nullptr );
    1962                                 $$ = distAttr( $2, $$ );                                // mark all fields in list
    1963                                 distExt( $$ );
    1964                         } else {
    1965                                 // SemanticError( yylloc, "Superfluous declaration, does not allocate storage." ); $$ = nullptr;
    1966                                 SemanticWarning( yylloc, Warning::SuperfluousDecl, "" );
     1955                        if ( ! $3 ) {                                                           // field declarator ?
     1956                                $3 = DeclarationNode::newName( nullptr );
     1957                                if ( ! ( $2->type && $2->type->kind == TypeData::Aggregate ) ) {
     1958                                        SemanticWarning( yylloc, Warning::SuperfluousDecl, "" );
     1959                                } // if
    19671960                        } // if
     1961                        $$ = distAttr( $2, $3 );                                        // mark all fields in list
     1962                        distExt( $$ );
    19681963                }
    19691964        | INLINE type_specifier field_abstract_list_opt ';'     // CFA
    19701965                {
     1966                        if ( ! $3 ) {                                                           // field declarator ?
     1967                                $3 = DeclarationNode::newName( nullptr );
     1968                        } // if
    19711969                        $3->inLine = true;
    19721970                        $$ = distAttr( $2, $3 );                                        // mark all fields in list
     
    20042002field_abstract_list_opt:
    20052003        // empty
    2006                 { $$ = DeclarationNode::newName( nullptr ); }
     2004                { $$ = nullptr; }
    20072005        | field_abstract
    20082006        | field_abstract_list_opt ',' attribute_list_opt field_abstract
Note: See TracChangeset for help on using the changeset viewer.