Changeset 2f0a0678


Ignore:
Timestamp:
May 22, 2018, 9:26:14 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, with_gc
Children:
3d2ae8d, cac8a6e
Parents:
21bdce2
Message:

simplify TypedefTable?

Location:
src/Parser
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    r21bdce2 r2f0a0678  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 21 20:36:45 2018
    13 // Update Count     : 1073
     12// Last Modified On : Tue May 22 08:39:29 2018
     13// Update Count     : 1074
    1414//
    1515
     
    3232#include "SynTree/Type.h"          // for Type, Type::StorageClasses, Type::...
    3333#include "TypeData.h"              // for TypeData, TypeData::Aggregate_t
    34 #include "TypedefTable.h"          // for TypedefTable, TypedefTable::kind_t...
     34#include "TypedefTable.h"          // for TypedefTable
    3535
    3636class Initializer;
     
    547547                                        type->aggregate.params = q->type->forall; // make polymorphic type
    548548                                        // change implicit typedef from TYPEDEFname to TYPEGENname
    549                                         typedefTable.changeKind( *type->aggregate.name, TypedefTable::TG );
     549                                        typedefTable.changeKind( *type->aggregate.name, TYPEGENname );
    550550                                } // if
    551551                        } else {                                                                        // not polymorphic
  • src/Parser/TypedefTable.cc

    r21bdce2 r2f0a0678  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 21 20:55:24 2018
    13 // Update Count     : 117
     12// Last Modified On : Tue May 22 08:40:01 2018
     13// Update Count     : 121
    1414//
    1515
    1616
    1717#include "TypedefTable.h"
    18 #include <cassert>               // for assert
     18#include <cassert>                                                                              // for assert
    1919
    2020#if 0
     
    2525#endif
    2626
    27 using namespace std;
     27using namespace std;                                                                    // string, iostream
    2828
    2929TypedefTable::~TypedefTable() {
     
    3838
    3939int TypedefTable::isKind( const string & identifier ) const {
     40        KindTable::const_iterator posn = kindTable.find( identifier );
    4041        // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
    41         KindTable::const_iterator posn = kindTable.find( identifier );
    4242        if ( posn == kindTable.end() ) return IDENTIFIER;
    4343        return posn->second;
    4444} // TypedefTable::isKind
    4545
    46 void TypedefTable::changeKind( const string & identifier, kind_t kind ) {
     46void TypedefTable::changeKind( const string & identifier, int kind ) {
    4747        KindTable::iterator posn = kindTable.find( identifier );
    48         if ( posn != kindTable.end() ) posn->second = kind;
     48        if ( posn != kindTable.end() ) posn->second = kind;     // exists => update
    4949} // TypedefTable::changeKind
    5050
     
    5454void TypedefTable::makeTypedef( const string & name ) {
    5555        if ( ! typedefTable.exists( name ) ) {
    56                 typedefTable.addToEnclosingScope( name, TypedefTable::TD );
     56                typedefTable.addToEnclosingScope( name, TYPEDEFname );
    5757        } // if
    5858} // TypedefTable::makeTypedef
    5959
    60 void TypedefTable::addToEnclosingScope( const std::string & identifier, kind_t kind ) {
     60void TypedefTable::addToEnclosingScope( const std::string & identifier, int kind ) {
    6161        assert( kindTable.currentScope() >= 1 );
    6262        auto scope = kindTable.currentScope() - 1;
    6363        debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << endl );
    6464        auto ret = kindTable.insertAt( scope, identifier, kind );
    65         if ( ! ret.second ) { // already an element there
    66                 ret.first->second = kind; // update existing element with new kind
    67         } // if
     65        if ( ! ret.second ) ret.first->second = kind;           // exists => update
    6866} // TypedefTable::addToEnclosingScope
    6967
  • src/Parser/TypedefTable.h

    r21bdce2 r2f0a0678  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 21 20:28:01 2018
    13 // Update Count     : 76
     12// Last Modified On : Tue May 22 08:39:29 2018
     13// Update Count     : 77
    1414//
    1515
     
    2323
    2424class TypedefTable {
    25   public:
    26         enum kind_t { ID = IDENTIFIER, TD = TYPEDEFname, TG = TYPEGENname };
    27   private:
    28         typedef ScopedMap< std::string, kind_t > KindTable;
     25        typedef ScopedMap< std::string, int > KindTable;
    2926        KindTable kindTable;   
    3027  public:
     
    3330        bool exists( const std::string & identifier );
    3431        int isKind( const std::string & identifier ) const;
    35         void changeKind( const std::string & identifier, kind_t kind );
     32        void changeKind( const std::string & identifier, int kind );
    3633        void makeTypedef( const std::string & name );
    37         void addToEnclosingScope( const std::string & identifier, kind_t kind );
     34        void addToEnclosingScope( const std::string & identifier, int kind );
    3835
    3936        void enterScope();
  • src/Parser/parser.yy

    r21bdce2 r2f0a0678  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 21 21:44:01 2018
    13 // Update Count     : 3350
     12// Last Modified On : Tue May 22 08:41:57 2018
     13// Update Count     : 3353
    1414//
    1515
     
    14191419        TYPEDEF cfa_variable_specifier
    14201420                {
    1421                         typedefTable.addToEnclosingScope( *$2->name, TypedefTable::TD );
     1421                        typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname );
    14221422                        $$ = $2->addTypedef();
    14231423                }
    14241424        | TYPEDEF cfa_function_specifier
    14251425                {
    1426                         typedefTable.addToEnclosingScope( *$2->name, TypedefTable::TD );
     1426                        typedefTable.addToEnclosingScope( *$2->name, TYPEDEFname );
    14271427                        $$ = $2->addTypedef();
    14281428                }
    14291429        | cfa_typedef_declaration pop ',' push no_attr_identifier
    14301430                {
    1431                         typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
     1431                        typedefTable.addToEnclosingScope( *$5, TYPEDEFname );
    14321432                        $$ = $1->appendList( $1->cloneType( $5 ) );
    14331433                }
     
    14401440        TYPEDEF type_specifier declarator
    14411441                {
    1442                         typedefTable.addToEnclosingScope( *$3->name, TypedefTable::TD );
     1442                        typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname );
    14431443                        $$ = $3->addType( $2 )->addTypedef();
    14441444                }
    14451445        | typedef_declaration pop ',' push declarator
    14461446                {
    1447                         typedefTable.addToEnclosingScope( *$5->name, TypedefTable::TD );
     1447                        typedefTable.addToEnclosingScope( *$5->name, TYPEDEFname );
    14481448                        $$ = $1->appendList( $1->cloneBaseType( $5 )->addTypedef() );
    14491449                }
    14501450        | type_qualifier_list TYPEDEF type_specifier declarator // remaining OBSOLESCENT (see 2 )
    14511451                {
    1452                         typedefTable.addToEnclosingScope( *$4->name, TypedefTable::TD );
     1452                        typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname );
    14531453                        $$ = $4->addType( $3 )->addQualifiers( $1 )->addTypedef();
    14541454                }
    14551455        | type_specifier TYPEDEF declarator
    14561456                {
    1457                         typedefTable.addToEnclosingScope( *$3->name, TypedefTable::TD );
     1457                        typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname );
    14581458                        $$ = $3->addType( $1 )->addTypedef();
    14591459                }
    14601460        | type_specifier TYPEDEF type_qualifier_list declarator
    14611461                {
    1462                         typedefTable.addToEnclosingScope( *$4->name, TypedefTable::TD );
     1462                        typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname );
    14631463                        $$ = $4->addQualifiers( $1 )->addTypedef()->addType( $1 );
    14641464                }
     
    14911491//       declarator asm_name_opt initializer_opt
    14921492//              {
    1493 //                      typedefTable.addToEnclosingScope( TypedefTable::ID );
     1493//                      typedefTable.addToEnclosingScope( IDENTIFIER );
    14941494//                      $$ = ( $2->addType( $1 ))->addAsmName( $3 )->addInitializer( $4 );
    14951495//              }
    14961496//      | declaring_list ',' attribute_list_opt declarator asm_name_opt initializer_opt
    14971497//              {
    1498 //                      typedefTable.addToEnclosingScope( TypedefTable::ID );
     1498//                      typedefTable.addToEnclosingScope( IDENTIFIER );
    14991499//                      $$ = $1->appendList( $1->cloneBaseType( $4->addAsmName( $5 )->addInitializer( $6 ) ) );
    15001500//              }
     
    18121812                {
    18131813                        typedefTable.makeTypedef( *$3 );                        // create typedef
    1814                         if ( forall ) typedefTable.changeKind( *$3, TypedefTable::TG ); // possibly update
     1814                        if ( forall ) typedefTable.changeKind( *$3, TYPEGENname ); // possibly update
    18151815                        forall = false;                                                         // reset
    18161816                }
     
    18261826                {
    18271827                        typedefTable.makeTypedef( *$3 );
    1828                         if ( forall ) typedefTable.changeKind( *$3, TypedefTable::TG ); // possibly update
     1828                        if ( forall ) typedefTable.changeKind( *$3, TYPEGENname ); // possibly update
    18291829                        forall = false;                                                         // reset
    18301830                        $$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
     
    21872187type_parameter:                                                                                 // CFA
    21882188        type_class no_attr_identifier_or_type_name
    2189                 { typedefTable.addToEnclosingScope( *$2, TypedefTable::TD ); }
     2189                { typedefTable.addToEnclosingScope( *$2, TYPEDEFname ); }
    21902190          type_initializer_opt assertion_list_opt
    21912191                { $$ = DeclarationNode::newTypeParam( $1, $2 )->addTypeInitializer( $4 )->addAssertions( $5 ); }
     
    22562256        no_attr_identifier_or_type_name
    22572257                {
    2258                         typedefTable.addToEnclosingScope( *$1, TypedefTable::TD );
     2258                        typedefTable.addToEnclosingScope( *$1, TYPEDEFname );
    22592259                        $$ = DeclarationNode::newTypeDecl( $1, 0 );
    22602260                }
    22612261        | no_attr_identifier_or_type_name '(' push type_parameter_list pop ')'
    22622262                {
    2263                         typedefTable.addToEnclosingScope( *$1, TypedefTable::TG );
     2263                        typedefTable.addToEnclosingScope( *$1, TYPEGENname );
    22642264                        $$ = DeclarationNode::newTypeDecl( $1, $4 );
    22652265                }
     
    27312731paren_type:
    27322732        typedef
    2733                 { // hide type name by variable name
    2734                         typedefTable.addToEnclosingScope( *$1->name, TypedefTable::ID );
    2735                 }
     2733                // hide type name in enclosing scope by variable name
     2734                { typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER ); }
    27362735        | '(' paren_type ')'
    27372736                { $$ = $2; }
Note: See TracChangeset for help on using the changeset viewer.