Changes in src/AST/Pass.impl.hpp [d3aa64f1:7ff3e522]
- File:
-
- 1 edited
-
src/AST/Pass.impl.hpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Pass.impl.hpp
rd3aa64f1 r7ff3e522 21 21 22 22 #include "AST/TypeSubstitution.hpp" 23 // #include "AST/Copy.hpp"24 23 25 24 #define VISIT_START( node ) \ … … 58 57 59 58 namespace ast { 60 template<typename node_t>61 node_t * shallowCopy( const node_t * node );62 63 59 namespace __pass { 64 60 // Check if this is either a null pointer or a pointer to an empty container … … 66 62 static inline bool empty( T * ptr ) { 67 63 return !ptr || ptr->empty(); 68 }69 70 template< typename core_t, typename node_t >71 static inline node_t* mutate(const node_t *node) {72 return std::is_base_of<PureVisitor, core_t>::value ? ::ast::shallowCopy(node) : ::ast::mutate(node);73 64 } 74 65 … … 329 320 330 321 if( __pass::differs(old_val, new_val) ) { 331 // auto new_parent = mutate(parent); 332 auto new_parent = __pass::mutate<core_t>(parent); 322 auto new_parent = mutate(parent); 333 323 new_parent->*child = new_val; 334 324 parent = new_parent; … … 344 334 if ( node->forall.empty() ) return; 345 335 346 node_t * mut = __pass::mutate<core_t>( node );336 node_t * mut = mutate( node ); 347 337 mut->forall = subs->clone( node->forall, *this ); 348 338 node = mut; … … 904 894 905 895 if(mutated) { 906 auto n = __pass::mutate<core_t>(node);896 auto n = mutate(node); 907 897 n->clauses = std::move( new_clauses ); 908 898 node = n; … … 914 904 auto nval = call_accept( node->field ); \ 915 905 if(nval != node->field ) { \ 916 auto nparent = __pass::mutate<core_t>(node); \906 auto nparent = mutate(node); \ 917 907 nparent->field = nval; \ 918 908 node = nparent; \ … … 1620 1610 1621 1611 if(mutated) { 1622 auto n = __pass::mutate<core_t>(node);1612 auto n = mutate(node); 1623 1613 n->associations = std::move( new_kids ); 1624 1614 node = n; … … 1950 1940 } 1951 1941 if (mutated) { 1952 auto new_node = __pass::mutate<core_t>( node );1942 auto new_node = mutate( node ); 1953 1943 new_node->typeEnv.swap( new_map ); 1954 1944 node = new_node; … … 1966 1956 } 1967 1957 if (mutated) { 1968 auto new_node = __pass::mutate<core_t>( node );1958 auto new_node = mutate( node ); 1969 1959 new_node->varEnv.swap( new_map ); 1970 1960 node = new_node;
Note:
See TracChangeset
for help on using the changeset viewer.