Index: src/AST/Chain.hpp
===================================================================
--- src/AST/Chain.hpp	(revision c7f9f538e5d5e415101bcf07c2024d410d24e3ee)
+++ src/AST/Chain.hpp	(revision 96b0e49992f694d187be2f63a3b7938da27f5e21)
@@ -33,14 +33,11 @@
 	template<typename actual_node_t, typename child_t>
 	auto operator()( child_t actual_node_t::*child ) {
-		auto n = mutate(base.get());
+		node_t * n = base.get_and_mutate();
 		actual_node_t * node = strict_dynamic_cast<actual_node_t *>(n);
-		base = node;
 		return _chain_mutator< typename std::remove_reference< decltype(node->*child) >::type >{node->*child};
 	}
 
 	node_t * operator->() {
-		auto n = mutate(base.get());
-		base = n;
-		return n;
+		return base.get_and_mutate();
 	}
 };
