summaryrefslogtreecommitdiff
path: root/regexec.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2002-01-05 17:21:12 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2002-01-05 17:21:12 +0000
commite2e799e5172c5070fc2dea2f53b2d660fbd52204 (patch)
treeaedd759294853804b6946d1ff445e97aae2cbb79 /regexec.c
parentb4023995ae634362f5a7adbc294793a9acb0a4b2 (diff)
downloadperl-e2e799e5172c5070fc2dea2f53b2d660fbd52204.tar.gz
Ooops. Retract the regex parts of #14090.
p4raw-id: //depot/perl@14091
Diffstat (limited to 'regexec.c')
-rw-r--r--regexec.c82
1 files changed, 21 insertions, 61 deletions
diff --git a/regexec.c b/regexec.c
index 5f2588887f..fe9ad4baca 100644
--- a/regexec.c
+++ b/regexec.c
@@ -2369,13 +2369,11 @@ S_regmatch(pTHX_ regnode *prog)
break;
case ANYOF:
if (do_utf8) {
- STRLEN inclasslen = PL_regeol - locinput;
-
- if (!reginclasslen(scan, (U8*)locinput, &inclasslen, do_utf8))
+ if (!reginclass(scan, (U8*)locinput, do_utf8))
sayNO;
if (locinput >= PL_regeol)
sayNO;
- locinput += inclasslen;
+ locinput += PL_utf8skip[nextchr];
nextchr = UCHARAT(locinput);
}
else {
@@ -4109,11 +4107,10 @@ S_regrepeat_hard(pTHX_ regnode *p, I32 max, I32 *lp)
*/
SV *
-Perl_regclass_swash(pTHX_ register regnode* node, bool doinit, SV** listsvp, SV **altsvp)
+Perl_regclass_swash(pTHX_ register regnode* node, bool doinit, SV** initsvp)
{
- SV *sw = NULL;
- SV *si = NULL;
- SV *alt = NULL;
+ SV *sw = NULL;
+ SV *si = NULL;
if (PL_regdata && PL_regdata->count) {
U32 n = ARG(node);
@@ -4121,11 +4118,10 @@ Perl_regclass_swash(pTHX_ register regnode* node, bool doinit, SV** listsvp, SV
if (PL_regdata->what[n] == 's') {
SV *rv = (SV*)PL_regdata->data[n];
AV *av = (AV*)SvRV((SV*)rv);
- SV **a, **b;
+ SV **a;
- si = *av_fetch(av, 0, FALSE);
- a = av_fetch(av, 1, FALSE);
- b = av_fetch(av, 2, FALSE);
+ si = *av_fetch(av, 0, FALSE);
+ a = av_fetch(av, 1, FALSE);
if (a)
sw = *a;
@@ -4133,15 +4129,11 @@ Perl_regclass_swash(pTHX_ register regnode* node, bool doinit, SV** listsvp, SV
sw = swash_init("utf8", "", si, 1, 0);
(void)av_store(av, 1, sw);
}
- if (b)
- alt = *b;
}
}
- if (listsvp)
- *listsvp = si;
- if (altsvp)
- *altsvp = alt;
+ if (initsvp)
+ *initsvp = si;
return sw;
}
@@ -4151,20 +4143,16 @@ Perl_regclass_swash(pTHX_ register regnode* node, bool doinit, SV** listsvp, SV
*/
STATIC bool
-S_reginclasslen(pTHX_ register regnode *n, register U8* p, STRLEN* lenp, register bool do_utf8)
+S_reginclass(pTHX_ register regnode *n, register U8* p, register bool do_utf8)
{
char flags = ANYOF_FLAGS(n);
bool match = FALSE;
UV c;
STRLEN len = 0;
- STRLEN plen;
c = do_utf8 ? utf8_to_uvchr(p, &len) : *p;
- plen = lenp ? *lenp : UNISKIP(c);
if (do_utf8 || (flags & ANYOF_UNICODE)) {
- if (lenp)
- *lenp = 0;
if (do_utf8 && !ANYOF_RUNTIME(n)) {
if (len != (STRLEN)-1 && c < 256 && ANYOF_BITMAP_TEST(n, c))
match = TRUE;
@@ -4172,46 +4160,24 @@ S_reginclasslen(pTHX_ register regnode *n, register U8* p, STRLEN* lenp, registe
if (!match && do_utf8 && (flags & ANYOF_UNICODE_ALL) && c >= 256)
match = TRUE;
if (!match) {
- AV *av;
- SV *sw = regclass_swash(n, TRUE, 0, (SV**)&av);
+ SV *sw = regclass_swash(n, TRUE, 0);
if (sw) {
if (swash_fetch(sw, p, do_utf8))
match = TRUE;
else if (flags & ANYOF_FOLD) {
- U8 tmpbuf[UTF8_MAXLEN_FOLD+1];
- STRLEN tmplen;
-
- if (!match && lenp && av) {
- I32 i;
-
- for (i = 0; i <= av_len(av); i++) {
- SV* sv = *av_fetch(av, i, FALSE);
- STRLEN len;
- char *s = SvPV(sv, len);
-
- if (len <= plen && memEQ(s, p, len)) {
- *lenp = len;
- match = TRUE;
- break;
- }
- }
- }
- if (!match) {
- to_utf8_fold(p, tmpbuf, &tmplen);
- if (swash_fetch(sw, tmpbuf, do_utf8))
- match = TRUE;
- }
- if (!match) {
- to_utf8_upper(p, tmpbuf, &tmplen);
- if (swash_fetch(sw, tmpbuf, do_utf8))
- match = TRUE;
- }
+ U8 foldbuf[UTF8_MAXLEN_FOLD+1];
+ STRLEN foldlen;
+
+ to_utf8_fold(p, foldbuf, &foldlen);
+ if (swash_fetch(sw, foldbuf, do_utf8))
+ match = TRUE;
+ to_utf8_upper(p, foldbuf, &foldlen);
+ if (swash_fetch(sw, foldbuf, do_utf8))
+ match = TRUE;
}
}
}
- if (match && lenp && *lenp == 0)
- *lenp = UNISKIP(c);
}
if (!match && c < 256) {
if (ANYOF_BITMAP_TEST(n, c))
@@ -4272,12 +4238,6 @@ S_reginclasslen(pTHX_ register regnode *n, register U8* p, STRLEN* lenp, registe
return (flags & ANYOF_INVERT) ? !match : match;
}
-STATIC bool
-S_reginclass(pTHX_ register regnode *n, register U8* p, register bool do_utf8)
-{
- return S_reginclasslen(aTHX_ n, p, 0, do_utf8);
-}
-
STATIC U8 *
S_reghop(pTHX_ U8 *s, I32 off)
{