Fix a couple of typos.
[p5sagit/p5-mst-13.2.git] / regexec.c
index d0d0ce7..6a7f064 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -5,9 +5,15 @@
  * "One Ring to rule them all, One Ring to find them..."
  */
 
-/* This file contains functions for executing a regular expresssion.  See
- * also regcomp.c which funnnily enough, contains functions for compiling
+/* This file contains functions for executing a regular expression.  See
+ * also regcomp.c which funnily enough, contains functions for compiling
  * a regular expression.
+ *
+ * This file is also copied at build time to ext/re/re_exec.c, where
+ * it's built with -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT.
+ * This causes the main functions to be compiled under new names and with
+ * debugging support added, which makes "use re 'debug'" work.
  */
 
 /* NOTE: this is derived from Henry Spencer's regexp code, and should not
@@ -403,6 +409,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos,
     I32 ml_anch;
     register char *other_last = Nullch;        /* other substr checked before this */
     char *check_at = Nullch;           /* check substr found at this pos */
+    I32 multiline = prog->reganch & PMf_MULTILINE;
 #ifdef DEBUGGING
     char *i_strpos = strpos;
     SV *dsv = PERL_DEBUG_PAD_ZERO(0);
@@ -464,7 +471,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos,
     if (prog->reganch & ROPT_ANCH) {   /* Match at beg-of-str or after \n */
        ml_anch = !( (prog->reganch & ROPT_ANCH_SINGLE)
                     || ( (prog->reganch & ROPT_ANCH_BOL)
-                         && !PL_multiline ) ); /* Check after \n? */
+                         && !multiline ) );    /* Check after \n? */
 
        if (!ml_anch) {
          if ( !(prog->reganch & (ROPT_ANCH_GPOS /* Checked by the caller */
@@ -558,11 +565,11 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos,
     else if (prog->reganch & ROPT_CANY_SEEN)
        s = fbm_instr((U8*)(s + start_shift),
                      (U8*)(strend - end_shift),
-                     check, PL_multiline ? FBMrf_MULTILINE : 0);
+                     check, multiline ? FBMrf_MULTILINE : 0);
     else
        s = fbm_instr(HOP3(s, start_shift, strend),
                      HOP3(strend, -end_shift, strbeg),
-                     check, PL_multiline ? FBMrf_MULTILINE : 0);
+                     check, multiline ? FBMrf_MULTILINE : 0);
 
     /* Update the count-of-usability, remove useless subpatterns,
        unshift s.  */
@@ -631,7 +638,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos,
                        HOP3(HOP3(last1, prog->anchored_offset, strend)
                                + SvCUR(must), -(SvTAIL(must)!=0), strbeg),
                        must,
-                       PL_multiline ? FBMrf_MULTILINE : 0
+                       multiline ? FBMrf_MULTILINE : 0
                    );
                DEBUG_r(PerlIO_printf(Perl_debug_log,
                        "%s anchored substr `%s%.*s%s'%s",
@@ -692,7 +699,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos,
                s = fbm_instr((unsigned char*)s,
                              (unsigned char*)last + SvCUR(must)
                                  - (SvTAIL(must)!=0),
-                             must, PL_multiline ? FBMrf_MULTILINE : 0);
+                             must, multiline ? FBMrf_MULTILINE : 0);
            DEBUG_r(PerlIO_printf(Perl_debug_log, "%s floating substr `%s%.*s%s'%s",
                    (s ? "Found" : "Contradicts"),
                    PL_colors[0],
@@ -1628,6 +1635,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char *
     char *scream_olds;
     SV* oreplsv = GvSV(PL_replgv);
     bool do_utf8 = DO_UTF8(sv);
+    I32 multiline = prog->reganch & PMf_MULTILINE;
 #ifdef DEBUGGING
     SV *dsv0 = PERL_DEBUG_PAD_ZERO(0);
     SV *dsv1 = PERL_DEBUG_PAD_ZERO(1);
@@ -1744,7 +1752,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char *
     if (prog->reganch & (ROPT_ANCH & ~ROPT_ANCH_GPOS)) {
        if (s == startpos && regtry(prog, startpos))
            goto got_it;
-       else if (PL_multiline || (prog->reganch & ROPT_IMPLICIT)
+       else if (multiline || (prog->reganch & ROPT_IMPLICIT)
                 || (prog->reganch & ROPT_ANCH_MBOL)) /* XXXX SBOL? */
        {
            char *end;
@@ -1878,7 +1886,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char *
                                    end_shift, &scream_pos, 0))
                 : (s = fbm_instr((unsigned char*)HOP3(s, back_min, strend),
                                  (unsigned char*)strend, must,
-                                 PL_multiline ? FBMrf_MULTILINE : 0))) ) {
+                                 multiline ? FBMrf_MULTILINE : 0))) ) {
            /* we may be pointing at the wrong string */
            if ((flags & REXEC_SCREAM) && RX_MATCH_COPIED(prog))
                s = strbeg + (s - SvPVX(sv));
@@ -1979,7 +1987,7 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char *
                if (SvTAIL(float_real)) {
                    if (memEQ(strend - len + 1, little, len - 1))
                        last = strend - len + 1;
-                   else if (!PL_multiline)
+                   else if (!multiline)
                        last = memEQ(strend - len, little, len)
                            ? strend - len : Nullch;
                    else
@@ -2369,8 +2377,7 @@ S_regmatch(pTHX_ regnode *prog)
 
        switch (OP(scan)) {
        case BOL:
-           if (locinput == PL_bostr || (PL_multiline &&
-               (nextchr || locinput < PL_regeol) && locinput[-1] == '\n') )
+           if (locinput == PL_bostr)
            {
                /* regtill = regbol; */
                break;
@@ -2392,12 +2399,8 @@ S_regmatch(pTHX_ regnode *prog)
                break;
            sayNO;
        case EOL:
-           if (PL_multiline)
-               goto meol;
-           else
                goto seol;
        case MEOL:
-         meol:
            if ((nextchr || locinput < PL_regeol) && nextchr != '\n')
                sayNO;
            break;
@@ -3734,7 +3737,7 @@ S_regmatch(pTHX_ regnode *prog)
                n = regrepeat(scan, n);
                locinput = PL_reginput;
                if (ln < n && PL_regkind[(U8)OP(next)] == EOL &&
-                   ((!PL_multiline && OP(next) != MEOL) ||
+                   (OP(next) != MEOL ||
                        OP(next) == SEOL || OP(next) == EOS))
                {
                    ln = n;                     /* why back off? */