Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Pass.impl.hpp

    rd3aa64f1 r7ff3e522  
    2121
    2222#include "AST/TypeSubstitution.hpp"
    23 // #include "AST/Copy.hpp"
    2423
    2524#define VISIT_START( node ) \
     
    5857
    5958namespace ast {
    60         template<typename node_t>
    61         node_t * shallowCopy( const node_t * node );
    62 
    6359        namespace __pass {
    6460                // Check if this is either a null pointer or a pointer to an empty container
     
    6662                static inline bool empty( T * ptr ) {
    6763                        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);
    7364                }
    7465
     
    329320
    330321                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);
    333323                        new_parent->*child = new_val;
    334324                        parent = new_parent;
     
    344334                        if ( node->forall.empty() ) return;
    345335
    346                         node_t * mut = __pass::mutate<core_t>( node );
     336                        node_t * mut = mutate( node );
    347337                        mut->forall = subs->clone( node->forall, *this );
    348338                        node = mut;
     
    904894
    905895                if(mutated) {
    906                         auto n = __pass::mutate<core_t>(node);
     896                        auto n = mutate(node);
    907897                        n->clauses = std::move( new_clauses );
    908898                        node = n;
     
    914904                        auto nval = call_accept( node->field ); \
    915905                        if(nval != node->field ) { \
    916                                 auto nparent = __pass::mutate<core_t>(node); \
     906                                auto nparent = mutate(node); \
    917907                                nparent->field = nval; \
    918908                                node = nparent; \
     
    16201610
    16211611                if(mutated) {
    1622                         auto n = __pass::mutate<core_t>(node);
     1612                        auto n = mutate(node);
    16231613                        n->associations = std::move( new_kids );
    16241614                        node = n;
     
    19501940                        }
    19511941                        if (mutated) {
    1952                                 auto new_node = __pass::mutate<core_t>( node );
     1942                                auto new_node = mutate( node );
    19531943                                new_node->typeEnv.swap( new_map );
    19541944                                node = new_node;
     
    19661956                        }
    19671957                        if (mutated) {
    1968                                 auto new_node = __pass::mutate<core_t>( node );
     1958                                auto new_node = mutate( node );
    19691959                                new_node->varEnv.swap( new_map );
    19701960                                node = new_node;
Note: See TracChangeset for help on using the changeset viewer.