Commit | Line | Data |
---|---|---|
41b16711 AD |
1 | #if defined(PERL_EXT_RE_DEBUG) && !defined(DEBUGGING) |
2 | # define DEBUGGING | |
3 | #endif | |
4 | ||
c5be433b | 5 | #define PERL_NO_GET_CONTEXT |
56953603 IZ |
6 | #include "EXTERN.h" |
7 | #include "perl.h" | |
8 | #include "XSUB.h" | |
256ddcd0 | 9 | #include "re_comp.h" |
56953603 | 10 | |
f9f4320a | 11 | |
97f88e98 JH |
12 | START_EXTERN_C |
13 | ||
88e52f1c | 14 | extern REGEXP* my_re_compile (pTHX_ SV * const pattern, const U32 pm_flags); |
3c13cae6 DM |
15 | extern REGEXP* my_re_op_compile (pTHX_ SV ** const patternp, int pat_count, |
16 | OP *expr, const regexp_engine* eng, REGEXP *VOL old_re, | |
f8ff62a0 | 17 | bool *is_bare_re, U32 rx_flags, U32 pm_flags); |
3c13cae6 | 18 | |
49d7dfbc | 19 | extern I32 my_regexec (pTHX_ REGEXP * const prog, char* stringarg, char* strend, |
dca33001 | 20 | char* strbeg, SSize_t minend, SV* screamer, |
20ce7b12 | 21 | void* data, U32 flags); |
f8149455 | 22 | |
52a21eb3 DM |
23 | extern char* my_re_intuit_start(pTHX_ |
24 | REGEXP * const rx, | |
25 | SV *sv, | |
26 | const char * const strbeg, | |
27 | char *strpos, | |
28 | char *strend, | |
29 | const U32 flags, | |
30 | re_scream_pos_data *data); | |
31 | ||
49d7dfbc AB |
32 | extern SV* my_re_intuit_string (pTHX_ REGEXP * const prog); |
33 | ||
34 | extern void my_regfree (pTHX_ REGEXP * const r); | |
2fdbfb4d | 35 | |
d932daed SH |
36 | extern void my_reg_numbered_buff_fetch(pTHX_ REGEXP * const rx, const I32 paren, |
37 | SV * const usesv); | |
38 | extern void my_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren, | |
39 | SV const * const value); | |
40 | extern I32 my_reg_numbered_buff_length(pTHX_ REGEXP * const rx, | |
41 | const SV * const sv, const I32 paren); | |
42 | ||
192b9cd1 AB |
43 | extern SV* my_reg_named_buff(pTHX_ REGEXP * const, SV * const, SV * const, |
44 | const U32); | |
45 | extern SV* my_reg_named_buff_iter(pTHX_ REGEXP * const rx, | |
46 | const SV * const lastkey, const U32 flags); | |
2fdbfb4d | 47 | |
49d7dfbc | 48 | extern SV* my_reg_qr_package(pTHX_ REGEXP * const rx); |
a3c0e9ca | 49 | #if defined(USE_ITHREADS) |
49d7dfbc | 50 | extern void* my_regdupe (pTHX_ REGEXP * const r, CLONE_PARAMS *param); |
a3c0e9ca | 51 | #endif |
0a28d81c | 52 | |
70685ca0 JH |
53 | EXTERN_C const struct regexp_engine my_reg_engine; |
54 | ||
55 | END_EXTERN_C | |
56 | ||
57 | const struct regexp_engine my_reg_engine = { | |
6d5c990f | 58 | my_re_compile, |
f9f4320a YO |
59 | my_regexec, |
60 | my_re_intuit_start, | |
61 | my_re_intuit_string, | |
62 | my_regfree, | |
2fdbfb4d AB |
63 | my_reg_numbered_buff_fetch, |
64 | my_reg_numbered_buff_store, | |
65 | my_reg_numbered_buff_length, | |
192b9cd1 AB |
66 | my_reg_named_buff, |
67 | my_reg_named_buff_iter, | |
49d7dfbc | 68 | my_reg_qr_package, |
a3c0e9ca | 69 | #if defined(USE_ITHREADS) |
3c13cae6 | 70 | my_regdupe, |
a3c0e9ca | 71 | #endif |
3c13cae6 | 72 | my_re_op_compile, |
0a28d81c NC |
73 | }; |
74 | ||
56953603 IZ |
75 | MODULE = re PACKAGE = re |
76 | ||
77 | void | |
f9f4320a YO |
78 | install() |
79 | PPCODE: | |
80 | PL_colorset = 0; /* Allow reinspection of ENV. */ | |
81 | /* PL_debug |= DEBUG_r_FLAG; */ | |
82 | XPUSHs(sv_2mortal(newSViv(PTR2IV(&my_reg_engine)))); | |
256ddcd0 YO |
83 | |
84 | void | |
85 | regmust(sv) | |
86 | SV * sv | |
87 | PROTOTYPE: $ | |
88 | PREINIT: | |
49d7dfbc | 89 | REGEXP *re; |
256ddcd0 YO |
90 | PPCODE: |
91 | { | |
f1f02a6b DL |
92 | if ((re = SvRX(sv)) /* assign deliberate */ |
93 | /* only for re engines we know about */ | |
94 | && (RX_ENGINE(re) == &my_reg_engine | |
95 | || RX_ENGINE(re) == &PL_core_reg_engine)) | |
256ddcd0 YO |
96 | { |
97 | SV *an = &PL_sv_no; | |
98 | SV *fl = &PL_sv_no; | |
07bc277f | 99 | if (RX_ANCHORED_SUBSTR(re)) { |
f1f02a6b | 100 | an = sv_2mortal(newSVsv(RX_ANCHORED_SUBSTR(re))); |
07bc277f | 101 | } else if (RX_ANCHORED_UTF8(re)) { |
f1f02a6b | 102 | an = sv_2mortal(newSVsv(RX_ANCHORED_UTF8(re))); |
256ddcd0 | 103 | } |
07bc277f | 104 | if (RX_FLOAT_SUBSTR(re)) { |
f1f02a6b | 105 | fl = sv_2mortal(newSVsv(RX_FLOAT_SUBSTR(re))); |
07bc277f | 106 | } else if (RX_FLOAT_UTF8(re)) { |
f1f02a6b | 107 | fl = sv_2mortal(newSVsv(RX_FLOAT_UTF8(re))); |
256ddcd0 | 108 | } |
855ea7c7 S |
109 | EXTEND(SP, 2); |
110 | PUSHs(an); | |
111 | PUSHs(fl); | |
256ddcd0 YO |
112 | XSRETURN(2); |
113 | } | |
114 | XSRETURN_UNDEF; | |
115 | } | |
44a2ac75 | 116 |