Ignore:
Timestamp:
Mar 16, 2017, 7:41:45 AM (7 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, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
64b6913, 68fe077a
Parents:
905eca1
Message:

cleanup interface to qualifiers/specifiers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ParseNode.h

    r905eca1 r6e8bd43  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 15 22:17:50 2017
    13 // Update Count     : 762
     12// Last Modified On : Wed Mar 15 23:31:02 2017
     13// Update Count     : 770
    1414//
    1515
     
    205205        enum { Extern = 1 << 0, Static = 1 << 1, Auto = 1 << 2, Register = 1 << 3, Threadlocal = 1 << 4, NumStorageClass = 5 };
    206206        union StorageClasses {
     207                static const char * Names[];
    207208                unsigned int val;
    208209                struct {
     
    213214                        bool is_threadlocal : 1;
    214215                };
     216
    215217                StorageClasses() : val( 0 ) {}
    216218                StorageClasses( unsigned int val ) : val( val ) {}
    217219                bool operator[]( unsigned int i ) const { return val & (1 << i); }
     220                bool any() const { return val != 0; }
     221                void print( std::ostream & os ) const {
     222                        if ( (*this).any() ) {                                          // any storage classes ?
     223                                for ( unsigned int i = 0; i < NumStorageClass; i += 1 ) {
     224                                        if ( (*this)[i] ) {
     225                                                os << StorageClasses::Names[i] << ' ';
     226                                        } // if
     227                                } // for
     228                        } // if
     229                }
    218230        }; // StorageClasses
    219231
    220232        enum { Inline = 1 << 0, Noreturn = 1 << 1, Fortran = 1 << 2, NumFuncSpecifier = 3 };
    221233        union FuncSpecifiers {
     234                static const char * Names[];
    222235                unsigned int val;
    223236                struct {
     
    229242                FuncSpecifiers( unsigned int val ) : val( val ) {}
    230243                bool operator[]( unsigned int i ) const { return val & (1 << i); }
     244                bool any() const { return val != 0; }
     245                void print( std::ostream & os ) const {
     246                        if ( (*this).any() ) {                                          // any function specifiers ?
     247                                for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) {
     248                                        if ( (*this)[i] ) {
     249                                                os << FuncSpecifiers::Names[i] << ' ';
     250                                        } // if
     251                                } // for
     252                        } // if
     253                }
    231254        }; // FuncSpecifiers
    232255
     
    239262        enum BuiltinType { Valist, Zero, One, NoBuiltinType };
    240263
    241         static const char * storageClassNames[];
    242         static const char * funcSpecifierNames[];
    243264        static const char * basicTypeNames[];
    244265        static const char * complexTypeNames[];
     
    348369
    349370        StorageClasses storageClasses;
    350         static void print_StorageClass( std::ostream & output, StorageClasses storageClasses );
    351 
    352371        FuncSpecifiers funcSpecs;
    353         static void print_FuncSpec( std::ostream & output, FuncSpecifiers funcSpecs );
    354372
    355373        ExpressionNode * bitfieldWidth;
Note: See TracChangeset for help on using the changeset viewer.