X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2Fre%2Fengine%2FHooks.pm;h=50ba58e63d8f294e18204e001403bd0c971e5b5a;hb=b85e0f01bc196351b28fb97eb8ae37871076722a;hp=07b71e4e505707b5a43796563b86d9b5d4277b1d;hpb=d98dbf56343c99b164e93be306735db3f6e6bca5;p=perl%2Fmodules%2Fre-engine-Hooks.git diff --git a/lib/re/engine/Hooks.pm b/lib/re/engine/Hooks.pm index 07b71e4..50ba58e 100644 --- a/lib/re/engine/Hooks.pm +++ b/lib/re/engine/Hooks.pm @@ -45,7 +45,10 @@ In your XS file : BOOT: { - reh_register("Devel::Regexp::Instrument", dri_comp_hook, dri_exec_hook); + reh_config cfg; + cfg.comp = dri_comp_hook; + cfg.exec = dri_exec_hook; + reh_register("Devel::Regexp::Instrument", &cfg); } In your Perl module file : @@ -107,12 +110,35 @@ Currently evaluates to : typedef void (*reh_exec_hook)(pTHX_ regexp *, regnode *, regmatch_info *, regmatch_state *); +=head2 C + +A typedef'd struct that holds a set of all the different callbacks publicized by this module. +It has the following members : + +=over 4 + +=item * + +C + +A function pointer of type C that will be called each time a regnode is compiled. +Allowed to be C if you don't want to call anything for this phase. + +=item * + +C + +A function pointer of type C that will be called each time a regnode is executed. +Allowed to be C if you don't want to call anything for this phase. + +=back + =head2 C - void reh_register(pTHX_ const char *key, reh_comp_hook comp, reh_exec_hook exec); + void reh_register(pTHX_ const char *key, reh_config *cfg); -Registers under the given name C a callback C that will run during the compilation phase and a callback C that will run during the execution phase. -Null function pointers are allowed in case you don't want to hook one of the phases. +Registers the callbacks specified by the C object C under the given name C. +C can be a pointer to a static object of type C. C should match with the argument passed to L and L in Perl land. An exception will be thrown if C has already been used to register callbacks.