Change 27783 by [EMAIL PROTECTED] on 2006/04/13 02:20:33

        eliminate PL_reg_re
        (only another 439 to go ...)

Affected files ...

... //depot/perl/embed.fnc#351 edit
... //depot/perl/embed.h#583 edit
... //depot/perl/pod/perlintern.pod#52 edit
... //depot/perl/proto.h#698 edit
... //depot/perl/regcomp.c#415 edit
... //depot/perl/regexec.c#402 edit
... //depot/perl/regexp.h#43 edit
... //depot/perl/sv.c#1236 edit

Differences ...

==== //depot/perl/embed.fnc#351 (text) ====
Index: perl/embed.fnc
--- perl/embed.fnc#350~27779~   2006-04-12 15:45:12.000000000 -0700
+++ perl/embed.fnc      2006-04-12 19:20:33.000000000 -0700
@@ -650,7 +650,7 @@
 Amb    |OP*    |ref            |NULLOK OP* o|I32 type
 p      |OP*    |refkids        |NULLOK OP* o|I32 type
 Ap     |void   |regdump        |NN const regexp* r
-Ap     |SV*    |regclass_swash |NN const struct regnode *n|bool doinit|NULLOK 
SV **listsvp|NULLOK SV **altsvp
+Ap     |SV*    |regclass_swash |NULLOK const regexp *prog|NN const struct 
regnode *n|bool doinit|NULLOK SV **listsvp|NULLOK SV **altsvp
 Ap     |I32    |pregexec       |NN regexp* prog|NN char* stringarg \
                                |NN char* strend|NN char* strbeg|I32 minend \
                                |NN SV* screamer|U32 nosave
@@ -664,7 +664,7 @@
                                |NN char* strend|NN char* strbeg|I32 minend \
                                |NN SV* screamer|NULLOK void* data|U32 flags
 ApR    |regnode*|regnext       |NN regnode* p
-Ep     |void   |regprop        |NN SV* sv|NN const regnode* o
+Ep     |void   |regprop        |NULLOK const regexp *prog|NN SV* sv|NN const 
regnode* o
 Ap     |void   |repeatcpy      |NN char* to|NN const char* from|I32 len|I32 
count
 ApP    |char*  |rninstr        |NN const char* big|NN const char* bigend \
                                |NN const char* little|NN const char* lend
@@ -1315,9 +1315,9 @@
 
 #if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
 ERs    |I32    |regmatch       |NN regexp *rex|NN regnode *prog
-ERs    |I32    |regrepeat      |NN const regnode *p|I32 max
+ERs    |I32    |regrepeat      |NN const regexp *prog|NN const regnode *p|I32 
max
 ERs    |I32    |regtry         |NN regexp *prog|NN char *startpos
-ERs    |bool   |reginclass     |NN const regnode *n|NN const U8 *p|NULLOK 
STRLEN *lenp\
+ERs    |bool   |reginclass     |NULLOK const regexp *prog|NN const regnode 
*n|NN const U8 *p|NULLOK STRLEN *lenp\
                                |bool do_utf8sv_is_utf8
 Es     |CHECKPOINT|regcppush   |I32 parenfloor
 Es     |char*  |regcppop       |NN const regexp *rex

==== //depot/perl/embed.h#583 (text+w) ====
Index: perl/embed.h
--- perl/embed.h#582~27779~     2006-04-12 15:45:12.000000000 -0700
+++ perl/embed.h        2006-04-12 19:20:33.000000000 -0700
@@ -2833,7 +2833,7 @@
 #define refkids(a,b)           Perl_refkids(aTHX_ a,b)
 #endif
 #define regdump(a)             Perl_regdump(aTHX_ a)
-#define regclass_swash(a,b,c,d)        Perl_regclass_swash(aTHX_ a,b,c,d)
+#define regclass_swash(a,b,c,d,e)      Perl_regclass_swash(aTHX_ a,b,c,d,e)
 #define pregexec(a,b,c,d,e,f,g)        Perl_pregexec(aTHX_ a,b,c,d,e,f,g)
 #define pregfree(a)            Perl_pregfree(aTHX_ a)
 #define pregcomp(a,b,c)                Perl_pregcomp(aTHX_ a,b,c)
@@ -2842,7 +2842,7 @@
 #define regexec_flags(a,b,c,d,e,f,g,h) Perl_regexec_flags(aTHX_ 
