1N/A * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 1N/A * 2000, 2001, by Larry Wall and others 1N/A * You may distribute under the terms of either the GNU General Public 1N/A * License or the Artistic License, as specified in the README file. 1N/A#
endif /* USE_5005THREADS */ 1N/A=head1 Stack Manipulation Macros 1N/AStack pointer. This is usually handled by C<xsubpp>. See C<dSP> and 1N/A=for apidoc AmU||MARK 1N/AStack marker variable for the XSUB. See C<dMARK>. 1N/A=for apidoc Ams||PUSHMARK 1N/AOpening bracket for arguments on a callback. See C<PUTBACK> and 1N/ADeclares a local copy of perl's stack pointer for the XSUB, available via 1N/Athe C<SP> macro. See C<SP>. 1N/ADeclare Just C<SP>. This is actually identical to C<dSP>, and declares 1N/Aa local copy of perl's stack pointer, available via the C<SP> macro. 1N/ASee C<SP>. (Available for backward source code compatibility with the 1N/Aold (Perl 5.005) thread model.) 1N/A=for apidoc Ams||dMARK 1N/ADeclare a stack marker variable, C<mark>, for the XSUB. See C<MARK> and 1N/A=for apidoc Ams||dORIGMARK 1N/ASaves the original stack mark for the XSUB. See C<ORIGMARK>. 1N/A=for apidoc AmU||ORIGMARK 1N/AThe original stack mark for the XSUB. See C<dORIGMARK>. 1N/A=for apidoc Ams||SPAGAIN 1N/ARefetch the stack pointer. Used after a callback. See L<perlcall>. 1N/A=for apidoc Ams||PUTBACK 1N/AClosing bracket for XSUB arguments. This is usually handled by C<xsubpp>. 1N/ASee C<PUSHMARK> and L<perlcall> for other uses. 1N/A=for apidoc Amn|SV*|POPs 1N/APops an SV off the stack. 1N/A=for apidoc Amn|char*|POPp 1N/APops a string off the stack. Deprecated. New code should provide 1N/Aa STRLEN n_a and use POPpx. 1N/A=for apidoc Amn|char*|POPpx 1N/APops a string off the stack. 1N/ARequires a variable STRLEN n_a in scope. 1N/A=for apidoc Amn|char*|POPpbytex 1N/APops a string off the stack which must consist of bytes i.e. characters < 256. 1N/ARequires a variable STRLEN n_a in scope. 1N/A=for apidoc Amn|NV|POPn 1N/APops a double off the stack. 1N/A=for apidoc Amn|IV|POPi 1N/APops an integer off the stack. 1N/A=for apidoc Amn|long|POPl 1N/APops a long off the stack. 1N/A/* Go to some pains in the rare event that we must extend the stack. */ 1N/A=for apidoc Am|void|EXTEND|SP|int nitems 1N/AUsed to extend the argument stack for an XSUB's return values. Once 1N/Aused, guarantees that there is room for at least C<nitems> to be pushed 1N/A=for apidoc Am|void|PUSHs|SV* sv 1N/APush an SV onto the stack. The stack must have room for this element. 1N/ADoes not handle 'set' magic. See C<XPUSHs>. 1N/A=for apidoc Am|void|PUSHp|char* str|STRLEN len 1N/APush a string onto the stack. The stack must have room for this element. 1N/AThe C<len> indicates the length of the string. Handles 'set' magic. See 1N/A=for apidoc Am|void|PUSHn|NV nv 1N/APush a double onto the stack. The stack must have room for this element. 1N/AHandles 'set' magic. See C<XPUSHn>. 1N/A=for apidoc Am|void|PUSHi|IV iv 1N/APush an integer onto the stack. The stack must have room for this element. 1N/AHandles 'set' magic. See C<XPUSHi>. 1N/A=for apidoc Am|void|PUSHu|UV uv 1N/APush an unsigned integer onto the stack. The stack must have room for this 1N/Aelement. See C<XPUSHu>. 1N/A=for apidoc Am|void|XPUSHs|SV* sv 1N/APush an SV onto the stack, extending the stack if necessary. Does not 1N/Ahandle 'set' magic. See C<PUSHs>. 1N/A=for apidoc Am|void|XPUSHp|char* str|STRLEN len 1N/APush a string onto the stack, extending the stack if necessary. The C<len> 1N/Aindicates the length of the string. Handles 'set' magic. See 1N/A=for apidoc Am|void|XPUSHn|NV nv 1N/APush a double onto the stack, extending the stack if necessary. Handles 1N/A'set' magic. See C<PUSHn>. 1N/A=for apidoc Am|void|XPUSHi|IV iv 1N/APush an integer onto the stack, extending the stack if necessary. Handles 1N/A'set' magic. See C<PUSHi>. 1N/A=for apidoc Am|void|XPUSHu|UV uv 1N/APush an unsigned integer onto the stack, extending the stack if necessary. 1N/A/* Same thing, but update mark register too. */ 1N/A /* See OPpTARGET_MY: */ 1N/A {
dSP;
sp--;
/* get TARGET from below PL_stack_sp */ \
1N/A/* newSVsv does not behave as advertised, so we copy missing 1N/A * information by hand */ 1N/A/* SV* ref causes confusion with the member variable 1N/A changed SV* ref to SV* tmpRef */ 1N/A=for apidoc mU||LVRET 1N/ATrue if this op will be the return value of an lvalue subroutine