Merge the install and uninstall routines.
[p5sagit/p5-mst-13.2.git] / ext / re / re.xs
CommitLineData
41b16711 1#if defined(PERL_EXT_RE_DEBUG) && !defined(DEBUGGING)
2# define DEBUGGING
3#endif
4
c5be433b 5#define PERL_NO_GET_CONTEXT
56953603 6#include "EXTERN.h"
7#include "perl.h"
8#include "XSUB.h"
9
97f88e98 10START_EXTERN_C
11
cea2e8a9 12extern regexp* my_regcomp (pTHX_ char* exp, char* xend, PMOP* pm);
13extern I32 my_regexec (pTHX_ regexp* prog, char* stringarg, char* strend,
20ce7b12 14 char* strbeg, I32 minend, SV* screamer,
15 void* data, U32 flags);
f722798b 16extern void my_regfree (pTHX_ struct regexp* r);
17extern 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);
20extern SV* my_re_intuit_string (pTHX_ regexp *prog);
56953603 21
97f88e98 22END_EXTERN_C
23
df3728a2 24#define MY_CXT_KEY "re::_guts" XS_VERSION
89ca4ac7 25
26typedef struct {
27 int x_oldflag; /* debug flag */
1839d50f 28 unsigned int x_state;
89ca4ac7 29} my_cxt_t;
30
31START_MY_CXT
32
33#define oldflag (MY_CXT.x_oldflag)
56953603 34
56953603 35static void
1839d50f 36install(pTHX_ unsigned int new_state)
56953603 37{
89ca4ac7 38 dMY_CXT;
1839d50f 39 if(new_state == MY_CXT.x_state)
40 return;
41
42 if (new_state) {
43 PL_colorset = 0; /* Allow reinspection of ENV. */
44 PL_regexecp = &my_regexec;
45 PL_regcompp = &my_regcomp;
46 PL_regint_start = &my_re_intuit_start;
47 PL_regint_string = &my_re_intuit_string;
48 PL_regfree = &my_regfree;
49 oldflag = PL_debug & DEBUG_r_FLAG;
50 PL_debug |= DEBUG_r_FLAG;
51 } else {
52 PL_regexecp = Perl_regexec_flags;
53 PL_regcompp = Perl_pregcomp;
54 PL_regint_start = Perl_re_intuit_start;
55 PL_regint_string = Perl_re_intuit_string;
56 PL_regfree = Perl_pregfree;
57
58 if (!oldflag)
59 PL_debug &= ~DEBUG_r_FLAG;
60 }
61
62 MY_CXT.x_state = new_state;
56953603 63}
64
65MODULE = re PACKAGE = re
66
89ca4ac7 67BOOT:
68{
69 MY_CXT_INIT;
70}
71
72
56953603 73void
1839d50f 74install(new_state)
75 unsigned int new_state;
cea2e8a9 76 CODE:
1839d50f 77 install(aTHX_ new_state);