Change 27377 by [EMAIL PROTECTED] on 2006/03/05 11:53:55

        Provide Perl_gv_name_set to replace LVALUE use of GvNAME and GvNAMESET.

Affected files ...

... //depot/perl/embed.fnc#321 edit
... //depot/perl/embed.h#564 edit
... //depot/perl/global.sym#295 edit
... //depot/perl/gv.c#307 edit
... //depot/perl/gv.h#59 edit
... //depot/perl/proto.h#668 edit
... //depot/perl/sv.c#1180 edit

Differences ...

==== //depot/perl/embed.fnc#321 (text) ====
Index: perl/embed.fnc
--- perl/embed.fnc#320~27360~   2006-03-02 01:08:30.000000000 -0800
+++ perl/embed.fnc      2006-03-05 03:53:55.000000000 -0800
@@ -278,6 +278,7 @@
 Apmb   |void   |gv_fullname3   |NN SV* sv|NN const GV* gv|NULLOK const char* 
prefix
 Ap     |void   |gv_fullname4   |NN SV* sv|NN const GV* gv|NULLOK const char* 
prefix|bool keepmain
 Ap     |void   |gv_init        |NN GV* gv|NULLOK HV* stash|NN const char* 
name|STRLEN len|int multi
+Ap     |void   |gv_name_set    |NN GV* gv|NULLOK const char *name|U32 len|U32 
flags
 Apd    |HV*    |gv_stashpv     |NN const char* name|I32 create
 Apd    |HV*    |gv_stashpvn    |NN const char* name|U32 namelen|I32 create
 Apd    |HV*    |gv_stashsv     |NULLOK SV* sv|I32 create

==== //depot/perl/embed.h#564 (text+w) ====
Index: perl/embed.h
--- perl/embed.h#563~27339~     2006-02-27 05:40:44.000000000 -0800
+++ perl/embed.h        2006-03-05 03:53:55.000000000 -0800
@@ -265,6 +265,7 @@
 #define gv_fullname            Perl_gv_fullname
 #define gv_fullname4           Perl_gv_fullname4
 #define gv_init                        Perl_gv_init
+#define gv_name_set            Perl_gv_name_set
 #define gv_stashpv             Perl_gv_stashpv
 #define gv_stashpvn            Perl_gv_stashpvn
 #define gv_stashsv             Perl_gv_stashsv
@@ -2343,6 +2344,7 @@
 #define gv_fullname(a,b)       Perl_gv_fullname(aTHX_ a,b)
 #define gv_fullname4(a,b,c,d)  Perl_gv_fullname4(aTHX_ a,b,c,d)
 #define gv_init(a,b,c,d,e)     Perl_gv_init(aTHX_ a,b,c,d,e)
+#define gv_name_set(a,b,c,d)   Perl_gv_name_set(aTHX_ a,b,c,d)
 #define gv_stashpv(a,b)                Perl_gv_stashpv(aTHX_ a,b)
 #define gv_stashpvn(a,b,c)     Perl_gv_stashpvn(aTHX_ a,b,c)
 #define gv_stashsv(a,b)                Perl_gv_stashsv(aTHX_ a,b)

==== //depot/perl/global.sym#295 (text+w) ====
Index: perl/global.sym
--- perl/global.sym#294~27021~  2006-01-31 07:10:37.000000000 -0800
+++ perl/global.sym     2006-03-05 03:53:55.000000000 -0800
@@ -140,6 +140,7 @@
 Perl_gv_fullname3
 Perl_gv_fullname4
 Perl_gv_init
+Perl_gv_name_set
 Perl_gv_stashpv
 Perl_gv_stashpvn
 Perl_gv_stashsv

==== //depot/perl/gv.c#307 (text) ====
Index: perl/gv.c
--- perl/gv.c#306~27336~        2006-02-27 04:00:12.000000000 -0800
+++ perl/gv.c   2006-03-05 03:53:55.000000000 -0800
@@ -215,8 +215,7 @@
     GvSTASH(gv) = stash;
     if (stash)
        Perl_sv_add_backref(aTHX_ (SV*)stash, (SV*)gv);
-    GvNAME(gv) = savepvn(name, len);
-    GvNAMELEN(gv) = len;
+    gv_name_set(gv, name, len, 0);
     if (multi || doproto)              /* doproto means it _was_ mentioned */
        GvMULTI_on(gv);
     if (doproto) {                     /* Replicate part of newSUB here. */
@@ -2104,6 +2103,17 @@
     return FALSE;
 }
 
