This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
eliminate PL_regdummy
authorDavid Mitchell <davem@iabyn.com>
Fri, 31 May 2013 21:57:21 +0000 (22:57 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 2 Jun 2013 21:28:55 +0000 (22:28 +0100)
This global (per-interpreter) var is just used during regex compilation as
a placeholder to point RExC_emit at during the first (non-emitting) pass,
to indicate to not to emit anything. There's no need for it to be a global
var: just add it as an extra field in the RExC_state_t struct instead.

embedvar.h
intrpvar.h
regcomp.c
regcomp.h
sv.c

index 523874c..808d497 100644 (file)
 #define PL_reentrant_buffer    (vTHX->Ireentrant_buffer)
 #define PL_reentrant_retint    (vTHX->Ireentrant_retint)
 #define PL_reg_curpm           (vTHX->Ireg_curpm)
-#define PL_regdummy            (vTHX->Iregdummy)
 #define PL_regex_pad           (vTHX->Iregex_pad)
 #define PL_regex_padav         (vTHX->Iregex_padav)
 #define PL_registered_mros     (vTHX->Iregistered_mros)
index 27058d7..5d9ac11 100644 (file)
@@ -227,8 +227,6 @@ PERLVAR(I, secondgv,        GV *)           /* $b */
 PERLVAR(I, efloatbuf,  char *)
 PERLVAR(I, efloatsize, STRLEN)
 
-PERLVAR(I, regdummy,   regnode)        /* from regcomp.c */
-
 PERLVARI(I, dumpindent,        U16,    4)      /* number of blanks per dump
                                           indentation level */
 
index 9ed4510..0c0f073 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -126,7 +126,9 @@ typedef struct RExC_state_t {
     I32                whilem_seen;            /* number of WHILEM in this expr */
     regnode    *emit_start;            /* Start of emitted-code area */
     regnode    *emit_bound;            /* First regnode outside of the allocated space */
-    regnode    *emit;                  /* Code-emit pointer; &regdummy = don't = compiling */
+    regnode    *emit;                  /* Code-emit pointer; if = &emit_dummy,
+                                           implies compiling, so don't emit */
+    regnode    emit_dummy;             /* placeholder for emit to point to */
     I32                naughty;                /* How bad is this pattern? */
     I32                sawback;                /* Did we see \1, ...? */
     U32                seen;
@@ -187,6 +189,7 @@ typedef struct RExC_state_t {
 #define RExC_offsets   (pRExC_state->rxi->u.offsets) /* I am not like the others */
 #endif
 #define RExC_emit      (pRExC_state->emit)
+#define RExC_emit_dummy        (pRExC_state->emit_dummy)
 #define RExC_emit_start        (pRExC_state->emit_start)
 #define RExC_emit_bound        (pRExC_state->emit_bound)
 #define RExC_naughty   (pRExC_state->naughty)
@@ -5796,7 +5799,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
     RExC_npar = 1;
     RExC_nestroot = 0;
     RExC_size = 0L;
-    RExC_emit = &PL_regdummy;
+    RExC_emit = &RExC_emit_dummy;
     RExC_whilem_seen = 0;
     RExC_open_parens = NULL;
     RExC_close_parens = NULL;
index 21d2e1e..bf497e0 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -288,7 +288,7 @@ struct regnode_charclass_class {
 
 #define REG_MAGIC 0234
 
-#define SIZE_ONLY (RExC_emit == &PL_regdummy)
+#define SIZE_ONLY (RExC_emit == &RExC_emit_dummy)
 
 /* If the bitmap doesn't fully represent what this ANYOF node can match, the
  * ARG is set to this special value (since 0, 1, ... are legal, but will never
diff --git a/sv.c b/sv.c
index 98a6b36..8cd2cb2 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -13312,7 +13312,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
 
     /* regex stuff */
 
-    PL_regdummy                = proto_perl->Iregdummy;
     PL_colorset                = 0;            /* reinits PL_colors[] */
     /*PL_colors[6]     = {0,0,0,0,0,0};*/