diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2022-05-11 13:12:13 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2022-05-11 13:12:13 -0700 |
commit | ba0d0028eac8cc3eeca74aff7132f1136939591a (patch) | |
tree | da9e6b8b829416d314607533131864d820a62d16 /repl.lua | |
parent | d8e5a1ce1258b788fabc74ab2dda85dce8ab22ad (diff) | |
download | view.love-ba0d0028eac8cc3eeca74aff7132f1136939591a.tar.gz |
clean up repl functionality
Now we have separate keywords for returning vs drawing something.
Diffstat (limited to 'repl.lua')
-rw-r--r-- | repl.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/repl.lua b/repl.lua new file mode 100644 index 0000000..44bba97 --- /dev/null +++ b/repl.lua @@ -0,0 +1,42 @@ +-- 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 |