pp.c: pp_boolkeys does not need to pop
authorFather Chrysostomos <sprout@cpan.org>
Sat, 25 Aug 2012 06:03:44 +0000 (23:03 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 25 Aug 2012 06:04:03 +0000 (23:04 -0700)
If it’s going to consume and return exactly one item, it doesn’t need
to decrement and increment the stack pointer.

pp.c

diff --git a/pp.c b/pp.c
index dd20288..7565a9d 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -5722,19 +5722,19 @@ PP(pp_boolkeys)
 {
     dVAR;
     dSP;
-    HV * const hv = (HV*)POPs;
+    HV * const hv = (HV*)TOPs;
     
-    if (SvTYPE(hv) != SVt_PVHV) { XPUSHs(&PL_sv_no); RETURN; }
+    if (SvTYPE(hv) != SVt_PVHV) RETSETNO;
 
     if (SvRMAGICAL(hv)) {
        MAGIC * const mg = mg_find((SV*)hv, PERL_MAGIC_tied);
        if (mg) {
-            XPUSHs(magic_scalarpack(hv, mg));
+            SETs(magic_scalarpack(hv, mg));
            RETURN;
         }          
     }
 
-    XPUSHs(boolSV(HvUSEDKEYS(hv) != 0));
+    SETs(boolSV(HvUSEDKEYS(hv) != 0));
     RETURN;
 }