Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/PassVisitor.proto.h

    r9dcb653 r3268a58  
    4141};
    4242
     43
    4344class bool_ref {
    4445public:
     
    5859        bool * m_ref;
    5960};
    60 
    61 template< typename TreeType, typename VisitorType >
    62 inline void indexerScopedAccept( TreeType * tree, VisitorType & visitor ) {
    63         auto guard = makeFuncGuard(
    64                 [&visitor]() { visitor.indexerScopeEnter(); },
    65                 [&visitor]() { visitor.indexerScopeLeave(); }
    66         );
    67         maybeAccept( tree, visitor );
    68 }
    69 
    70 template< typename TreeType, typename MutatorType >
    71 inline void indexerScopedMutate( TreeType *& tree, MutatorType & mutator ) {
    72         auto guard = makeFuncGuard(
    73                 [&mutator]() { mutator.indexerScopeEnter(); },
    74                 [&mutator]() { mutator.indexerScopeLeave(); }
    75         );
    76         tree = maybeMutate( tree, mutator );
    77 }
    78 
    79 template< typename TreeType, typename MutatorType >
    80 inline void maybeMutateRef( TreeType *& tree, MutatorType & mutator ) {
    81         tree = maybeMutate( tree, mutator );
    82 }
    8361
    8462//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    11593static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) node_type * node, __attribute__((unused)) long unused ) {}
    11694
    117 //---------------------------------------------------------
    11895// Mutate
    11996template<typename pass_type, typename node_type>
     
    134111static inline return_type postmutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) { return node; }
    135112
    136 //---------------------------------------------------------
    137113// Begin/End scope
    138114template<typename pass_type>
     
    153129static inline void end_scope_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) long unused ) {}
    154130
    155 //---------------------------------------------------------
    156131// Fields
    157132#define FIELD_PTR( type, name )                                                                                                        \
     
    170145FIELD_PTR( at_cleanup_t, at_cleanup )
    171146FIELD_PTR( PassVisitor<pass_type> * const, visitor )
    172 
    173 //---------------------------------------------------------
    174 // Indexer
    175 template<typename pass_type>
    176 static inline auto indexer_impl_enterScope( pass_type & pass, int ) -> decltype( pass.indexer.enterScope(), void() ) {
    177         pass.indexer.enterScope();
    178 }
    179 
    180 template<typename pass_type>
    181 static inline auto indexer_impl_enterScope( pass_type &, int ) {}
    182 
    183 template<typename pass_type>
    184 static inline auto indexer_impl_leaveScope( pass_type & pass, int ) -> decltype( pass.indexer.leaveScope(), void() ) {
    185         pass.indexer.leaveScope();
    186 }
    187 
    188 template<typename pass_type>
    189 static inline auto indexer_impl_leaveScope( pass_type &, int ) {}
    190 
    191 
    192 #define INDEXER_FUNC( func, type )                                                                                             \
    193 template<typename pass_type>                                                                                                   \
    194 static inline auto indexer_impl_##func ( pass_type & pass, int, type arg ) -> decltype( pass.indexer.func( arg ), void() ) {   \
    195         pass.indexer.func( arg );                                                                                                \
    196 }                                                                                                                              \
    197                                                                                                                                \
    198 template<typename pass_type>                                                                                                   \
    199 static inline void indexer_impl_##func ( pass_type &, long, type ) {}                                                          \
    200 
    201 INDEXER_FUNC( addId     , DeclarationWithType * );
    202 INDEXER_FUNC( addType   , NamedTypeDecl *       );
    203 INDEXER_FUNC( addStruct , StructDecl *          );
    204 INDEXER_FUNC( addEnum   , EnumDecl *            );
    205 INDEXER_FUNC( addUnion  , UnionDecl *           );
    206 INDEXER_FUNC( addTrait  , TraitDecl *           );
    207 
    208 
    209 template<typename pass_type>
    210 static inline auto indexer_impl_addStructFwd( pass_type & pass, int, StructDecl * decl ) -> decltype( pass.indexer.addStruct( decl ), void() ) {
    211         StructDecl * fwd = new StructDecl( decl->name );
    212         cloneAll( decl->parameters, fwd->parameters );
    213         pass.indexer.addStruct( fwd );
    214 }
    215 
    216 template<typename pass_type>
    217 static inline auto indexer_impl_addStructFwd( pass_type &, int, StructDecl * ) {}
    218 
    219 template<typename pass_type>
    220 static inline auto indexer_impl_addUnionFwd( pass_type & pass, int, UnionDecl * decl ) -> decltype( pass.indexer.addUnion( decl ), void() ) {
    221         UnionDecl * fwd = new UnionDecl( decl->name );
    222         cloneAll( decl->parameters, fwd->parameters );
    223         pass.indexer.addUnion( fwd );
    224 }
    225 
    226 template<typename pass_type>
    227 static inline auto indexer_impl_addUnionFwd( pass_type &, int, UnionDecl * ) {}
    228 
    229 template<typename pass_type>
    230 static inline auto indexer_impl_addStruct( pass_type & pass, int, const std::string & str ) -> decltype( pass.indexer.addStruct( str ), void() ) {
    231         if ( ! pass.indexer.lookupStruct( str ) ) {
    232                 pass.indexer.addStruct( str );
    233         }
    234 }
    235 
    236 template<typename pass_type>
    237 static inline auto indexer_impl_addStruct( pass_type &, int, const std::string & ) {}
    238 
    239 template<typename pass_type>
    240 static inline auto indexer_impl_addUnion( pass_type & pass, int, const std::string & str ) -> decltype( pass.indexer.addUnion( str ), void() ) {
    241         if ( ! pass.indexer.lookupUnion( str ) ) {
    242                 pass.indexer.addUnion( str );
    243         }
    244 }
    245 
    246 template<typename pass_type>
    247 static inline auto indexer_impl_addUnion( pass_type &, int, const std::string & ) {}
Note: See TracChangeset for help on using the changeset viewer.