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.