rc

[fork] interactive rc shell
Log | Files | Refs | README | LICENSE

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:
Mtrip.rc | 6++++++
Mwalk.c | 5+++--
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 */