summaryrefslogtreecommitdiff
path: root/regexp.h
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2006-12-05 17:13:36 +0100
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2006-12-05 15:39:39 +0000
commit785a26d510947a2b97507d7acf9b8c13bd59b310 (patch)
tree908a504a79042daa7102b33350bb3e41739ccc4f /regexp.h
parent233e16ceab6589cdfcfeefabef027f39026bb05f (diff)
downloadperl-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.h34
1 files changed, 16 insertions, 18 deletions
diff --git a/regexp.h b/regexp.h
index 85af91e1bb..248090a5ae 100644
--- a/regexp.h
+++ b/regexp.h
@@ -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
*/