develooper Front page | perl.perl5.porters | Postings from September 2000

[PATCH 5.7.0] Minor optimization in re_intuit_start

From:
Ilya Zakharevich
Date:
September 28, 2000 18:55
Subject:
[PATCH 5.7.0] Minor optimization in re_intuit_start
Message ID:
20000928215531.A4315@monk.mps.ohio-state.edu
This patch moves a quite important and cheap check from inside a
branch which is not important to this check.

Enjoy,
Ilya

--- ./regexec.c~	Fri Aug 18 16:31:18 2000
+++ ./regexec.c	Thu Sep 28 18:52:39 2000
@@ -357,17 +357,18 @@ Perl_re_intuit_start(pTHX_ regexp *prog,
 		     || ( (prog->reganch & ROPT_ANCH_BOL)
 			  && !PL_multiline ) );	/* Check after \n? */
 
-	if ((prog->check_offset_min == prog->check_offset_max) && !ml_anch) {
+	if (!ml_anch) {
+	  if ( !(prog->reganch & ROPT_ANCH_GPOS) /* Checked by the caller */
+	       /* SvCUR is not set on references: SvRV and SvPVX overlap */
+	       && sv && !SvROK(sv)
+	       && (strpos + SvCUR(sv) != strend)) {
+	      DEBUG_r(PerlIO_printf(Perl_debug_log, "Not at start...\n"));
+	      goto fail;
+	  }
+	  if (prog->check_offset_min == prog->check_offset_max) {
 	    /* Substring at constant offset from beg-of-str... */
 	    I32 slen;
 
-	    if ( !(prog->reganch & ROPT_ANCH_GPOS) /* Checked by the caller */
-		 /* SvCUR is not set on references: SvRV and SvPVX overlap */
-		 && sv && !SvROK(sv)
-		 && (strpos + SvCUR(sv) != strend)) {
-		DEBUG_r(PerlIO_printf(Perl_debug_log, "Not at start...\n"));
-		goto fail;
-	    }
 	    PL_regeol = strend;			/* Used in HOP() */
 	    s = HOPc(strpos, prog->check_offset_min);
 	    if (SvTAIL(check)) {
@@ -393,6 +394,7 @@ Perl_re_intuit_start(pTHX_ regexp *prog,
 			 && memNE(SvPVX(check), s, slen)))
 		goto report_neq;
 	    goto success_at_start;
+	  }
 	}
 	/* Match is anchored, but substr is not anchored wrt beg-of-str. */
 	s = strpos;



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About