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