diff core/src/luan/modules/Io.luan @ 589:97c8ae330efe

add varargs to Luan.try; add Io.output_to and Io.output_of;
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 26 Aug 2015 04:38:37 -0600
parents 18504c41b0be
children 790d5de23042
line wrap: on
line diff
--- a/core/src/luan/modules/Io.luan	Tue Aug 25 10:07:37 2015 -0600
+++ b/core/src/luan/modules/Io.luan	Wed Aug 26 04:38:37 2015 -0600
@@ -46,6 +46,30 @@
 end
 
 
+function M.output_to(out,fn,...)
+	local old_out = M.stdout
+	return try( {
+		function(...)
+			M.stdout = out
+			fn(...)
+		end;
+		finally = function()
+			M.stdout = old_out
+		end;
+	}, ... )
+end
+
+local uri = M.uri  -- make local
+
+function M.output_of(fn,...)
+	local string_uri = uri "string:"
+	local out = string_uri.text_writer()
+	M.output_to(out,fn,...)
+	out.close()
+	return string_uri.read_text()
+end
+
+
 -- repr
 
 local function do_repr(obj,done)
@@ -87,22 +111,8 @@
 	end
 end
 
-local uri = M.uri  -- make local
-
 function M.repr(obj)
-	local old_out = M.stdout
-	return try {
-		function()
-			local string_uri = uri "string:"
-			M.stdout = string_uri.text_writer()
-			do_repr(obj,{})
-			M.stdout.close()
-			return string_uri.read_text()
-		end;
-		finally = function()
-			M.stdout = old_out
-		end;
-	}
+	return M.output_of(do_repr,obj,{})
 end