B::Hooks::XSUB::CallAsOp - Invoke code from an XSUB in opcode context
printf("IM IN UR CALLER MUNGING UR STACK\n");
return NORMAL; /* you must always return like from a PP function, see
also the RETURN macro */
/* or you can also delegate: */
MODULE = Some::XS PACKAGE = Some::XS
void foo ()
# later, in Perl land...
# the trampoline hook is invoked in an opcode context, instead of as an XSUB
This module requires ExtUtils::Depends to be used in your XS modules.
See B::Utils for an explanation.
Declares a function with PP's calling conventions. It's the same as perl's own PP macro but without the Perl_ prefix (you can also use it for declaring a function pointer)
Given a function pointer hook, trampoline to it on the next PL_op dispatch.
This will PUTBACK, invoke b_hooks_xsub_callasop_setup_trampoline, and then return from the current XSUB with no value.
Save the value of PL_op.
Must be called before the TRAMPOLINE macro, and followed by TRAMPOLINE_RESTORE_OP
Must be called inside your TRAMPOLINE_HOOK to set PL_op to what it was just before the trampiline.
The op_next of the restored op and the trampoline op are the same, so you should still use return NORMAL.
Saves the args given to the xsub in a temporary buffer.
This must be called before the TRAMPOLINE macro, and followed by TRAMPOLINE_RESTORE_ARGS.
Requires ax and items to be defined, calls SPAGAIN.
Appends the args from the buffer back to the stack, and then invokes SPAGAIN.
Does not modify ax, you need to add a mark yourself and use it if you need it.
A function pointer type describing a Perl push/pop function:
OP *(*foo) (pTHX)
The underlying implementation of the TRAMPOLINE macro.
Using the macro is reccomended.
Yuval Kogman, Florian Ragwitz
Copyright (c) 2009 Yuval Kogman. All rights reserved
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
To install B::Hooks::XSUB::CallAsOp, copy and paste the appropriate command in to your terminal.
perl -MCPAN -e shell
For more information on module installation, please visit the detailed CPAN module installation guide.