Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision b107885a0bb3bec3b818b196d6d50a598b24ca79)
+++ src/ResolvExpr/Resolver.cc	(revision 4c196473629eb845795ca16d36b6bd5e1e5dbcd1)
@@ -1311,12 +1311,11 @@
 	}
 
-	ast::ptr< ast::Expr > resolveStmtExpr(
+	const ast::Expr * resolveStmtExpr(
 		const ast::StmtExpr * stmtExpr, const ast::SymbolTable & symtab
 	) {
 		assert( stmtExpr );
 		ast::Pass< Resolver_new > resolver{ symtab };
-		ast::ptr< ast::Expr > ret = stmtExpr;
-		ret = ret->accept( resolver );
-		strict_dynamic_cast< ast::StmtExpr * >( ret.get_and_mutate() )->computeResult();
+		auto ret = mutate(stmtExpr->accept(resolver));
+		strict_dynamic_cast< ast::StmtExpr * >( ret )->computeResult();
 		return ret;
 	}
Index: src/ResolvExpr/Resolver.h
===================================================================
--- src/ResolvExpr/Resolver.h	(revision b107885a0bb3bec3b818b196d6d50a598b24ca79)
+++ src/ResolvExpr/Resolver.h	(revision 4c196473629eb845795ca16d36b6bd5e1e5dbcd1)
@@ -72,6 +72,6 @@
 	ast::ptr< ast::Init > resolveCtorInit(
 		const ast::ConstructorInit * ctorInit, const ast::SymbolTable & symtab );
-	/// Resolves a statement expression
-	ast::ptr< ast::Expr > resolveStmtExpr(
+	/// Resolves a statement expression 
+	const ast::Expr * resolveStmtExpr(
 		const ast::StmtExpr * stmtExpr, const ast::SymbolTable & symtab );
 } // namespace ResolvExpr
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision b107885a0bb3bec3b818b196d6d50a598b24ca79)
+++ src/ResolvExpr/Unify.cc	(revision 4c196473629eb845795ca16d36b6bd5e1e5dbcd1)
@@ -811,5 +811,5 @@
 		/// Creates a tuple type based on a list of DeclWithType
 		template< typename Iter >
-		static ast::ptr< ast::Type > tupleFromTypes( Iter crnt, Iter end ) {
+		static const ast::Type * tupleFromTypes( Iter crnt, Iter end ) {
 			std::vector< ast::ptr< ast::Type > > types;
 			while ( crnt != end ) {
@@ -821,5 +821,5 @@
 			}
 
-			return { new ast::TupleType{ std::move(types) } };
+			return new ast::TupleType{ std::move(types) };
 		}
 
@@ -1034,5 +1034,5 @@
 	private:
 		/// Creates a tuple type based on a list of Type
-		static ast::ptr< ast::Type > tupleFromTypes(
+		static const ast::Type * tupleFromTypes(
 			const std::vector< ast::ptr< ast::Type > > & tys
 		) {
