]> git.vpit.fr Git - perl/modules/re-engine-Hooks.git/blobdiff - t/re-engine-Hooks-TestDist/TestDist.xs
Correct two prototypes on 5.20
[perl/modules/re-engine-Hooks.git] / t / re-engine-Hooks-TestDist / TestDist.xs
index 95e20ed3dc088bb07e7f58278ac00572522dcec8..0b701f77e667839268666548c0227181023d5d28 100644 (file)
 #define __PACKAGE__     "re::engine::Hooks::TestDist"
 #define __PACKAGE_LEN__ (sizeof(__PACKAGE__)-1)
 
+#ifndef REHT_HAS_PERL
+# define REHT_HAS_PERL(R, V, S) (PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S))))))
+#endif
+
 #include "regcomp.h"
 
 STATIC SV *reht_foo_var;
@@ -22,39 +26,51 @@ STATIC SV *reht_foo_var;
   av_push((AV *) SvRV(V), sv);         \
  } } while (0)
 
-STATIC void reht_foo_comp(pTHX_ regexp *rx, regnode *node) {
+STATIC void reht_foo_comp_node(pTHX_ regexp *rx, regnode *node) {
  REHT_PUSH_NODE_NAME(reht_foo_var, "c:");
 }
 
-STATIC void reht_foo_exec(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
+STATIC void reht_foo_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
  REHT_PUSH_NODE_NAME(reht_foo_var, "e:");
 }
 
 STATIC SV *reht_bar_var;
 
-STATIC void reht_bar_comp(pTHX_ regexp *rx, regnode *node) {
+STATIC void reht_bar_comp_node(pTHX_ regexp *rx, regnode *node) {
  REHT_PUSH_NODE_NAME(reht_bar_var, "c:");
 }
 
-STATIC void reht_bar_exec(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
+STATIC void reht_bar_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
  REHT_PUSH_NODE_NAME(reht_bar_var, "e:");
 }
 
 STATIC SV *reht_custom_var;
 
-STATIC void reht_custom_comp(pTHX_ regexp *rx, regnode *node) {
+STATIC void reht_custom_comp_node(pTHX_ regexp *rx, regnode *node) {
  const char *node_name;
 
  node_name = PL_reg_name[OP(node)];
 }
 
-STATIC void reht_custom_exec(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
+#if !REHT_HAS_PERL(5, 19, 1)
+
+STATIC struct re_save_state reht_state_bak;
+
+#endif
+
+STATIC void reht_custom_exec_node(pTHX_ regexp *rx, regnode *node, regmatch_info *reginfo, regmatch_state *st) {
  STRLEN      node_namelen;
  const char *node_name;
 
  node_name    = PL_reg_name[OP(node)];
  node_namelen = strlen(node_name);
 
+#if !REHT_HAS_PERL(5, 19, 1)
+ /* The global regexp state may be overwritten if the Perl callback does a
+  * regexp match. */
+ reht_state_bak = PL_reg_state;
+#endif
+
  dSP;
 
  ENTER;
@@ -69,6 +85,10 @@ STATIC void reht_custom_exec(pTHX_ regexp *rx, regnode *node, regmatch_info *reg
 
  FREETMPS;
  LEAVE;
+
+#if !REHT_HAS_PERL(5, 19, 1)
+ PL_reg_state = reht_state_bak;
+#endif
 }
 
 /* --- XS ------------------------------------------------------------------ */
@@ -79,14 +99,29 @@ PROTOTYPES: ENABLE
 
 BOOT:
 {
- reh_register(__PACKAGE__ "::foo", reht_foo_comp, reht_foo_exec);
- reht_foo_var = NULL;
+ {
+  reh_config foo_cfg;
+  foo_cfg.comp_node = reht_foo_comp_node;
+  foo_cfg.exec_node = reht_foo_exec_node;
+  reh_register(__PACKAGE__ "::foo", &foo_cfg);
+  reht_foo_var = NULL;
+ }
 
- reh_register(__PACKAGE__ "::bar", reht_bar_comp, reht_bar_exec);
- reht_bar_var = NULL;
+ {
+  reh_config bar_cfg;
+  bar_cfg.comp_node = reht_bar_comp_node;
+  bar_cfg.exec_node = reht_bar_exec_node;
+  reh_register(__PACKAGE__ "::bar", &bar_cfg);
+  reht_bar_var = NULL;
+ }
 
- reh_register(__PACKAGE__ "::custom", reht_custom_comp, reht_custom_exec);
- reht_custom_var = NULL;
+ {
+  reh_config custom_cfg;
+  custom_cfg.comp_node = reht_custom_comp_node;
+  custom_cfg.exec_node = reht_custom_exec_node;
+  reh_register(__PACKAGE__ "::custom", &custom_cfg);
+  reht_custom_var = NULL;
+ }
 }
 
 void