[perl #33809] optimize macro dXSARGS
Sergey Skvortsov [Mon, 17 Jan 2005 09:02:33 +0000 (09:02 +0000)]
From: Sergey Skvortsov (via RT) <perlbug-followup@perl.org>
Message-ID: <rt-3.0.11-33809-105714.16.4209917806492@perl.org>

p4raw-id: //depot/perl@24372

XSUB.h
pod/perlapi.pod
universal.c

diff --git a/XSUB.h b/XSUB.h
index 358a4b7..c23ee71 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>.
@@ -97,11 +101,14 @@ is a lexical $_ in scope.
 
 #define dAX I32 ax = MARK - PL_stack_base + 1
 
+#define dAXMARK                                \
+       I32 ax = POPMARK;               \
+       register SV **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) \
                             ? PAD_SV(PL_op->op_targ) : sv_newmortal())
index b003135..3895ae6 100644 (file)
@@ -5615,6 +5615,16 @@ This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 =for hackers
 Found in file XSUB.h
 
+=item 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>.
+
+               dAXMARK;
+
+=for hackers
+Found in file XSUB.h
+
 =item dITEMS
 
 Sets up the C<items> variable.
index bf0a6fc..f13f8af 100644 (file)
@@ -924,7 +924,7 @@ XS(XS_Internals_hash_seed)
 {
     /* Using dXSARGS would also have dITEM and dSP,
      * which define 2 unused local variables.  */
-    dMARK; dAX;
+    dAXMARK;
     XSRETURN_UV(PERL_HASH_SEED);
 }
 
@@ -932,7 +932,7 @@ XS(XS_Internals_rehash_seed)
 {
     /* Using dXSARGS would also have dITEM and dSP,
      * which define 2 unused local variables.  */
-    dMARK; dAX;
+    dAXMARK;
     XSRETURN_UV(PL_rehash_seed);
 }