commit 03bfa8b5f639928fa3f003182a51ee263a8dcc91
parent 819db03616d13e2b3da646140d74a4879d46f8c8
Author: Drazen Borkovic <borkovic@users.noreply.github.com>
Date: Thu, 11 May 2017 19:49:52 -0700
Fix: "rc -e" exits if condition in while statement returns false the second time
Diffstat:
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/trip.rc b/trip.rc
@@ -603,3 +603,9 @@ submatch 'echo foo = bar' 'foo = bar' 'unquoted equals 2'
submatch 'echo foo=bar' 'foo=bar' 'unquoted equals 2'
submatch 'echo foo=' 'foo=' 'unquoted equals 3'
submatch 'echo =bar; whatis -v echo' 'echo=bar' 'unquoted equals 4'
+###############################################################
+X=`{ $rc -ec 'b=true; while($b){b=false}; echo YYY' }
+if (! ~ $X YYY) {
+ fail '"rc -e" exits when condition in the while statement fails in the second iteration'
+}
+###############################################################
diff --git a/walk.c b/walk.c
@@ -110,6 +110,7 @@ top: sigchk();
cond = oldcond;
break;
}
+ cond = oldcond;
if (sigsetjmp(j.j, 1))
break;
jbreak.jb = &j;
@@ -117,12 +118,12 @@ top: sigchk();
do {
Edata block;
block.b = newblock();
- cond = oldcond;
except(eArena, block, &e2);
walk(n->u[1].p, TRUE);
+ cond = TRUE;
testtrue = walk(n->u[0].p, TRUE);
+ cond = oldcond;
unexcept(); /* eArena */
- cond = TRUE;
} while (testtrue);
cond = oldcond;
unexcept(); /* eBreak */