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