Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision d2de1be93f6494379e15cb2f5ae0c8e23b7783ce)
+++ src/ResolvExpr/Resolver.cc	(revision e068c8a8da15b590c9ee6dc1bf9fefcffcc2b1dc)
@@ -1299,37 +1299,24 @@
 		// default value expressions have an environment which shouldn't be there and trips up
 		// later passes.
-
-		// ast::ptr< ast::FunctionDecl > ret = functionDecl; 
-		// assert(functionDecl->type->unique());
-		assert(functionDecl->unique());
-		
-		auto mutType = mutate(functionDecl->type.get());
-
-		for ( unsigned i = 0; i < mutType->params.size(); ++i ) {
-			const ast::ptr< ast::DeclWithType > & d = mutType->params[i];
-            if ( const ast::ObjectDecl * obj = d.as< ast::ObjectDecl >() ) {
-                if ( const ast::SingleInit * init = obj->init.as< ast::SingleInit >() ) {
-                    if ( init->value->env == nullptr ) continue;
-                    // clone initializer minus the initializer environment
-                    // ast::FunctionDecl * mutDecl = mutate( functionDecl );
-                    // auto mutType = mutate( mutDecl->type.get() );
-                    auto mutParam = mutate( mutType->params[i].strict_as<ast::ObjectDecl>() );
-                    auto mutInit = mutate( mutParam->init.strict_as<ast::SingleInit>() );
-                    auto mutValue = mutate( mutInit->value.get() );
-                    //ast::chain_mutate( ret )
-                    //  ( &ast::FunctionDecl::type )
-                    //      ( &ast::FunctionType::params )[i]
-                    //          ( &ast::ObjectDecl::init )
-                    //              ( &ast::SingleInit::value )->env = nullptr;
-                    // assert( functionDecl != mutDecl || functionDecl->unique() );
-                    mutValue->env = nullptr;
-                    mutInit->value = mutValue;
-                    mutParam->init = mutInit;
-                    mutType->params[i] = mutParam;
-                    // mutDecl->type = mutType;
-                    // functionDecl = mutDecl;
-                    assert( ! mutType->params[i].strict_as< ast::ObjectDecl >()->init.strict_as< ast::SingleInit >()->value->env);
-                }
-            }
+		assert( functionDecl->unique() );
+		ast::FunctionType * mutType = mutate( functionDecl->type.get() );
+
+		for ( unsigned i = 0 ; i < mutType->params.size() ; ++i ) {
+			if ( const ast::ObjectDecl * obj = mutType->params[i].as< ast::ObjectDecl >() ) {
+				if ( const ast::SingleInit * init = obj->init.as< ast::SingleInit >() ) {
+					if ( init->value->env == nullptr ) continue;
+					// clone initializer minus the initializer environment
+					auto mutParam = mutate( mutType->params[i].strict_as< ast::ObjectDecl >() );
+					auto mutInit = mutate( mutParam->init.strict_as< ast::SingleInit >() );
+					auto mutValue = mutate( mutInit->value.get() );
+
+					mutValue->env = nullptr;
+					mutInit->value = mutValue;
+					mutParam->init = mutInit;
+					mutType->params[i] = mutParam;
+
+					assert( ! mutType->params[i].strict_as< ast::ObjectDecl >()->init.strict_as< ast::SingleInit >()->value->env);
+				}
+			}
 		}
 		mutate_field(functionDecl, &ast::FunctionDecl::type, mutType);
