Commit | Line | Data |
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" |
256ddcd0 |
9 | #include "re_comp.h" |
56953603 |
10 | |
f9f4320a |
11 | |
97f88e98 |
12 | START_EXTERN_C |
13 | |
88e52f1c |
14 | extern REGEXP* my_re_compile (pTHX_ SV * const pattern, const U32 pm_flags); |
49d7dfbc |
15 | extern I32 my_regexec (pTHX_ REGEXP * const prog, char* stringarg, char* strend, |
20ce7b12 |
16 | char* strbeg, I32 minend, SV* screamer, |
17 | void* data, U32 flags); |
f8149455 |
18 | |
49d7dfbc |
19 | extern char* my_re_intuit_start (pTHX_ REGEXP * const prog, SV *sv, char *strpos, |
973f7e2e |
20 | char *strend, const U32 flags, |
f722798b |
21 | struct re_scream_pos_data_s *data); |
49d7dfbc |
22 | extern SV* my_re_intuit_string (pTHX_ REGEXP * const prog); |
23 | |
24 | extern void my_regfree (pTHX_ REGEXP * const r); |
2fdbfb4d |
25 | |
d932daed |
26 | extern void my_reg_numbered_buff_fetch(pTHX_ REGEXP * const rx, const I32 paren, |
27 | SV * const usesv); |
28 | extern void my_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren, |
29 | SV const * const value); |
30 | extern I32 my_reg_numbered_buff_length(pTHX_ REGEXP * const rx, |
31 | const SV * const sv, const I32 paren); |
32 | |
192b9cd1 |
33 | extern SV* my_reg_named_buff(pTHX_ REGEXP * const, SV * const, SV * const, |
34 | const U32); |
35 | extern SV* my_reg_named_buff_iter(pTHX_ REGEXP * const rx, |
36 | const SV * const lastkey, const U32 flags); |
2fdbfb4d |
37 | |
49d7dfbc |
38 | extern SV* my_reg_qr_package(pTHX_ REGEXP * const rx); |
a3c0e9ca |
39 | #if defined(USE_ITHREADS) |
49d7dfbc |
40 | extern void* my_regdupe (pTHX_ REGEXP * const r, CLONE_PARAMS *param); |
a3c0e9ca |
41 | #endif |
0a28d81c |
42 | |
70685ca0 |
43 | EXTERN_C const struct regexp_engine my_reg_engine; |
44 | |
45 | END_EXTERN_C |
46 | |
47 | const struct regexp_engine my_reg_engine = { |
6d5c990f |
48 | my_re_compile, |
f9f4320a |
49 | my_regexec, |
50 | my_re_intuit_start, |
51 | my_re_intuit_string, |
52 | my_regfree, |
2fdbfb4d |
53 | my_reg_numbered_buff_fetch, |
54 | my_reg_numbered_buff_store, |
55 | my_reg_numbered_buff_length, |
192b9cd1 |
56 | my_reg_named_buff, |
57 | my_reg_named_buff_iter, |
49d7dfbc |
58 | my_reg_qr_package, |
a3c0e9ca |
59 | #if defined(USE_ITHREADS) |
f9f4320a |
60 | my_regdupe |
a3c0e9ca |
61 | #endif |
0a28d81c |
62 | }; |
63 | |
56953603 |
64 | MODULE = re PACKAGE = re |
65 | |
66 | void |
f9f4320a |
67 | install() |
68 | PPCODE: |
69 | PL_colorset = 0; /* Allow reinspection of ENV. */ |
70 | /* PL_debug |= DEBUG_r_FLAG; */ |
71 | XPUSHs(sv_2mortal(newSViv(PTR2IV(&my_reg_engine)))); |
256ddcd0 |
72 | |
73 | void |
74 | regmust(sv) |
75 | SV * sv |
76 | PROTOTYPE: $ |
77 | PREINIT: |
49d7dfbc |
78 | REGEXP *re; |
256ddcd0 |
79 | PPCODE: |
80 | { |
f7e71195 |
81 | if ((re = SvRX(sv))) /* assign deliberate */ |
256ddcd0 |
82 | { |
83 | SV *an = &PL_sv_no; |
84 | SV *fl = &PL_sv_no; |
07bc277f |
85 | if (RX_ANCHORED_SUBSTR(re)) { |
86 | an = newSVsv(RX_ANCHORED_SUBSTR(re)); |
87 | } else if (RX_ANCHORED_UTF8(re)) { |
88 | an = newSVsv(RX_ANCHORED_UTF8(re)); |
256ddcd0 |
89 | } |
07bc277f |
90 | if (RX_FLOAT_SUBSTR(re)) { |
91 | fl = newSVsv(RX_FLOAT_SUBSTR(re)); |
92 | } else if (RX_FLOAT_UTF8(re)) { |
93 | fl = newSVsv(RX_FLOAT_UTF8(re)); |
256ddcd0 |
94 | } |
95 | XPUSHs(an); |
96 | XPUSHs(fl); |
97 | XSRETURN(2); |
98 | } |
99 | XSRETURN_UNDEF; |
100 | } |
44a2ac75 |
101 | |