summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-01-15 18:35:17 -0800
committerKaz Kylheku <kaz@kylheku.com>2017-01-15 18:35:17 -0800
commit0ad39c1d30de392efaf24a70da00734ea49679e8 (patch)
tree236188a865a2e8dc6a395181c38844950535556e /parser.c
parent06b285ac2c60fd5f8dd5eee24c794d7ef21fee46 (diff)
downloadtxr-0ad39c1d30de392efaf24a70da00734ea49679e8.tar.gz
txr-0ad39c1d30de392efaf24a70da00734ea49679e8.tar.bz2
txr-0ad39c1d30de392efaf24a70da00734ea49679e8.zip
Rebind *stderr* on entry into repl.
* parser.c (repl): Create a new dynamic env and rebind *stderr* variable to the repl's output stream.
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/parser.c b/parser.c
index 489ab1b5..756b6fae 100644
--- a/parser.c
+++ b/parser.c
@@ -945,6 +945,9 @@ val repl(val bindings, val in_stream, val out_stream)
val multi_line_var = lookup_global_var(listener_multi_line_p_s);
val sel_inclusive_var = lookup_global_var(listener_sel_inclusive_p_s);
val rw_f = func_f1v(out_stream, repl_warning);
+ val saved_dyn_env = set_dyn_env(make_env(nil, nil, dyn_env));
+
+ env_vbind(dyn_env, stderr_s, out_stream);
for (; bindings; bindings = cdr(bindings)) {
val binding = car(bindings);
@@ -1070,6 +1073,7 @@ val repl(val bindings, val in_stream, val out_stream)
set_sig_handler(num(SIGINT), old_sig_handler);
+ dyn_env = saved_dyn_env;
if (histfile_u8)
lino_hist_save(ls, histfile_u8);