From f83f19ea55fe6a6c2a10cdbd10b79487892e98ce Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 13 Jul 2008 22:14:25 +0000 Subject: [PATCH] more improvements to find a 'regmust' string (PR 9602) svn: r10751 --- src/mzscheme/src/regexp.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/regexp.c b/src/mzscheme/src/regexp.c index dc59acbc9d..7a69c997aa 100644 --- a/src/mzscheme/src/regexp.c +++ b/src/mzscheme/src/regexp.c @@ -245,6 +245,7 @@ regcomp(char *expstr, rxpos exp, int explen, int pcre) * strong reason, but sufficient in the absence of others. */ if (flags&SPSTART) { + int prev_op = 0; longest = 0; longest_is_ci = 0; len = 0; @@ -276,13 +277,18 @@ regcomp(char *expstr, rxpos exp, int explen, int pcre) longest_is_ci = 0; } break; - } else if ((mop == OPENN) - || (mop == SAVECONST) - || ((mop >= OPEN) && (mop < CLOSE))) { - mscan = NEXT_OP(mscan); + } else if ((mop == BRANCH) && (prev_op != BRANCH)) { + int mnext; + mnext = NEXT_OP(mscan); + if (rOP(mnext) != BRANCH) { + /* A branch with only one choice */ + mscan = OPERAND(mscan); + } else + break; } else break; } + prev_op = rOP(scan); } if (longest) { r->regmust = longest;