.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "B::Hooks::OP::PPAddr 3pm" .TH B::Hooks::OP::PPAddr 3pm "2009-07-28" "perl v5.14.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" B::Hooks::OP::PPAddr \- Hook into opcode execution .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& #include "hook_op_check.h" \& #include "hook_op_ppaddr.h" \& \& STATIC OP * \& execute_entereval (pTHX_ OP *op, void *user_data) { \& ... \& } \& \& STATIC OP * \& check_entereval (pTHX_ OP *op, void *user_data) { \& hook_op_ppaddr (op, execute_entereval, NULL); \& } \& \& hook_op_check (OP_ENTEREVAL, check_entereval, NULL); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module provides a c api for \s-1XS\s0 modules to hook into the execution of perl opcodes. .PP ExtUtils::Depends is used to export all functions for other \s-1XS\s0 modules to use. Include the following in your Makefile.PL: .PP .Vb 5 \& my $pkg = ExtUtils::Depends\->new(\*(AqYour::XSModule\*(Aq, \*(AqB::Hooks::OP::PPAddr\*(Aq); \& WriteMakefile( \& ... # your normal makefile flags \& $pkg\->get_makefile_vars, \& ); .Ve .PP Your \s-1XS\s0 module can now include \f(CW\*(C`hook_op_ppaddr.h\*(C'\fR. .SH "TYPES" .IX Header "TYPES" .SS "typedef \s-1OP\s0 *(*hook_op_ppaddr_cb_t) (pTHX_ \s-1OP\s0 *, void *user_data)" .IX Subsection "typedef OP *(*hook_op_ppaddr_cb_t) (pTHX_ OP *, void *user_data)" Type that callbacks need to implement. .SH "FUNCTIONS" .IX Header "FUNCTIONS" .SS "void hook_op_ppaddr (\s-1OP\s0 *op, hook_op_ppaddr_cb_t cb, void *user_data)" .IX Subsection "void hook_op_ppaddr (OP *op, hook_op_ppaddr_cb_t cb, void *user_data)" Replace the function to execute \f(CW\*(C`op\*(C'\fR with the callback \f(CW\*(C`cb\*(C'\fR. \f(CW\*(C`user_data\*(C'\fR will be passed to the callback as the last argument. .SS "void hook_op_ppaddr_around (\s-1OP\s0 *op, hook_op_ppaddr_cb_t before, hook_op_ppaddr_cb_t after, void *user_data)" .IX Subsection "void hook_op_ppaddr_around (OP *op, hook_op_ppaddr_cb_t before, hook_op_ppaddr_cb_t after, void *user_data)" Register the callbacks \f(CW\*(C`before\*(C'\fR and \f(CW\*(C`after\*(C'\fR to be called before and after the execution of \f(CW\*(C`op\*(C'\fR. \f(CW\*(C`user_data\*(C'\fR will be passed to the callback as the last argument. .SH "SEE ALSO" .IX Header "SEE ALSO" B::Hooks::OP::Check .SH "AUTHOR" .IX Header "AUTHOR" Florian Ragwitz .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (c) 2008 Florian Ragwitz .PP This module is free software. .PP You may distribute this code under the same terms as Perl itself.