diff options
author | David Mitchell <davem@iabyn.com> | 2012-05-16 10:06:30 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2012-06-13 13:32:53 +0100 |
commit | 1ca2007ef74b65c3595a4c1d7d4b8500e2585721 (patch) | |
tree | ff9710f4c72f4c0673070e82ca81d249f2609cf2 /regexec.c | |
parent | b3fd53f35858a4ca5c7226ba0fa5a9e864378c38 (diff) | |
download | perl-1ca2007ef74b65c3595a4c1d7d4b8500e2585721.tar.gz |
make regexp_paren_pair.start_tmp an offset
Currently the start_tmp field is a pointer into the string, whereas the
the start and end fields are offsets within that string. Make start_tmp
an offset too for consistency.
Diffstat (limited to 'regexec.c')
-rw-r--r-- | regexec.c | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -366,12 +366,13 @@ S_regcppush(pTHX_ const regexp *rex, I32 parenfloor) /* REGCP_PARENS_ELEMS are pushed per pairs of parentheses. */ SSPUSHINT(rex->offs[p].end); SSPUSHINT(rex->offs[p].start); - SSPUSHPTR(rex->offs[p].start_tmp); + SSPUSHINT(rex->offs[p].start_tmp); SSPUSHINT(p); DEBUG_BUFFERS_r(PerlIO_printf(Perl_debug_log, " saving \\%"UVuf" %"IVdf"(%"IVdf")..%"IVdf"\n", - (UV)p, (IV)rex->offs[p].start, - (IV)(rex->offs[p].start_tmp - PL_bostr), + (UV)p, + (IV)rex->offs[p].start, + (IV)rex->offs[p].start_tmp, (IV)rex->offs[p].end )); } @@ -425,7 +426,7 @@ S_regcppop(pTHX_ regexp *rex) for ( ; i > 0; i -= REGCP_PAREN_ELEMS) { I32 tmps; U32 paren = (U32)SSPOPINT; - rex->offs[paren].start_tmp = (char *) SSPOPPTR; + rex->offs[paren].start_tmp = SSPOPINT; rex->offs[paren].start = SSPOPINT; tmps = SSPOPINT; if (paren <= rex->lastparen) @@ -433,8 +434,9 @@ S_regcppop(pTHX_ regexp *rex) DEBUG_BUFFERS_r( PerlIO_printf(Perl_debug_log, " restoring \\%"UVuf" to %"IVdf"(%"IVdf")..%"IVdf"%s\n", - (UV)paren, (IV)rex->offs[paren].start, - (IV)(rex->offs[paren].start_tmp - PL_bostr), + (UV)paren, + (IV)rex->offs[paren].start, + (IV)rex->offs[paren].start_tmp, (IV)rex->offs[paren].end, (paren > rex->lastparen ? "(no)" : "")); ); @@ -4537,14 +4539,14 @@ S_regmatch(pTHX_ regmatch_info *reginfo, regnode *prog) case OPEN: n = ARG(scan); /* which paren pair */ - rex->offs[n].start_tmp = locinput; + rex->offs[n].start_tmp = locinput - PL_bostr; if (n > PL_regsize) PL_regsize = n; lastopen = n; break; case CLOSE: n = ARG(scan); /* which paren pair */ - rex->offs[n].start = rex->offs[n].start_tmp - PL_bostr; + rex->offs[n].start = rex->offs[n].start_tmp; rex->offs[n].end = locinput - PL_bostr; /*if (n > PL_regsize) PL_regsize = n;*/ @@ -4566,7 +4568,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, regnode *prog) n = ARG(cursor); if ( n <= lastopen ) { rex->offs[n].start - = rex->offs[n].start_tmp - PL_bostr; + = rex->offs[n].start_tmp; rex->offs[n].end = locinput - PL_bostr; /*if (n > PL_regsize) PL_regsize = n;*/ |