Index: src/Tuples/TupleAssignment.cc
===================================================================
--- src/Tuples/TupleAssignment.cc	(revision 027c496d766e376420753a18fca90ddcabe467a9)
+++ src/Tuples/TupleAssignment.cc	(revision 2449aef9797c5a8ca2a279d0445a619d426f6c99)
@@ -23,4 +23,5 @@
 
 #include "CodeGen/OperatorTable.h"
+#include "Common/PassVisitor.h"
 #include "Common/UniqueName.h"             // for UniqueName
 #include "Common/utility.h"                // for zipWith
@@ -277,9 +278,8 @@
 	// xxx - maybe this should happen in alternative finder for every StmtExpr?
 	// xxx - it's possible that these environments could contain some useful information. Maybe the right thing to do is aggregate the environments and pass the aggregate back to be added into the compositeEnv
-	struct EnvRemover : public Visitor {
-		virtual void visit( ExprStmt * stmt ) {
-			delete stmt->get_expr()->get_env();
-			stmt->get_expr()->set_env( nullptr );
-			Visitor::visit( stmt );
+	struct EnvRemover {
+		void previsit( ExprStmt * stmt ) {
+			delete stmt->expr->env;
+			stmt->expr->env = nullptr;
 		}
 	};
@@ -293,5 +293,5 @@
 			ret->set_init( ctorInit );
 			ResolvExpr::resolveCtorInit( ctorInit, spotter.currentFinder.get_indexer() ); // resolve ctor/dtors for the new object
-			EnvRemover rm; // remove environments from subexpressions of StmtExprs
+			PassVisitor<EnvRemover> rm; // remove environments from subexpressions of StmtExprs
 			ctorInit->accept( rm );
 		}
