From b3185342b0f8305c0338e4d0b771b5bc1e71af17 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Mon, 31 Jan 2000 12:06:08 +0000 Subject: zsh-workers/9496 --- Src/loop.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'Src/loop.c') diff --git a/Src/loop.c b/Src/loop.c index dcdd79e13..f413d4167 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -138,6 +138,8 @@ execfor(Estate state, int do_exec) break; contflag = 0; } + if (retflag) + break; if (iscond && !errflag) { str = dupstring(advance); if (isset(XTRACE)) { @@ -258,7 +260,7 @@ execselect(Estate state, int do_exec) break; contflag = 0; } - if (errflag) + if (retflag || errflag) break; } done: @@ -357,6 +359,10 @@ execwhile(Estate state, int do_exec) lastval = oldval; break; } + if (retflag) { + lastval = oldval; + break; + } execlist(state, 1, 0); if (breaks) { breaks--; @@ -364,11 +370,13 @@ execwhile(Estate state, int do_exec) break; contflag = 0; } - freeheap(); if (errflag) { lastval = 1; break; } + if (retflag) + break; + freeheap(); oldval = lastval; } cmdpop(); @@ -410,6 +418,8 @@ execrepeat(Estate state, int do_exec) lastval = 1; break; } + if (retflag) + break; } cmdpop(); popheap(); @@ -447,6 +457,8 @@ execif(Estate state, int do_exec) run = 1; break; } + if (retflag) + break; s = 1; state->pc = next; } @@ -532,7 +544,7 @@ execcase(Estate state, int do_exec) if (pprog && pattry(pprog, word)) { execlist(state, 1, ((WC_CASE_TYPE(code) == WC_CASE_OR) && do_exec)); - while (wc_code(code) == WC_CASE && + while (!retflag && wc_code(code) == WC_CASE && WC_CASE_TYPE(code) == WC_CASE_AND) { state->pc = next; code = *state->pc; -- cgit 1.4.1