In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/3041a168eaf8027c9e376a53450bcb825f527da8?hp=f5d13a25262cb242090ad5e0703cf287e26156db>

- Log -----------------------------------------------------------------
commit 3041a168eaf8027c9e376a53450bcb825f527da8
Author: David Mitchell <[email protected]>
Date:   Sat Jan 12 10:26:15 2013 +0000

    include SvREADONLY() in SvIMMORTAL() test
    
    SvIMMORTAL() is currently defined as
    
          ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes
        || (sv)==&PL_sv_no || (sv)==&PL_sv_placeholder)
    
    Which is relatively slow. Some places do this:
    
        if (SvREADONLY(sv) && SvIMMORTAL(sv)) ...
    
    which quickly rejects most times.
    
    This commit simply moves the SvREADONLY test into the SvIMMORTAL macro
    so that *all* uses benefit from this speedup.
-----------------------------------------------------------------------

Summary of changes:
 sv.c |    8 ++++----
 sv.h |    2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/sv.c b/sv.c
index 3b2dda8..dde045c 100644
--- a/sv.c
+++ b/sv.c
@@ -6409,7 +6409,7 @@ Perl_sv_clear(pTHX_ SV *const orig_sv)
                continue;
            }
 #endif
-           if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
+           if (SvIMMORTAL(sv)) {
                /* make sure SvREFCNT(sv)==0 happens very seldom */
                SvREFCNT(sv) = SvREFCNT_IMMORTAL;
                continue;
@@ -6575,7 +6575,7 @@ Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
             return;
         }
 #endif
-        if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
+        if (SvIMMORTAL(sv)) {
             /* make sure SvREFCNT(sv)==0 happens very seldom */
             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
             return;
@@ -6596,7 +6596,7 @@ Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
         return;
     if (PL_in_clean_all) /* All is fair */
         return;
-    if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
+    if (SvIMMORTAL(sv)) {
         /* make sure SvREFCNT(sv)==0 happens very seldom */
         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
         return;
@@ -8572,7 +8572,7 @@ Perl_sv_2mortal(pTHX_ SV *const sv)
     dVAR;
     if (!sv)
        return NULL;
-    if (SvREADONLY(sv) && SvIMMORTAL(sv))
+    if (SvIMMORTAL(sv))
        return sv;
     PUSH_EXTEND_MORTAL__SV_C(sv);
     SvTEMP_on(sv);
diff --git a/sv.h b/sv.h
index 8b07ee9..5e14252 100644
--- a/sv.h
+++ b/sv.h
@@ -2061,7 +2061,7 @@ alternative is to call C<sv_grow> if you are not sure of 
the type of SV.
 #define SvPEEK(sv) ""
 #endif
 
-#define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || 
(sv)==&PL_sv_no || (sv)==&PL_sv_placeholder)
+#define SvIMMORTAL(sv) (SvREADONLY(sv) && ((sv)==&PL_sv_undef || 
(sv)==&PL_sv_yes || (sv)==&PL_sv_no || (sv)==&PL_sv_placeholder))
 
 #ifdef DEBUGGING
    /* exercise the immortal resurrection code in sv_free2() */

--
Perl5 Master Repository

Reply via email to