Mercurial Hosting > luan
comparison src/luan/modules/Io.luan @ 1520:d9a5405a3102
try statement
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 21 Jun 2020 18:14:13 -0600 |
parents | b765f146f4dc |
children | 81288d8b20a2 |
comparison
equal
deleted
inserted
replaced
1519:3ebf9781707c | 1520:d9a5405a3102 |
---|---|
21 | 21 |
22 local Luan = require "luan:Luan.luan" | 22 local Luan = require "luan:Luan.luan" |
23 local error = Luan.error | 23 local error = Luan.error |
24 local to_string = Luan.to_string or error() | 24 local to_string = Luan.to_string or error() |
25 local type = Luan.type or error() | 25 local type = Luan.type or error() |
26 local try = Luan.try or error() | |
27 local ipairs = Luan.ipairs or error() | 26 local ipairs = Luan.ipairs or error() |
28 local pairs = Luan.pairs or error() | 27 local pairs = Luan.pairs or error() |
29 local values = Luan.values or error() | 28 local values = Luan.values or error() |
30 local load = Luan.load or error() | 29 local load = Luan.load or error() |
31 local Table = require "luan:Table.luan" | 30 local Table = require "luan:Table.luan" |
61 end | 60 end |
62 | 61 |
63 | 62 |
64 function Io.output_to(out,fn) | 63 function Io.output_to(out,fn) |
65 local old_out = Io.stdout | 64 local old_out = Io.stdout |
66 return try { | 65 try |
67 function() | 66 Io.stdout = out |
68 Io.stdout = out | 67 return fn() |
69 return fn() | 68 finally |
70 end | 69 Io.stdout = old_out |
71 finally = function() | 70 end |
72 Io.stdout = old_out | |
73 end | |
74 } | |
75 end | 71 end |
76 | 72 |
77 local uri = Io.uri -- make local | 73 local uri = Io.uri -- make local |
78 | 74 |
79 function Io.output_of(fn) | 75 function Io.output_of(fn) |
92 local function console() | 88 local function console() |
93 return Io.read_console_line(prompt) | 89 return Io.read_console_line(prompt) |
94 end | 90 end |
95 local env = {} | 91 local env = {} |
96 for line in console do | 92 for line in console do |
97 try { | 93 try |
98 function() | 94 local fn |
99 local fn | 95 try |
100 try { | 96 fn = load("return "..line,"stdin",env) |
101 function() | 97 catch e |
102 fn = load("return "..line,"stdin",env) | 98 fn = load(line,"stdin",env) |
103 end | |
104 catch = function(e) | |
105 fn = load(line,"stdin",env) | |
106 end | |
107 } | |
108 local rtn = pack( fn() ) | |
109 if rtn.n > 0 then | |
110 Io.print( unpack(rtn) ) | |
111 end | |
112 end | 99 end |
113 catch = function(e) | 100 local rtn = pack( fn() ) |
114 Io.print(e) | 101 if rtn.n > 0 then |
102 Io.print( unpack(rtn) ) | |
115 end | 103 end |
116 } | 104 catch e |
105 Io.print(e) | |
106 end | |
117 end | 107 end |
118 end | 108 end |
119 | 109 |
120 | 110 |
121 return Io | 111 return Io |