a,b,c,d,e,f,g,h)
 #define regnext(a)             Perl_regnext(aTHX_ a)
 #if defined(PERL_CORE) || defined(PERL_EXT)
-#define regprop(a,b)           Perl_regprop(aTHX_ a,b)
+#define regprop(a,b,c)         Perl_regprop(aTHX_ a,b,c)
 #endif
 #define repeatcpy(a,b,c,d)     Perl_repeatcpy(aTHX_ a,b,c,d)
 #define rninstr(a,b,c,d)       Perl_rninstr(aTHX_ a,b,c,d)
@@ -3492,9 +3492,9 @@
 #if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
 #if defined(PERL_CORE) || defined(PERL_EXT)
 #define regmatch(a,b)          S_regmatch(aTHX_ a,b)
-#define regrepeat(a,b)         S_regrepeat(aTHX_ a,b)
+#define regrepeat(a,b,c)       S_regrepeat(aTHX_ a,b,c)
 #define regtry(a,b)            S_regtry(aTHX_ a,b)
-#define reginclass(a,b,c,d)    S_reginclass(aTHX_ a,b,c,d)
+#define reginclass(a,b,c,d,e)  S_reginclass(aTHX_ a,b,c,d,e)
 #define regcppush(a)           S_regcppush(aTHX_ a)
 #define regcppop(a)            S_regcppop(aTHX_ a)
 #define reghop3                        S_reghop3

==== //depot/perl/pod/perlintern.pod#52 (text+w) ====
Index: perl/pod/perlintern.pod
--- perl/pod/perlintern.pod#51~27680~   2006-04-02 09:51:53.000000000 -0700
+++ perl/pod/perlintern.pod     2006-04-12 19:20:33.000000000 -0700
@@ -485,26 +485,6 @@
 =for hackers
 Found in file hv.c
 
-=item refcounted_he_copy
-X<refcounted_he_copy>
-
-Copies a chain of C<struct refcounted_he *>. Used by C<pp_entereval>.
-
-       struct refcounted_he *  refcounted_he_copy(const struct refcounted_he 
*he)
-
-=for hackers
-Found in file hv.c
-
-=item refcounted_he_dup
-X<refcounted_he_dup>
-
-Duplicates the C<struct refcounted_he *> for a new thread.
-
-       struct refcounted_he *  refcounted_he_dup(const struct refcounted_he 
*const he, CLONE_PARAMS* param)
-
-=for hackers
-Found in file hv.c
-
 =item refcounted_he_free
 X<refcounted_he_free>
 

==== //depot/perl/proto.h#698 (text+w) ====
Index: perl/proto.h
--- perl/proto.h#697~27779~     2006-04-12 15:45:12.000000000 -0700
+++ perl/proto.h        2006-04-12 19:20:33.000000000 -0700
@@ -1805,8 +1805,8 @@
 PERL_CALLCONV void     Perl_regdump(pTHX_ const regexp* r)
                        __attribute__nonnull__(pTHX_1);
 
-PERL_CALLCONV SV*      Perl_regclass_swash(pTHX_ const struct regnode *n, bool 
doinit, SV **listsvp, SV **altsvp)
-                       __attribute__nonnull__(pTHX_1);
+PERL_CALLCONV SV*      Perl_regclass_swash(pTHX_ const regexp *prog, const 
struct regnode *n, bool doinit, SV **listsvp, SV **altsvp)
+                       __attribute__nonnull__(pTHX_2);
 
 PERL_CALLCONV I32      Perl_pregexec(pTHX_ regexp* prog, char* stringarg, 
char* strend, char* strbeg, I32 minend, SV* screamer, U32 nosave)
                        __attribute__nonnull__(pTHX_1)
@@ -1840,9 +1840,9 @@
                        __attribute__warn_unused_result__
                        __attribute__nonnull__(pTHX_1);
 
-PERL_CALLCONV void     Perl_regprop(pTHX_ SV* sv, const regnode* o)
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+PERL_CALLCONV void     Perl_regprop(pTHX_ const regexp *prog, SV* sv, const 
regnode* o)
+                       __attribute__nonnull__(pTHX_2)
+                       __attribute__nonnull__(pTHX_3);
 
 PERL_CALLCONV void     Perl_repeatcpy(pTHX_ char* to, const char* from, I32 
len, I32 count)
                        __attribute__nonnull__(pTHX_1)
