diff options
author | Yves Orton <demerphq@gmail.com> | 2006-12-05 17:13:36 +0100 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2006-12-05 15:39:39 +0000 |
commit | 785a26d510947a2b97507d7acf9b8c13bd59b310 (patch) | |
tree | 908a504a79042daa7102b33350bb3e41739ccc4f /regexp.h | |
parent | 233e16ceab6589cdfcfeefabef027f39026bb05f (diff) | |
download | perl-785a26d510947a2b97507d7acf9b8c13bd59b310.tar.gz |
Further tweaks to make it easier to create regexp engine plug ins.
Message-ID: <9b18b3110612050713g77cac516x46fb5baac99b47c9@mail.gmail.com>
(with tweaks)
p4raw-id: //depot/perl@29468
Diffstat (limited to 'regexp.h')
-rw-r--r-- | regexp.h | 34 |
1 files changed, 16 insertions, 18 deletions
@@ -15,8 +15,8 @@ * not the System V one. */ #ifndef PLUGGABLE_RE_EXTENSION -/* we don't want to include this stuff if we are inside Nicholas' - * pluggable regex engine code */ +/* we don't want to include this stuff if we are inside of + an external regex engine based on the core one - like re 'debug'*/ struct regnode { U8 flags; @@ -32,10 +32,16 @@ struct reg_data; struct regexp_engine; -typedef struct regexp_paren_ofs { - I32 *startp; - I32 *endp; -} regexp_paren_ofs; +struct reg_substr_datum { + I32 min_offset; + I32 max_offset; + SV *substr; /* non-utf8 variant */ + SV *utf8_substr; /* utf8 variant */ + I32 end_shift; +}; +struct reg_substr_data { + struct reg_substr_datum data[3]; /* Actual array */ +}; #ifdef PERL_OLD_COPY_ON_WRITE #define SV_SAVED_COPY SV *saved_copy; /* If non-NULL, SV which is COW from original */ @@ -83,13 +89,16 @@ typedef struct regexp { I32 refcnt; /* Refcount of this regexp */ } regexp; - +/* used for high speed searches */ typedef struct re_scream_pos_data_s { char **scream_olds; /* match pos */ I32 *scream_pos; /* Internal iterator of scream. */ } re_scream_pos_data; +/* regexp_engine structure. This is the dispatch table for regexes. + * Any regex engine implementation must be able to build one of these. + */ typedef struct regexp_engine { regexp* (*comp) (pTHX_ char* exp, char* xend, PMOP* pm); I32 (*exec) (pTHX_ regexp* prog, char* stringarg, char* strend, @@ -105,17 +114,6 @@ typedef struct regexp_engine { #endif } regexp_engine; -/* - * Flags stored in regexp->intflags - * These are used only internally to the regexp engine - */ -#define PREGf_SKIP 0x00000001 -#define PREGf_IMPLICIT 0x00000002 /* Converted .* to ^.* */ -#define PREGf_NAUGHTY 0x00000004 /* how exponential is this pattern? */ -#define PREGf_VERBARG_SEEN 0x00000008 -#define PREGf_CUTGROUP_SEEN 0x00000010 - - /* Flags stored in regexp->extflags * These are used by code external to the regexp engine */ |