This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: This file is for 5.26, not 5.24
[perl5.git] / pp.h
diff --git a/pp.h b/pp.h
index 945d1e5..3b8f36f 100644 (file)
--- a/pp.h
+++ b/pp.h
@@ -55,47 +55,28 @@ Refetch the stack pointer.  Used after a callback.  See L<perlcall>.
 #define MARK mark
 #define TARG targ
 
-#if defined(DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS)
-#define PUSHMARK(p)                                                   \
+#define PUSHMARK(p) \
     STMT_START {                                                      \
         I32 * mark_stack_entry;                                       \
-        if (UNLIKELY((mark_stack_entry = ++PL_markstack_ptr) == PL_markstack_max)) \
+        if (UNLIKELY((mark_stack_entry = ++PL_markstack_ptr)          \
+                                           == PL_markstack_max))      \
            mark_stack_entry = markstack_grow();                      \
         *mark_stack_entry  = (I32)((p) - PL_stack_base);              \
-        DEBUG_s(PerlIO_printf(Perl_debug_log, "MARK push %p %d\n",    \
-                PL_markstack_ptr, *mark_stack_entry));                \
+        DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,                 \
+                "MARK push %p %" IVdf "\n",                           \
+                PL_markstack_ptr, (IV)*mark_stack_entry)));           \
     } STMT_END
-#define TOPMARK                                                       \
-    ({                                                                \
-        DEBUG_s(PerlIO_printf(Perl_debug_log, "MARK top  %p %d\n",    \
-                PL_markstack_ptr, *PL_markstack_ptr));                \
-        *PL_markstack_ptr;                                            \
-    })
-#define POPMARK                                                       \
-    ({                                                                \
-        DEBUG_s(PerlIO_printf(Perl_debug_log, "MARK pop  %p %d\n",    \
-                (PL_markstack_ptr-1), *(PL_markstack_ptr-1)));        \
-        assert((PL_markstack_ptr > PL_markstack) || !"MARK underflow");\
-        *PL_markstack_ptr--;                                          \
-    })
-#define INCMARK                                                       \
-    ({                                                                \
-        DEBUG_s(PerlIO_printf(Perl_debug_log, "MARK inc  %p %d\n",    \
-                (PL_markstack_ptr+1), *(PL_markstack_ptr+1)));        \
-        *PL_markstack_ptr++;                                          \
-    })
-#else
-#define PUSHMARK(p)                                                   \
-    STMT_START {                                                     \
-        I32 * mark_stack_entry;                                       \
-        if (UNLIKELY((mark_stack_entry = ++PL_markstack_ptr) == PL_markstack_max)) \
-           mark_stack_entry = markstack_grow();                      \
-        *mark_stack_entry  = (I32)((p) - PL_stack_base);              \
+
+#define TOPMARK S_TOPMARK(aTHX)
+#define POPMARK S_POPMARK(aTHX)
+
+#define INCMARK \
+    STMT_START {                                                      \
+        DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,                 \
+                "MARK inc  %p %" IVdf "\n",                           \
+                (PL_markstack_ptr+1), (IV)*(PL_markstack_ptr+1))));   \
+        PL_markstack_ptr++;                                           \
     } STMT_END
-#define TOPMARK                (*PL_markstack_ptr)
-#define POPMARK                (*PL_markstack_ptr--)
-#define INCMARK                (*PL_markstack_ptr++)
-#endif
 
 #define dSP            SV **sp = PL_stack_sp
 #define djSP           dSP
@@ -377,7 +358,7 @@ Does not use C<TARG>.  See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
     STMT_START {                                                        \
         IV TARGi_iv = i;                                                \
         if (LIKELY(                                                     \
-              ((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST)) == SVt_IV) \
+              ((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST|SVf_IVisUV)) == SVt_IV) \
             & (do_taint ? !TAINT_get : 1)))                             \
         {                                                               \
             /* Cheap SvIOK_only().                                      \
@@ -399,7 +380,7 @@ Does not use C<TARG>.  See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
     STMT_START {                                                        \
         UV TARGu_uv = u;                                                \
         if (LIKELY(                                                     \
-              ((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST)) == SVt_IV) \
+              ((SvFLAGS(TARG) & (SVTYPEMASK|SVf_THINKFIRST|SVf_IVisUV)) == SVt_IV) \
             & (do_taint ? !TAINT_get : 1)                               \
             & (TARGu_uv <= (UV)IV_MAX)))                                \
         {                                                               \
@@ -570,7 +551,7 @@ Does not use C<TARG>.  See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
        dSP;                                                    \
        SV *tmpsv;                                              \
        SV *arg= *sp;                                           \
-        int gimme = GIMME_V;                                    \
+        U8 gimme = GIMME_V;                                    \
        if (UNLIKELY(SvAMAGIC(arg) &&                           \
            (tmpsv = amagic_call(arg, &PL_sv_undef, meth,       \
                                 AMGf_want_list | AMGf_noright  \
@@ -603,7 +584,7 @@ Does not use C<TARG>.  See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
                while (jump_o->op_type == OP_NULL)              \
                    jump_o = jump_o->op_next;                   \
                assert(jump_o->op_type == OP_ENTERSUB);         \
-               POPMARK;                                        \
+               (void)POPMARK;                                        \
                return jump_o->op_next;                         \
            }                                                   \
            return NORMAL;                                      \