This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldiag: ‘...illegal for interchange’ is a default warning
[perl5.git] / regcomp.h
index b701cb6..89db7cc 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -9,9 +9,6 @@
  */
 #include "regcharclass.h"
 
-typedef OP OP_4tree;                   /* Will be redefined later. */
-
-
 /* Convert branch sequences to more efficient trie ops? */
 #define PERL_ENABLE_TRIE_OPTIMISATION 1
 
@@ -121,6 +118,8 @@ typedef OP OP_4tree;                        /* Will be redefined later. */
                                    Used to make it easier to clone and free arbitrary
                                    data that the regops need. Often the ARG field of
                                    a regop is an index into this structure */
+       struct reg_code_block *code_blocks;/* positions of literal (?{}) */
+       int num_code_blocks;    /* size of code_blocks[] */
        regnode program[1];     /* Unwarranted chumminess with compiler. */
 } regexp_internal;
 
@@ -138,6 +137,7 @@ typedef OP OP_4tree;                        /* Will be redefined later. */
 #define PREGf_NAUGHTY          0x00000004 /* how exponential is this pattern? */
 #define PREGf_VERBARG_SEEN     0x00000008
 #define PREGf_CUTGROUP_SEEN    0x00000010
+#define PREGf_USE_RE_EVAL      0x00000020 /* compiled with "use re 'eval'" */
 
 
 /* this is where the old regcomp.h started */
@@ -311,13 +311,15 @@ struct regnode_charclass_class {
  * are done to share them, as described below.  If necessary, the ANYOF_LOCALE
  * and ANYOF_CLASS bits could be shared with a space penalty for locale nodes,
  * but this isn't quite so easy, as the optimizer also uses ANYOF_CLASS.
+ * Another option would be to push them into new nodes.  E.g. there could be an
+ * ANYOF_LOCALE node that would be in place of the flag of the same name.
  * Once the planned change to compile all the above-latin1 code points is done,
  * then the UNICODE_ALL bit can be freed up, with a small performance penalty.
  * If flags need to be added that are applicable to the synthetic start class
  * only, with some work, they could be put in the next-node field, or in an
  * unused bit of the classflags field. */
 
-#define ANYOF_LOCALE            0x01
+#define ANYOF_LOCALE            0x01       /* /l modifier */
 
 /* The fold is calculated and stored in the bitmap where possible at compile
  * time.  However there are two cases where it isn't possible.  These share
@@ -439,6 +441,8 @@ struct regnode_charclass_class {
 #define ANYOF_CLASS_TEST(p, c) (ANYOF_CLASS_BYTE(p, c) &   ANYOF_BIT(c))
 
 #define ANYOF_CLASS_ZERO(ret)  Zero(((struct regnode_charclass_class*)(ret))->classflags, ANYOF_CLASSBITMAP_SIZE, char)
+#define ANYOF_CLASS_SETALL(ret)                \
+       memset (((struct regnode_charclass_class*)(ret))->classflags, 255, ANYOF_CLASSBITMAP_SIZE)
 #define ANYOF_BITMAP_ZERO(ret) Zero(((struct regnode_charclass*)(ret))->bitmap, ANYOF_BITMAP_SIZE, char)
 
 #define ANYOF_BITMAP(p)                (((struct regnode_charclass*)(p))->bitmap)
@@ -482,7 +486,7 @@ struct regnode_charclass_class {
 #define REG_SEEN_ZERO_LEN      0x00000001
 #define REG_SEEN_LOOKBEHIND    0x00000002
 #define REG_SEEN_GPOS          0x00000004
-#define REG_SEEN_EVAL          0x00000008
+/* spare */
 #define REG_SEEN_CANY          0x00000010
 #define REG_SEEN_SANY          REG_SEEN_CANY /* src bckwrd cmpt */
 #define REG_SEEN_RECURSE        0x00000020
@@ -490,6 +494,7 @@ struct regnode_charclass_class {
 #define REG_SEEN_VERBARG        0x00000080
 #define REG_SEEN_CUTGROUP       0x00000100
 #define REG_SEEN_RUN_ON_COMMENT 0x00000200
+#define REG_SEEN_EXACTF_SHARP_S 0x00000400
 
 START_EXTERN_C
 
@@ -516,8 +521,9 @@ EXTCONST regexp_engine PL_core_reg_engine = {
         Perl_reg_named_buff_iter,
         Perl_reg_qr_package,
 #if defined(USE_ITHREADS)        
-        Perl_regdupe_internal
+        Perl_regdupe_internal,
 #endif        
+        Perl_re_op_compile
 };
 #endif /* DOINIT */
 #endif /* PLUGGABLE_RE_EXTENSION */
@@ -530,9 +536,9 @@ END_EXTERN_C
  * The character describes the function of the corresponding .data item:
  *   a - AV for paren_name_list under DEBUGGING
  *   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
+ *   l - start op for literal (?{EVAL}) item
+ *   L - start op for literal (?{EVAL}) item, with separate CV (qr//)
+ *   r - pointer to an embedded code-containing qr, e.g. /ab$qr/
  *   s - swash for Unicode-style character class, and the multicharacter
  *       strings resulting from casefolding the single-character entries
  *       in the character class
@@ -834,7 +840,8 @@ re.pm, especially to the documentation.
 
 #ifdef DEBUGGING
 
-#define GET_RE_DEBUG_FLAGS_DECL VOL IV re_debug_flags = 0; GET_RE_DEBUG_FLAGS;
+#define GET_RE_DEBUG_FLAGS_DECL VOL IV re_debug_flags \
+       PERL_UNUSED_DECL = 0; GET_RE_DEBUG_FLAGS;
 
 #define RE_PV_COLOR_DECL(rpv,rlen,isuni,dsv,pv,l,m,c1,c2) \
     const char * const rpv =                          \
@@ -875,8 +882,8 @@ re.pm, especially to the documentation.
  * Local variables:
  * c-indentation-style: bsd
  * c-basic-offset: 4
- * indent-tabs-mode: t
+ * indent-tabs-mode: nil
  * End:
  *
- * ex: set ts=8 sts=4 sw=4 noet:
+ * ex: set ts=8 sts=4 sw=4 et:
  */