This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
SvTRUE(): handle get magic more efficiently
authorDavid Mitchell <davem@iabyn.com>
Wed, 5 Jul 2017 16:16:34 +0000 (17:16 +0100)
committerDavid Mitchell <davem@iabyn.com>
Thu, 27 Jul 2017 10:30:22 +0000 (11:30 +0100)
SvTRUE() and SvTRUE_NN() are wrappers around  sv_2bool() which
handle the common cases directly and only fallback  to sv_2bool() for the
hard ones. Those macros were considering get magic as hard and falling
back; instead, just call the get magic and continue.

sv.h

diff --git a/sv.h b/sv.h
index f5cc185..b7690c2 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -1764,7 +1764,7 @@ Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
 
 #define SvTRUE(sv)         (LIKELY(sv) && SvTRUE_NN(sv))
 #define SvTRUE_nomg(sv)    (LIKELY(sv) && SvTRUE_nomg_NN(sv))
-#define SvTRUE_NN(sv)      (UNLIKELY(SvGMAGICAL(sv)) ? sv_2bool(sv) : SvTRUE_nomg_NN(sv))
+#define SvTRUE_NN(sv)      (SvGETMAGIC(sv), SvTRUE_nomg_NN(sv))
 #define SvTRUE_nomg_NN(sv) (SvTRUE_common(sv, sv_2bool_nomg(sv)))
 
 #define SvTRUE_common(sv,fallback) (                   \