Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 3c398b6c889afd06fdf9de3208cd23fbf26275e5)
+++ src/InitTweak/FixInit.cc	(revision 7821d6c9e338cc77be5204c2797a086bedb79410)
@@ -390,5 +390,5 @@
 			assert( env );
 			CP_CTOR_PRINT( std::cerr << "Type Substitution: " << *env << std::endl; )
-			assert( arg->has_result() );
+			assert( arg->result );
 			Type * result = arg->get_result();
 			if ( skipCopyConstruct( result ) ) return; // skip certain non-copyable types
@@ -552,6 +552,5 @@
 				Expression * retExpr = new CommaExpr( assign, new VariableExpr( returnDecl ) );
 				// move env from callExpr to retExpr
-				retExpr->set_env( callExpr->get_env() );
-				callExpr->set_env( nullptr );
+				std::swap( retExpr->env, callExpr->env );
 				return retExpr;
 			} else {
@@ -1126,5 +1125,5 @@
 			static UniqueName tempNamer( "_tmp_ctor_expr" );
 			// xxx - is the size check necessary?
-			assert( ctorExpr->has_result() && ctorExpr->get_result()->size() == 1 );
+			assert( ctorExpr->result && ctorExpr->get_result()->size() == 1 );
 
 			// xxx - ideally we would reuse the temporary generated from the copy constructor passes from within firstArg if it exists and not generate a temporary if it's unnecessary.