@@ -3619,19 +3619,20 @@
                        __attribute__nonnull__(pTHX_1)
                        __attribute__nonnull__(pTHX_2);
 
-STATIC I32     S_regrepeat(pTHX_ const regnode *p, I32 max)
+STATIC I32     S_regrepeat(pTHX_ const regexp *prog, const regnode *p, I32 max)
                        __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1);
+                       __attribute__nonnull__(pTHX_1)
+                       __attribute__nonnull__(pTHX_2);
 
 STATIC I32     S_regtry(pTHX_ regexp *prog, char *startpos)
                        __attribute__warn_unused_result__
                        __attribute__nonnull__(pTHX_1)
                        __attribute__nonnull__(pTHX_2);
 
-STATIC bool    S_reginclass(pTHX_ const regnode *n, const U8 *p, STRLEN *lenp, 
bool do_utf8sv_is_utf8)
+STATIC bool    S_reginclass(pTHX_ const regexp *prog, const regnode *n, const 
U8 *p, STRLEN *lenp, bool do_utf8sv_is_utf8)
                        __attribute__warn_unused_result__
-                       __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_2);
+                       __attribute__nonnull__(pTHX_2)
+                       __attribute__nonnull__(pTHX_3);
 
 STATIC CHECKPOINT      S_regcppush(pTHX_ I32 parenfloor);
 STATIC char*   S_regcppop(pTHX_ const regexp *rex)

==== //depot/perl/regcomp.c#415 (text) ====
Index: perl/regcomp.c
--- perl/regcomp.c#414~27771~   2006-04-11 14:53:33.000000000 -0700
+++ perl/regcomp.c      2006-04-12 19:20:33.000000000 -0700
@@ -1537,7 +1537,7 @@
        /* Peephole optimizer: */
        DEBUG_OPTIMISE_r({
          SV * const mysv=sv_newmortal();
-         regprop( mysv, scan);
+         regprop(RExC_rx, mysv, scan);
          PerlIO_printf(Perl_debug_log, "%*speep: %s (0x%08"UVXf")\n",
            (int)depth*2, "", SvPV_nolen_const(mysv), PTR2UV(scan));
        });
