This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
make re_compile core-engine specific
authorDavid Mitchell <davem@iabyn.com>
Tue, 31 Jul 2012 13:30:47 +0000 (14:30 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 31 Jul 2012 13:39:12 +0000 (14:39 +0100)
Originally, Perl_re_compile() was the entry point for perl's regex
compiler.  After commit 3c13cae629d936c43bca9d992cc445d93287af8e, this
function inadvertently became a wrapper meaning "execute the comp method
of the current engine". Change it back so that it always invokes only
perl's engine.

This fixes [perl #114302] Bleadperl v5.17.0-408-g3c13cae breaks
    DGL/re-engine-RE2-0.10.tar.gz

regcomp.c

index 8a75492..2bda5da 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -81,6 +81,7 @@
 #define REG_COMP_C
 #ifdef PERL_IN_XSUB_RE
 #  include "re_comp.h"
+extern const struct regexp_engine my_reg_engine;
 #else
 #  include "regcomp.h"
 #endif
@@ -4961,16 +4962,23 @@ Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags)
 }
 #endif
 
-/* public(ish) wrapper for Perl_re_op_compile that only takes an SV
- * pattern rather than a list of OPs */
+/* public(ish) entry point for the perl core's own regex compiling code.
+ * It's actually a wrapper for Perl_re_op_compile that only takes an SV
+ * pattern rather than a list of OPs, and uses the internal engine rather
+ * than the current one */
 
 REGEXP *
 Perl_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
 {
     SV *pat = pattern; /* defeat constness! */
     PERL_ARGS_ASSERT_RE_COMPILE;
-    return Perl_re_op_compile(aTHX_ &pat, 1, NULL, current_re_engine(),
-                               NULL, NULL, rx_flags, 0);
+    return Perl_re_op_compile(aTHX_ &pat, 1, NULL,
+#ifdef PERL_IN_XSUB_RE
+                                &my_reg_engine,
+#else
+                                &PL_core_reg_engine,
+#endif
+                                NULL, NULL, rx_flags, 0);
 }
 
 /* see if there are any run-time code blocks in the pattern.