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, |
20ce7b12 GS |
20 | char* strbeg, I32 minend, SV* screamer, |
21 | void* data, U32 flags); | |
f8149455 | 22 | |
49d7dfbc | 23 | extern char* my_re_intuit_start (pTHX_ REGEXP * const prog, SV *sv, char *strpos, |
973f7e2e | 24 | char *strend, const U32 flags, |
f722798b | 25 | struct re_scream_pos_data_s *data); |
49d7dfbc AB |
26 | extern SV* my_re_intuit_string (pTHX_ REGEXP * const prog); |
27 | ||
28 | extern void my_regfree (pTHX_ REGEXP * const r); | |
2fdbfb4d | 29 | |
d932daed SH |
30 | extern void my_reg_numbered_buff_fetch(pTHX_ REGEXP * const rx, const I32 paren, |
31 | SV * const usesv); | |
32 | extern void my_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren, | |
33 | SV const * const value); | |
34 | extern I32 my_reg_numbered_buff_length(pTHX_ REGEXP * const rx, | |
35 | const SV * const sv, const I32 paren); | |
36 | ||
192b9cd1 AB |
37 | extern SV* my_reg_named_buff(pTHX_ REGEXP * const, SV * const, SV * const, |
38 | const U32); | |
39 | extern SV* my_reg_named_buff_iter(pTHX_ REGEXP * const rx, | |
40 | const SV * const lastkey, const U32 flags); | |
2fdbfb4d | 41 | |
49d7dfbc | 42 | extern SV* my_reg_qr_package(pTHX_ REGEXP * const rx); |
a3c0e9ca | 43 | #if defined(USE_ITHREADS) |
49d7dfbc | 44 | extern void* my_regdupe (pTHX_ REGEXP * const r, CLONE_PARAMS *param); |
a3c0e9ca | 45 | #endif |
0a28d81c | 46 | |
70685ca0 JH |
47 | EXTERN_C const struct regexp_engine my_reg_engine; |
48 | ||
49 | END_EXTERN_C | |
50 | ||
51 | const struct regexp_engine my_reg_engine = { | |
6d5c990f | 52 | my_re_compile, |
f9f4320a YO |
53 | my_regexec, |
54 | my_re_intuit_start, | |
55 | my_re_intuit_string, | |
56 | my_regfree, | |
2fdbfb4d AB |
57 | my_reg_numbered_buff_fetch, |
58 | my_reg_numbered_buff_store, | |
59 | my_reg_numbered_buff_length, | |
192b9cd1 AB |
60 | my_reg_named_buff, |
61 | my_reg_named_buff_iter, | |
49d7dfbc | 62 | my_reg_qr_package, |
a3c0e9ca | 63 | #if defined(USE_ITHREADS) |
3c13cae6 | 64 | my_regdupe, |
a3c0e9ca | 65 | #endif |
3c13cae6 | 66 | my_re_op_compile, |
0a28d81c NC |
67 | }; |
68 | ||
56953603 IZ |
69 | MODULE = re PACKAGE = re |
70 | ||
71 | void | |
f9f4320a YO |
72 | install() |
73 | PPCODE: | |
74 | PL_colorset = 0; /* Allow reinspection of ENV. */ | |
75 | /* PL_debug |= DEBUG_r_FLAG; */ | |
76 | XPUSHs(sv_2mortal(newSViv(PTR2IV(&my_reg_engine)))); | |
256ddcd0 YO |
77 | |
78 | void | |
79 | regmust(sv) | |
80 | SV * sv | |
81 | PROTOTYPE: $ | |
82 | PREINIT: | |
49d7dfbc | 83 | REGEXP *re; |
256ddcd0 YO |
84 | PPCODE: |
85 | { | |
f1f02a6b DL |
86 | if ((re = SvRX(sv)) /* assign deliberate */ |
87 | /* only for re engines we know about */ | |
88 | && (RX_ENGINE(re) == &my_reg_engine | |
89 | || RX_ENGINE(re) == &PL_core_reg_engine)) | |
256ddcd0 YO |
90 | { |
91 | SV *an = &PL_sv_no; | |
92 | SV *fl = &PL_sv_no; | |
07bc277f | 93 | if (RX_ANCHORED_SUBSTR(re)) { |
f1f02a6b | 94 | an = sv_2mortal(newSVsv(RX_ANCHORED_SUBSTR(re))); |
07bc277f | 95 | } else if (RX_ANCHORED_UTF8(re)) { |
f1f02a6b | 96 | an = sv_2mortal(newSVsv(RX_ANCHORED_UTF8(re))); |
256ddcd0 | 97 | } |
07bc277f | 98 | if (RX_FLOAT_SUBSTR(re)) { |
f1f02a6b | 99 | fl = sv_2mortal(newSVsv(RX_FLOAT_SUBSTR(re))); |
07bc277f | 100 | } else if (RX_FLOAT_UTF8(re)) { |
f1f02a6b | 101 | fl = sv_2mortal(newSVsv(RX_FLOAT_UTF8(re))); |
256ddcd0 YO |
102 | } |
103 | XPUSHs(an); | |
104 | XPUSHs(fl); | |
105 | XSRETURN(2); | |
106 | } | |
107 | XSRETURN_UNDEF; | |
108 | } | |
44a2ac75 | 109 |