X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fre-engine-Plugin.git;a=blobdiff_plain;f=Plugin.xs;h=aa95e8b468b67df5274baa60db3107ddb4d3d644;hp=e9d1307a58d92df669fcb66abbecca469f032852;hb=447aa9bcb55632cf669454868679169602a28fe2;hpb=2dd7bc5f80da4fe2220e28de1102641c239d084c diff --git a/Plugin.xs b/Plugin.xs index e9d1307..aa95e8b 100644 --- a/Plugin.xs +++ b/Plugin.xs @@ -126,32 +126,36 @@ Plugin_exec(pTHX_ REGEXP * const rx, char *stringarg, char *strend, SV * callback = get_H_callback("exec"); GET_SELF_FROM_PPRIVATE(rx->pprivate); - /* Store the current str for ->str */ - self->str = (SV*)sv; - SvREFCNT_inc(self->str); + if (callback) { + /* Store the current str for ->str */ + self->str = (SV*)sv; + SvREFCNT_inc(self->str); - ENTER; - SAVETMPS; + ENTER; + SAVETMPS; - PUSHMARK(SP); - XPUSHs(rx->pprivate); - XPUSHs(sv); - PUTBACK; + PUSHMARK(SP); + XPUSHs(rx->pprivate); + XPUSHs(sv); + PUTBACK; - call_sv(callback, G_SCALAR); + call_sv(callback, G_SCALAR); - SPAGAIN; + SPAGAIN; - SV * ret = POPs; + SV * ret = POPs; - if (SvTRUE(ret)) - matched = 1; - else - matched = 0; + if (SvTRUE(ret)) + matched = 1; + else + matched = 0; - PUTBACK; - FREETMPS; - LEAVE; + PUTBACK; + FREETMPS; + LEAVE; + } else { + matched = 0; + } return matched; }