Ignore:
Timestamp:
Mar 15, 2017, 11:23:48 AM (6 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
9243cc91, ecc7752
Parents:
3831b58 (diff), e61a35e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    r3831b58 rf841241  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 14 10:19:38 2017
    13 // Update Count     : 964
     12// Last Modified On : Tue Mar 14 14:45:52 2017
     13// Update Count     : 973
    1414//
    1515
     
    202202
    203203
    204 DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClasses sc ) {
     204DeclarationNode * DeclarationNode::newStorageClass( StorageClasses sc ) {
    205205        DeclarationNode * newnode = new DeclarationNode;
    206206        newnode->storageClasses = sc;
     
    208208} // DeclarationNode::newStorageClass
    209209
    210 DeclarationNode * DeclarationNode::newFuncSpecifier( DeclarationNode::FuncSpecifiers fs ) {
     210DeclarationNode * DeclarationNode::newFuncSpecifier( FuncSpecifiers fs ) {
    211211        DeclarationNode * newnode = new DeclarationNode;
    212212        newnode->funcSpecs = fs;
     
    214214} // DeclarationNode::newFuncSpecifier
    215215
    216 DeclarationNode * DeclarationNode::newTypeQualifier( TypeQualifier tq ) {
     216DeclarationNode * DeclarationNode::newTypeQualifier( TypeQualifiers tq ) {
    217217        DeclarationNode * newnode = new DeclarationNode;
    218218        newnode->type = new TypeData();
    219         newnode->type->typeQualifiers[ tq ] = true;
     219        newnode->type->typeQualifiers = tq;
    220220        return newnode;
    221221} // DeclarationNode::newQualifier
     
    457457
    458458void DeclarationNode::checkQualifiers( const TypeData * src, const TypeData * dst ) {
    459         const TypeData::TypeQualifiers qsrc = src->typeQualifiers, qdst = dst->typeQualifiers; // optimization
    460 
    461         if ( (qsrc & qdst).any() ) {                                            // duplicates ?
     459        const TypeQualifiers qsrc = src->typeQualifiers, qdst = dst->typeQualifiers; // optimization
     460
     461        if ( (qsrc.val & qdst.val) != 0 ) {                                     // duplicates ?
    462462                for ( unsigned int i = 0; i < NoTypeQualifier; i += 1 ) { // find duplicates
    463463                        if ( qsrc[i] && qdst[i] ) {
     
    520520                src = nullptr;
    521521        } else {
    522                 dst->typeQualifiers |= src->typeQualifiers;
     522                dst->typeQualifiers.val |= src->typeQualifiers.val;
    523523        } // if
    524524} // addQualifiersToType
     
    578578                switch ( dst->kind ) {
    579579                  case TypeData::Unknown:
    580                         src->typeQualifiers |= dst->typeQualifiers;
     580                        src->typeQualifiers.val |= dst->typeQualifiers.val;
    581581                        dst = src;
    582582                        src = nullptr;
    583583                        break;
    584584                  case TypeData::Basic:
    585                         dst->typeQualifiers |= src->typeQualifiers;
     585                        dst->typeQualifiers.val |= src->typeQualifiers.val;
    586586                        if ( src->kind != TypeData::Unknown ) {
    587587                                assert( src->kind == TypeData::Basic );
     
    619619                                        dst->base->aggInst.params = maybeClone( src->aggregate.actuals );
    620620                                } // if
    621                                 dst->base->typeQualifiers |= src->typeQualifiers;
     621                                dst->base->typeQualifiers.val |= src->typeQualifiers.val;
    622622                                src = nullptr;
    623623                                break;
     
    651651                                                type->aggInst.hoistType = o->type->enumeration.body;
    652652                                        } // if
    653                                         type->typeQualifiers |= o->type->typeQualifiers;
     653                                        type->typeQualifiers.val |= o->type->typeQualifiers.val;
    654654                                } else {
    655655                                        type = o->type;
     
    807807                                        p->type->base->aggInst.params = maybeClone( type->aggregate.actuals );
    808808                                } // if
    809                                 p->type->base->typeQualifiers |= type->typeQualifiers;
     809                                p->type->base->typeQualifiers.val |= type->typeQualifiers.val;
    810810                                break;
    811811
     
    844844                                        lastArray->base->aggInst.params = maybeClone( type->aggregate.actuals );
    845845                                } // if
    846                                 lastArray->base->typeQualifiers |= type->typeQualifiers;
     846                                lastArray->base->typeQualifiers.val |= type->typeQualifiers.val;
    847847                                break;
    848848                          default:
Note: See TracChangeset for help on using the changeset viewer.