Change 29988 by [EMAIL PROTECTED] on 2007/01/25 23:24:46

        Integrate:
        [ 28218]
        Add a new macro SvVSTRING_mg that returns vstring magic, if any.
        SvVOK used to do that, in stealth mode, but now it returns a
        boolean like it used to. Patch suggested by John Peacock.

Affected files ...

... //depot/maint-5.8/perl/sv.c#320 integrate
... //depot/maint-5.8/perl/sv.h#74 integrate

Differences ...

==== //depot/maint-5.8/perl/sv.c#320 (text) ====
Index: perl/sv.c
--- perl/sv.c#319~29985~        2007-01-25 14:55:28.000000000 -0800
+++ perl/sv.c   2007-01-25 15:24:46.000000000 -0800
@@ -3469,12 +3469,14 @@
                SvIsUV_on(dstr);
        }
        SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
-       if ( SvVOK(sstr) ) {
-           const MAGIC * const smg = mg_find(sstr,PERL_MAGIC_vstring);
-           sv_magic(dstr, NULL, PERL_MAGIC_vstring,
-                    smg->mg_ptr, smg->mg_len);
-           SvRMAGICAL_on(dstr);
-       } 
+       {
+           const MAGIC * const smg = SvVSTRING_mg(sstr);
+           if (smg) {
+               sv_magic(dstr, NULL, PERL_MAGIC_vstring,
+                        smg->mg_ptr, smg->mg_len);
+               SvRMAGICAL_on(dstr);
+           }
+       }
     }
     else if (sflags & (SVp_IOK|SVp_NOK)) {
        (void)SvOK_off(dstr);

==== //depot/maint-5.8/perl/sv.h#74 (text) ====
Index: perl/sv.h
--- perl/sv.h#73~29981~ 2007-01-25 13:31:37.000000000 -0800
+++ perl/sv.h   2007-01-25 15:24:46.000000000 -0800
@@ -745,7 +745,6 @@
 #define SvIOK_notUV(sv)                ((SvFLAGS(sv) & (SVf_IOK|SVf_IVisUV))   
\
                                 == SVf_IOK)
 
-#define SvVOK(sv)              (SvMAGICAL(sv) && mg_find(sv,'V'))
 #define SvIsUV(sv)             (SvFLAGS(sv) & SVf_IVisUV)
 #define SvIsUV_on(sv)          (SvFLAGS(sv) |= SVf_IVisUV)
 #define SvIsUV_off(sv)         (SvFLAGS(sv) &= ~SVf_IVisUV)
@@ -795,6 +794,12 @@
                                                  SVf_IVisUV),          \
                                    SvFLAGS(sv) |= (SVf_POK|SVp_POK))
 
+#define SvVOK(sv)              (SvMAGICAL(sv)                          \
+                                && mg_find(sv,PERL_MAGIC_vstring))
+/* returns the vstring magic, if any */
+#define SvVSTRING_mg(sv)       (SvMAGICAL(sv) \
+                                ? mg_find(sv,PERL_MAGIC_vstring) : NULL)
+
 #define SvOOK(sv)              (SvFLAGS(sv) & SVf_OOK)
 #define SvOOK_on(sv)           ((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK)
 #define SvOOK_off(sv)          ((void)(SvOOK(sv) && sv_backoff(sv)))
End of Patch.

Reply via email to