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 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 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 118 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 uninstall(aTHX);