diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2019-01-14 15:42:48 -0800 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2019-01-14 15:43:24 -0800 |
| commit | c1c32688a4afc43f6addb99b8b5fa878944a70e3 (patch) | |
| tree | c886f21b5b08a9053aa74fcba4b241dae5ede76d /lib/tools/repl.nom | |
| parent | 2309b696fc34b24f05f6658b94f9105ca8ee76e4 (diff) | |
Overhaul in progress, mostly working. Moved all the nomsu packages into
lib/, including core/*. Changes to how nomsu environments and importing
work.
Diffstat (limited to 'lib/tools/repl.nom')
| -rwxr-xr-x | lib/tools/repl.nom | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/lib/tools/repl.nom b/lib/tools/repl.nom new file mode 100755 index 0000000..2c0d3df --- /dev/null +++ b/lib/tools/repl.nom @@ -0,0 +1,86 @@ +#!/usr/bin/env nomsu -V6.14 +# + This file defines a Read-Evaluate-Print-Loop (REPL) for Nomsu + +use "consolecolor" +use "filesystem" +use "commandline" + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +externally (help) means: + say (" + This is the Nomsu v\(Nomsu version) interactive console. + You can type in Nomsu code here and hit 'enter' twice to run it. + To exit, type 'exit' or 'quit' and hit enter twice. + ") + +command line program with $args: + say (" + + \(bright)\(underscore)Welcome to the Nomsu v\(Nomsu version) interactive console!\ + ..\(reset color) + press 'enter' twice to run a command + + ") + + repeat: + say (bright (yellow ">> ")) inline + $buff = [] + repeat: + say (bright) inline + $line = ($io.read "*L") + say (reset color) inline + if (($line == "\n") or (not $line)): + if ((size of $buff) > 0): + # clear the line + say "\027[1A\027[2K" inline + go to (run buffer) + $buff, add ($line, with "\t" -> " ") + say (dim (yellow ".. ")) inline + + --- (run buffer) --- + + if ((size of $buff) == 0): stop + $buff = ($buff, joined) + spoof file $buff + try: + $tree = ($buff parsed) + ..if it fails with $err: + say $err + do next + + unless $tree: + do next + + for $chunk in $tree: + try: + $lua = ($chunk as lua) + ..if it fails with $err: say $err + + unless $lua: + do next + + # TODO: this is a bit hacky, it just defaults variables to global + so that stuff mostly works across multiple lines. It would be + nicer if local variables actually worked. + $lua, remove free vars + try: + $ret = (run $lua) + ..if it fails with $err: say $err + ..if it succeeds: + if (type of $ret) is: + "nil": + do nothing + + "boolean": + say "= \("yes" if $ret else "no")" + + "table": + if $ret.as_nomsu: + say "= \($ret, as nomsu)" + ..else: + say "= \$ret" + + else: + say "= \$ret" |
