Changes in src/Common/PassVisitor.h [6ca154b:5dd0704]
- File:
-
- 1 edited
-
src/Common/PassVisitor.h (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Common/PassVisitor.h
r6ca154b r5dd0704 25 25 // | WithStmtsToAdd - provides the ability to insert statements before or after the current statement by adding new statements into 26 26 // stmtsToAddBefore or stmtsToAddAfter respectively. 27 // | WithShortCircuiting - provides the ability to skip visiting child nodes; set visit_children to false inpre{visit,mutate} to skip visiting children27 // | WithShortCircuiting - provides the ability to skip visiting child nodes; set skip_children to true if pre{visit,mutate} to skip visiting children 28 28 // | WithScopes - provides the ability to save/restore data like a LIFO stack; to save, call GuardValue with the variable to save, the variable 29 29 // will automatically be restored to its previous value after the corresponding postvisit/postmutate teminates. … … 37 37 PassVisitor(Args &&... args) 38 38 : pass( std::forward<Args>( args )... ) 39 { 40 typedef PassVisitor<pass_type> this_t; 41 this_t * const * visitor = visitor_impl(pass, 0); 42 if(visitor) { 43 *const_cast<this_t **>( visitor ) = this; 44 } 45 } 39 {} 46 40 47 41 virtual ~PassVisitor() = default; … … 220 214 221 215 private: 222 template<typename pass_t> friend void acceptAll( std::list< Declaration* > &decls, PassVisitor< pass_t >& visitor );223 template<typename pass_t> friend void mutateAll( std::list< Declaration* > &decls, PassVisitor< pass_t >& visitor );224 225 216 template<typename node_type> void call_previsit ( node_type * node ) { previsit_impl ( pass, node, 0 ); } 226 217 template<typename node_type> void call_postvisit( node_type * node ) { postvisit_impl( pass, node, 0 ); } … … 234 225 void set_env( TypeSubstitution * env ) { set_env_impl( pass, env, 0); } 235 226 236 template< typename func_t > 237 void handleStatementList( std::list< Statement * > & statements, func_t func ); 238 void visitStatementList ( std::list< Statement* > &statements ); 227 void visitStatementList( std::list< Statement* > &statements ); 239 228 void mutateStatementList( std::list< Statement* > &statements ); 240 229 241 template< typename func_t > 242 Statement * handleStatement( Statement * stmt, func_t func ); 243 Statement * visitStatement ( Statement * stmt ); 230 Statement * visitStatement( Statement * stmt ); 244 231 Statement * mutateStatement( Statement * stmt ); 245 232 246 template< typename func_t > 247 Expression * handleExpression( Expression * expr, func_t func ); 248 Expression * visitExpression ( Expression * expr ); 233 void visitExpression( Expression * expr ); 249 234 Expression * mutateExpression( Expression * expr ); 250 235 … … 253 238 std::list< Statement* > * get_beforeStmts() { return stmtsToAddBefore_impl( pass, 0); } 254 239 std::list< Statement* > * get_afterStmts () { return stmtsToAddAfter_impl ( pass, 0); } 255 std::list< Declaration* > * get_beforeDecls() { return declsToAddBefore_impl( pass, 0); } 256 std::list< Declaration* > * get_afterDecls () { return declsToAddAfter_impl ( pass, 0); } 257 258 void set_visit_children( bool& ref ) { bool_ref * ptr = visit_children_impl(pass, 0); if(ptr) ptr->set( ref ); } 240 bool visit_children() { bool* skip = skip_children_impl(pass, 0); return ! (skip && *skip); } 241 void reset_visit() { bool* skip = skip_children_impl(pass, 0); if(skip) *skip = false; } 259 242 260 243 guard_value_impl init_guard() { … … 295 278 std::list< Statement* > stmtsToAddAfter; 296 279 }; 280 297 281 class WithShortCircuiting { 298 282 protected: … … 301 285 302 286 public: 303 bool _ref visit_children;287 bool skip_children; 304 288 }; 305 289 … … 318 302 }, static_cast< void * >( & val ) ); 319 303 } 320 }; 321 322 template<typename pass_type> 323 class WithVisitorRef { 324 protected: 325 WithVisitorRef() = default; 326 ~WithVisitorRef() = default; 327 328 public: 329 PassVisitor<pass_type> * const visitor; 330 }; 304 305 template< typename Func > 306 void GuardAction( Func&& func ) { 307 at_cleanup( std::forward<Func>( func ) ); 308 } 309 }; 310 331 311 332 312 #include "PassVisitor.impl.h"
Note:
See TracChangeset
for help on using the changeset viewer.