+void
+Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags)
+{
+    dVAR;
+
+    PERL_UNUSED_ARG(flags);
+
+    GvXPVGV(gv)->xgv_name = name ? savepvn(name, len) : NULL;
+    GvXPVGV(gv)->xgv_namelen = len;
+}
+
 /*
  * Local variables:
  * c-indentation-style: bsd

==== //depot/perl/gv.h#59 (text) ====
Index: perl/gv.h
--- perl/gv.h#58~27344~ 2006-02-27 07:43:41.000000000 -0800
+++ perl/gv.h   2006-03-05 03:53:55.000000000 -0800
@@ -43,26 +43,29 @@
            assert(SvTYPE(_gv) == SVt_PVGV || SvTYPE(_gv) >= SVt_PVLV); \
            &(GvXPVGV(_gv)->xnv_u.xgv_stash);                           \
         }))
-#  define GvNAME(gv)                                                   \
-       (*({ GV * const zzzz = (GV *) (gv);                             \
-           assert(isGV_with_GP(zzzz));                                 \
-           assert(SvTYPE(zzzz) == SVt_PVGV || SvTYPE(zzzz) >= SVt_PVLV); \
-           &(GvXPVGV(zzzz)->xgv_name);                                 \
-        }))
-#  define GvNAMELEN(gv)                                                        
\
-       (*({ GV * const glank = (GV *) (gv);                            \
-           assert(isGV_with_GP(glank));                                \
-           assert(SvTYPE(glank) == SVt_PVGV || SvTYPE(glank) >= SVt_PVLV); \
-           &(GvXPVGV(glank)->xgv_namelen);                             \
-        }))
+#  define GvNAME_get(gv)                                               \
+       ({ GV * const zzzz = (GV *) (gv);                               \
+          assert(isGV_with_GP(zzzz));                                  \
+          assert(SvTYPE(zzzz) == SVt_PVGV || SvTYPE(zzzz) >= SVt_PVLV); \
+          0 + (GvXPVGV(zzzz)->xgv_name);                               \
+        })
+#  define GvNAMELEN_get(gv)                                            \
+       ({ GV * const glank = (GV *) (gv);                              \
+          assert(isGV_with_GP(glank));                         \
+          assert(SvTYPE(glank) == SVt_PVGV || SvTYPE(glank) >= SVt_PVLV); \
+          0 + (GvXPVGV(glank)->xgv_namelen);                           \
+        })
 #else
 #  define GvGP(gv)     ((gv)->sv_u.svu_gp)
 #  define GvFLAGS(gv)  (GvXPVGV(gv)->xpv_cur)
 #  define GvSTASH(gv)  (GvXPVGV(gv)->xnv_u.xgv_stash)
-#  define GvNAME(gv)   (GvXPVGV(gv)->xgv_name)
-#  define GvNAMELEN(gv)        (GvXPVGV(gv)->xgv_namelen)
+#  define GvNAME_get(gv)       (0 + GvXPVGV(gv)->xgv_name)
+#  define GvNAMELEN_get(gv)    (0 + GvXPVGV(gv)->xgv_namelen)
 #endif
 
+#define GvNAME(gv)     GvNAME_get(gv)
+#define GvNAMELEN(gv)  GvNAMELEN_get(gv)
+
 #define        GvASSIGN_GENERATION(gv)         (0 + ((XPV*) 
SvANY(gv))->xpv_len)
 #define        GvASSIGN_GENERATION_set(gv,val)                 \
        STMT_START { assert(SvTYPE(gv) == SVt_PVGV);    \

==== //depot/perl/proto.h#668 (text+w) ====
Index: perl/proto.h
--- perl/proto.h#667~27360~     2006-03-02 01:08:30.000000000 -0800
+++ perl/proto.h        2006-03-05 03:53:55.000000000 -0800
@@ -644,6 +644,9 @@
                        __attribute__nonnull__(pTHX_1)
                        __attribute__nonnull__(pTHX_3);
 
+PERL_CALLCONV void     Perl_gv_name_set(pTHX_ GV* gv, const char *name, U32 
len, U32 flags)
+                       __attribute__nonnull__(pTHX_1);
+
 PERL_CALLCONV HV*      Perl_gv_stashpv(pTHX_ const char* name, I32 create)
                        __attribute__nonnull__(pTHX_1);
 

==== //depot/perl/sv.c#1180 (text) ====
Index: perl/sv.c
--- perl/sv.c#1179~27360~       2006-03-02 01:08:30.000000000 -0800
+++ perl/sv.c   2006-03-05 03:53:55.000000000 -0800
@@ -3216,8 +3216,7 @@
        GvSTASH(dstr) = GvSTASH(sstr);
        if (GvSTASH(dstr))
            Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
-       GvNAME(dstr) = savepvn(name, len);
-       GvNAMELEN(dstr) = len;
+       gv_name_set(dstr, name, len, 0);
        SvFAKE_on(dstr);        /* can coerce to non-glob */
     }
 
@@ -9837,7 +9836,8 @@
                    LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
                break;
            case SVt_PVGV:
-               GvNAME(dstr)    = SAVEPVN(GvNAME(dstr), GvNAMELEN(dstr));
+               GvXPVGV(dstr)->xgv_name = SAVEPVN(GvNAME(dstr), 
GvNAMELEN(dstr));
+
                /* Don't call sv_add_backref here as it's going to be created
                   as part of the magic cloning of the symbol table.  */
                GvSTASH(dstr)   = hv_dup(GvSTASH(dstr), param);
End of Patch.

Reply via email to