Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Node.hpp

    rb7d92b96 r4864a73  
    1818#include <cassert>
    1919#include <iosfwd>
    20 #include <type_traits> // for remove_reference
    2120
    2221#include "Common/ErrorObjects.h"  // for SemanticErrorException
     
    8382};
    8483
    85 /// Mutate a node, non-member function to avoid static type
    86 /// problems and be able to use auto return
     84// Mutate a node, non-member function to avoid static type
     85// problems and be able to use auto return
    8786template<typename node_t>
    8887node_t * mutate( const node_t * node ) {
     
    9695        );
    9796        return node->clone();
    98 }
    99 
    100 /// Mutate a node field (only clones if not equal to existing value)
    101 template<typename node_t, typename field_t>
    102 const node_t * mutate_field(
    103         const node_t * node,
    104         typename std::remove_const<typename std::remove_reference<field_t>::type>::type node_t::* field,
    105         field_t&& val
    106 ) {
    107         if ( node->*field == val ) return node;
    108        
    109         node_t * ret = mutate( node );
    110         ret->*field = std::forward< field_t >( val );
    111         return ret;
    11297}
    11398
Note: See TracChangeset for help on using the changeset viewer.