Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Validate.cc

    r46f6134 r79970ed  
    4949#include "SynTree/Statement.h"
    5050#include "SynTree/TypeSubstitution.h"
    51 #include "GenPoly/ScopedMap.h"
    5251#include "Indexer.h"
    5352#include "FixFunction.h"
     
    163162                void addImplicitTypedef( AggDecl * aggDecl );
    164163
    165                 typedef std::unique_ptr<TypedefDecl> TypedefDeclPtr;
    166                 typedef GenPoly::ScopedMap< std::string, std::pair< TypedefDeclPtr, int > > TypedefMap;
     164                typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap;
    167165                typedef std::map< std::string, TypeDecl * > TypeDeclMap;
    168166                TypedefMap typedefNames;
     
    533531                        TypeDeclMap::const_iterator base = typedeclNames.find( typeInst->get_name() );
    534532                        assert( base != typedeclNames.end() );
    535                         typeInst->set_baseType( base->second );
     533                        typeInst->set_baseType( base->second->clone() );
    536534                } // if
    537535                return typeInst;
     
    551549                        }
    552550                } else {
    553                         typedefNames[ tyDecl->get_name() ] = std::make_pair( TypedefDeclPtr( tyDecl ), scopeLevel );
     551                        typedefNames[ tyDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );
    554552                } // if
    555553
     
    569567                        return new EnumDecl( enumDecl->get_name() );
    570568                } else {
    571                         return ret->clone();
     569                        return ret;
    572570                } // if
    573571        }
     
    584582
    585583        DeclarationWithType *EliminateTypedef::mutate( FunctionDecl * funcDecl ) {
    586                 typedefNames.beginScope();
     584                TypedefMap oldNames = typedefNames;
    587585                DeclarationWithType *ret = Mutator::mutate( funcDecl );
    588                 typedefNames.endScope();
     586                typedefNames = oldNames;
    589587                return ret;
    590588        }
    591589
    592590        DeclarationWithType *EliminateTypedef::mutate( ObjectDecl * objDecl ) {
    593                 typedefNames.beginScope();
     591                TypedefMap oldNames = typedefNames;
    594592                DeclarationWithType *ret = Mutator::mutate( objDecl );
    595                 typedefNames.endScope();
     593                typedefNames = oldNames;
    596594                // is the type a function?
    597595                if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) {
     
    605603
    606604        Expression *EliminateTypedef::mutate( CastExpr * castExpr ) {
    607                 typedefNames.beginScope();
     605                TypedefMap oldNames = typedefNames;
    608606                Expression *ret = Mutator::mutate( castExpr );
    609                 typedefNames.endScope();
     607                typedefNames = oldNames;
    610608                return ret;
    611609        }
    612610
    613611        CompoundStmt *EliminateTypedef::mutate( CompoundStmt * compoundStmt ) {
    614                 typedefNames.beginScope();
     612                TypedefMap oldNames = typedefNames;
    615613                scopeLevel += 1;
    616614                CompoundStmt *ret = Mutator::mutate( compoundStmt );
     
    627625                        i = next;
    628626                } // while
    629                 typedefNames.endScope();
     627                typedefNames = oldNames;
    630628                return ret;
    631629        }
     
    658656                                type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() );
    659657                        } // if
    660                         TypedefDeclPtr tyDecl( new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type ) );
    661                         typedefNames[ aggDecl->get_name() ] = std::make_pair( std::move( tyDecl ), scopeLevel );
     658                        TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type );
     659                        typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );
    662660                } // if
    663661        }
Note: See TracChangeset for help on using the changeset viewer.