Changeset ddfd945 for src/Parser


Ignore:
Timestamp:
Mar 16, 2017, 8:47:36 AM (8 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:
fb04321
Parents:
26ba208
Message:

move type FuncSpecifiers? from DeclarationNode? to Type

Location:
src/Parser
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    r26ba208 rddfd945  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 07:59:40 2017
    13 // Update Count     : 1003
     12// Last Modified On : Thu Mar 16 08:37:57 2017
     13// Update Count     : 1006
    1414//
    1515
     
    3333
    3434// These must remain in the same order as the corresponding DeclarationNode enumerations.
    35 const char * DeclarationNode::FuncSpecifiers::Names[] = { "inline", "fortran", "_Noreturn", "NoFunctionSpecifierNames" };
    3635const char * DeclarationNode::basicTypeNames[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicTypeNames" };
    3736const char * DeclarationNode::complexTypeNames[] = { "_Complex", "_Imaginary", "NoComplexTypeNames" };
     
    186185} // DeclarationNode::newStorageClass
    187186
    188 DeclarationNode * DeclarationNode::newFuncSpecifier( FuncSpecifiers fs ) {
     187DeclarationNode * DeclarationNode::newFuncSpecifier( Type::FuncSpecifiers fs ) {
    189188        DeclarationNode * newnode = new DeclarationNode;
    190189        newnode->funcSpecs = fs;
     
    448447void DeclarationNode::checkSpecifiers( DeclarationNode * src ) {
    449448        if ( (funcSpecs.val & src->funcSpecs.val) != 0 ) {      // duplicates ?
    450                 for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) { // find duplicates
     449                for ( unsigned int i = 0; i < Type::NumFuncSpecifier; i += 1 ) { // find duplicates
    451450                        if ( funcSpecs[i] && src->funcSpecs[i] ) {
    452                                 appendError( error, string( "duplicate " ) + FuncSpecifiers::Names[i] );
     451                                appendError( error, string( "duplicate " ) + Type::FuncSpecifiers::Names[i] );
    453452                        } // if
    454453                } // for
  • src/Parser/ParseNode.h

    r26ba208 rddfd945  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 07:46:33 2017
    13 // Update Count     : 772
     12// Last Modified On : Thu Mar 16 08:32:43 2017
     13// Update Count     : 776
    1414//
    1515
     
    201201class DeclarationNode : public ParseNode {
    202202  public:
    203         enum { Inline = 1 << 0, Noreturn = 1 << 1, Fortran = 1 << 2, NumFuncSpecifier = 3 };
    204         union FuncSpecifiers {
    205                 static const char * Names[];
    206                 unsigned int val;
    207                 struct {
    208                         bool is_inline : 1;
    209                         bool is_noreturn : 1;
    210                         bool is_fortran : 1;
    211                 };
    212                 FuncSpecifiers() : val( 0 ) {}
    213                 FuncSpecifiers( unsigned int val ) : val( val ) {}
    214                 bool operator[]( unsigned int i ) const { return val & (1 << i); }
    215                 bool any() const { return val != 0; }
    216                 void print( std::ostream & os ) const {
    217                         if ( (*this).any() ) {                                          // any function specifiers ?
    218                                 for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) {
    219                                         if ( (*this)[i] ) {
    220                                                 os << FuncSpecifiers::Names[i] << ' ';
    221                                         } // if
    222                                 } // for
    223                         } // if
    224                 }
    225         }; // FuncSpecifiers
    226 
    227203        enum BasicType { Void, Bool, Char, Int, Float, Double, LongDouble, NoBasicType };
    228204        enum ComplexType { Complex, Imaginary, NoComplexType };
     
    242218
    243219        static DeclarationNode * newStorageClass( Type::StorageClasses );
    244         static DeclarationNode * newFuncSpecifier( FuncSpecifiers );
     220        static DeclarationNode * newFuncSpecifier( Type::FuncSpecifiers );
    245221        static DeclarationNode * newTypeQualifier( Type::Qualifiers );
    246222        static DeclarationNode * newBasicType( BasicType );
     
    339315        TypeData * type;
    340316
     317        Type::FuncSpecifiers funcSpecs;
    341318        Type::StorageClasses storageClasses;
    342         FuncSpecifiers funcSpecs;
    343319
    344320        ExpressionNode * bitfieldWidth;
  • src/Parser/TypeData.cc

    r26ba208 rddfd945  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 07:54:50 2017
    13 // Update Count     : 558
     12// Last Modified On : Thu Mar 16 08:32:42 2017
     13// Update Count     : 559
    1414//
    1515
     
    778778} // buildTypeof
    779779
    780 Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, DeclarationNode::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
     780Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
    781781        if ( td->kind == TypeData::Function ) {
    782782                if ( td->function.idList ) {                                    // KR function ?
     
    814814                        break;
    815815                  default:
    816                         ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType * >( buildDecl( td->base, "", Type::StorageClasses(), nullptr, DeclarationNode::FuncSpecifiers(), LinkageSpec::Cforall, nullptr ) ) );
     816                        ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType * >( buildDecl( td->base, "", Type::StorageClasses(), nullptr, Type::FuncSpecifiers(), LinkageSpec::Cforall, nullptr ) ) );
    817817                } // switch
    818818        } else {
  • src/Parser/TypeData.h

    r26ba208 rddfd945  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 07:53:41 2017
    13 // Update Count     : 184
     12// Last Modified On : Thu Mar 16 08:32:39 2017
     13// Update Count     : 185
    1414//
    1515
     
    109109TupleType * buildTuple( const TypeData * );
    110110TypeofType * buildTypeof( const TypeData * );
    111 Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, DeclarationNode::FuncSpecifiers funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
     111Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
    112112FunctionType * buildFunction( const TypeData * );
    113113void buildKRFunction( const TypeData::Function_t & function );
  • src/Parser/parser.yy

    r26ba208 rddfd945  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 16 08:00:59 2017
    13 // Update Count     : 2309
     12// Last Modified On : Thu Mar 16 08:36:17 2017
     13// Update Count     : 2310
    1414//
    1515
     
    14601460                // Put function specifiers here to simplify parsing rules, but separate them semantically.
    14611461        | INLINE                                                                                        // C99
    1462                 { $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Inline ); }
     1462                { $$ = DeclarationNode::newFuncSpecifier( Type::Inline ); }
    14631463        | FORTRAN                                                                                       // C99
    1464                 { $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Fortran ); }
     1464                { $$ = DeclarationNode::newFuncSpecifier( Type::Fortran ); }
    14651465        | NORETURN                                                                                      // C11
    1466                 { $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Noreturn ); }
     1466                { $$ = DeclarationNode::newFuncSpecifier( Type::Noreturn ); }
    14671467        ;
    14681468
Note: See TracChangeset for help on using the changeset viewer.