43 lines
890 B
Lua
43 lines
890 B
Lua
-- beginnings of a repl
|
|
|
|
function eval(buf)
|
|
local f = load('return '..buf, 'REPL')
|
|
if f then
|
|
return run(f)
|
|
end
|
|
local f, err = load(buf, 'REPL')
|
|
if f then
|
|
return run(f)
|
|
else
|
|
return {err}
|
|
end
|
|
end
|
|
|
|
-- you could perform parse and run separately
|
|
-- usually because there's a side-effect like drawing that you want to control the timing of
|
|
function parse_into_exec_payload(buf)
|
|
local f = load('return '..buf, 'REPL')
|
|
if f then
|
|
exec_payload = f
|
|
return
|
|
end
|
|
local f, err = load(buf, 'REPL')
|
|
if f then
|
|
exec_payload = f
|
|
return
|
|
else
|
|
return {err}
|
|
end
|
|
end
|
|
|
|
-- based on https://github.com/hoelzro/lua-repl
|
|
function run(f)
|
|
local success, results = gather_results(xpcall(f, function(...) return debug.traceback() end))
|
|
return results
|
|
end
|
|
|
|
function gather_results(success, ...)
|
|
local n = select('#', ...)
|
|
return success, { n = n, ... }
|
|
end
|