This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Adjust array index in FileCache.pm.
[perl5.git] / ext / re / re.xs
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    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);