@@ -1832,7 +1832,7 @@
                         }
 
                         DEBUG_OPTIMISE_r({
-                            regprop( mysv, tail );
+                            regprop(RExC_rx, mysv, tail );
                             PerlIO_printf( Perl_debug_log, "%*s%s%s%s\n",
                                 (int)depth * 2 + 2, "", "Tail node is:", 
SvPV_nolen_const( mysv ),
                                 (RExC_seen_evals) ? "[EVAL]" : ""
@@ -1869,16 +1869,16 @@
                             regnode * const noper_next = regnext( noper );
 
                             DEBUG_OPTIMISE_r({
-                                regprop( mysv, cur);
+                                regprop(RExC_rx, mysv, cur);
                                 PerlIO_printf( Perl_debug_log, "%*s%s",
                                    (int)depth * 2 + 2,"  ", SvPV_nolen_const( 
mysv ) );
 
-                                regprop( mysv, noper);
+                                regprop(RExC_rx, mysv, noper);
                                 PerlIO_printf( Perl_debug_log, " -> %s",
                                     SvPV_nolen_const(mysv));
 
                                 if ( noper_next ) {
-                                  regprop( mysv, noper_next );
+                                  regprop(RExC_rx, mysv, noper_next );
                                   PerlIO_printf( Perl_debug_log,"\t=> %s\t",
                                     SvPV_nolen_const(mysv));
                                 }
@@ -1896,20 +1896,20 @@
                                 } else {
                                     DEBUG_OPTIMISE_r(
                                         if (!last ) {
-                                            regprop( mysv, first);
+                                            regprop(RExC_rx, mysv, first);
                                             PerlIO_printf( Perl_debug_log, 
"%*s%s",
                                               (int)depth * 2 + 2, "F:", 
SvPV_nolen_const( mysv ) );
-                                            regprop( mysv, NEXTOPER(first) );
+                                            regprop(RExC_rx, mysv, 
NEXTOPER(first) );
                                             PerlIO_printf( Perl_debug_log, " 
-> %s\n",
                                               SvPV_nolen_const( mysv ) );
                                         }
                                     );
                                     last = cur;
                                     DEBUG_OPTIMISE_r({
-                                        regprop( mysv, cur);
+                                        regprop(RExC_rx, mysv, cur);
                                         PerlIO_printf( Perl_debug_log, "%*s%s",
                                           (int)depth * 2 + 2, "N:", 
SvPV_nolen_const( mysv ) );
-                                        regprop( mysv, noper );
+                                        regprop(RExC_rx, mysv, noper );
                                         PerlIO_printf( Perl_debug_log, " -> 
%s\n",
                                           SvPV_nolen_const( mysv ) );
                                     });
@@ -1937,7 +1937,7 @@
                             }
                         }
                         DEBUG_OPTIMISE_r({
-                            regprop( mysv, cur);
+                            regprop(RExC_rx, mysv, cur);
                             PerlIO_printf( Perl_debug_log,
                               "%*s%s\t(0x%p,0x%p,0x%p)\n", (int)depth * 2 + 2,
                               "  ", SvPV_nolen_const( mysv ), first, last, 
cur);
@@ -3109,7 +3109,7 @@
            r->regstclass = (regnode*)RExC_rx->data->data[n];
            r->reganch &= ~ROPT_SKIP;   /* Used in find_byclass(). */
            DEBUG_COMPILE_r({ SV *sv = sv_newmortal();
-                     regprop(sv, (regnode*)data.start_class);
+                     regprop(r, sv, (regnode*)data.start_class);
                      PerlIO_printf(Perl_debug_log,
                                    "synthetic stclass \"%s\".\n",
                                    SvPVX_const(sv));});
@@ -3164,7 +3164,7 @@
            r->regstclass = (regnode*)RExC_rx->data->data[n];
            r->reganch &= ~ROPT_SKIP;   /* Used in find_byclass(). */
            DEBUG_COMPILE_r({ SV* sv = sv_newmortal();
-                     regprop(sv, (regnode*)data.start_class);
+                     regprop(r, sv, (regnode*)data.start_class);
                      PerlIO_printf(Perl_debug_log,
                                    "synthetic stclass \"%s\".\n",
                                    SvPVX_const(sv));});
@@ -5719,7 +5719,7 @@
        PerlIO_printf(Perl_debug_log, ") ");
 
     if (r->regstclass) {
-       regprop(sv, r->regstclass);
+       regprop(r, sv, r->regstclass);
        PerlIO_printf(Perl_debug_log, "stclass \"%s\" ", SvPVX_const(sv));
     }
     if (r->reganch & ROPT_ANCH) {
@@ -5766,7 +5766,7 @@
 - regprop - printable representation of opcode
 */
 void
-Perl_regprop(pTHX_ SV *sv, const regnode *o)
+Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o)
 {
 #ifdef DEBUGGING
     dVAR;
@@ -5887,7 +5887,7 @@
 
        {
            SV *lv;
-           SV * const sw = regclass_swash(o, FALSE, &lv, 0);
+           SV * const sw = regclass_swash(prog, o, FALSE, &lv, 0);
        
            if (lv) {
                if (sw) {
@@ -6249,7 +6249,7 @@
        /* Where, what. */
        if (OP(node) == OPTIMIZED)
            goto after_print;
-       regprop(sv, node);
+       regprop(r, sv, node);
        PerlIO_printf(Perl_debug_log, "%4"IVdf":%*s%s", (IV)(node - start),
                      (int)(2*l + 1), "", SvPVX_const(sv));
        if (next == NULL)               /* Next ptr. */

==== //depot/perl/regexec.c#402 (text) ====
Index: perl/regexec.c
--- perl/regexec.c#401~27782~   2006-04-12 16:51:57.000000000 -0700
+++ perl/regexec.c      2006-04-12 19:20:33.000000000 -0700
@@ -107,7 +107,7 @@
 #define        STATIC  static
 #endif
 
-#define REGINCLASS(p,c)  (ANYOF_FLAGS(p) ? reginclass(p,c,0,0) : 
ANYOF_BITMAP_TEST(p,*(c)))
+#define REGINCLASS(prog,p,c)  (ANYOF_FLAGS(p) ? reginclass(prog,p,c,0,0) : 
ANYOF_BITMAP_TEST(p,*(c)))
 
 /*
  * Forwards.
@@ -839,7 +839,6 @@
                   : strend);
 
        t = s;
-       PL_reg_re = prog;
         s = find_byclass(prog, prog->regstclass, s, endpos, 1);
        if (!s) {
 #ifdef DEBUGGING
@@ -954,8 +953,8 @@
                 while (s + (uskip = UTF8SKIP(s)) <= strend) {
                      if ((ANYOF_FLAGS(c) & ANYOF_UNICODE) ||
                          !UTF8_IS_INVARIANT((U8)s[0]) ?
-                         reginclass(c, (U8*)s, 0, do_utf8) :
-                         REGINCLASS(c, (U8*)s)) {
+                         reginclass(prog, c, (U8*)s, 0, do_utf8) :
+                         REGINCLASS(prog, c, (U8*)s)) {
                           if (tmp && (norun || regtry(prog, s)))
                                goto got_it;
                           else
@@ -970,7 +969,7 @@
                 while (s < strend) {
                      STRLEN skip = 1;
 
-                     if (REGINCLASS(c, (U8*)s) ||
+                     if (REGINCLASS(prog, c, (U8*)s) ||
                          (ANYOF_FOLD_SHARP_S(c, s, strend) &&
                           /* The assignment of 2 is intentional:
                            * for the folded sharp s, the skip is 2. */
@@ -1622,7 +1621,6 @@
        return 0;
     }
 
-    PL_reg_re = prog;
 #ifdef DEBUGGING
     PL_regnarrate = DEBUG_r_TEST;
 #endif
@@ -1912,7 +1910,7 @@
            int len0;
            int len1;
 
-           regprop(prop, c);
+           regprop(prog, prop, c);
            s0 = UTF ?
              pv_uni_display(dsv0, (U8*)SvPVX_const(prop), SvCUR(prop), 60,
                             UNI_DISPLAY_REGEX) :
@@ -2537,7 +2535,7 @@
                pref0_len = 0;
            if (pref0_len > pref_len)
                pref0_len = pref_len;
-           regprop(prop, scan);
+           regprop(rex, prop, scan);
            {
              const char * const s0 =
                do_utf8 && OP(scan) != CANY ?
@@ -2679,7 +2677,7 @@
 
                /* what trie are we using right now */
                reg_trie_data *trie
-                   = (reg_trie_data*)PL_reg_re->data->data[ ARG( scan ) ];
+                   = (reg_trie_data*)rex->data->data[ ARG( scan ) ];
                st->u.trie.accepted = 0; /* how many accepting states we have 
seen */
                result = 0;
 
@@ -2844,7 +2842,7 @@
                        }
                        DEBUG_EXECUTE_r({
                            reg_trie_data * const trie = (reg_trie_data*)
-                                           PL_reg_re->data->data[ARG(scan)];
+                                           rex->data->data[ARG(scan)];
                            SV ** const tmp = av_fetch( trie->words, 
st->u.trie.accept_buff[ best ].wordnum - 1, 0 );
                            PerlIO_printf( Perl_debug_log, "%*s  %strying 
alternation #%d <%s> at 0x%p%s\n",
                                REPORT_CODE_OFF+PL_regindent*2, "", 
PL_colors[4],
@@ -2986,7 +2984,7 @@
            if (do_utf8) {
                STRLEN inclasslen = PL_regeol - locinput;
 
-               if (!reginclass(scan, (U8*)locinput, &inclasslen, do_utf8))
+               if (!reginclass(rex, scan, (U8*)locinput, &inclasslen, do_utf8))
                    sayNO_ANYOF;
                if (locinput >= PL_regeol)
                    sayNO;
@@ -2997,7 +2995,7 @@
            else {
                if (nextchr < 0)
                    nextchr = UCHARAT(locinput);
-               if (!REGINCLASS(scan, (U8*)locinput))
+               if (!REGINCLASS(rex, scan, (U8*)locinput))
                    sayNO_ANYOF;
                if (!nextchr && locinput >= PL_regeol)
                    sayNO;
@@ -3299,12 +3297,11 @@
                OP_4tree * const oop = PL_op;
                COP * const ocurcop = PL_curcop;
                PAD *old_comppad;
-               struct regexp * const oreg = PL_reg_re;
            
                n = ARG(scan);
-               PL_op = (OP_4tree*)PL_reg_re->data->data[n];
+               PL_op = (OP_4tree*)rex->data->data[n];
                DEBUG_EXECUTE_r( PerlIO_printf(Perl_debug_log, "  re_eval 
0x%"UVxf"\n", PTR2UV(PL_op)) );
-               PAD_SAVE_LOCAL(old_comppad, (PAD*)PL_reg_re->data->data[n + 2]);
+               PAD_SAVE_LOCAL(old_comppad, (PAD*)rex->data->data[n + 2]);
                PL_regendp[0] = PL_reg_magic->mg_len = locinput - PL_bostr;
 
                CALLRUNOPS(aTHX);                       /* Scalar context. */
@@ -3319,7 +3316,6 @@
                PL_op = oop;
                PAD_RESTORE_LOCAL(old_comppad);
                PL_curcop = ocurcop;
-               PL_reg_re = oreg;
                if (!st->logical) {
                    /* /(?{...})/ */
                    sv_setsv(save_scalar(PL_replgv), ret);
@@ -3390,9 +3386,7 @@
                            ((re->reganch & ROPT_UTF8) != 0);
                if (st->u.eval.toggleutf) PL_reg_flags ^= RF_utf8;
                st->u.eval.prev_rex = rex;
-               assert(rex == PL_reg_re); /* XXX */
                rex = re;
-               PL_reg_re = rex; /* XXX */
 
                st->u.eval.prev_eval = cur_eval;
                st->u.eval.prev_slab = PL_regmatch_slab;
@@ -4080,7 +4074,7 @@
            PL_reginput = locinput;
            if (st->minmod) {
                st->minmod = 0;
-               if (st->ln && regrepeat(scan, st->ln) < st->ln)
+               if (st->ln && regrepeat(rex, scan, st->ln) < st->ln)
                    sayNO;
                locinput = PL_reginput;
                REGCP_SET(st->u.plus.lastcp);
@@ -4152,7 +4146,7 @@
                        /* PL_reginput == old now */
                        if (locinput != st->u.plus.old) {
                            st->ln = 1; /* Did some */
-                           if (regrepeat(scan, st->u.plus.count) < 
st->u.plus.count)
+                           if (regrepeat(rex, scan, st->u.plus.count) < 
st->u.plus.count)
                                sayNO;
                        }
                        /* PL_reginput == locinput now */
@@ -4196,7 +4190,7 @@
                    }
                    /* Couldn't or didn't -- move forward. */
                    PL_reginput = locinput;
-                   if (regrepeat(scan, 1)) {
+                   if (regrepeat(rex, scan, 1)) {
                        st->ln++;
                        locinput = PL_reginput;
                    }
@@ -4205,7 +4199,7 @@
                }
            }
            else {
-               n = regrepeat(scan, n);
+               n = regrepeat(rex, scan, n);
                locinput = PL_reginput;
                if (st->ln < n && PL_regkind[(U8)OP(next)] == EOL &&
                    (OP(next) != MEOL ||
@@ -4269,7 +4263,6 @@
                    PL_reg_flags ^= RF_utf8;
                ReREFCNT_dec(rex);
                rex = st->u.eval.prev_rex;
-               PL_reg_re = rex; /* XXX */
                /* XXXX This is too dramatic a measure... */
                PL_reg_maxiter = 0;
 
@@ -4560,7 +4553,6 @@
                PL_reg_flags ^= RF_utf8;
            ReREFCNT_dec(rex);
            rex = st->u.eval.prev_rex;
-           PL_reg_re = rex; /* XXX */
            cur_eval = st->u.eval.prev_eval;
 
            /* XXXX This is too dramatic a measure... */
@@ -4638,7 +4630,7 @@
  * rather than incrementing count on every character.  [Er, except utf8.]]
  */
 STATIC I32
-S_regrepeat(pTHX_ const regnode *p, I32 max)
+S_regrepeat(pTHX_ const regexp *prog, const regnode *p, I32 max)
 {
     dVAR;
     register char *scan;
@@ -4701,12 +4693,12 @@
        if (do_utf8) {
            loceol = PL_regeol;
            while (hardcount < max && scan < loceol &&
-                  reginclass(p, (U8*)scan, 0, do_utf8)) {
+                  reginclass(prog, p, (U8*)scan, 0, do_utf8)) {
                scan += UTF8SKIP(scan);
                hardcount++;
            }
        } else {
-           while (scan < loceol && REGINCLASS(p, (U8*)scan))
+           while (scan < loceol && REGINCLASS(prog, p, (U8*)scan))
                scan++;
        }
        break;
@@ -4867,7 +4859,7 @@
                SV * const prop = sv_newmortal();
                 GET_RE_DEBUG_FLAGS;
                 DEBUG_EXECUTE_r({
-               regprop(prop, p);
+               regprop(prog, prop, p);
                PerlIO_printf(Perl_debug_log,
                              "%*s  %s can match %"IVdf" times out of 
%"IVdf"...\n",
                              REPORT_CODE_OFF+1, "", 
SvPVX_const(prop),(IV)c,(IV)max);
@@ -4883,13 +4875,13 @@
 */
 
 SV *
-Perl_regclass_swash(pTHX_ register const regnode* node, bool doinit, SV** 
listsvp, SV **altsvp)
+Perl_regclass_swash(pTHX_ const regexp *prog, register const regnode* node, 
bool doinit, SV** listsvp, SV **altsvp)
 {
     dVAR;
     SV *sw  = NULL;
     SV *si  = NULL;
     SV *alt = NULL;
-    const struct reg_data *data = PL_reg_re ? PL_reg_re->data : NULL;
+    const struct reg_data *data = prog ? prog->data : NULL;
 
     if (data && data->count) {
        const U32 n = ARG(node);
@@ -4937,7 +4929,7 @@
  */
 
 STATIC bool
-S_reginclass(pTHX_ register const regnode *n, register const U8* p, STRLEN* 
lenp, register bool do_utf8)
+S_reginclass(pTHX_ const regexp *prog, register const regnode *n, register 
const U8* p, STRLEN* lenp, register bool do_utf8)
 {
     dVAR;
     const char flags = ANYOF_FLAGS(n);
@@ -4966,7 +4958,7 @@
            match = TRUE;
        if (!match) {
            AV *av;
-           SV * const sw = regclass_swash(n, TRUE, 0, (SV**)&av);
+           SV * const sw = regclass_swash(prog, n, TRUE, 0, (SV**)&av);
        
            if (sw) {
                if (swash_fetch(sw, p, do_utf8))

==== //depot/perl/regexp.h#43 (text) ====
Index: perl/regexp.h
--- perl/regexp.h#42~27778~     2006-04-12 15:43:03.000000000 -0700
+++ perl/regexp.h       2006-04-12 19:20:33.000000000 -0700
@@ -289,7 +289,6 @@
 #define PL_reg_eval_set                PL_reg_state.re_state_reg_eval_set
 #define PL_regnarrate          PL_reg_state.re_state_regnarrate
 #define PL_regindent           PL_reg_state.re_state_regindent
-#define PL_reg_re              PL_reg_state.re_state_reg_re
 #define PL_reg_ganch           PL_reg_state.re_state_reg_ganch
 #define PL_reg_sv              PL_reg_state.re_state_reg_sv
 #define PL_reg_match_utf8      PL_reg_state.re_state_reg_match_utf8
@@ -323,7 +322,6 @@
     I32 re_state_reg_eval_set;         /* from regexec.c */
     I32 re_state_regnarrate;           /* from regexec.c */
     int re_state_regindent;            /* from regexec.c */
-    regexp *re_state_reg_re;           /* from regexec.c */
     char *re_state_reg_ganch;          /* from regexec.c */
     SV *re_state_reg_sv;               /* from regexec.c */
     bool re_state_reg_match_utf8;      /* from regexec.c */

==== //depot/perl/sv.c#1236 (text) ====
Index: perl/sv.c
--- perl/sv.c#1235~27779~       2006-04-12 15:45:12.000000000 -0700
+++ perl/sv.c   2006-04-12 19:20:33.000000000 -0700
@@ -10657,8 +10657,6 @@
                /* I assume that it only ever "worked" because no-one called
                   (pseudo)fork while the regexp engine had re-entered itself.
                */
-               new_state->re_state_reg_re
-                   = any_dup(old_state->re_state_reg_re, proto_perl);
                new_state->re_state_reg_ganch
                    = pv_dup(old_state->re_state_reg_ganch);
                new_state->re_state_reg_sv
End of Patch.

Reply via email to