diff options
Diffstat (limited to 'repl.neb')
| -rw-r--r-- | repl.neb | 35 |
1 files changed, 26 insertions, 9 deletions
@@ -26,18 +26,35 @@ (print "version: < 0") (def next-cmd-num 1) - (func evaluate-cmd (cmd) - (def evaluated (parse-neb cmd)) - (print (concat "=> " (->string evaluated))) - (redef next-cmd-num (+ 1 next-cmd-num)) - (redef _history_ (append _history_ cmd))) + + (func get-non-empty-input () + (def tmp "") + (while (eq? "" tmp) + (redef tmp (strip (read-line (prompt next-cmd-num))))) + tmp) + + (func print-result (res) + (print (concat "=> " + (if (eq? :string (typeof res)) + (concat "\"" res "\"") + (->string res))))) ; this is the actual loop part (while #true - (def this-cmd (strip (read-line (prompt next-cmd-num)))) - (if (not (eq? "" this-cmd)) + (def this-cmd (get-non-empty-input)) + (def panicked #false) ; we may not need this two-step if there's a :panic type + (def evaluated (try - (evaluate-cmd this-cmd) - (print (concat "panic! " _panic_)))))) + (eval (parse-neb this-cmd)) + (block + (redef panicked #true) + _panic_))) + + (if panicked + (print (concat "panic! " evaluated)) + (block + (print-result evaluated) + (redef next-cmd-num (+ 1 next-cmd-num)) + (redef _history_ (append _history_ this-cmd)))))) (repl) |
