Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    rc38ae92 rf0ecf9b  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Nov 20 09:21:52 2017
    13 // Update Count     : 1031
     12// Last Modified On : Sat Sep 23 18:16:48 2017
     13// Update Count     : 1024
    1414//
    1515
     
    509509
    510510DeclarationNode * DeclarationNode::addQualifiers( DeclarationNode * q ) {
    511         if ( ! q ) { delete q; return this; }                           // empty qualifier
     511        if ( ! q ) { delete q; return this; }
    512512
    513513        checkSpecifiers( q );
    514514        copySpecifiers( q );
    515515
    516         if ( ! q->type ) { delete q; return this; }
     516        if ( ! q->type ) {
     517                delete q;
     518                return this;
     519        } // if
    517520
    518521        if ( ! type ) {
    519                 type = q->type;                                                                 // reuse structure
     522                type = q->type;                                                                 // reuse this structure
    520523                q->type = nullptr;
    521524                delete q;
     
    523526        } // if
    524527
    525         if ( q->type->forall ) {                                                        // forall qualifier ?
    526                 if ( type->forall ) {                                                   // polymorphic routine ?
    527                         type->forall->appendList( q->type->forall ); // augment forall qualifier
     528        if ( q->type->forall ) {
     529                if ( type->forall ) {
     530                        type->forall->appendList( q->type->forall );
    528531                } else {
    529                         if ( type->kind == TypeData::Aggregate ) {      // struct/union ?
    530                                 if ( type->aggregate.params ) {                 // polymorphic ?
    531                                         type->aggregate.params->appendList( q->type->forall ); // augment forall qualifier
    532                                 } else {                                                                // not polymorphic
    533                                         type->aggregate.params = q->type->forall; // make polymorphic type
    534                                         // change implicit typedef from TYPEDEFname to TYPEGENname
    535                                         typedefTable.changeKind( *type->aggregate.name, TypedefTable::TG );
    536                                 } // if
    537                         } else {                                                                        // not polymorphic
    538                                 type->forall = q->type->forall;                 // make polymorphic routine
     532                        if ( type->kind == TypeData::Aggregate ) {
     533                                type->aggregate.params = q->type->forall;
     534                                // change implicit typedef from TYPEDEFname to TYPEGENname
     535                                typedefTable.changeKind( *type->aggregate.name, TypedefTable::TG );
     536                        } else {
     537                                type->forall = q->type->forall;
    539538                        } // if
    540539                } // if
    541                 q->type->forall = nullptr;                                              // forall qualifier moved
     540                q->type->forall = nullptr;
    542541        } // if
    543542
Note: See TracChangeset for help on using the changeset viewer.