summaryrefslogtreecommitdiff
path: root/input.c
diff options
context:
space:
mode:
authortjg <tjg>2001-10-04 12:32:43 +0000
committerToby Goodwin <toby@paccrat.org>2015-05-16 21:23:19 +0100
commit8731b3ebc39715005c402d746e282fe2edfa7118 (patch)
treef933d980f65fdd55518caeff68fd7752553e9662 /input.c
parent6dedd11104490fe8ac43bd35c39c0aed12047322 (diff)
Bug: semantic errors in `fn prompt' no longer throw rc into a tailspin.
Diffstat (limited to 'input.c')
-rw-r--r--input.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/input.c b/input.c
index 0f649e4..48c6a9c 100644
--- a/input.c
+++ b/input.c
@@ -242,9 +242,9 @@ extern void flushu() {
extern Node *doit(bool clobberexecit) {
bool eof;
- bool execit ;
+ bool execit;
Jbwrap j;
- Estack e1, e2;
+ Estack e1;
Edata jerror;
if (dashen)
@@ -255,6 +255,7 @@ extern Node *doit(bool clobberexecit) {
except(eError, jerror, &e1);
for (eof = FALSE; !eof;) {
Edata block;
+ Estack e2;
block.b = newblock();
except(eArena, block, &e2);
sigchk();
@@ -270,7 +271,17 @@ extern Node *doit(bool clobberexecit) {
List *s;
if (!dashen && fnlookup("prompt") != NULL) {
static char *arglist[] = { "prompt", NULL };
- funcall(arglist);
+ Estack e3;
+ Edata pjmp;
+ Jbwrap pj;
+
+ if (sigsetjmp(pj.j, 1) == 0) {
+ pjmp.jb = &pj;
+ except(eError, pjmp, &e3);
+
+ funcall(arglist);
+ unexcept();
+ }
}
if ((s = varlookup("prompt")) != NULL) {
#if EDITLINE || READLINE