summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-06-02 20:43:29 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-06-02 20:43:29 -0700
commitfe38ddebf874a95984770ac51610173f9a58bdf3 (patch)
tree655ff676e0c82f0febb9e3bd94a626b8deb5c980 /parser.c
parent8d6edf58318d4f7be6cadf0ff1edc223fd75e358 (diff)
downloadtxr-fe38ddebf874a95984770ac51610173f9a58bdf3.tar.gz
txr-fe38ddebf874a95984770ac51610173f9a58bdf3.tar.bz2
txr-fe38ddebf874a95984770ac51610173f9a58bdf3.zip
listener: process multiple expressions
* parser.c (repl): use read_objects_from_string, forming a progn expression which is evaluated. Check for the first expression being a listener command. * txr.1: Updated.
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/parser.c b/parser.c
index 730edb8a..2129aeaf 100644
--- a/parser.c
+++ b/parser.c
@@ -1732,7 +1732,8 @@ val repl(val bindings, val in_stream, val out_stream, val env)
{
val name = format(nil, lit("expr-~d"), prev_counter, nao);
val line = string(line_w);
- val form = lisp_parse(line, out_stream, colon_k, name, colon_k);
+ val forms = read_objects_from_string(line, std_error, colon_k, name);
+ val form = if2(and2(consp(forms), null(cdr(forms))), car(forms));
if (form == quit_k) {
done = t;
} else if (form == prompt_k) {
@@ -1749,7 +1750,7 @@ val repl(val bindings, val in_stream, val out_stream, val env)
counter = prev_counter;
} else {
val value = if3(form != read_k,
- eval_intrinsic(form, env),
+ eval_intrinsic(cons(progn_s, forms), env),
read_eval_ret_last(nil, prev_counter,
in_stream, out_stream));
val pprin = cdr(pprint_var);