Mercurial Hosting > luan
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