Changeset e0886db for src/Common/PassVisitor.proto.h
- Timestamp:
- Sep 13, 2017, 2:08:43 PM (7 years ago)
- 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, resolv-new, with_gc
- Children:
- aa72198
- Parents:
- b3f252a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/PassVisitor.proto.h
rb3f252a re0886db 41 41 }; 42 42 43 44 43 class bool_ref { 45 44 public: … … 59 58 bool * m_ref; 60 59 }; 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 } 61 83 62 84 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- … … 93 115 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) node_type * node, __attribute__((unused)) long unused ) {} 94 116 117 //--------------------------------------------------------- 95 118 // Mutate 96 119 template<typename pass_type, typename node_type> … … 111 134 static inline return_type postmutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) { return node; } 112 135 136 //--------------------------------------------------------- 113 137 // Begin/End scope 114 138 template<typename pass_type> … … 129 153 static inline void end_scope_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) long unused ) {} 130 154 155 //--------------------------------------------------------- 131 156 // Fields 132 157 #define FIELD_PTR( type, name ) \ … … 145 170 FIELD_PTR( at_cleanup_t, at_cleanup ) 146 171 FIELD_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.