Changeset 78dd0da for src/SymTab


Ignore:
Timestamp:
Dec 15, 2015, 2:56:43 PM (9 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
Children:
4389966, ffad73a
Parents:
5e92fee
Message:

Switched size/align parameters over to use SymTab::Mangler in preparation for addition of generic types

Location:
src/SymTab
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Mangler.cc

    r5e92fee r78dd0da  
    3030
    3131namespace SymTab {
    32         Mangler::Mangler( bool mangleOverridable ) : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ) {
    33         }
    34 
    35 //Mangler::Mangler( const Mangler & )
    36 //  : mangleName(), varNums( varNums ), nextVarNum( nextVarNum ), isTopLevel( isTopLevel )
    37 //{
    38 //}
     32        Mangler::Mangler( bool mangleOverridable, bool includeQualifiers )
     33                : nextVarNum( 0 ), isTopLevel( true ), mangleOverridable( mangleOverridable ), includeQualifiers(includeQualifiers) {}
     34               
    3935        Mangler::Mangler( const Mangler &rhs ) : mangleName() {
    4036                varNums = rhs.varNums;
     
    4238                isTopLevel = rhs.isTopLevel;
    4339                mangleOverridable = rhs.mangleOverridable;
     40                includeQualifiers = rhs.includeQualifiers;
    4441        }
    4542
     
    209206
    210207        void Mangler::printQualifiers( Type *type ) {
     208                // skip if not including qualifiers
     209                if ( ! includeQualifiers ) return;
     210               
    211211                if ( ! type->get_forall().empty() ) {
    212212                        std::list< std::string > assertionNames;
     
    227227                                varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
    228228                                for ( std::list< DeclarationWithType* >::iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
    229                                         Mangler sub_mangler( mangleOverridable );
     229                                        Mangler sub_mangler( mangleOverridable, includeQualifiers );
    230230                                        sub_mangler.nextVarNum = nextVarNum;
    231231                                        sub_mangler.isTopLevel = false;
  • src/SymTab/Mangler.h

    r5e92fee r78dd0da  
    2222
    2323namespace SymTab {
     24        /// Mangles names to a unique C identifier
    2425        class Mangler : public Visitor {
    2526          public:
    2627                template< typename SynTreeClass >
    27             static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true ); // interface to clients
     28            static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool includeQualifiers = true ); // interface to clients
    2829
    29 ///   using Visitor::visit;
    3030                virtual void visit( ObjectDecl *declaration );
    3131                virtual void visit( FunctionDecl *declaration );
     
    4545                std::string get_mangleName() { return mangleName.str(); }
    4646          private:
    47                 std::ostringstream mangleName;
     47                std::ostringstream mangleName;  ///< Mangled name being constructed
    4848                typedef std::map< std::string, std::pair< int, int > > VarMapType;
    49                 VarMapType varNums;
    50                 int nextVarNum;
    51                 bool isTopLevel;
    52                 bool mangleOverridable;
     49                VarMapType varNums;             ///< Map of type variables to indices
     50                int nextVarNum;                 ///< Next type variable index
     51                bool isTopLevel;                ///< Is the Mangler at the top level
     52                bool mangleOverridable;         ///< Specially mangle overridable built-in methods
     53                bool includeQualifiers;         ///< Include type qualifiers in mangled name
    5354 
    54                 Mangler( bool mangleOverridable );
     55                Mangler( bool mangleOverridable, bool includeQualifiers );
    5556                Mangler( const Mangler & );
    5657 
     
    6263
    6364        template< typename SynTreeClass >
    64         std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable ) {
    65                 Mangler mangler( mangleOverridable );
     65        std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool includeQualifiers ) {
     66                Mangler mangler( mangleOverridable, includeQualifiers );
    6667                maybeAccept( decl, mangler );
    6768                return mangler.get_mangleName();
Note: See TracChangeset for help on using the changeset viewer.