Now we have separate keywords for returning vs drawing something.
D2GCFTTT2RNUBFB243YTA4F2H5ZXFTFHBSKHLZ2CX4JSKRZFTUUQC
XX7G2FFJ4QCGQGD4REAW5QFHVYAKCFUPGZCK7L6DFGS5ISVBYBQQC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
6PUNJS5BSLTYMYMN4JFD7YDEGVQLM5PGAT7PQIG5NIAKLTM5T4PQC
OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC
IZZVOCLB7KB4ZNQ35OL466MHWOK3XZMOS7ZPFLHUFQ47LJLQQQ3QC
6LJZN727CRPYR34LV75CQF55YZI3E7MGESYZSFSYAE73SNEZE3FAC
6Q6XGOFLRHPFQPVUKYTRWS4BKJ6G65IUWSS7HBQKV5HYZDEYCICAC
-- 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
function eval(buf)
local f = load('return '..buf, 'REPL')
if f then
exec_payload = f
return
--? return call_gather(f)
end
local f, err = load(buf, 'REPL')
if f then
exec_payload = f
return
--? return call_gather(f)
else
return {err}
end
end
-- based on https://github.com/hoelzro/lua-repl
function call_gather(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