From d234059b1c6493e5eefb6c28aa2b8a021d894d51 Mon Sep 17 00:00:00 2001 From: pdpennock Date: Sun, 10 Oct 2010 00:05:24 +0000 Subject: 28338: keep =~ from inverting sense of subsequent tests (after &&/||) --- Src/parse.c | 3 ++- Test/C02cond.ztst | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Src/parse.c b/Src/parse.c index edf87bdbf..2953f00aa 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -2172,10 +2172,11 @@ par_cond_triple(char *a, char *b, char *c) ecadd(ecnpats++); } else if ((b[0] == Equals || b[0] == '=') && (b[1] == '~' || b[1] == Tilde) && !b[2]) { + /* We become an implicit COND_MODI but do not provide the first + * item, it's skipped */ ecadd(WCB_COND(COND_REGEX, 0)); ecstr(a); ecstr(c); - ecadd(ecnpats++); } else if (b[0] == '-') { if ((t0 = get_cond_num(b + 1)) > -1) { ecadd(WCB_COND(t0 + COND_NT, 0)); diff --git a/Test/C02cond.ztst b/Test/C02cond.ztst index 2d4204038..00e22c182 100644 --- a/Test/C02cond.ztst +++ b/Test/C02cond.ztst @@ -283,6 +283,19 @@ F:Failures in these cases do not indicate a problem in the shell. print OK fi) 0:MATCH, MBEGIN, MEND, match, mbegin, mend +>OK + + (if zmodload -i zsh/regex 2>/dev/null; then + if [[ a =~ a && b == b ]]; then + print OK + else + print "regex =~ inverted following test" + fi + else + # not a test error + print OK + fi) +0:regex infix operator should not invert following conditions >OK [[ -fail badly ]] -- cgit 1.4.1