xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/ext/re/re.xs (revision 0:68f95e015346)
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