Changes in src/Common/PassVisitor.proto.h [9dcb653:3268a58]
- File:
-
- 1 edited
-
src/Common/PassVisitor.proto.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Common/PassVisitor.proto.h
r9dcb653 r3268a58 41 41 }; 42 42 43 43 44 class bool_ref { 44 45 public: … … 58 59 bool * m_ref; 59 60 }; 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 }83 61 84 62 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- … … 115 93 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) node_type * node, __attribute__((unused)) long unused ) {} 116 94 117 //---------------------------------------------------------118 95 // Mutate 119 96 template<typename pass_type, typename node_type> … … 134 111 static inline return_type postmutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) { return node; } 135 112 136 //---------------------------------------------------------137 113 // Begin/End scope 138 114 template<typename pass_type> … … 153 129 static inline void end_scope_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) long unused ) {} 154 130 155 //---------------------------------------------------------156 131 // Fields 157 132 #define FIELD_PTR( type, name ) \ … … 170 145 FIELD_PTR( at_cleanup_t, at_cleanup ) 171 146 FIELD_PTR( PassVisitor<pass_type> * const, visitor ) 172 173 //---------------------------------------------------------174 // Indexer175 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.