summaryrefslogtreecommitdiff
path: root/XSUB.h
diff options
context:
space:
mode:
authorSergey Skvortsov <unknown>2005-01-17 09:02:33 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-05-03 07:36:17 +0000
commit557b887a4219c4f375c8d0bd3219fb4da7bbc7ff (patch)
tree75c13d81d3d4b0d11ba054c3963cc5e4bad4f930 /XSUB.h
parent0630166f39b2fc31415e8078cd74fafef99606af (diff)
downloadperl-557b887a4219c4f375c8d0bd3219fb4da7bbc7ff.tar.gz
[perl #33809] optimize macro dXSARGS
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
Diffstat (limited to 'XSUB.h')
-rw-r--r--XSUB.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/XSUB.h b/XSUB.h
index 358a4b7095..c23ee71f64 100644
--- 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())