1 #if defined(PERL_EXT_RE_DEBUG) && !defined(DEBUGGING)
2 # define DEBUGGING
3 #endif
4
5 #define PERL_NO_GET_CONTEXT
6 #include "EXTERN.h"
7 #include "perl.h"
8 #include "XSUB.h"
9
10 START_EXTERN_C
11
12 extern regexp* my_regcomp (pTHX_ char* exp, char* xend, PMOP* pm);
13 extern I32 my_regexec (pTHX_ regexp* prog, char* stringarg, char* strend,
14 char* strbeg, I32 minend, SV* screamer,
15 void* data, U32 flags);
16 extern void my_regfree (pTHX_ struct regexp* r);
17 extern char* my_re_intuit_start (pTHX_ regexp *prog, SV *sv, char *strpos,
18 char *strend, U32 flags,
19 struct re_scream_pos_data_s *data);
20 extern SV* my_re_intuit_string (pTHX_ regexp *prog);
21
22 END_EXTERN_C
23
24 #define MY_CXT_KEY "re::_guts" XS_VERSION
25
26 typedef struct {
27 int x_oldflag; /* debug flag */
28 } my_cxt_t;
29
30 START_MY_CXT
31
32 #define oldflag (MY_CXT.x_oldflag)
33
34 static void
uninstall(pTHX)35 uninstall(pTHX)
36 {
37 dMY_CXT;
38 PL_regexecp = Perl_regexec_flags;
39 PL_regcompp = Perl_pregcomp;
40 PL_regint_start = Perl_re_intuit_start;
41 PL_regint_string = Perl_re_intuit_string;
42 PL_regfree = Perl_pregfree;
43
44 if (!oldflag)
45 PL_debug &= ~DEBUG_r_FLAG;
46 }
47
48 static void
install(pTHX)49 install(pTHX)
50 {
51 dMY_CXT;
52 PL_colorset = 0; /* Allow reinspection of ENV. */
53 PL_regexecp = &my_regexec;
54 PL_regcompp = &my_regcomp;
55 PL_regint_start = &my_re_intuit_start;
56 PL_regint_string = &my_re_intuit_string;
57 PL_regfree = &my_regfree;
58 oldflag = PL_debug & DEBUG_r_FLAG;
59 PL_debug |= DEBUG_r_FLAG;
60 }
61
62 MODULE = re PACKAGE = re
63
64 BOOT:
65 {
66 MY_CXT_INIT;
67 }
68
69
70 void
71 install()
72 CODE:
73 install(aTHX);
74
75 void
76 uninstall()
77 CODE:
78 uninstall(aTHX);
79