summaryrefslogtreecommitdiff
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
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.
-rw-r--r--regexec.c20
-rw-r--r--regexp.h2
2 files changed, 12 insertions, 10 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;*/
diff --git a/regexp.h b/regexp.h
index 4782ac6d1a..2f02157308 100644
--- a/regexp.h
+++ b/regexp.h
@@ -61,7 +61,7 @@ typedef struct regexp_paren_pair {
* "abc" =~ /(.(?{print "[$1]"}))+/
*outputs [][a][b]
* This field is not part of the API. */
- char *start_tmp;
+ I32 start_tmp;
} regexp_paren_pair;
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)