X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fre-engine-Plugin.git;a=blobdiff_plain;f=Plugin.h;h=aad712e62a421ac2660d2f4a7cbbb6369ae031e8;hp=668aec9d95caa41ceb7d4edb71d188866ae1d5d8;hb=8841074697e50dc9be0faf100e25e540968a2d9a;hpb=dd88e700bfcc92fc03db9d994ec747ca1c14ade7 diff --git a/Plugin.h b/Plugin.h index 668aec9..aad712e 100644 --- a/Plugin.h +++ b/Plugin.h @@ -1,49 +1,41 @@ - #define GET_SELF_FROM_PPRIVATE(pprivate) \ re__engine__Plugin self; \ SELF_FROM_PPRIVATE(self,pprivate); /* re__engine__Plugin self; SELF_FROM_PPRIVATE(self,rx->pprivate) */ #define SELF_FROM_PPRIVATE(self, pprivate) \ - if (sv_isobject(pprivate)) { \ + if (sv_isobject(pprivate)) { \ SV * ref = SvRV((SV*)pprivate); \ - IV tmp = SvIV((SV*)ref); \ - self = INT2PTR(re__engine__Plugin,tmp); \ + IV tmp = SvIV((SV*)ref); \ + self = INT2PTR(re__engine__Plugin,tmp); \ } else { \ Perl_croak(aTHX_ "Not an object"); \ } START_EXTERN_C EXTERN_C const regexp_engine engine_plugin; -EXTERN_C REGEXP * Plugin_comp(pTHX_ const SV const *, const U32); +#if PERL_VERSION <= 10 +EXTERN_C REGEXP * Plugin_comp(pTHX_ const SV * const, const U32); +#else +EXTERN_C REGEXP * Plugin_comp(pTHX_ SV * const, U32); +#endif EXTERN_C I32 Plugin_exec(pTHX_ REGEXP * const, char *, char *, char *, I32, SV *, void *, U32); EXTERN_C char * Plugin_intuit(pTHX_ REGEXP * const, SV *, char *, char *, U32, re_scream_pos_data *); EXTERN_C SV * Plugin_checkstr(pTHX_ REGEXP * const); EXTERN_C void Plugin_free(pTHX_ REGEXP * const); +EXTERN_C void * Plugin_dupe(pTHX_ REGEXP * const, CLONE_PARAMS *); EXTERN_C void Plugin_numbered_buff_FETCH(pTHX_ REGEXP * const, const I32, SV * const); EXTERN_C void Plugin_numbered_buff_STORE(pTHX_ REGEXP * const, const I32, SV const * const); EXTERN_C I32 Plugin_numbered_buff_LENGTH(pTHX_ REGEXP * const, const SV * const, const I32); -EXTERN_C SV * Plugin_named_buff_FETCH(pTHX_ REGEXP * const, SV * const, +EXTERN_C SV * Plugin_named_buff (pTHX_ REGEXP * const, SV * const, + SV * const, const U32); +EXTERN_C SV * Plugin_named_buff_iter (pTHX_ REGEXP * const, const SV * const, const U32); -EXTERN_C void Plugin_named_buff_STORE(pTHX_ REGEXP * const rx, - SV * const key, SV * const value, - const U32 flags); -EXTERN_C void Plugin_named_buff_DELETE(pTHX_ REGEXP * const rx, - SV * const key, const U32 flags); -EXTERN_C void Plugin_named_buff_CLEAR (pTHX_ REGEXP * const rx, const U32 flags); -EXTERN_C bool Plugin_named_buff_EXISTS (pTHX_ REGEXP * const rx, - SV * const key, const U32 flags); -EXTERN_C SV * Plugin_named_buff_FIRSTKEY (pTHX_ REGEXP * const rx, - const U32 flags); -EXTERN_C SV * Plugin_named_buff_NEXTKEY (pTHX_ REGEXP * const rx, - SV * const lastkey, const U32 flags); -EXTERN_C SV * Plugin_named_buff_SCALAR (pTHX_ REGEXP * const rx, - const U32 flags); EXTERN_C SV * Plugin_package(pTHX_ REGEXP * const); #ifdef USE_ITHREADS EXTERN_C void * Plugin_dupe(pTHX_ REGEXP * const, CLONE_PARAMS *); @@ -64,24 +56,18 @@ const regexp_engine engine_plugin = { Plugin_numbered_buff_FETCH, Plugin_numbered_buff_STORE, Plugin_numbered_buff_LENGTH, - Plugin_named_buff_FETCH, - Plugin_named_buff_STORE, - Plugin_named_buff_DELETE, - Plugin_named_buff_CLEAR, - Plugin_named_buff_EXISTS, - Plugin_named_buff_FIRSTKEY, - Plugin_named_buff_NEXTKEY, - Plugin_named_buff_SCALAR, + Plugin_named_buff, + Plugin_named_buff_iter, Plugin_package, -#if defined(USE_ITHREADS) +#if defined(USE_ITHREADS) Plugin_dupe, #endif }; typedef struct replug { - /* Pointer back to the containing REGEXP struct so that accessors + /* Pointer back to the containing regexp struct so that accessors * can modify nparens, gofs etc. */ - REGEXP * rx; + struct regexp * rx; /* A copy of the pattern given to comp, for ->pattern */ SV * pattern; @@ -92,22 +78,20 @@ typedef struct replug { /* The ->stash */ SV * stash; - /* - * Callbacks - */ + /* Callbacks */ + SV * cb_exec; + SV * cb_free; /* ->num_captures */ SV * cb_num_capture_buff_FETCH; SV * cb_num_capture_buff_STORE; SV * cb_num_capture_buff_LENGTH; - - /* ->named_captures */ - SV * cb_named_capture_buff_FETCH; - SV * cb_named_capture_buff_STORE; - SV * cb_named_capture_buff_DELETE; - SV * cb_named_capture_buff_CLEAR; - SV * cb_named_capture_buff_EXISTS; - SV * cb_named_capture_buff_FIRSTKEY; - SV * cb_named_capture_buff_NEXTKEY; - SV * cb_named_capture_buff_SCALAR; } *re__engine__Plugin; + +#if PERL_VERSION >= 11 +# define rxREGEXP(RX) (SvANY(RX)) +# define newREGEXP(RX) ((RX) = ((REGEXP*) newSV_type(SVt_REGEXP))) +#else +# define rxREGEXP(RX) (RX) +# define newREGEXP(RX) (Newxz((RX), 1, struct regexp)) +#endif