This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate:
[perl5.git] / regcomp.h
index 16cf957..83c83ee 100644 (file)
--- 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, 2005 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. */
@@ -146,15 +153,9 @@ struct regnode_charclass_class {   /* has [[:blah:]] classes */
 #undef NEXT_OFF
 #undef NODE_ALIGN
 
-#ifndef lint
-#  define NEXT_OFF(p) ((p)->next_off)
-#  define NODE_ALIGN(node)
-#  define NODE_ALIGN_FILL(node) ((node)->flags = 0xde) /* deadbeef */
-#else /* lint */
-#  define NEXT_OFF(p) 0
-#  define NODE_ALIGN(node)
-#  define NODE_ALIGN_FILL(node)
-#endif /* lint */
+#define NEXT_OFF(p) ((p)->next_off)
+#define NODE_ALIGN(node)
+#define NODE_ALIGN_FILL(node) ((node)->flags = 0xde) /* deadbeef */
 
 #define SIZE_ALIGN NODE_ALIGN
 
@@ -301,15 +302,11 @@ struct regnode_charclass_class {  /* has [[:blah:]] classes */
 /*
  * Utility definitions.
  */
-#ifndef lint
 #ifndef CHARMASK
-#define        UCHARAT(p)      ((int)*(U8*)(p))
+#  define UCHARAT(p)   ((int)*(const U8*)(p))
 #else
-#define        UCHARAT(p)      ((int)*(p)&CHARMASK)
+#  define UCHARAT(p)   ((int)*(p)&CHARMASK)
 #endif
-#else /* lint */
-#define UCHARAT(p)     PL_regdummy
-#endif /* lint */
 
 #define EXTRA_SIZE(guy) ((sizeof(guy)-1)/sizeof(struct regnode))
 
@@ -365,7 +362,9 @@ typedef struct re_scream_pos_data_s
  *   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
+ *   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.)
  */
@@ -378,7 +377,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 {
@@ -386,10 +386,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