X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regcomp.h;h=3aa5c1e18bb66bbc533b8b477b8f1d421f64f76c;hb=f8f79f57f467ffff4d31dc518ce3f6d2364090a0;hp=b9542c9bce811e8abac472e84401375afe1f9b06;hpb=e8e3b0fb0cb9321810604b285f562851680b538c;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regcomp.h b/regcomp.h index b9542c9..3aa5c1e 100644 --- a/regcomp.h +++ b/regcomp.h @@ -1,4 +1,11 @@ /* regcomp.h + * + * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + * 2000, 2001, 2002, 2003, by Larry Wall and others + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * */ typedef OP OP_4tree; /* Will be redefined later. */ @@ -286,6 +293,14 @@ struct regnode_charclass_class { /* has [[:blah:]] classes */ #define ANYOF_BITMAP_CLEAR(p,c) (ANYOF_BITMAP_BYTE(p, c) &= ~ANYOF_BIT(c)) #define ANYOF_BITMAP_TEST(p, c) (ANYOF_BITMAP_BYTE(p, c) & ANYOF_BIT(c)) +#define ANYOF_BITMAP_SETALL(p) \ + memset (ANYOF_BITMAP(p), 255, ANYOF_BITMAP_SIZE) +#define ANYOF_BITMAP_CLEARALL(p) \ + Zero (ANYOF_BITMAP(p), ANYOF_BITMAP_SIZE) +/* Check that all 256 bits are all set. Used in S_cl_is_anything() */ +#define ANYOF_BITMAP_TESTALLSET(p) \ + memEQ (ANYOF_BITMAP(p), "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", ANYOF_BITMAP_SIZE) + #define ANYOF_SKIP ((ANYOF_SIZE - 1)/sizeof(regnode)) #define ANYOF_CLASS_SKIP ((ANYOF_CLASS_SIZE - 1)/sizeof(regnode)) #define ANYOF_CLASS_ADD_SKIP (ANYOF_CLASS_SKIP - ANYOF_SKIP) @@ -309,7 +324,8 @@ struct regnode_charclass_class { /* has [[:blah:]] classes */ #define REG_SEEN_LOOKBEHIND 2 #define REG_SEEN_GPOS 4 #define REG_SEEN_EVAL 8 -#define REG_SEEN_SANY 16 +#define REG_SEEN_CANY 16 +#define REG_SEEN_SANY REG_SEEN_CANY /* src bckwrd cmpt */ START_EXTERN_C @@ -331,7 +347,7 @@ EXTCONST U8 PL_varies[] = { EXTCONST U8 PL_simple[]; #else EXTCONST U8 PL_simple[] = { - REG_ANY, SANY, + REG_ANY, SANY, CANY, ANYOF, ALNUM, ALNUML, NALNUM, NALNUML, @@ -350,6 +366,18 @@ typedef struct re_scream_pos_data_s I32 *scream_pos; /* Internal iterator of scream. */ } re_scream_pos_data; +/* .what is a character array with one character for each member of .data + * The character describes the function of the corresponding .data item: + * f - start-class data for regstclass optimization + * n - Root of op tree for (?{EVAL}) item + * o - Start op for (?{EVAL}) item + * p - Pad for (?{EVAL} item + * s - swash for unicode-style character class, and the multicharacter + * strings resulting from casefolding the single-character entries + * in the character class + * 20010712 mjd@plover.com + * (Remember to update re_dup() and pregfree() if you add any items.) + */ struct reg_data { U32 count; U8 *what; @@ -359,7 +387,8 @@ struct reg_data { struct reg_substr_datum { I32 min_offset; I32 max_offset; - SV *substr; + SV *substr; /* non-utf8 variant */ + SV *utf8_substr; /* utf8 variant */ }; struct reg_substr_data { @@ -367,10 +396,13 @@ struct reg_substr_data { }; #define anchored_substr substrs->data[0].substr +#define anchored_utf8 substrs->data[0].utf8_substr #define anchored_offset substrs->data[0].min_offset #define float_substr substrs->data[1].substr +#define float_utf8 substrs->data[1].utf8_substr #define float_min_offset substrs->data[1].min_offset #define float_max_offset substrs->data[1].max_offset #define check_substr substrs->data[2].substr +#define check_utf8 substrs->data[2].utf8_substr #define check_offset_min substrs->data[2].min_offset #define check_offset_max substrs->data[2].max_offset