This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add PMf_USE_RE_EVAL flag
authorDavid Mitchell <davem@iabyn.com>
Thu, 8 Mar 2012 16:00:24 +0000 (16:00 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:49 +0000 (13:32 +0100)
This isn't actually used in the pm_flags field of a PMOP, but is
used in the pm_flags arg of Perl_re_op_compile() to indicate
that this pattern should be compiled with "use re 'eval'" in scope

op.h
pp_ctl.c
regcomp.c

diff --git a/op.h b/op.h
index b7e8614..7be9bf5 100644 (file)
--- a/op.h
+++ b/op.h
@@ -445,8 +445,9 @@ struct pmop {
  * but the regex compilation API passes just the pm flags, not the op
  * itself */
 #define PMf_IS_QR      (1<<(PMf_BASE_SHIFT+12))
+#define PMf_USE_RE_EVAL        (1<<(PMf_BASE_SHIFT+13)) /* use re'eval' in scope */
 
-#if PMf_BASE_SHIFT+12 > 31
+#if PMf_BASE_SHIFT+13 > 31
 #   error Too many PMf_ bits used.  See above and regnodes.h for any spare in middle
 #endif
 
index 4b79392..03eba7d 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -119,7 +119,8 @@ PP(pp_regcomp)
            )(aTHX_ args, nargs, pm->op_code_list, eng, re,
                &is_bare_re,
                (pm->op_pmflags & RXf_PMf_COMPILETIME),
-               pm->op_pmflags);
+               pm->op_pmflags |
+                   (PL_op->op_flags & OPf_SPECIAL ? PMf_USE_RE_EVAL : 0));
     if (pm->op_pmflags & PMf_HAS_CV)
        ((struct regexp *)SvANY(new_re))->qr_anoncv
                        = (CV*) SvREFCNT_inc(PAD_SV(PL_op->op_targ));
index 17800e7..d329a7f 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -4990,8 +4990,9 @@ Perl_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
  *
  * orig_rx_flags contains RXf_* flags. See perlreapi.pod for more details.
  *
- * pm_flags contains the PMf_* flags from the calling PMOP. Currently
- * we're only interested in PMf_HAS_CV and PMf_IS_QR.
+ * pm_flags contains the PMf_* flags, typically based on those from the
+ * pm_flags field of the related PMOP. Currently we're only interested in
+ * PMf_HAS_CV, PMf_IS_QR, PMf_USE_RE_EVAL.
  *
  * We can't allocate space until we know how big the compiled form will be,
  * but we can't compile it (and thus know how big it is) until we've got a