This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Stop using PL_glob_index for PL_globhook
authorFather Chrysostomos <sprout@cpan.org>
Sat, 28 Apr 2012 07:18:30 +0000 (00:18 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 10 Dec 2012 02:47:20 +0000 (18:47 -0800)
If Glob.xs just uses the address of PL_op as its iterator key all the
time (when called via PL_globhook too, not just via a glob override),
the code is simpler.

ext/File-Glob/Glob.xs
op.c
pp_sys.c

index 252c2ed..50bb2da 100644 (file)
@@ -67,17 +67,13 @@ iterate(pTHX_ bool(*globber)(pTHX_ AV *entries, SV *patsv))
     dSP;
     dMY_CXT;
 
-    SV * const cxixsv = POPs;
-    const char *cxixpv;
-    STRLEN cxixlen;
+    const char * const cxixpv = (char *)&PL_op;
+    STRLEN const cxixlen = sizeof(OP *);
     AV *entries;
     U32 const gimme = GIMME_V;
     SV *patsv = POPs;
     bool on_stack = FALSE;
 
-    SvGETMAGIC(cxixsv);
-    cxixpv = SvPV_nomg(cxixsv, cxixlen);
-
     if (!MY_CXT.x_GLOB_ENTRIES) MY_CXT.x_GLOB_ENTRIES = newHV();
     entries = (AV *)*(hv_fetch(MY_CXT.x_GLOB_ENTRIES, cxixpv, cxixlen, 1));
 
@@ -359,8 +355,6 @@ PPCODE:
     else {
        XPUSHs(&PL_sv_undef);
     }
-    XPUSHs(newSVpvn_flags((char *)&PL_op, sizeof(OP *), SVs_TEMP));
-    sv_catpvs(*SP, "_"); /* Avoid conflicts with PL_glob_index */
     PUTBACK;
     csh_glob_iter(aTHX);
     SPAGAIN;
@@ -372,8 +366,6 @@ PPCODE:
     else {
        XPUSHs(&PL_sv_undef);
     }
-    XPUSHs(newSVpvn_flags((char *)&PL_op, sizeof(OP *), SVs_TEMP));
-    sv_catpvs(*SP, "_"); /* Avoid conflicts with PL_glob_index */
     PUTBACK;
     iterate(aTHX_ doglob_iter_wrapper);
     SPAGAIN;
diff --git a/op.c b/op.c
index 0a747a7..fd114b1 100644 (file)
--- a/op.c
+++ b/op.c
@@ -9005,9 +9005,6 @@ Perl_ck_glob(pTHX_ OP *o)
     gv = (GV *)newSV(0);
     gv_init(gv, 0, "", 0, 0);
     gv_IOadd(gv);
-#ifndef PERL_EXTERNAL_GLOB
-    sv_setiv(GvSVn(gv),PL_glob_index++);
-#endif
     op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv));
     SvREFCNT_dec_NN(gv); /* newGVOP increased it */
     scalarkids(o);
index 06b3684..ec77763 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -376,11 +376,7 @@ PP(pp_glob)
         * */
        return NORMAL;
     }
-    /* stack args are: wildcard, gv(_GEN_n) */
-
     if (PL_globhook) {
-       PUSHs(GvSV(gv));
-       PUTBACK;
        PL_globhook(aTHX);
        return NORMAL;
     }