If we use SvUPGRADE() rather than sv_upgrade() then it can make the
Nicholas Clark [Wed, 17 Jan 2007 15:42:54 +0000 (15:42 +0000)]
decision on not "up"grading PVLV to PVGV for us. However, it appears
that the other actions conducted for "not-yet-a-glob" are useful here.

p4raw-id: //depot/perl@29852

sv.c

diff --git a/sv.c b/sv.c
index bfc9ee7..2d4fc39 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -3171,15 +3171,14 @@ S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
     if (dtype != SVt_PVGV) {
        const char * const name = GvNAME(sstr);
        const STRLEN len = GvNAMELEN(sstr);
-       /* don't upgrade SVt_PVLV: it can hold a glob */
-       if (dtype != SVt_PVLV) {
+       {
            if (dtype >= SVt_PV) {
                SvPV_free(dstr);
                SvPV_set(dstr, 0);
                SvLEN_set(dstr, 0);
                SvCUR_set(dstr, 0);
            }
-           sv_upgrade(dstr, SVt_PVGV);
+           SvUPGRADE(dstr, SVt_PVGV);
            (void)SvOK_off(dstr);
            /* FIXME - why are we doing this, then turning it off and on again
               below?  */