X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Fre-engine-Hooks.git;a=blobdiff_plain;f=t%2Fre-engine-Hooks-TestDist%2FTestDist.xs;h=ef36ccb9303975b003576a92c5964f863c00212a;hp=0005b019b09b36074583c0b279d01a8f74934ffc;hb=7eb360aa8aa4a3fbd88d6bf1dedd601e6dcef62e;hpb=3873fbc39d250734131e096da47add0cf601d194 diff --git a/t/re-engine-Hooks-TestDist/TestDist.xs b/t/re-engine-Hooks-TestDist/TestDist.xs index 0005b01..ef36ccb 100644 --- a/t/re-engine-Hooks-TestDist/TestDist.xs +++ b/t/re-engine-Hooks-TestDist/TestDist.xs @@ -48,6 +48,8 @@ STATIC void reht_custom_comp_node(pTHX_ regexp *rx, regnode *node) { node_name = PL_reg_name[OP(node)]; } +STATIC struct re_save_state reht_state_bak; + STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) { STRLEN node_namelen; const char *node_name; @@ -55,6 +57,10 @@ STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info node_name = PL_reg_name[OP(node)]; node_namelen = strlen(node_name); + /* The global regexp state may be overwritten if the Perl callback does a + * regexp match. */ + reht_state_bak = PL_reg_state; + dSP; ENTER; @@ -69,6 +75,8 @@ STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info FREETMPS; LEAVE; + + PL_reg_state = reht_state_bak; } /* --- XS ------------------------------------------------------------------ */