Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Node.cpp

    r10a1225 r76ed81f  
    1616#include "Node.hpp"
    1717#include "Fwd.hpp"
     18
     19#include <iostream>
    1820
    1921#include "Attribute.hpp"
     
    2527#include "TypeSubstitution.hpp"
    2628
     29#include "Print.hpp"
     30
    2731template< typename node_t, enum ast::Node::ref_type ref_t >
    2832void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { node->increment(ref_t); }
     
    3135void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node ) { node->decrement(ref_t); }
    3236
    33 /// Sets this pointer to a mutated version of a pointer (possibly) owned elsehere.
    34 /// Returns a mutable version of the pointer in this node.
    35 template< typename node_t, enum ast::Node::ref_type ref_t >
    36 node_t * ast::ptr_base<node_t, ref_t>::set_and_mutate( const node_t * n ) {
    37         // ensure ownership of `n` by this node to avoid spurious single-owner mutates
    38         assign( n );
     37template< typename node_t, enum ast::Node::ref_type ref_t >
     38node_t * ast::ptr_base<node_t, ref_t>::get_and_mutate() {
    3939        // get mutable version of `n`
    4040        auto r = mutate( node );
     
    4242        assign( r );
    4343        return r;
     44}
     45
     46template< typename node_t, enum ast::Node::ref_type ref_t >
     47node_t * ast::ptr_base<node_t, ref_t>::set_and_mutate( const node_t * n ) {
     48        // ensure ownership of `n` by this node to avoid spurious single-owner mutates
     49        assign( n );
     50        // return mutable version
     51        return get_and_mutate();
     52}
     53
     54std::ostream & ast::operator<< ( std::ostream & out, const ast::Node * node ) {
     55        print(out, node);
     56        return out;
    4457}
    4558
Note: See TracChangeset for help on using the changeset viewer.