summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2006-05-17 20:54:23 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2006-05-17 20:54:23 +0000
commitb0a11fe104a0ad4cbfcb5d90e8c0fbdfd46e46ac (patch)
tree2cbeabf127fee1719e3bf8cf2e33d9f3c034ed05
parente3749539d04912af50a86b1d1e5ae9962c3a882c (diff)
downloadperl-b0a11fe104a0ad4cbfcb5d90e8c0fbdfd46e46ac.tar.gz
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. p4raw-id: //depot/perl@28218
-rw-r--r--sv.c2
-rw-r--r--sv.h4
2 files changed, 5 insertions, 1 deletions
diff --git a/sv.c b/sv.c
index 4c186ec3c4..c9a44027e8 100644
--- a/sv.c
+++ b/sv.c
@@ -3676,7 +3676,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8
|SVf_AMAGIC);
{
- const MAGIC * const smg = SvVOK(sstr);
+ const MAGIC * const smg = SvVSTRING_mg(sstr);
if (smg) {
sv_magic(dstr, NULL, PERL_MAGIC_vstring,
smg->mg_ptr, smg->mg_len);
diff --git a/sv.h b/sv.h
index 92a8e7fa26..554fe69ea3 100644
--- a/sv.h
+++ b/sv.h
@@ -949,7 +949,11 @@ in gv.h: */
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)))