This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Nuke some more n_a, and convert S_gv_ename from char * to const char *
[perl5.git] / XSUB.h
diff --git a/XSUB.h b/XSUB.h
index b611581..52f66a6 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -54,6 +54,10 @@ C<xsubpp>.
 Sets up the C<ax> variable.
 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 
+=for apidoc Ams||dAXMARK
+Sets up the C<ax> variable and stack marker variable C<mark>.
+This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
+
 =for apidoc Ams||dITEMS
 Sets up the C<items> variable.
 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -88,18 +92,25 @@ is a lexical $_ in scope.
 #  define XS(name) EXPORT_C void name(pTHX_ CV* cv)
 #endif
 #ifndef XS
-#  define XS(name) void name(pTHX_ CV* cv)
+#  ifdef HASATTRIBUTE_UNUSED
+#    define XS(name) void name(pTHX_ CV* cv __attribute__unused__)
+#  else
+#    define XS(name) void name(pTHX_ CV* cv)
+#  endif
 #endif
 
-#define dAX I32 ax = MARK - PL_stack_base + 1
+#define dAX const I32 ax = MARK - PL_stack_base + 1
+
+#define dAXMARK                                \
+       I32 ax = POPMARK;       \
+       register SV ** const mark = PL_stack_base + ax++
 
 #define dITEMS I32 items = SP - MARK
 
 #define dXSARGS                                \
-       dSP; dMARK;                     \
-       dAX; dITEMS
+       dSP; dAXMARK; dITEMS
 
-#define dXSTARG SV * targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
+#define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
                             ? PAD_SV(PL_op->op_targ) : sv_newmortal())
 
 /* Should be used before final PUSHi etc. if not in PPCODE section. */
@@ -249,8 +260,8 @@ Rethrows a previously caught exception.  See L<perlguts/"Exception Handling">.
 #ifdef XS_VERSION
 #  define XS_VERSION_BOOTCHECK \
     STMT_START {                                                       \
-       SV *_sv; STRLEN n_a;                                            \
-       const char *vn = Nullch, *module = SvPV(ST(0),n_a);             \
+       SV *_sv;                                                        \
+       const char *vn = Nullch, *module = SvPV_nolen_const(ST(0));     \
        if (items >= 2)  /* version supplied as bootstrap arg */        \
            _sv = ST(1);                                                \
        else {                                                          \