From db790694aed3d02bb7856bac1cc1d23d59914779 Mon Sep 17 00:00:00 2001 From: jpco Date: Sat, 14 Sep 2024 07:32:22 -0700 Subject: [PATCH] Clear eval_exitonfalse when setting up a new input stream. This causes %exit-on-false, as part of %dispatch, to be the actual trigger for the exit-on-false behavior. The implementation context strongly implies that the current behavior is a bug. (Why would we use %exit-on-false, whose only job is to set eval_exitonfalse to 1, and also just leave eval_exitonfalse as 1 ourselves?) This also makes using `es -e` with any kind of overriden REPL much easier, because %prompt and other REPL hooks can no longer trigger the exit-on-false behavior. This is one part of #73, but because this part is almost definitely just a bug, while the rest is more about design improvements, I am merging this part more unilaterally. --- input.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/input.c b/input.c index 18ab9cdc..0af3c1f4 100644 --- a/input.c +++ b/input.c @@ -418,8 +418,10 @@ extern List *runinput(Input *in, int runflags) { = varlookup(dispatcher[((flags & run_printcmds) ? 1 : 0) + ((flags & run_noexec) ? 2 : 0)], NULL); - if (flags & eval_exitonfalse) + if (flags & eval_exitonfalse) { dispatch = mklist(mkstr("%exit-on-false"), dispatch); + flags &= ~eval_exitonfalse; + } varpush(&push, "fn-%dispatch", dispatch); repl = varlookup((flags & run_interactive)