summaryrefslogtreecommitdiff
path: root/regexec.c
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2012-05-16 10:06:30 +0100
committerDavid Mitchell <davem@iabyn.com>2012-06-13 13:32:53 +0100
commit1ca2007ef74b65c3595a4c1d7d4b8500e2585721 (patch)
treeff9710f4c72f4c0673070e82ca81d249f2609cf2 /regexec.c
parentb3fd53f35858a4ca5c7226ba0fa5a9e864378c38 (diff)
downloadperl-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.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/regexec.c b/regexec.c
index 559e061381..8013d3fa35 100644
--- a/regexec.c
+++ b/regexec.c
@@ -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;*/