Ignore:
Timestamp:
Aug 25, 2016, 9:14:06 PM (8 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, 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:
4e2b9710
Parents:
2acf5fc
Message:

fix segment fault when printing syntax error, more refactoring of parser code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/TypeData.cc

    r2acf5fc rc1c1112  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug 18 23:48:44 2016
    13 // Update Count     : 64
     12// Last Modified On : Wed Aug 24 13:46:55 2016
     13// Update Count     : 69
    1414//
    1515
     
    244244        using std::string;
    245245
    246         printEnums( qualifiers.begin(), qualifiers.end(), DeclarationNode::qualifierName, os );
     246        for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
     247                if ( qualifiers[i] ) os << DeclarationNode::qualifierName[ i ] << ' ';
     248        } // for
    247249
    248250        if ( forall ) {
     
    425427                if ( ! toplevel && aggregate->fields ) {
    426428                        ret = clone();
    427                         ret->qualifiers.clear();
     429//                      ret->qualifiers.reset();
    428430                } // if
    429431                break;
     
    431433                if ( ! toplevel && enumeration->constants ) {
    432434                        ret = clone();
    433                         ret->qualifiers.clear();
     435//                      ret->qualifiers.reset();
    434436                } // if
    435437                break;
     
    554556Type::Qualifiers TypeData::buildQualifiers() const {
    555557        Type::Qualifiers q;
    556         for ( std::list< DeclarationNode::Qualifier >::const_iterator i = qualifiers.begin(); i != qualifiers.end(); ++i ) {
    557                 switch ( *i ) {
    558                   case DeclarationNode::Const:
    559                         q.isConst = true;
    560                         break;
    561                   case DeclarationNode::Volatile:
    562                         q.isVolatile = true;
    563                         break;
    564                   case DeclarationNode::Restrict:
    565                         q.isRestrict = true;
    566                         break;
    567                   case DeclarationNode::Lvalue:
    568                         q.isLvalue = true;
    569                         break;
    570                   case DeclarationNode::Atomic:
    571                         q.isAtomic = true;
    572                         break;
    573                 } // switch
    574         } // for
     558        q.isConst = qualifiers[ DeclarationNode::Const ];
     559        q.isVolatile = qualifiers[ DeclarationNode::Volatile ];
     560        q.isRestrict = qualifiers[ DeclarationNode::Restrict ];
     561        q.isLvalue = qualifiers[ DeclarationNode::Lvalue ];
     562        q.isAtomic = qualifiers[ DeclarationNode::Atomic ];;
    575563        return q;
    576564}
Note: See TracChangeset for help on using the changeset viewer.