copy how Lua 5.3 REPL prints expr values

This commit is contained in:
Kartik K. Agaram 2022-04-25 22:10:20 -07:00
parent 45508a440f
commit dfd67aed3c
1 changed files with 21 additions and 10 deletions

31
mu.lua
View File

@ -5,9 +5,6 @@ curses.echo(false) -- unclear why implicit echo can't handle newlines, regardles
stdscr:clear()
stdscr:scrollok(true)
-- unclear how Lua (post 5.2) is able to selectively print values of variables
-- at the repl
local function gather_results(success, ...)
local n = select('#', ...)
return success, { n = n, ... }
@ -34,7 +31,7 @@ while true do
stdscr:addstr('>> ')
end
buf = buf .. readline()
local f, err = load(buf, 'REPL')
local f, err = load('return '..buf, 'REPL')
if f then
buf = ''
new_expr = true
@ -47,14 +44,28 @@ while true do
print(results[1])
end
else
stdscr:addstr(err..'\n')
if string.match(err, "'<eof>'$") or string.match(err, "<eof>$") then
buf = buf .. '\n'
new_expr = false
else
print(err)
local f, err = load(buf, 'REPL')
if f then
buf = ''
new_expr = true
local success, results = gather_results(xpcall(f, function(...) return debug.traceback() end))
if success then
for _, result in ipairs(results) do
print(result)
end
else
print(results[1])
end
else
stdscr:addstr(err..'\n')
if string.match(err, "'<eof>'$") or string.match(err, "<eof>$") then
buf = buf .. '\n'
new_expr = false
else
print(err)
buf = ''
new_expr = true
end
end
end
end