]> git.vpit.fr Git - perl/modules/re-engine-Hooks.git/blob - src/5020002/regcomp.c
Define PERL_IN_XSUB_RE when including perl.h
[perl/modules/re-engine-Hooks.git] / src / 5020002 / regcomp.c
1 /*    regcomp.c
2  */
3
4 /*
5  * 'A fair jaw-cracker dwarf-language must be.'            --Samwise Gamgee
6  *
7  *     [p.285 of _The Lord of the Rings_, II/iii: "The Ring Goes South"]
8  */
9
10 /* This file contains functions for compiling a regular expression.  See
11  * also regexec.c which funnily enough, contains functions for executing
12  * a regular expression.
13  *
14  * This file is also copied at build time to ext/re/re_comp.c, where
15  * it's built with -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT.
16  * This causes the main functions to be compiled under new names and with
17  * debugging support added, which makes "use re 'debug'" work.
18  */
19
20 /* NOTE: this is derived from Henry Spencer's regexp code, and should not
21  * confused with the original package (see point 3 below).  Thanks, Henry!
22  */
23
24 /* Additional note: this code is very heavily munged from Henry's version
25  * in places.  In some spots I've traded clarity for efficiency, so don't
26  * blame Henry for some of the lack of readability.
27  */
28
29 /* The names of the functions have been changed from regcomp and
30  * regexec to pregcomp and pregexec in order to avoid conflicts
31  * with the POSIX routines of the same names.
32 */
33
34 #ifdef PERL_EXT_RE_BUILD
35 #include "re_top.h"
36 #endif
37
38 /*
39  * pregcomp and pregexec -- regsub and regerror are not used in perl
40  *
41  * Copyright (c) 1986 by University of Toronto.
42  * Written by Henry Spencer.  Not derived from licensed software.
43  *
44  * Permission is granted to anyone to use this software for any
45  * purpose on any computer system, and to redistribute it freely,
46  * subject to the following restrictions:
47  *
48  * 1. The author is not responsible for the consequences of use of
49  *  this software, no matter how awful, even if they arise
50  *  from defects in it.
51  *
52  * 2. The origin of this software must not be misrepresented, either
53  *  by explicit claim or by omission.
54  *
55  * 3. Altered versions must be plainly marked as such, and must not
56  *  be misrepresented as being the original software.
57  *
58  *
59  ****    Alterations to Henry's code are...
60  ****
61  ****    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
62  ****    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
63  ****    by Larry Wall and others
64  ****
65  ****    You may distribute under the terms of either the GNU General Public
66  ****    License or the Artistic License, as specified in the README file.
67
68  *
69  * Beware that some of this code is subtly aware of the way operator
70  * precedence is structured in regular expressions.  Serious changes in
71  * regular-expression syntax might require a total rethink.
72  */
73 #include "EXTERN.h"
74 #define PERL_IN_REGCOMP_C
75 #undef PERL_IN_XSUB_RE
76 #define PERL_IN_XSUB_RE 1
77 #include "perl.h"
78 #undef PERL_IN_XSUB_RE
79
80 #ifndef PERL_IN_XSUB_RE
81 #include "re_defs.h"
82 #endif
83
84 #define REG_COMP_C
85 #ifdef PERL_IN_XSUB_RE
86 #  include "re_comp.h"
87 EXTERN_C const struct regexp_engine my_reg_engine;
88 #else
89 #  include "regcomp.h"
90 #endif
91
92 #include "dquote_static.c"
93 #include "charclass_invlists.h"
94 #include "inline_invlist.c"
95 #include "unicode_constants.h"
96
97 #define HAS_NONLATIN1_FOLD_CLOSURE(i) \
98  _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(i)
99 #define IS_NON_FINAL_FOLD(c) _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)
100 #define IS_IN_SOME_FOLD_L1(c) _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)
101
102 #ifndef STATIC
103 #define STATIC static
104 #endif
105
106
107 struct RExC_state_t {
108  U32  flags;   /* RXf_* are we folding, multilining? */
109  U32  pm_flags;  /* PMf_* stuff from the calling PMOP */
110  char *precomp;  /* uncompiled string. */
111  REGEXP *rx_sv;   /* The SV that is the regexp. */
112  regexp *rx;                    /* perl core regexp structure */
113  regexp_internal *rxi;           /* internal data for regexp object
114           pprivate field */
115  char *start;   /* Start of input for compile */
116  char *end;   /* End of input for compile */
117  char *parse;   /* Input-scan pointer. */
118  SSize_t whilem_seen;  /* number of WHILEM in this expr */
119  regnode *emit_start;  /* Start of emitted-code area */
120  regnode *emit_bound;  /* First regnode outside of the
121           allocated space */
122  regnode *emit;   /* Code-emit pointer; if = &emit_dummy,
123           implies compiling, so don't emit */
124  regnode_ssc emit_dummy;  /* placeholder for emit to point to;
125           large enough for the largest
126           non-EXACTish node, so can use it as
127           scratch in pass1 */
128  I32  naughty;  /* How bad is this pattern? */
129  I32  sawback;  /* Did we see \1, ...? */
130  U32  seen;
131  SSize_t size;   /* Code size. */
132  I32                npar;            /* Capture buffer count, (OPEN) plus
133           one. ("par" 0 is the whole
134           pattern)*/
135  I32  nestroot;  /* root parens we are in - used by
136           accept */
137  I32  extralen;
138  I32  seen_zerolen;
139  regnode **open_parens;  /* pointers to open parens */
140  regnode **close_parens;  /* pointers to close parens */
141  regnode *opend;   /* END node in program */
142  I32  utf8;  /* whether the pattern is utf8 or not */
143  I32  orig_utf8; /* whether the pattern was originally in utf8 */
144         /* XXX use this for future optimisation of case
145         * where pattern must be upgraded to utf8. */
146  I32  uni_semantics; /* If a d charset modifier should use unicode
147         rules, even if the pattern is not in
148         utf8 */
149  HV  *paren_names;  /* Paren names */
150
151  regnode **recurse;  /* Recurse regops */
152  I32  recurse_count;  /* Number of recurse regops */
153  U8          *study_chunk_recursed;  /* bitmap of which parens we have moved
154           through */
155  U32         study_chunk_recursed_bytes;  /* bytes in bitmap */
156  I32  in_lookbehind;
157  I32  contains_locale;
158  I32  contains_i;
159  I32  override_recoding;
160  I32  in_multi_char_class;
161  struct reg_code_block *code_blocks; /* positions of literal (?{})
162            within pattern */
163  int  num_code_blocks; /* size of code_blocks[] */
164  int  code_index;  /* next code_blocks[] slot */
165  SSize_t     maxlen;                        /* mininum possible number of chars in string to match */
166 #ifdef ADD_TO_REGEXEC
167  char  *starttry;  /* -Dr: where regtry was called. */
168 #define RExC_starttry (pRExC_state->starttry)
169 #endif
170  SV  *runtime_code_qr; /* qr with the runtime code blocks */
171 #ifdef DEBUGGING
172  const char  *lastparse;
173  I32         lastnum;
174  AV          *paren_name_list;       /* idx -> name */
175 #define RExC_lastparse (pRExC_state->lastparse)
176 #define RExC_lastnum (pRExC_state->lastnum)
177 #define RExC_paren_name_list    (pRExC_state->paren_name_list)
178 #endif
179 };
180
181 #define RExC_flags (pRExC_state->flags)
182 #define RExC_pm_flags (pRExC_state->pm_flags)
183 #define RExC_precomp (pRExC_state->precomp)
184 #define RExC_rx_sv (pRExC_state->rx_sv)
185 #define RExC_rx  (pRExC_state->rx)
186 #define RExC_rxi (pRExC_state->rxi)
187 #define RExC_start (pRExC_state->start)
188 #define RExC_end (pRExC_state->end)
189 #define RExC_parse (pRExC_state->parse)
190 #define RExC_whilem_seen (pRExC_state->whilem_seen)
191 #ifdef RE_TRACK_PATTERN_OFFSETS
192 #define RExC_offsets (pRExC_state->rxi->u.offsets) /* I am not like the
193               others */
194 #endif
195 #define RExC_emit (pRExC_state->emit)
196 #define RExC_emit_dummy (pRExC_state->emit_dummy)
197 #define RExC_emit_start (pRExC_state->emit_start)
198 #define RExC_emit_bound (pRExC_state->emit_bound)
199 #define RExC_naughty (pRExC_state->naughty)
200 #define RExC_sawback (pRExC_state->sawback)
201 #define RExC_seen (pRExC_state->seen)
202 #define RExC_size (pRExC_state->size)
203 #define RExC_maxlen        (pRExC_state->maxlen)
204 #define RExC_npar (pRExC_state->npar)
205 #define RExC_nestroot   (pRExC_state->nestroot)
206 #define RExC_extralen (pRExC_state->extralen)
207 #define RExC_seen_zerolen (pRExC_state->seen_zerolen)
208 #define RExC_utf8 (pRExC_state->utf8)
209 #define RExC_uni_semantics (pRExC_state->uni_semantics)
210 #define RExC_orig_utf8 (pRExC_state->orig_utf8)
211 #define RExC_open_parens (pRExC_state->open_parens)
212 #define RExC_close_parens (pRExC_state->close_parens)
213 #define RExC_opend (pRExC_state->opend)
214 #define RExC_paren_names (pRExC_state->paren_names)
215 #define RExC_recurse (pRExC_state->recurse)
216 #define RExC_recurse_count (pRExC_state->recurse_count)
217 #define RExC_study_chunk_recursed        (pRExC_state->study_chunk_recursed)
218 #define RExC_study_chunk_recursed_bytes  \
219         (pRExC_state->study_chunk_recursed_bytes)
220 #define RExC_in_lookbehind (pRExC_state->in_lookbehind)
221 #define RExC_contains_locale (pRExC_state->contains_locale)
222 #define RExC_contains_i (pRExC_state->contains_i)
223 #define RExC_override_recoding (pRExC_state->override_recoding)
224 #define RExC_in_multi_char_class (pRExC_state->in_multi_char_class)
225
226
227 #define ISMULT1(c) ((c) == '*' || (c) == '+' || (c) == '?')
228 #define ISMULT2(s) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
229   ((*s) == '{' && regcurly(s, FALSE)))
230
231 /*
232  * Flags to be passed up and down.
233  */
234 #define WORST  0 /* Worst case. */
235 #define HASWIDTH 0x01 /* Known to match non-null strings. */
236
237 /* Simple enough to be STAR/PLUS operand; in an EXACTish node must be a single
238  * character.  (There needs to be a case: in the switch statement in regexec.c
239  * for any node marked SIMPLE.)  Note that this is not the same thing as
240  * REGNODE_SIMPLE */
241 #define SIMPLE  0x02
242 #define SPSTART  0x04 /* Starts with * or + */
243 #define POSTPONED 0x08    /* (?1),(?&name), (??{...}) or similar */
244 #define TRYAGAIN 0x10 /* Weeded out a declaration. */
245 #define RESTART_UTF8    0x20    /* Restart, need to calcuate sizes as UTF-8 */
246
247 #define REG_NODE_NUM(x) ((x) ? (int)((x)-RExC_emit_start) : -1)
248
249 /* whether trie related optimizations are enabled */
250 #if PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION
251 #define TRIE_STUDY_OPT
252 #define FULL_TRIE_STUDY
253 #define TRIE_STCLASS
254 #endif
255
256
257
258 #define PBYTE(u8str,paren) ((U8*)(u8str))[(paren) >> 3]
259 #define PBITVAL(paren) (1 << ((paren) & 7))
260 #define PAREN_TEST(u8str,paren) ( PBYTE(u8str,paren) & PBITVAL(paren))
261 #define PAREN_SET(u8str,paren) PBYTE(u8str,paren) |= PBITVAL(paren)
262 #define PAREN_UNSET(u8str,paren) PBYTE(u8str,paren) &= (~PBITVAL(paren))
263
264 #define REQUIRE_UTF8 STMT_START {                                       \
265          if (!UTF) {                           \
266           *flagp = RESTART_UTF8;            \
267           return NULL;                      \
268          }                                     \
269       } STMT_END
270
271 /* This converts the named class defined in regcomp.h to its equivalent class
272  * number defined in handy.h. */
273 #define namedclass_to_classnum(class)  ((int) ((class) / 2))
274 #define classnum_to_namedclass(classnum)  ((classnum) * 2)
275
276 #define _invlist_union_complement_2nd(a, b, output) \
277       _invlist_union_maybe_complement_2nd(a, b, TRUE, output)
278 #define _invlist_intersection_complement_2nd(a, b, output) \
279     _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)
280
281 /* About scan_data_t.
282
283   During optimisation we recurse through the regexp program performing
284   various inplace (keyhole style) optimisations. In addition study_chunk
285   and scan_commit populate this data structure with information about
286   what strings MUST appear in the pattern. We look for the longest
287   string that must appear at a fixed location, and we look for the
288   longest string that may appear at a floating location. So for instance
289   in the pattern:
290
291  /FOO[xX]A.*B[xX]BAR/
292
293   Both 'FOO' and 'A' are fixed strings. Both 'B' and 'BAR' are floating
294   strings (because they follow a .* construct). study_chunk will identify
295   both FOO and BAR as being the longest fixed and floating strings respectively.
296
297   The strings can be composites, for instance
298
299  /(f)(o)(o)/
300
301   will result in a composite fixed substring 'foo'.
302
303   For each string some basic information is maintained:
304
305   - offset or min_offset
306  This is the position the string must appear at, or not before.
307  It also implicitly (when combined with minlenp) tells us how many
308  characters must match before the string we are searching for.
309  Likewise when combined with minlenp and the length of the string it
310  tells us how many characters must appear after the string we have
311  found.
312
313   - max_offset
314  Only used for floating strings. This is the rightmost point that
315  the string can appear at. If set to SSize_t_MAX it indicates that the
316  string can occur infinitely far to the right.
317
318   - minlenp
319  A pointer to the minimum number of characters of the pattern that the
320  string was found inside. This is important as in the case of positive
321  lookahead or positive lookbehind we can have multiple patterns
322  involved. Consider
323
324  /(?=FOO).*F/
325
326  The minimum length of the pattern overall is 3, the minimum length
327  of the lookahead part is 3, but the minimum length of the part that
328  will actually match is 1. So 'FOO's minimum length is 3, but the
329  minimum length for the F is 1. This is important as the minimum length
330  is used to determine offsets in front of and behind the string being
331  looked for.  Since strings can be composites this is the length of the
332  pattern at the time it was committed with a scan_commit. Note that
333  the length is calculated by study_chunk, so that the minimum lengths
334  are not known until the full pattern has been compiled, thus the
335  pointer to the value.
336
337   - lookbehind
338
339  In the case of lookbehind the string being searched for can be
340  offset past the start point of the final matching string.
341  If this value was just blithely removed from the min_offset it would
342  invalidate some of the calculations for how many chars must match
343  before or after (as they are derived from min_offset and minlen and
344  the length of the string being searched for).
345  When the final pattern is compiled and the data is moved from the
346  scan_data_t structure into the regexp structure the information
347  about lookbehind is factored in, with the information that would
348  have been lost precalculated in the end_shift field for the
349  associated string.
350
351   The fields pos_min and pos_delta are used to store the minimum offset
352   and the delta to the maximum offset at the current point in the pattern.
353
354 */
355
356 typedef struct scan_data_t {
357  /*I32 len_min;      unused */
358  /*I32 len_delta;    unused */
359  SSize_t pos_min;
360  SSize_t pos_delta;
361  SV *last_found;
362  SSize_t last_end;     /* min value, <0 unless valid. */
363  SSize_t last_start_min;
364  SSize_t last_start_max;
365  SV **longest;     /* Either &l_fixed, or &l_float. */
366  SV *longest_fixed;      /* longest fixed string found in pattern */
367  SSize_t offset_fixed;   /* offset where it starts */
368  SSize_t *minlen_fixed;  /* pointer to the minlen relevant to the string */
369  I32 lookbehind_fixed;   /* is the position of the string modfied by LB */
370  SV *longest_float;      /* longest floating string found in pattern */
371  SSize_t offset_float_min; /* earliest point in string it can appear */
372  SSize_t offset_float_max; /* latest point in string it can appear */
373  SSize_t *minlen_float;  /* pointer to the minlen relevant to the string */
374  SSize_t lookbehind_float; /* is the pos of the string modified by LB */
375  I32 flags;
376  I32 whilem_c;
377  SSize_t *last_closep;
378  regnode_ssc *start_class;
379 } scan_data_t;
380
381 /* The below is perhaps overboard, but this allows us to save a test at the
382  * expense of a mask.  This is because on both EBCDIC and ASCII machines, 'A'
383  * and 'a' differ by a single bit; the same with the upper and lower case of
384  * all other ASCII-range alphabetics.  On ASCII platforms, they are 32 apart;
385  * on EBCDIC, they are 64.  This uses an exclusive 'or' to find that bit and
386  * then inverts it to form a mask, with just a single 0, in the bit position
387  * where the upper- and lowercase differ.  XXX There are about 40 other
388  * instances in the Perl core where this micro-optimization could be used.
389  * Should decide if maintenance cost is worse, before changing those
390  *
391  * Returns a boolean as to whether or not 'v' is either a lowercase or
392  * uppercase instance of 'c', where 'c' is in [A-Za-z].  If 'c' is a
393  * compile-time constant, the generated code is better than some optimizing
394  * compilers figure out, amounting to a mask and test.  The results are
395  * meaningless if 'c' is not one of [A-Za-z] */
396 #define isARG2_lower_or_UPPER_ARG1(c, v) \
397        (((v) & ~('A' ^ 'a')) ==  ((c) & ~('A' ^ 'a')))
398
399 /*
400  * Forward declarations for pregcomp()'s friends.
401  */
402
403 static const scan_data_t zero_scan_data =
404   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
405
406 #define SF_BEFORE_EOL  (SF_BEFORE_SEOL|SF_BEFORE_MEOL)
407 #define SF_BEFORE_SEOL  0x0001
408 #define SF_BEFORE_MEOL  0x0002
409 #define SF_FIX_BEFORE_EOL (SF_FIX_BEFORE_SEOL|SF_FIX_BEFORE_MEOL)
410 #define SF_FL_BEFORE_EOL (SF_FL_BEFORE_SEOL|SF_FL_BEFORE_MEOL)
411
412 #define SF_FIX_SHIFT_EOL (+2)
413 #define SF_FL_SHIFT_EOL  (+4)
414
415 #define SF_FIX_BEFORE_SEOL (SF_BEFORE_SEOL << SF_FIX_SHIFT_EOL)
416 #define SF_FIX_BEFORE_MEOL (SF_BEFORE_MEOL << SF_FIX_SHIFT_EOL)
417
418 #define SF_FL_BEFORE_SEOL (SF_BEFORE_SEOL << SF_FL_SHIFT_EOL)
419 #define SF_FL_BEFORE_MEOL (SF_BEFORE_MEOL << SF_FL_SHIFT_EOL) /* 0x20 */
420 #define SF_IS_INF  0x0040
421 #define SF_HAS_PAR  0x0080
422 #define SF_IN_PAR  0x0100
423 #define SF_HAS_EVAL  0x0200
424 #define SCF_DO_SUBSTR  0x0400
425 #define SCF_DO_STCLASS_AND 0x0800
426 #define SCF_DO_STCLASS_OR 0x1000
427 #define SCF_DO_STCLASS  (SCF_DO_STCLASS_AND|SCF_DO_STCLASS_OR)
428 #define SCF_WHILEM_VISITED_POS 0x2000
429
430 #define SCF_TRIE_RESTUDY        0x4000 /* Do restudy? */
431 #define SCF_SEEN_ACCEPT         0x8000
432 #define SCF_TRIE_DOING_RESTUDY 0x10000
433
434 #define UTF cBOOL(RExC_utf8)
435
436 /* The enums for all these are ordered so things work out correctly */
437 #define LOC (get_regex_charset(RExC_flags) == REGEX_LOCALE_CHARSET)
438 #define DEPENDS_SEMANTICS (get_regex_charset(RExC_flags)                    \
439              == REGEX_DEPENDS_CHARSET)
440 #define UNI_SEMANTICS (get_regex_charset(RExC_flags) == REGEX_UNICODE_CHARSET)
441 #define AT_LEAST_UNI_SEMANTICS (get_regex_charset(RExC_flags)                \
442              >= REGEX_UNICODE_CHARSET)
443 #define ASCII_RESTRICTED (get_regex_charset(RExC_flags)                      \
444            == REGEX_ASCII_RESTRICTED_CHARSET)
445 #define AT_LEAST_ASCII_RESTRICTED (get_regex_charset(RExC_flags)             \
446            >= REGEX_ASCII_RESTRICTED_CHARSET)
447 #define ASCII_FOLD_RESTRICTED (get_regex_charset(RExC_flags)                 \
448           == REGEX_ASCII_MORE_RESTRICTED_CHARSET)
449
450 #define FOLD cBOOL(RExC_flags & RXf_PMf_FOLD)
451
452 /* For programs that want to be strictly Unicode compatible by dying if any
453  * attempt is made to match a non-Unicode code point against a Unicode
454  * property.  */
455 #define ALWAYS_WARN_SUPER  ckDEAD(packWARN(WARN_NON_UNICODE))
456
457 #define OOB_NAMEDCLASS  -1
458
459 /* There is no code point that is out-of-bounds, so this is problematic.  But
460  * its only current use is to initialize a variable that is always set before
461  * looked at. */
462 #define OOB_UNICODE  0xDEADBEEF
463
464 #define CHR_SVLEN(sv) (UTF ? sv_len_utf8(sv) : SvCUR(sv))
465 #define CHR_DIST(a,b) (UTF ? utf8_distance(a,b) : a - b)
466
467
468 /* length of regex to show in messages that don't mark a position within */
469 #define RegexLengthToShowInErrorMessages 127
470
471 /*
472  * If MARKER[12] are adjusted, be sure to adjust the constants at the top
473  * of t/op/regmesg.t, the tests in t/op/re_tests, and those in
474  * op/pragma/warn/regcomp.
475  */
476 #define MARKER1 "<-- HERE"    /* marker as it appears in the description */
477 #define MARKER2 " <-- HERE "  /* marker as it appears within the regex */
478
479 #define REPORT_LOCATION " in regex; marked by " MARKER1    \
480       " in m/%"UTF8f MARKER2 "%"UTF8f"/"
481
482 #define REPORT_LOCATION_ARGS(offset)            \
483     UTF8fARG(UTF, offset, RExC_precomp), \
484     UTF8fARG(UTF, RExC_end - RExC_precomp - offset, RExC_precomp + offset)
485
486 /*
487  * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given
488  * arg. Show regex, up to a maximum length. If it's too long, chop and add
489  * "...".
490  */
491 #define _FAIL(code) STMT_START {     \
492  const char *ellipses = "";      \
493  IV len = RExC_end - RExC_precomp;     \
494                   \
495  if (!SIZE_ONLY)       \
496   SAVEFREESV(RExC_rx_sv);      \
497  if (len > RegexLengthToShowInErrorMessages) {   \
498   /* chop 10 shorter than the max, to ensure meaning of "..." */ \
499   len = RegexLengthToShowInErrorMessages - 10;   \
500   ellipses = "...";      \
501  }         \
502  code;                                                               \
503 } STMT_END
504
505 #define FAIL(msg) _FAIL(       \
506  Perl_croak(aTHX_ "%s in regex m/%"UTF8f"%s/",     \
507    msg, UTF8fARG(UTF, len, RExC_precomp), ellipses))
508
509 #define FAIL2(msg,arg) _FAIL(       \
510  Perl_croak(aTHX_ msg " in regex m/%"UTF8f"%s/",     \
511    arg, UTF8fARG(UTF, len, RExC_precomp), ellipses))
512
513 /*
514  * Simple_vFAIL -- like FAIL, but marks the current location in the scan
515  */
516 #define Simple_vFAIL(m) STMT_START {     \
517  const IV offset = RExC_parse - RExC_precomp;   \
518  Perl_croak(aTHX_ "%s" REPORT_LOCATION,    \
519    m, REPORT_LOCATION_ARGS(offset)); \
520 } STMT_END
521
522 /*
523  * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL()
524  */
525 #define vFAIL(m) STMT_START {    \
526  if (!SIZE_ONLY)     \
527   SAVEFREESV(RExC_rx_sv);    \
528  Simple_vFAIL(m);     \
529 } STMT_END
530
531 /*
532  * Like Simple_vFAIL(), but accepts two arguments.
533  */
534 #define Simple_vFAIL2(m,a1) STMT_START {   \
535  const IV offset = RExC_parse - RExC_precomp;   \
536  S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1,   \
537      REPORT_LOCATION_ARGS(offset)); \
538 } STMT_END
539
540 /*
541  * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL2().
542  */
543 #define vFAIL2(m,a1) STMT_START {   \
544  if (!SIZE_ONLY)     \
545   SAVEFREESV(RExC_rx_sv);    \
546  Simple_vFAIL2(m, a1);    \
547 } STMT_END
548
549
550 /*
551  * Like Simple_vFAIL(), but accepts three arguments.
552  */
553 #define Simple_vFAIL3(m, a1, a2) STMT_START {   \
554  const IV offset = RExC_parse - RExC_precomp;  \
555  S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, a2,  \
556    REPORT_LOCATION_ARGS(offset)); \
557 } STMT_END
558
559 /*
560  * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL3().
561  */
562 #define vFAIL3(m,a1,a2) STMT_START {   \
563  if (!SIZE_ONLY)     \
564   SAVEFREESV(RExC_rx_sv);    \
565  Simple_vFAIL3(m, a1, a2);    \
566 } STMT_END
567
568 /*
569  * Like Simple_vFAIL(), but accepts four arguments.
570  */
571 #define Simple_vFAIL4(m, a1, a2, a3) STMT_START {  \
572  const IV offset = RExC_parse - RExC_precomp;  \
573  S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, a2, a3,  \
574    REPORT_LOCATION_ARGS(offset)); \
575 } STMT_END
576
577 #define vFAIL4(m,a1,a2,a3) STMT_START {   \
578  if (!SIZE_ONLY)     \
579   SAVEFREESV(RExC_rx_sv);    \
580  Simple_vFAIL4(m, a1, a2, a3);   \
581 } STMT_END
582
583 /* A specialized version of vFAIL2 that works with UTF8f */
584 #define vFAIL2utf8f(m, a1) STMT_START { \
585  const IV offset = RExC_parse - RExC_precomp;   \
586  if (!SIZE_ONLY)                                \
587   SAVEFREESV(RExC_rx_sv);                    \
588  S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, \
589    REPORT_LOCATION_ARGS(offset));         \
590 } STMT_END
591
592
593 /* m is not necessarily a "literal string", in this macro */
594 #define reg_warn_non_literal_string(loc, m) STMT_START {                \
595  const IV offset = loc - RExC_precomp;                               \
596  Perl_warner(aTHX_ packWARN(WARN_REGEXP), "%s" REPORT_LOCATION,      \
597    m, REPORT_LOCATION_ARGS(offset));       \
598 } STMT_END
599
600 #define ckWARNreg(loc,m) STMT_START {     \
601  const IV offset = loc - RExC_precomp;    \
602  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
603    REPORT_LOCATION_ARGS(offset));  \
604 } STMT_END
605
606 #define vWARN_dep(loc, m) STMT_START {            \
607  const IV offset = loc - RExC_precomp;    \
608  Perl_warner(aTHX_ packWARN(WARN_DEPRECATED), m REPORT_LOCATION, \
609    REPORT_LOCATION_ARGS(offset));         \
610 } STMT_END
611
612 #define ckWARNdep(loc,m) STMT_START {            \
613  const IV offset = loc - RExC_precomp;    \
614  Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),                 \
615    m REPORT_LOCATION,      \
616    REPORT_LOCATION_ARGS(offset));  \
617 } STMT_END
618
619 #define ckWARNregdep(loc,m) STMT_START {    \
620  const IV offset = loc - RExC_precomp;    \
621  Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_REGEXP), \
622    m REPORT_LOCATION,      \
623    REPORT_LOCATION_ARGS(offset));  \
624 } STMT_END
625
626 #define ckWARN2reg_d(loc,m, a1) STMT_START {    \
627  const IV offset = loc - RExC_precomp;    \
628  Perl_ck_warner_d(aTHX_ packWARN(WARN_REGEXP),   \
629    m REPORT_LOCATION,      \
630    a1, REPORT_LOCATION_ARGS(offset)); \
631 } STMT_END
632
633 #define ckWARN2reg(loc, m, a1) STMT_START {    \
634  const IV offset = loc - RExC_precomp;    \
635  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
636    a1, REPORT_LOCATION_ARGS(offset)); \
637 } STMT_END
638
639 #define vWARN3(loc, m, a1, a2) STMT_START {    \
640  const IV offset = loc - RExC_precomp;    \
641  Perl_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION,  \
642    a1, a2, REPORT_LOCATION_ARGS(offset)); \
643 } STMT_END
644
645 #define ckWARN3reg(loc, m, a1, a2) STMT_START {    \
646  const IV offset = loc - RExC_precomp;    \
647  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
648    a1, a2, REPORT_LOCATION_ARGS(offset)); \
649 } STMT_END
650
651 #define vWARN4(loc, m, a1, a2, a3) STMT_START {    \
652  const IV offset = loc - RExC_precomp;    \
653  Perl_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION,  \
654    a1, a2, a3, REPORT_LOCATION_ARGS(offset)); \
655 } STMT_END
656
657 #define ckWARN4reg(loc, m, a1, a2, a3) STMT_START {   \
658  const IV offset = loc - RExC_precomp;    \
659  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
660    a1, a2, a3, REPORT_LOCATION_ARGS(offset)); \
661 } STMT_END
662
663 #define vWARN5(loc, m, a1, a2, a3, a4) STMT_START {   \
664  const IV offset = loc - RExC_precomp;    \
665  Perl_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION,  \
666    a1, a2, a3, a4, REPORT_LOCATION_ARGS(offset)); \
667 } STMT_END
668
669
670 /* Allow for side effects in s */
671 #define REGC(c,s) STMT_START {   \
672  if (!SIZE_ONLY) *(s) = (c); else (void)(s); \
673 } STMT_END
674
675 /* Macros for recording node offsets.   20001227 mjd@plover.com
676  * Nodes are numbered 1, 2, 3, 4.  Node #n's position is recorded in
677  * element 2*n-1 of the array.  Element #2n holds the byte length node #n.
678  * Element 0 holds the number n.
679  * Position is 1 indexed.
680  */
681 #ifndef RE_TRACK_PATTERN_OFFSETS
682 #define Set_Node_Offset_To_R(node,byte)
683 #define Set_Node_Offset(node,byte)
684 #define Set_Cur_Node_Offset
685 #define Set_Node_Length_To_R(node,len)
686 #define Set_Node_Length(node,len)
687 #define Set_Node_Cur_Length(node,start)
688 #define Node_Offset(n)
689 #define Node_Length(n)
690 #define Set_Node_Offset_Length(node,offset,len)
691 #define ProgLen(ri) ri->u.proglen
692 #define SetProgLen(ri,x) ri->u.proglen = x
693 #else
694 #define ProgLen(ri) ri->u.offsets[0]
695 #define SetProgLen(ri,x) ri->u.offsets[0] = x
696 #define Set_Node_Offset_To_R(node,byte) STMT_START {   \
697  if (! SIZE_ONLY) {       \
698   MJD_OFFSET_DEBUG(("** (%d) offset of node %d is %d.\n",  \
699      __LINE__, (int)(node), (int)(byte)));  \
700   if((node) < 0) {      \
701    Perl_croak(aTHX_ "value of node is %d in Offset macro",     \
702           (int)(node));                  \
703   } else {       \
704    RExC_offsets[2*(node)-1] = (byte);    \
705   }        \
706  }         \
707 } STMT_END
708
709 #define Set_Node_Offset(node,byte) \
710  Set_Node_Offset_To_R((node)-RExC_emit_start, (byte)-RExC_start)
711 #define Set_Cur_Node_Offset Set_Node_Offset(RExC_emit, RExC_parse)
712
713 #define Set_Node_Length_To_R(node,len) STMT_START {   \
714  if (! SIZE_ONLY) {       \
715   MJD_OFFSET_DEBUG(("** (%d) size of node %d is %d.\n",  \
716     __LINE__, (int)(node), (int)(len)));   \
717   if((node) < 0) {      \
718    Perl_croak(aTHX_ "value of node is %d in Length macro",     \
719           (int)(node));                  \
720   } else {       \
721    RExC_offsets[2*(node)] = (len);    \
722   }        \
723  }         \
724 } STMT_END
725
726 #define Set_Node_Length(node,len) \
727  Set_Node_Length_To_R((node)-RExC_emit_start, len)
728 #define Set_Node_Cur_Length(node, start)                \
729  Set_Node_Length(node, RExC_parse - start)
730
731 /* Get offsets and lengths */
732 #define Node_Offset(n) (RExC_offsets[2*((n)-RExC_emit_start)-1])
733 #define Node_Length(n) (RExC_offsets[2*((n)-RExC_emit_start)])
734
735 #define Set_Node_Offset_Length(node,offset,len) STMT_START { \
736  Set_Node_Offset_To_R((node)-RExC_emit_start, (offset)); \
737  Set_Node_Length_To_R((node)-RExC_emit_start, (len)); \
738 } STMT_END
739 #endif
740
741 #if PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS
742 #define EXPERIMENTAL_INPLACESCAN
743 #endif /*PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS*/
744
745 #define DEBUG_RExC_seen() \
746   DEBUG_OPTIMISE_MORE_r({                                             \
747    PerlIO_printf(Perl_debug_log,"RExC_seen: ");                    \
748                    \
749    if (RExC_seen & REG_ZERO_LEN_SEEN)                              \
750     PerlIO_printf(Perl_debug_log,"REG_ZERO_LEN_SEEN ");         \
751                    \
752    if (RExC_seen & REG_LOOKBEHIND_SEEN)                            \
753     PerlIO_printf(Perl_debug_log,"REG_LOOKBEHIND_SEEN ");       \
754                    \
755    if (RExC_seen & REG_GPOS_SEEN)                                  \
756     PerlIO_printf(Perl_debug_log,"REG_GPOS_SEEN ");             \
757                    \
758    if (RExC_seen & REG_CANY_SEEN)                                  \
759     PerlIO_printf(Perl_debug_log,"REG_CANY_SEEN ");             \
760                    \
761    if (RExC_seen & REG_RECURSE_SEEN)                               \
762     PerlIO_printf(Perl_debug_log,"REG_RECURSE_SEEN ");          \
763                    \
764    if (RExC_seen & REG_TOP_LEVEL_BRANCHES_SEEN)                         \
765     PerlIO_printf(Perl_debug_log,"REG_TOP_LEVEL_BRANCHES_SEEN ");    \
766                    \
767    if (RExC_seen & REG_VERBARG_SEEN)                               \
768     PerlIO_printf(Perl_debug_log,"REG_VERBARG_SEEN ");          \
769                    \
770    if (RExC_seen & REG_CUTGROUP_SEEN)                              \
771     PerlIO_printf(Perl_debug_log,"REG_CUTGROUP_SEEN ");         \
772                    \
773    if (RExC_seen & REG_RUN_ON_COMMENT_SEEN)                        \
774     PerlIO_printf(Perl_debug_log,"REG_RUN_ON_COMMENT_SEEN ");   \
775                    \
776    if (RExC_seen & REG_UNFOLDED_MULTI_SEEN)                        \
777     PerlIO_printf(Perl_debug_log,"REG_UNFOLDED_MULTI_SEEN ");   \
778                    \
779    if (RExC_seen & REG_GOSTART_SEEN)                               \
780     PerlIO_printf(Perl_debug_log,"REG_GOSTART_SEEN ");          \
781                    \
782    if (RExC_seen & REG_UNBOUNDED_QUANTIFIER_SEEN)                               \
783     PerlIO_printf(Perl_debug_log,"REG_UNBOUNDED_QUANTIFIER_SEEN ");          \
784                    \
785    PerlIO_printf(Perl_debug_log,"\n");                             \
786   });
787
788 #define DEBUG_STUDYDATA(str,data,depth)                              \
789 DEBUG_OPTIMISE_MORE_r(if(data){                                      \
790  PerlIO_printf(Perl_debug_log,                                    \
791   "%*s" str "Pos:%"IVdf"/%"IVdf                                \
792   " Flags: 0x%"UVXf" Whilem_c: %"IVdf" Lcp: %"IVdf" %s",       \
793   (int)(depth)*2, "",                                          \
794   (IV)((data)->pos_min),                                       \
795   (IV)((data)->pos_delta),                                     \
796   (UV)((data)->flags),                                         \
797   (IV)((data)->whilem_c),                                      \
798   (IV)((data)->last_closep ? *((data)->last_closep) : -1),     \
799   is_inf ? "INF " : ""                                         \
800  );                                                               \
801  if ((data)->last_found)                                          \
802   PerlIO_printf(Perl_debug_log,                                \
803    "Last:'%s' %"IVdf":%"IVdf"/%"IVdf" %sFixed:'%s' @ %"IVdf \
804    " %sFloat: '%s' @ %"IVdf"/%"IVdf"",                      \
805    SvPVX_const((data)->last_found),                         \
806    (IV)((data)->last_end),                                  \
807    (IV)((data)->last_start_min),                            \
808    (IV)((data)->last_start_max),                            \
809    ((data)->longest &&                                      \
810    (data)->longest==&((data)->longest_fixed)) ? "*" : "",  \
811    SvPVX_const((data)->longest_fixed),                      \
812    (IV)((data)->offset_fixed),                              \
813    ((data)->longest &&                                      \
814    (data)->longest==&((data)->longest_float)) ? "*" : "",  \
815    SvPVX_const((data)->longest_float),                      \
816    (IV)((data)->offset_float_min),                          \
817    (IV)((data)->offset_float_max)                           \
818   );                                                           \
819  PerlIO_printf(Perl_debug_log,"\n");                              \
820 });
821
822 /* Mark that we cannot extend a found fixed substring at this point.
823    Update the longest found anchored substring and the longest found
824    floating substrings if needed. */
825
826 STATIC void
827 S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, scan_data_t *data,
828      SSize_t *minlenp, int is_inf)
829 {
830  const STRLEN l = CHR_SVLEN(data->last_found);
831  const STRLEN old_l = CHR_SVLEN(*data->longest);
832  GET_RE_DEBUG_FLAGS_DECL;
833
834  PERL_ARGS_ASSERT_SCAN_COMMIT;
835
836  if ((l >= old_l) && ((l > old_l) || (data->flags & SF_BEFORE_EOL))) {
837   SvSetMagicSV(*data->longest, data->last_found);
838   if (*data->longest == data->longest_fixed) {
839    data->offset_fixed = l ? data->last_start_min : data->pos_min;
840    if (data->flags & SF_BEFORE_EOL)
841     data->flags
842      |= ((data->flags & SF_BEFORE_EOL) << SF_FIX_SHIFT_EOL);
843    else
844     data->flags &= ~SF_FIX_BEFORE_EOL;
845    data->minlen_fixed=minlenp;
846    data->lookbehind_fixed=0;
847   }
848   else { /* *data->longest == data->longest_float */
849    data->offset_float_min = l ? data->last_start_min : data->pos_min;
850    data->offset_float_max = (l
851          ? data->last_start_max
852          : (data->pos_delta == SSize_t_MAX
853           ? SSize_t_MAX
854           : data->pos_min + data->pos_delta));
855    if (is_inf
856     || (STRLEN)data->offset_float_max > (STRLEN)SSize_t_MAX)
857     data->offset_float_max = SSize_t_MAX;
858    if (data->flags & SF_BEFORE_EOL)
859     data->flags
860      |= ((data->flags & SF_BEFORE_EOL) << SF_FL_SHIFT_EOL);
861    else
862     data->flags &= ~SF_FL_BEFORE_EOL;
863    data->minlen_float=minlenp;
864    data->lookbehind_float=0;
865   }
866  }
867  SvCUR_set(data->last_found, 0);
868  {
869   SV * const sv = data->last_found;
870   if (SvUTF8(sv) && SvMAGICAL(sv)) {
871    MAGIC * const mg = mg_find(sv, PERL_MAGIC_utf8);
872    if (mg)
873     mg->mg_len = 0;
874   }
875  }
876  data->last_end = -1;
877  data->flags &= ~SF_BEFORE_EOL;
878  DEBUG_STUDYDATA("commit: ",data,0);
879 }
880
881 /* An SSC is just a regnode_charclass_posix with an extra field: the inversion
882  * list that describes which code points it matches */
883
884 STATIC void
885 S_ssc_anything(pTHX_ regnode_ssc *ssc)
886 {
887  /* Set the SSC 'ssc' to match an empty string or any code point */
888
889  PERL_ARGS_ASSERT_SSC_ANYTHING;
890
891  assert(is_ANYOF_SYNTHETIC(ssc));
892
893  ssc->invlist = sv_2mortal(_new_invlist(2)); /* mortalize so won't leak */
894  _append_range_to_invlist(ssc->invlist, 0, UV_MAX);
895  ANYOF_FLAGS(ssc) |= ANYOF_EMPTY_STRING;    /* Plus match empty string */
896 }
897
898 STATIC int
899 S_ssc_is_anything(pTHX_ const regnode_ssc *ssc)
900 {
901  /* Returns TRUE if the SSC 'ssc' can match the empty string and any code
902  * point; FALSE otherwise.  Thus, this is used to see if using 'ssc' buys
903  * us anything: if the function returns TRUE, 'ssc' hasn't been restricted
904  * in any way, so there's no point in using it */
905
906  UV start, end;
907  bool ret;
908
909  PERL_ARGS_ASSERT_SSC_IS_ANYTHING;
910
911  assert(is_ANYOF_SYNTHETIC(ssc));
912
913  if (! (ANYOF_FLAGS(ssc) & ANYOF_EMPTY_STRING)) {
914   return FALSE;
915  }
916
917  /* See if the list consists solely of the range 0 - Infinity */
918  invlist_iterinit(ssc->invlist);
919  ret = invlist_iternext(ssc->invlist, &start, &end)
920   && start == 0
921   && end == UV_MAX;
922
923  invlist_iterfinish(ssc->invlist);
924
925  if (ret) {
926   return TRUE;
927  }
928
929  /* If e.g., both \w and \W are set, matches everything */
930  if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)) {
931   int i;
932   for (i = 0; i < ANYOF_POSIXL_MAX; i += 2) {
933    if (ANYOF_POSIXL_TEST(ssc, i) && ANYOF_POSIXL_TEST(ssc, i+1)) {
934     return TRUE;
935    }
936   }
937  }
938
939  return FALSE;
940 }
941
942 STATIC void
943 S_ssc_init(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc)
944 {
945  /* Initializes the SSC 'ssc'.  This includes setting it to match an empty
946  * string, any code point, or any posix class under locale */
947
948  PERL_ARGS_ASSERT_SSC_INIT;
949
950  Zero(ssc, 1, regnode_ssc);
951  set_ANYOF_SYNTHETIC(ssc);
952  ARG_SET(ssc, ANYOF_NONBITMAP_EMPTY);
953  ssc_anything(ssc);
954
955  /* If any portion of the regex is to operate under locale rules,
956  * initialization includes it.  The reason this isn't done for all regexes
957  * is that the optimizer was written under the assumption that locale was
958  * all-or-nothing.  Given the complexity and lack of documentation in the
959  * optimizer, and that there are inadequate test cases for locale, many
960  * parts of it may not work properly, it is safest to avoid locale unless
961  * necessary. */
962  if (RExC_contains_locale) {
963   ANYOF_POSIXL_SETALL(ssc);
964  }
965  else {
966   ANYOF_POSIXL_ZERO(ssc);
967  }
968 }
969
970 STATIC int
971 S_ssc_is_cp_posixl_init(pTHX_ const RExC_state_t *pRExC_state,
972        const regnode_ssc *ssc)
973 {
974  /* Returns TRUE if the SSC 'ssc' is in its initial state with regard only
975  * to the list of code points matched, and locale posix classes; hence does
976  * not check its flags) */
977
978  UV start, end;
979  bool ret;
980
981  PERL_ARGS_ASSERT_SSC_IS_CP_POSIXL_INIT;
982
983  assert(is_ANYOF_SYNTHETIC(ssc));
984
985  invlist_iterinit(ssc->invlist);
986  ret = invlist_iternext(ssc->invlist, &start, &end)
987   && start == 0
988   && end == UV_MAX;
989
990  invlist_iterfinish(ssc->invlist);
991
992  if (! ret) {
993   return FALSE;
994  }
995
996  if (RExC_contains_locale && ! ANYOF_POSIXL_SSC_TEST_ALL_SET(ssc)) {
997   return FALSE;
998  }
999
1000  return TRUE;
1001 }
1002
1003 STATIC SV*
1004 S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
1005        const regnode_charclass* const node)
1006 {
1007  /* Returns a mortal inversion list defining which code points are matched
1008  * by 'node', which is of type ANYOF.  Handles complementing the result if
1009  * appropriate.  If some code points aren't knowable at this time, the
1010  * returned list must, and will, contain every code point that is a
1011  * possibility. */
1012
1013  SV* invlist = sv_2mortal(_new_invlist(0));
1014  SV* only_utf8_locale_invlist = NULL;
1015  unsigned int i;
1016  const U32 n = ARG(node);
1017  bool new_node_has_latin1 = FALSE;
1018
1019  PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC;
1020
1021  /* Look at the data structure created by S_set_ANYOF_arg() */
1022  if (n != ANYOF_NONBITMAP_EMPTY) {
1023   SV * const rv = MUTABLE_SV(RExC_rxi->data->data[n]);
1024   AV * const av = MUTABLE_AV(SvRV(rv));
1025   SV **const ary = AvARRAY(av);
1026   assert(RExC_rxi->data->what[n] == 's');
1027
1028   if (ary[1] && ary[1] != &PL_sv_undef) { /* Has compile-time swash */
1029    invlist = sv_2mortal(invlist_clone(_get_swash_invlist(ary[1])));
1030   }
1031   else if (ary[0] && ary[0] != &PL_sv_undef) {
1032
1033    /* Here, no compile-time swash, and there are things that won't be
1034    * known until runtime -- we have to assume it could be anything */
1035    return _add_range_to_invlist(invlist, 0, UV_MAX);
1036   }
1037   else if (ary[3] && ary[3] != &PL_sv_undef) {
1038
1039    /* Here no compile-time swash, and no run-time only data.  Use the
1040    * node's inversion list */
1041    invlist = sv_2mortal(invlist_clone(ary[3]));
1042   }
1043
1044   /* Get the code points valid only under UTF-8 locales */
1045   if ((ANYOF_FLAGS(node) & ANYOF_LOC_FOLD)
1046    && ary[2] && ary[2] != &PL_sv_undef)
1047   {
1048    only_utf8_locale_invlist = ary[2];
1049   }
1050  }
1051
1052  /* An ANYOF node contains a bitmap for the first 256 code points, and an
1053  * inversion list for the others, but if there are code points that should
1054  * match only conditionally on the target string being UTF-8, those are
1055  * placed in the inversion list, and not the bitmap.  Since there are
1056  * circumstances under which they could match, they are included in the
1057  * SSC.  But if the ANYOF node is to be inverted, we have to exclude them
1058  * here, so that when we invert below, the end result actually does include
1059  * them.  (Think about "\xe0" =~ /[^\xc0]/di;).  We have to do this here
1060  * before we add the unconditionally matched code points */
1061  if (ANYOF_FLAGS(node) & ANYOF_INVERT) {
1062   _invlist_intersection_complement_2nd(invlist,
1063            PL_UpperLatin1,
1064            &invlist);
1065  }
1066
1067  /* Add in the points from the bit map */
1068  for (i = 0; i < 256; i++) {
1069   if (ANYOF_BITMAP_TEST(node, i)) {
1070    invlist = add_cp_to_invlist(invlist, i);
1071    new_node_has_latin1 = TRUE;
1072   }
1073  }
1074
1075  /* If this can match all upper Latin1 code points, have to add them
1076  * as well */
1077  if (ANYOF_FLAGS(node) & ANYOF_NON_UTF8_NON_ASCII_ALL) {
1078   _invlist_union(invlist, PL_UpperLatin1, &invlist);
1079  }
1080
1081  /* Similarly for these */
1082  if (ANYOF_FLAGS(node) & ANYOF_ABOVE_LATIN1_ALL) {
1083   invlist = _add_range_to_invlist(invlist, 256, UV_MAX);
1084  }
1085
1086  if (ANYOF_FLAGS(node) & ANYOF_INVERT) {
1087   _invlist_invert(invlist);
1088  }
1089  else if (new_node_has_latin1 && ANYOF_FLAGS(node) & ANYOF_LOC_FOLD) {
1090
1091   /* Under /li, any 0-255 could fold to any other 0-255, depending on the
1092   * locale.  We can skip this if there are no 0-255 at all. */
1093   _invlist_union(invlist, PL_Latin1, &invlist);
1094  }
1095
1096  /* Similarly add the UTF-8 locale possible matches.  These have to be
1097  * deferred until after the non-UTF-8 locale ones are taken care of just
1098  * above, or it leads to wrong results under ANYOF_INVERT */
1099  if (only_utf8_locale_invlist) {
1100   _invlist_union_maybe_complement_2nd(invlist,
1101            only_utf8_locale_invlist,
1102            ANYOF_FLAGS(node) & ANYOF_INVERT,
1103            &invlist);
1104  }
1105
1106  return invlist;
1107 }
1108
1109 /* These two functions currently do the exact same thing */
1110 #define ssc_init_zero  ssc_init
1111
1112 #define ssc_add_cp(ssc, cp)   ssc_add_range((ssc), (cp), (cp))
1113 #define ssc_match_all_cp(ssc) ssc_add_range(ssc, 0, UV_MAX)
1114
1115 /* 'AND' a given class with another one.  Can create false positives.  'ssc'
1116  * should not be inverted.  'and_with->flags & ANYOF_POSIXL' should be 0 if
1117  * 'and_with' is a regnode_charclass instead of a regnode_ssc. */
1118
1119 STATIC void
1120 S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
1121     const regnode_charclass *and_with)
1122 {
1123  /* Accumulate into SSC 'ssc' its 'AND' with 'and_with', which is either
1124  * another SSC or a regular ANYOF class.  Can create false positives. */
1125
1126  SV* anded_cp_list;
1127  U8  anded_flags;
1128
1129  PERL_ARGS_ASSERT_SSC_AND;
1130
1131  assert(is_ANYOF_SYNTHETIC(ssc));
1132
1133  /* 'and_with' is used as-is if it too is an SSC; otherwise have to extract
1134  * the code point inversion list and just the relevant flags */
1135  if (is_ANYOF_SYNTHETIC(and_with)) {
1136   anded_cp_list = ((regnode_ssc *)and_with)->invlist;
1137   anded_flags = ANYOF_FLAGS(and_with);
1138
1139   /* XXX This is a kludge around what appears to be deficiencies in the
1140   * optimizer.  If we make S_ssc_anything() add in the WARN_SUPER flag,
1141   * there are paths through the optimizer where it doesn't get weeded
1142   * out when it should.  And if we don't make some extra provision for
1143   * it like the code just below, it doesn't get added when it should.
1144   * This solution is to add it only when AND'ing, which is here, and
1145   * only when what is being AND'ed is the pristine, original node
1146   * matching anything.  Thus it is like adding it to ssc_anything() but
1147   * only when the result is to be AND'ed.  Probably the same solution
1148   * could be adopted for the same problem we have with /l matching,
1149   * which is solved differently in S_ssc_init(), and that would lead to
1150   * fewer false positives than that solution has.  But if this solution
1151   * creates bugs, the consequences are only that a warning isn't raised
1152   * that should be; while the consequences for having /l bugs is
1153   * incorrect matches */
1154   if (ssc_is_anything((regnode_ssc *)and_with)) {
1155    anded_flags |= ANYOF_WARN_SUPER;
1156   }
1157  }
1158  else {
1159   anded_cp_list = get_ANYOF_cp_list_for_ssc(pRExC_state, and_with);
1160   anded_flags = ANYOF_FLAGS(and_with) & ANYOF_COMMON_FLAGS;
1161  }
1162
1163  ANYOF_FLAGS(ssc) &= anded_flags;
1164
1165  /* Below, C1 is the list of code points in 'ssc'; P1, its posix classes.
1166  * C2 is the list of code points in 'and-with'; P2, its posix classes.
1167  * 'and_with' may be inverted.  When not inverted, we have the situation of
1168  * computing:
1169  *  (C1 | P1) & (C2 | P2)
1170  *                     =  (C1 & (C2 | P2)) | (P1 & (C2 | P2))
1171  *                     =  ((C1 & C2) | (C1 & P2)) | ((P1 & C2) | (P1 & P2))
1172  *                    <=  ((C1 & C2) |       P2)) | ( P1       | (P1 & P2))
1173  *                    <=  ((C1 & C2) | P1 | P2)
1174  * Alternatively, the last few steps could be:
1175  *                     =  ((C1 & C2) | (C1 & P2)) | ((P1 & C2) | (P1 & P2))
1176  *                    <=  ((C1 & C2) |  C1      ) | (      C2  | (P1 & P2))
1177  *                    <=  (C1 | C2 | (P1 & P2))
1178  * We favor the second approach if either P1 or P2 is non-empty.  This is
1179  * because these components are a barrier to doing optimizations, as what
1180  * they match cannot be known until the moment of matching as they are
1181  * dependent on the current locale, 'AND"ing them likely will reduce or
1182  * eliminate them.
1183  * But we can do better if we know that C1,P1 are in their initial state (a
1184  * frequent occurrence), each matching everything:
1185  *  (<everything>) & (C2 | P2) =  C2 | P2
1186  * Similarly, if C2,P2 are in their initial state (again a frequent
1187  * occurrence), the result is a no-op
1188  *  (C1 | P1) & (<everything>) =  C1 | P1
1189  *
1190  * Inverted, we have
1191  *  (C1 | P1) & ~(C2 | P2)  =  (C1 | P1) & (~C2 & ~P2)
1192  *                          =  (C1 & (~C2 & ~P2)) | (P1 & (~C2 & ~P2))
1193  *                         <=  (C1 & ~C2) | (P1 & ~P2)
1194  * */
1195
1196  if ((ANYOF_FLAGS(and_with) & ANYOF_INVERT)
1197   && ! is_ANYOF_SYNTHETIC(and_with))
1198  {
1199   unsigned int i;
1200
1201   ssc_intersection(ssc,
1202       anded_cp_list,
1203       FALSE /* Has already been inverted */
1204       );
1205
1206   /* If either P1 or P2 is empty, the intersection will be also; can skip
1207   * the loop */
1208   if (! (ANYOF_FLAGS(and_with) & ANYOF_POSIXL)) {
1209    ANYOF_POSIXL_ZERO(ssc);
1210   }
1211   else if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)) {
1212
1213    /* Note that the Posix class component P from 'and_with' actually
1214    * looks like:
1215    *      P = Pa | Pb | ... | Pn
1216    * where each component is one posix class, such as in [\w\s].
1217    * Thus
1218    *      ~P = ~(Pa | Pb | ... | Pn)
1219    *         = ~Pa & ~Pb & ... & ~Pn
1220    *        <= ~Pa | ~Pb | ... | ~Pn
1221    * The last is something we can easily calculate, but unfortunately
1222    * is likely to have many false positives.  We could do better
1223    * in some (but certainly not all) instances if two classes in
1224    * P have known relationships.  For example
1225    *      :lower: <= :alpha: <= :alnum: <= \w <= :graph: <= :print:
1226    * So
1227    *      :lower: & :print: = :lower:
1228    * And similarly for classes that must be disjoint.  For example,
1229    * since \s and \w can have no elements in common based on rules in
1230    * the POSIX standard,
1231    *      \w & ^\S = nothing
1232    * Unfortunately, some vendor locales do not meet the Posix
1233    * standard, in particular almost everything by Microsoft.
1234    * The loop below just changes e.g., \w into \W and vice versa */
1235
1236    regnode_charclass_posixl temp;
1237    int add = 1;    /* To calculate the index of the complement */
1238
1239    ANYOF_POSIXL_ZERO(&temp);
1240    for (i = 0; i < ANYOF_MAX; i++) {
1241     assert(i % 2 != 0
1242      || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i)
1243      || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i + 1));
1244
1245     if (ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i)) {
1246      ANYOF_POSIXL_SET(&temp, i + add);
1247     }
1248     add = 0 - add; /* 1 goes to -1; -1 goes to 1 */
1249    }
1250    ANYOF_POSIXL_AND(&temp, ssc);
1251
1252   } /* else ssc already has no posixes */
1253  } /* else: Not inverted.  This routine is a no-op if 'and_with' is an SSC
1254   in its initial state */
1255  else if (! is_ANYOF_SYNTHETIC(and_with)
1256    || ! ssc_is_cp_posixl_init(pRExC_state, (regnode_ssc *)and_with))
1257  {
1258   /* But if 'ssc' is in its initial state, the result is just 'and_with';
1259   * copy it over 'ssc' */
1260   if (ssc_is_cp_posixl_init(pRExC_state, ssc)) {
1261    if (is_ANYOF_SYNTHETIC(and_with)) {
1262     StructCopy(and_with, ssc, regnode_ssc);
1263    }
1264    else {
1265     ssc->invlist = anded_cp_list;
1266     ANYOF_POSIXL_ZERO(ssc);
1267     if (ANYOF_FLAGS(and_with) & ANYOF_POSIXL) {
1268      ANYOF_POSIXL_OR((regnode_charclass_posixl*) and_with, ssc);
1269     }
1270    }
1271   }
1272   else if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)
1273     || (ANYOF_FLAGS(and_with) & ANYOF_POSIXL))
1274   {
1275    /* One or the other of P1, P2 is non-empty. */
1276    if (ANYOF_FLAGS(and_with) & ANYOF_POSIXL) {
1277     ANYOF_POSIXL_AND((regnode_charclass_posixl*) and_with, ssc);
1278    }
1279    ssc_union(ssc, anded_cp_list, FALSE);
1280   }
1281   else { /* P1 = P2 = empty */
1282    ssc_intersection(ssc, anded_cp_list, FALSE);
1283   }
1284  }
1285 }
1286
1287 STATIC void
1288 S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
1289    const regnode_charclass *or_with)
1290 {
1291  /* Accumulate into SSC 'ssc' its 'OR' with 'or_with', which is either
1292  * another SSC or a regular ANYOF class.  Can create false positives if
1293  * 'or_with' is to be inverted. */
1294
1295  SV* ored_cp_list;
1296  U8 ored_flags;
1297
1298  PERL_ARGS_ASSERT_SSC_OR;
1299
1300  assert(is_ANYOF_SYNTHETIC(ssc));
1301
1302  /* 'or_with' is used as-is if it too is an SSC; otherwise have to extract
1303  * the code point inversion list and just the relevant flags */
1304  if (is_ANYOF_SYNTHETIC(or_with)) {
1305   ored_cp_list = ((regnode_ssc*) or_with)->invlist;
1306   ored_flags = ANYOF_FLAGS(or_with);
1307  }
1308  else {
1309   ored_cp_list = get_ANYOF_cp_list_for_ssc(pRExC_state, or_with);
1310   ored_flags = ANYOF_FLAGS(or_with) & ANYOF_COMMON_FLAGS;
1311  }
1312
1313  ANYOF_FLAGS(ssc) |= ored_flags;
1314
1315  /* Below, C1 is the list of code points in 'ssc'; P1, its posix classes.
1316  * C2 is the list of code points in 'or-with'; P2, its posix classes.
1317  * 'or_with' may be inverted.  When not inverted, we have the simple
1318  * situation of computing:
1319  *  (C1 | P1) | (C2 | P2)  =  (C1 | C2) | (P1 | P2)
1320  * If P1|P2 yields a situation with both a class and its complement are
1321  * set, like having both \w and \W, this matches all code points, and we
1322  * can delete these from the P component of the ssc going forward.  XXX We
1323  * might be able to delete all the P components, but I (khw) am not certain
1324  * about this, and it is better to be safe.
1325  *
1326  * Inverted, we have
1327  *  (C1 | P1) | ~(C2 | P2)  =  (C1 | P1) | (~C2 & ~P2)
1328  *                         <=  (C1 | P1) | ~C2
1329  *                         <=  (C1 | ~C2) | P1
1330  * (which results in actually simpler code than the non-inverted case)
1331  * */
1332
1333  if ((ANYOF_FLAGS(or_with) & ANYOF_INVERT)
1334   && ! is_ANYOF_SYNTHETIC(or_with))
1335  {
1336   /* We ignore P2, leaving P1 going forward */
1337  }   /* else  Not inverted */
1338  else if (ANYOF_FLAGS(or_with) & ANYOF_POSIXL) {
1339   ANYOF_POSIXL_OR((regnode_charclass_posixl*)or_with, ssc);
1340   if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)) {
1341    unsigned int i;
1342    for (i = 0; i < ANYOF_MAX; i += 2) {
1343     if (ANYOF_POSIXL_TEST(ssc, i) && ANYOF_POSIXL_TEST(ssc, i + 1))
1344     {
1345      ssc_match_all_cp(ssc);
1346      ANYOF_POSIXL_CLEAR(ssc, i);
1347      ANYOF_POSIXL_CLEAR(ssc, i+1);
1348     }
1349    }
1350   }
1351  }
1352
1353  ssc_union(ssc,
1354    ored_cp_list,
1355    FALSE /* Already has been inverted */
1356    );
1357 }
1358
1359 PERL_STATIC_INLINE void
1360 S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert2nd)
1361 {
1362  PERL_ARGS_ASSERT_SSC_UNION;
1363
1364  assert(is_ANYOF_SYNTHETIC(ssc));
1365
1366  _invlist_union_maybe_complement_2nd(ssc->invlist,
1367           invlist,
1368           invert2nd,
1369           &ssc->invlist);
1370 }
1371
1372 PERL_STATIC_INLINE void
1373 S_ssc_intersection(pTHX_ regnode_ssc *ssc,
1374       SV* const invlist,
1375       const bool invert2nd)
1376 {
1377  PERL_ARGS_ASSERT_SSC_INTERSECTION;
1378
1379  assert(is_ANYOF_SYNTHETIC(ssc));
1380
1381  _invlist_intersection_maybe_complement_2nd(ssc->invlist,
1382            invlist,
1383            invert2nd,
1384            &ssc->invlist);
1385 }
1386
1387 PERL_STATIC_INLINE void
1388 S_ssc_add_range(pTHX_ regnode_ssc *ssc, const UV start, const UV end)
1389 {
1390  PERL_ARGS_ASSERT_SSC_ADD_RANGE;
1391
1392  assert(is_ANYOF_SYNTHETIC(ssc));
1393
1394  ssc->invlist = _add_range_to_invlist(ssc->invlist, start, end);
1395 }
1396
1397 PERL_STATIC_INLINE void
1398 S_ssc_cp_and(pTHX_ regnode_ssc *ssc, const UV cp)
1399 {
1400  /* AND just the single code point 'cp' into the SSC 'ssc' */
1401
1402  SV* cp_list = _new_invlist(2);
1403
1404  PERL_ARGS_ASSERT_SSC_CP_AND;
1405
1406  assert(is_ANYOF_SYNTHETIC(ssc));
1407
1408  cp_list = add_cp_to_invlist(cp_list, cp);
1409  ssc_intersection(ssc, cp_list,
1410      FALSE /* Not inverted */
1411      );
1412  SvREFCNT_dec_NN(cp_list);
1413 }
1414
1415 PERL_STATIC_INLINE void
1416 S_ssc_clear_locale(pTHX_ regnode_ssc *ssc)
1417 {
1418  /* Set the SSC 'ssc' to not match any locale things */
1419
1420  PERL_ARGS_ASSERT_SSC_CLEAR_LOCALE;
1421
1422  assert(is_ANYOF_SYNTHETIC(ssc));
1423
1424  ANYOF_POSIXL_ZERO(ssc);
1425  ANYOF_FLAGS(ssc) &= ~ANYOF_LOCALE_FLAGS;
1426 }
1427
1428 STATIC void
1429 S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc)
1430 {
1431  /* The inversion list in the SSC is marked mortal; now we need a more
1432  * permanent copy, which is stored the same way that is done in a regular
1433  * ANYOF node, with the first 256 code points in a bit map */
1434
1435  SV* invlist = invlist_clone(ssc->invlist);
1436
1437  PERL_ARGS_ASSERT_SSC_FINALIZE;
1438
1439  assert(is_ANYOF_SYNTHETIC(ssc));
1440
1441  /* The code in this file assumes that all but these flags aren't relevant
1442  * to the SSC, except ANYOF_EMPTY_STRING, which should be cleared by the
1443  * time we reach here */
1444  assert(! (ANYOF_FLAGS(ssc) & ~ANYOF_COMMON_FLAGS));
1445
1446  populate_ANYOF_from_invlist( (regnode *) ssc, &invlist);
1447
1448  set_ANYOF_arg(pRExC_state, (regnode *) ssc, invlist,
1449         NULL, NULL, NULL, FALSE);
1450
1451  /* Make sure is clone-safe */
1452  ssc->invlist = NULL;
1453
1454  if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)) {
1455   ANYOF_FLAGS(ssc) |= ANYOF_POSIXL;
1456  }
1457
1458  assert(! (ANYOF_FLAGS(ssc) & ANYOF_LOCALE_FLAGS) || RExC_contains_locale);
1459 }
1460
1461 #define TRIE_LIST_ITEM(state,idx) (trie->states[state].trans.list)[ idx ]
1462 #define TRIE_LIST_CUR(state)  ( TRIE_LIST_ITEM( state, 0 ).forid )
1463 #define TRIE_LIST_LEN(state) ( TRIE_LIST_ITEM( state, 0 ).newstate )
1464 #define TRIE_LIST_USED(idx)  ( trie->states[state].trans.list         \
1465        ? (TRIE_LIST_CUR( idx ) - 1)           \
1466        : 0 )
1467
1468
1469 #ifdef DEBUGGING
1470 /*
1471    dump_trie(trie,widecharmap,revcharmap)
1472    dump_trie_interim_list(trie,widecharmap,revcharmap,next_alloc)
1473    dump_trie_interim_table(trie,widecharmap,revcharmap,next_alloc)
1474
1475    These routines dump out a trie in a somewhat readable format.
1476    The _interim_ variants are used for debugging the interim
1477    tables that are used to generate the final compressed
1478    representation which is what dump_trie expects.
1479
1480    Part of the reason for their existence is to provide a form
1481    of documentation as to how the different representations function.
1482
1483 */
1484
1485 /*
1486   Dumps the final compressed table form of the trie to Perl_debug_log.
1487   Used for debugging make_trie().
1488 */
1489
1490 STATIC void
1491 S_dump_trie(pTHX_ const struct _reg_trie_data *trie, HV *widecharmap,
1492    AV *revcharmap, U32 depth)
1493 {
1494  U32 state;
1495  SV *sv=sv_newmortal();
1496  int colwidth= widecharmap ? 6 : 4;
1497  U16 word;
1498  GET_RE_DEBUG_FLAGS_DECL;
1499
1500  PERL_ARGS_ASSERT_DUMP_TRIE;
1501
1502  PerlIO_printf( Perl_debug_log, "%*sChar : %-6s%-6s%-4s ",
1503   (int)depth * 2 + 2,"",
1504   "Match","Base","Ofs" );
1505
1506  for( state = 0 ; state < trie->uniquecharcount ; state++ ) {
1507   SV ** const tmp = av_fetch( revcharmap, state, 0);
1508   if ( tmp ) {
1509    PerlIO_printf( Perl_debug_log, "%*s",
1510     colwidth,
1511     pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,
1512        PL_colors[0], PL_colors[1],
1513        (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
1514        PERL_PV_ESCAPE_FIRSTCHAR
1515     )
1516    );
1517   }
1518  }
1519  PerlIO_printf( Perl_debug_log, "\n%*sState|-----------------------",
1520   (int)depth * 2 + 2,"");
1521
1522  for( state = 0 ; state < trie->uniquecharcount ; state++ )
1523   PerlIO_printf( Perl_debug_log, "%.*s", colwidth, "--------");
1524  PerlIO_printf( Perl_debug_log, "\n");
1525
1526  for( state = 1 ; state < trie->statecount ; state++ ) {
1527   const U32 base = trie->states[ state ].trans.base;
1528
1529   PerlIO_printf( Perl_debug_log, "%*s#%4"UVXf"|",
1530          (int)depth * 2 + 2,"", (UV)state);
1531
1532   if ( trie->states[ state ].wordnum ) {
1533    PerlIO_printf( Perl_debug_log, " W%4X",
1534           trie->states[ state ].wordnum );
1535   } else {
1536    PerlIO_printf( Perl_debug_log, "%6s", "" );
1537   }
1538
1539   PerlIO_printf( Perl_debug_log, " @%4"UVXf" ", (UV)base );
1540
1541   if ( base ) {
1542    U32 ofs = 0;
1543
1544    while( ( base + ofs  < trie->uniquecharcount ) ||
1545     ( base + ofs - trie->uniquecharcount < trie->lasttrans
1546      && trie->trans[ base + ofs - trie->uniquecharcount ].check
1547                  != state))
1548      ofs++;
1549
1550    PerlIO_printf( Perl_debug_log, "+%2"UVXf"[ ", (UV)ofs);
1551
1552    for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
1553     if ( ( base + ofs >= trie->uniquecharcount )
1554       && ( base + ofs - trie->uniquecharcount
1555               < trie->lasttrans )
1556       && trie->trans[ base + ofs
1557          - trie->uniquecharcount ].check == state )
1558     {
1559     PerlIO_printf( Perl_debug_log, "%*"UVXf,
1560      colwidth,
1561      (UV)trie->trans[ base + ofs
1562            - trie->uniquecharcount ].next );
1563     } else {
1564      PerlIO_printf( Perl_debug_log, "%*s",colwidth,"   ." );
1565     }
1566    }
1567
1568    PerlIO_printf( Perl_debug_log, "]");
1569
1570   }
1571   PerlIO_printf( Perl_debug_log, "\n" );
1572  }
1573  PerlIO_printf(Perl_debug_log, "%*sword_info N:(prev,len)=",
1574         (int)depth*2, "");
1575  for (word=1; word <= trie->wordcount; word++) {
1576   PerlIO_printf(Perl_debug_log, " %d:(%d,%d)",
1577    (int)word, (int)(trie->wordinfo[word].prev),
1578    (int)(trie->wordinfo[word].len));
1579  }
1580  PerlIO_printf(Perl_debug_log, "\n" );
1581 }
1582 /*
1583   Dumps a fully constructed but uncompressed trie in list form.
1584   List tries normally only are used for construction when the number of
1585   possible chars (trie->uniquecharcount) is very high.
1586   Used for debugging make_trie().
1587 */
1588 STATIC void
1589 S_dump_trie_interim_list(pTHX_ const struct _reg_trie_data *trie,
1590       HV *widecharmap, AV *revcharmap, U32 next_alloc,
1591       U32 depth)
1592 {
1593  U32 state;
1594  SV *sv=sv_newmortal();
1595  int colwidth= widecharmap ? 6 : 4;
1596  GET_RE_DEBUG_FLAGS_DECL;
1597
1598  PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST;
1599
1600  /* print out the table precompression.  */
1601  PerlIO_printf( Perl_debug_log, "%*sState :Word | Transition Data\n%*s%s",
1602   (int)depth * 2 + 2,"", (int)depth * 2 + 2,"",
1603   "------:-----+-----------------\n" );
1604
1605  for( state=1 ; state < next_alloc ; state ++ ) {
1606   U16 charid;
1607
1608   PerlIO_printf( Perl_debug_log, "%*s %4"UVXf" :",
1609    (int)depth * 2 + 2,"", (UV)state  );
1610   if ( ! trie->states[ state ].wordnum ) {
1611    PerlIO_printf( Perl_debug_log, "%5s| ","");
1612   } else {
1613    PerlIO_printf( Perl_debug_log, "W%4x| ",
1614     trie->states[ state ].wordnum
1615    );
1616   }
1617   for( charid = 1 ; charid <= TRIE_LIST_USED( state ) ; charid++ ) {
1618    SV ** const tmp = av_fetch( revcharmap,
1619           TRIE_LIST_ITEM(state,charid).forid, 0);
1620    if ( tmp ) {
1621     PerlIO_printf( Perl_debug_log, "%*s:%3X=%4"UVXf" | ",
1622      colwidth,
1623      pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp),
1624        colwidth,
1625        PL_colors[0], PL_colors[1],
1626        (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0)
1627        | PERL_PV_ESCAPE_FIRSTCHAR
1628      ) ,
1629      TRIE_LIST_ITEM(state,charid).forid,
1630      (UV)TRIE_LIST_ITEM(state,charid).newstate
1631     );
1632     if (!(charid % 10))
1633      PerlIO_printf(Perl_debug_log, "\n%*s| ",
1634       (int)((depth * 2) + 14), "");
1635    }
1636   }
1637   PerlIO_printf( Perl_debug_log, "\n");
1638  }
1639 }
1640
1641 /*
1642   Dumps a fully constructed but uncompressed trie in table form.
1643   This is the normal DFA style state transition table, with a few
1644   twists to facilitate compression later.
1645   Used for debugging make_trie().
1646 */
1647 STATIC void
1648 S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie,
1649       HV *widecharmap, AV *revcharmap, U32 next_alloc,
1650       U32 depth)
1651 {
1652  U32 state;
1653  U16 charid;
1654  SV *sv=sv_newmortal();
1655  int colwidth= widecharmap ? 6 : 4;
1656  GET_RE_DEBUG_FLAGS_DECL;
1657
1658  PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE;
1659
1660  /*
1661  print out the table precompression so that we can do a visual check
1662  that they are identical.
1663  */
1664
1665  PerlIO_printf( Perl_debug_log, "%*sChar : ",(int)depth * 2 + 2,"" );
1666
1667  for( charid = 0 ; charid < trie->uniquecharcount ; charid++ ) {
1668   SV ** const tmp = av_fetch( revcharmap, charid, 0);
1669   if ( tmp ) {
1670    PerlIO_printf( Perl_debug_log, "%*s",
1671     colwidth,
1672     pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,
1673        PL_colors[0], PL_colors[1],
1674        (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
1675        PERL_PV_ESCAPE_FIRSTCHAR
1676     )
1677    );
1678   }
1679  }
1680
1681  PerlIO_printf( Perl_debug_log, "\n%*sState+-",(int)depth * 2 + 2,"" );
1682
1683  for( charid=0 ; charid < trie->uniquecharcount ; charid++ ) {
1684   PerlIO_printf( Perl_debug_log, "%.*s", colwidth,"--------");
1685  }
1686
1687  PerlIO_printf( Perl_debug_log, "\n" );
1688
1689  for( state=1 ; state < next_alloc ; state += trie->uniquecharcount ) {
1690
1691   PerlIO_printf( Perl_debug_log, "%*s%4"UVXf" : ",
1692    (int)depth * 2 + 2,"",
1693    (UV)TRIE_NODENUM( state ) );
1694
1695   for( charid = 0 ; charid < trie->uniquecharcount ; charid++ ) {
1696    UV v=(UV)SAFE_TRIE_NODENUM( trie->trans[ state + charid ].next );
1697    if (v)
1698     PerlIO_printf( Perl_debug_log, "%*"UVXf, colwidth, v );
1699    else
1700     PerlIO_printf( Perl_debug_log, "%*s", colwidth, "." );
1701   }
1702   if ( ! trie->states[ TRIE_NODENUM( state ) ].wordnum ) {
1703    PerlIO_printf( Perl_debug_log, " (%4"UVXf")\n",
1704            (UV)trie->trans[ state ].check );
1705   } else {
1706    PerlIO_printf( Perl_debug_log, " (%4"UVXf") W%4X\n",
1707            (UV)trie->trans[ state ].check,
1708    trie->states[ TRIE_NODENUM( state ) ].wordnum );
1709   }
1710  }
1711 }
1712
1713 #endif
1714
1715
1716 /* make_trie(startbranch,first,last,tail,word_count,flags,depth)
1717   startbranch: the first branch in the whole branch sequence
1718   first      : start branch of sequence of branch-exact nodes.
1719    May be the same as startbranch
1720   last       : Thing following the last branch.
1721    May be the same as tail.
1722   tail       : item following the branch sequence
1723   count      : words in the sequence
1724   flags      : currently the OP() type we will be building one of /EXACT(|F|Fl)/
1725   depth      : indent depth
1726
1727 Inplace optimizes a sequence of 2 or more Branch-Exact nodes into a TRIE node.
1728
1729 A trie is an N'ary tree where the branches are determined by digital
1730 decomposition of the key. IE, at the root node you look up the 1st character and
1731 follow that branch repeat until you find the end of the branches. Nodes can be
1732 marked as "accepting" meaning they represent a complete word. Eg:
1733
1734   /he|she|his|hers/
1735
1736 would convert into the following structure. Numbers represent states, letters
1737 following numbers represent valid transitions on the letter from that state, if
1738 the number is in square brackets it represents an accepting state, otherwise it
1739 will be in parenthesis.
1740
1741  +-h->+-e->[3]-+-r->(8)-+-s->[9]
1742  |    |
1743  |   (2)
1744  |    |
1745  (1)   +-i->(6)-+-s->[7]
1746  |
1747  +-s->(3)-+-h->(4)-+-e->[5]
1748
1749  Accept Word Mapping: 3=>1 (he),5=>2 (she), 7=>3 (his), 9=>4 (hers)
1750
1751 This shows that when matching against the string 'hers' we will begin at state 1
1752 read 'h' and move to state 2, read 'e' and move to state 3 which is accepting,
1753 then read 'r' and go to state 8 followed by 's' which takes us to state 9 which
1754 is also accepting. Thus we know that we can match both 'he' and 'hers' with a
1755 single traverse. We store a mapping from accepting to state to which word was
1756 matched, and then when we have multiple possibilities we try to complete the
1757 rest of the regex in the order in which they occured in the alternation.
1758
1759 The only prior NFA like behaviour that would be changed by the TRIE support is
1760 the silent ignoring of duplicate alternations which are of the form:
1761
1762  / (DUPE|DUPE) X? (?{ ... }) Y /x
1763
1764 Thus EVAL blocks following a trie may be called a different number of times with
1765 and without the optimisation. With the optimisations dupes will be silently
1766 ignored. This inconsistent behaviour of EVAL type nodes is well established as
1767 the following demonstrates:
1768
1769  'words'=~/(word|word|word)(?{ print $1 })[xyz]/
1770
1771 which prints out 'word' three times, but
1772
1773  'words'=~/(word|word|word)(?{ print $1 })S/
1774
1775 which doesnt print it out at all. This is due to other optimisations kicking in.
1776
1777 Example of what happens on a structural level:
1778
1779 The regexp /(ac|ad|ab)+/ will produce the following debug output:
1780
1781    1: CURLYM[1] {1,32767}(18)
1782    5:   BRANCH(8)
1783    6:     EXACT <ac>(16)
1784    8:   BRANCH(11)
1785    9:     EXACT <ad>(16)
1786   11:   BRANCH(14)
1787   12:     EXACT <ab>(16)
1788   16:   SUCCEED(0)
1789   17:   NOTHING(18)
1790   18: END(0)
1791
1792 This would be optimizable with startbranch=5, first=5, last=16, tail=16
1793 and should turn into:
1794
1795    1: CURLYM[1] {1,32767}(18)
1796    5:   TRIE(16)
1797   [Words:3 Chars Stored:6 Unique Chars:4 States:5 NCP:1]
1798   <ac>
1799   <ad>
1800   <ab>
1801   16:   SUCCEED(0)
1802   17:   NOTHING(18)
1803   18: END(0)
1804
1805 Cases where tail != last would be like /(?foo|bar)baz/:
1806
1807    1: BRANCH(4)
1808    2:   EXACT <foo>(8)
1809    4: BRANCH(7)
1810    5:   EXACT <bar>(8)
1811    7: TAIL(8)
1812    8: EXACT <baz>(10)
1813   10: END(0)
1814
1815 which would be optimizable with startbranch=1, first=1, last=7, tail=8
1816 and would end up looking like:
1817
1818  1: TRIE(8)
1819  [Words:2 Chars Stored:6 Unique Chars:5 States:7 NCP:1]
1820   <foo>
1821   <bar>
1822    7: TAIL(8)
1823    8: EXACT <baz>(10)
1824   10: END(0)
1825
1826  d = uvchr_to_utf8_flags(d, uv, 0);
1827
1828 is the recommended Unicode-aware way of saying
1829
1830  *(d++) = uv;
1831 */
1832
1833 #define TRIE_STORE_REVCHAR(val)                                            \
1834  STMT_START {                                                           \
1835   if (UTF) {          \
1836    SV *zlopp = newSV(7); /* XXX: optimize me */                   \
1837    unsigned char *flrbbbbb = (unsigned char *) SvPVX(zlopp);    \
1838    unsigned const char *const kapow = uvchr_to_utf8(flrbbbbb, val); \
1839    SvCUR_set(zlopp, kapow - flrbbbbb);       \
1840    SvPOK_on(zlopp);         \
1841    SvUTF8_on(zlopp);         \
1842    av_push(revcharmap, zlopp);        \
1843   } else {          \
1844    char ooooff = (char)val;                                           \
1845    av_push(revcharmap, newSVpvn(&ooooff, 1));      \
1846   }           \
1847   } STMT_END
1848
1849 /* This gets the next character from the input, folding it if not already
1850  * folded. */
1851 #define TRIE_READ_CHAR STMT_START {                                           \
1852  wordlen++;                                                                \
1853  if ( UTF ) {                                                              \
1854   /* if it is UTF then it is either already folded, or does not need    \
1855   * folding */                                                         \
1856   uvc = valid_utf8_to_uvchr( (const U8*) uc, &len);                     \
1857  }                                                                         \
1858  else if (folder == PL_fold_latin1) {                                      \
1859   /* This folder implies Unicode rules, which in the range expressible  \
1860   *  by not UTF is the lower case, with the two exceptions, one of     \
1861   *  which should have been taken care of before calling this */       \
1862   assert(*uc != LATIN_SMALL_LETTER_SHARP_S);                            \
1863   uvc = toLOWER_L1(*uc);                                                \
1864   if (UNLIKELY(uvc == MICRO_SIGN)) uvc = GREEK_SMALL_LETTER_MU;         \
1865   len = 1;                                                              \
1866  } else {                                                                  \
1867   /* raw data, will be folded later if needed */                        \
1868   uvc = (U32)*uc;                                                       \
1869   len = 1;                                                              \
1870  }                                                                         \
1871 } STMT_END
1872
1873
1874
1875 #define TRIE_LIST_PUSH(state,fid,ns) STMT_START {               \
1876  if ( TRIE_LIST_CUR( state ) >=TRIE_LIST_LEN( state ) ) {    \
1877   U32 ging = TRIE_LIST_LEN( state ) *= 2;                 \
1878   Renew( trie->states[ state ].trans.list, ging, reg_trie_trans_le ); \
1879  }                                                           \
1880  TRIE_LIST_ITEM( state, TRIE_LIST_CUR( state ) ).forid = fid;     \
1881  TRIE_LIST_ITEM( state, TRIE_LIST_CUR( state ) ).newstate = ns;   \
1882  TRIE_LIST_CUR( state )++;                                   \
1883 } STMT_END
1884
1885 #define TRIE_LIST_NEW(state) STMT_START {                       \
1886  Newxz( trie->states[ state ].trans.list,               \
1887   4, reg_trie_trans_le );                                 \
1888  TRIE_LIST_CUR( state ) = 1;                                \
1889  TRIE_LIST_LEN( state ) = 4;                                \
1890 } STMT_END
1891
1892 #define TRIE_HANDLE_WORD(state) STMT_START {                    \
1893  U16 dupe= trie->states[ state ].wordnum;                    \
1894  regnode * const noper_next = regnext( noper );              \
1895                 \
1896  DEBUG_r({                                                   \
1897   /* store the word for dumping */                        \
1898   SV* tmp;                                                \
1899   if (OP(noper) != NOTHING)                               \
1900    tmp = newSVpvn_utf8(STRING(noper), STR_LEN(noper), UTF); \
1901   else                                                    \
1902    tmp = newSVpvn_utf8( "", 0, UTF );   \
1903   av_push( trie_words, tmp );                             \
1904  });                                                         \
1905                 \
1906  curword++;                                                  \
1907  trie->wordinfo[curword].prev   = 0;                         \
1908  trie->wordinfo[curword].len    = wordlen;                   \
1909  trie->wordinfo[curword].accept = state;                     \
1910                 \
1911  if ( noper_next < tail ) {                                  \
1912   if (!trie->jump)                                        \
1913    trie->jump = (U16 *) PerlMemShared_calloc( word_count + 1, \
1914             sizeof(U16) ); \
1915   trie->jump[curword] = (U16)(noper_next - convert);      \
1916   if (!jumper)                                            \
1917    jumper = noper_next;                                \
1918   if (!nextbranch)                                        \
1919    nextbranch= regnext(cur);                           \
1920  }                                                           \
1921                 \
1922  if ( dupe ) {                                               \
1923   /* It's a dupe. Pre-insert into the wordinfo[].prev   */\
1924   /* chain, so that when the bits of chain are later    */\
1925   /* linked together, the dups appear in the chain      */\
1926   trie->wordinfo[curword].prev = trie->wordinfo[dupe].prev; \
1927   trie->wordinfo[dupe].prev = curword;                    \
1928  } else {                                                    \
1929   /* we haven't inserted this word yet.                */ \
1930   trie->states[ state ].wordnum = curword;                \
1931  }                                                           \
1932 } STMT_END
1933
1934
1935 #define TRIE_TRANS_STATE(state,base,ucharcount,charid,special)  \
1936  ( ( base + charid >=  ucharcount     \
1937   && base + charid < ubound     \
1938   && state == trie->trans[ base - ucharcount + charid ].check \
1939   && trie->trans[ base - ucharcount + charid ].next )  \
1940   ? trie->trans[ base - ucharcount + charid ].next  \
1941   : ( state==1 ? special : 0 )     \
1942  )
1943
1944 #define MADE_TRIE       1
1945 #define MADE_JUMP_TRIE  2
1946 #define MADE_EXACT_TRIE 4
1947
1948 STATIC I32
1949 S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
1950     regnode *first, regnode *last, regnode *tail,
1951     U32 word_count, U32 flags, U32 depth)
1952 {
1953  dVAR;
1954  /* first pass, loop through and scan words */
1955  reg_trie_data *trie;
1956  HV *widecharmap = NULL;
1957  AV *revcharmap = newAV();
1958  regnode *cur;
1959  STRLEN len = 0;
1960  UV uvc = 0;
1961  U16 curword = 0;
1962  U32 next_alloc = 0;
1963  regnode *jumper = NULL;
1964  regnode *nextbranch = NULL;
1965  regnode *convert = NULL;
1966  U32 *prev_states; /* temp array mapping each state to previous one */
1967  /* we just use folder as a flag in utf8 */
1968  const U8 * folder = NULL;
1969
1970 #ifdef DEBUGGING
1971  const U32 data_slot = add_data( pRExC_state, STR_WITH_LEN("tuuu"));
1972  AV *trie_words = NULL;
1973  /* along with revcharmap, this only used during construction but both are
1974  * useful during debugging so we store them in the struct when debugging.
1975  */
1976 #else
1977  const U32 data_slot = add_data( pRExC_state, STR_WITH_LEN("tu"));
1978  STRLEN trie_charcount=0;
1979 #endif
1980  SV *re_trie_maxbuff;
1981  GET_RE_DEBUG_FLAGS_DECL;
1982
1983  PERL_ARGS_ASSERT_MAKE_TRIE;
1984 #ifndef DEBUGGING
1985  PERL_UNUSED_ARG(depth);
1986 #endif
1987
1988  switch (flags) {
1989   case EXACT: break;
1990   case EXACTFA:
1991   case EXACTFU_SS:
1992   case EXACTFU: folder = PL_fold_latin1; break;
1993   case EXACTF:  folder = PL_fold; break;
1994   default: Perl_croak( aTHX_ "panic! In trie construction, unknown node type %u %s", (unsigned) flags, PL_reg_name[flags] );
1995  }
1996
1997  trie = (reg_trie_data *) PerlMemShared_calloc( 1, sizeof(reg_trie_data) );
1998  trie->refcount = 1;
1999  trie->startstate = 1;
2000  trie->wordcount = word_count;
2001  RExC_rxi->data->data[ data_slot ] = (void*)trie;
2002  trie->charmap = (U16 *) PerlMemShared_calloc( 256, sizeof(U16) );
2003  if (flags == EXACT)
2004   trie->bitmap = (char *) PerlMemShared_calloc( ANYOF_BITMAP_SIZE, 1 );
2005  trie->wordinfo = (reg_trie_wordinfo *) PerlMemShared_calloc(
2006      trie->wordcount+1, sizeof(reg_trie_wordinfo));
2007
2008  DEBUG_r({
2009   trie_words = newAV();
2010  });
2011
2012  re_trie_maxbuff = get_sv(RE_TRIE_MAXBUF_NAME, 1);
2013  if (!SvIOK(re_trie_maxbuff)) {
2014   sv_setiv(re_trie_maxbuff, RE_TRIE_MAXBUF_INIT);
2015  }
2016  DEBUG_TRIE_COMPILE_r({
2017   PerlIO_printf( Perl_debug_log,
2018   "%*smake_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n",
2019   (int)depth * 2 + 2, "",
2020   REG_NODE_NUM(startbranch),REG_NODE_NUM(first),
2021   REG_NODE_NUM(last), REG_NODE_NUM(tail), (int)depth);
2022  });
2023
2024    /* Find the node we are going to overwrite */
2025  if ( first == startbranch && OP( last ) != BRANCH ) {
2026   /* whole branch chain */
2027   convert = first;
2028  } else {
2029   /* branch sub-chain */
2030   convert = NEXTOPER( first );
2031  }
2032
2033  /*  -- First loop and Setup --
2034
2035  We first traverse the branches and scan each word to determine if it
2036  contains widechars, and how many unique chars there are, this is
2037  important as we have to build a table with at least as many columns as we
2038  have unique chars.
2039
2040  We use an array of integers to represent the character codes 0..255
2041  (trie->charmap) and we use a an HV* to store Unicode characters. We use
2042  the native representation of the character value as the key and IV's for
2043  the coded index.
2044
2045  *TODO* If we keep track of how many times each character is used we can
2046  remap the columns so that the table compression later on is more
2047  efficient in terms of memory by ensuring the most common value is in the
2048  middle and the least common are on the outside.  IMO this would be better
2049  than a most to least common mapping as theres a decent chance the most
2050  common letter will share a node with the least common, meaning the node
2051  will not be compressible. With a middle is most common approach the worst
2052  case is when we have the least common nodes twice.
2053
2054  */
2055
2056  for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
2057   regnode *noper = NEXTOPER( cur );
2058   const U8 *uc = (U8*)STRING( noper );
2059   const U8 *e  = uc + STR_LEN( noper );
2060   int foldlen = 0;
2061   U32 wordlen      = 0;         /* required init */
2062   STRLEN minchars = 0;
2063   STRLEN maxchars = 0;
2064   bool set_bit = trie->bitmap ? 1 : 0; /*store the first char in the
2065            bitmap?*/
2066
2067   if (OP(noper) == NOTHING) {
2068    regnode *noper_next= regnext(noper);
2069    if (noper_next != tail && OP(noper_next) == flags) {
2070     noper = noper_next;
2071     uc= (U8*)STRING(noper);
2072     e= uc + STR_LEN(noper);
2073     trie->minlen= STR_LEN(noper);
2074    } else {
2075     trie->minlen= 0;
2076     continue;
2077    }
2078   }
2079
2080   if ( set_bit ) { /* bitmap only alloced when !(UTF&&Folding) */
2081    TRIE_BITMAP_SET(trie,*uc); /* store the raw first byte
2082           regardless of encoding */
2083    if (OP( noper ) == EXACTFU_SS) {
2084     /* false positives are ok, so just set this */
2085     TRIE_BITMAP_SET(trie, LATIN_SMALL_LETTER_SHARP_S);
2086    }
2087   }
2088   for ( ; uc < e ; uc += len ) {  /* Look at each char in the current
2089           branch */
2090    TRIE_CHARCOUNT(trie)++;
2091    TRIE_READ_CHAR;
2092
2093    /* TRIE_READ_CHAR returns the current character, or its fold if /i
2094    * is in effect.  Under /i, this character can match itself, or
2095    * anything that folds to it.  If not under /i, it can match just
2096    * itself.  Most folds are 1-1, for example k, K, and KELVIN SIGN
2097    * all fold to k, and all are single characters.   But some folds
2098    * expand to more than one character, so for example LATIN SMALL
2099    * LIGATURE FFI folds to the three character sequence 'ffi'.  If
2100    * the string beginning at 'uc' is 'ffi', it could be matched by
2101    * three characters, or just by the one ligature character. (It
2102    * could also be matched by two characters: LATIN SMALL LIGATURE FF
2103    * followed by 'i', or by 'f' followed by LATIN SMALL LIGATURE FI).
2104    * (Of course 'I' and/or 'F' instead of 'i' and 'f' can also
2105    * match.)  The trie needs to know the minimum and maximum number
2106    * of characters that could match so that it can use size alone to
2107    * quickly reject many match attempts.  The max is simple: it is
2108    * the number of folded characters in this branch (since a fold is
2109    * never shorter than what folds to it. */
2110
2111    maxchars++;
2112
2113    /* And the min is equal to the max if not under /i (indicated by
2114    * 'folder' being NULL), or there are no multi-character folds.  If
2115    * there is a multi-character fold, the min is incremented just
2116    * once, for the character that folds to the sequence.  Each
2117    * character in the sequence needs to be added to the list below of
2118    * characters in the trie, but we count only the first towards the
2119    * min number of characters needed.  This is done through the
2120    * variable 'foldlen', which is returned by the macros that look
2121    * for these sequences as the number of bytes the sequence
2122    * occupies.  Each time through the loop, we decrement 'foldlen' by
2123    * how many bytes the current char occupies.  Only when it reaches
2124    * 0 do we increment 'minchars' or look for another multi-character
2125    * sequence. */
2126    if (folder == NULL) {
2127     minchars++;
2128    }
2129    else if (foldlen > 0) {
2130     foldlen -= (UTF) ? UTF8SKIP(uc) : 1;
2131    }
2132    else {
2133     minchars++;
2134
2135     /* See if *uc is the beginning of a multi-character fold.  If
2136     * so, we decrement the length remaining to look at, to account
2137     * for the current character this iteration.  (We can use 'uc'
2138     * instead of the fold returned by TRIE_READ_CHAR because for
2139     * non-UTF, the latin1_safe macro is smart enough to account
2140     * for all the unfolded characters, and because for UTF, the
2141     * string will already have been folded earlier in the
2142     * compilation process */
2143     if (UTF) {
2144      if ((foldlen = is_MULTI_CHAR_FOLD_utf8_safe(uc, e))) {
2145       foldlen -= UTF8SKIP(uc);
2146      }
2147     }
2148     else if ((foldlen = is_MULTI_CHAR_FOLD_latin1_safe(uc, e))) {
2149      foldlen--;
2150     }
2151    }
2152
2153    /* The current character (and any potential folds) should be added
2154    * to the possible matching characters for this position in this
2155    * branch */
2156    if ( uvc < 256 ) {
2157     if ( folder ) {
2158      U8 folded= folder[ (U8) uvc ];
2159      if ( !trie->charmap[ folded ] ) {
2160       trie->charmap[ folded ]=( ++trie->uniquecharcount );
2161       TRIE_STORE_REVCHAR( folded );
2162      }
2163     }
2164     if ( !trie->charmap[ uvc ] ) {
2165      trie->charmap[ uvc ]=( ++trie->uniquecharcount );
2166      TRIE_STORE_REVCHAR( uvc );
2167     }
2168     if ( set_bit ) {
2169      /* store the codepoint in the bitmap, and its folded
2170      * equivalent. */
2171      TRIE_BITMAP_SET(trie, uvc);
2172
2173      /* store the folded codepoint */
2174      if ( folder ) TRIE_BITMAP_SET(trie, folder[(U8) uvc ]);
2175
2176      if ( !UTF ) {
2177       /* store first byte of utf8 representation of
2178       variant codepoints */
2179       if (! UVCHR_IS_INVARIANT(uvc)) {
2180        TRIE_BITMAP_SET(trie, UTF8_TWO_BYTE_HI(uvc));
2181       }
2182      }
2183      set_bit = 0; /* We've done our bit :-) */
2184     }
2185    } else {
2186
2187     /* XXX We could come up with the list of code points that fold
2188     * to this using PL_utf8_foldclosures, except not for
2189     * multi-char folds, as there may be multiple combinations
2190     * there that could work, which needs to wait until runtime to
2191     * resolve (The comment about LIGATURE FFI above is such an
2192     * example */
2193
2194     SV** svpp;
2195     if ( !widecharmap )
2196      widecharmap = newHV();
2197
2198     svpp = hv_fetch( widecharmap, (char*)&uvc, sizeof( UV ), 1 );
2199
2200     if ( !svpp )
2201      Perl_croak( aTHX_ "error creating/fetching widecharmap entry for 0x%"UVXf, uvc );
2202
2203     if ( !SvTRUE( *svpp ) ) {
2204      sv_setiv( *svpp, ++trie->uniquecharcount );
2205      TRIE_STORE_REVCHAR(uvc);
2206     }
2207    }
2208   } /* end loop through characters in this branch of the trie */
2209
2210   /* We take the min and max for this branch and combine to find the min
2211   * and max for all branches processed so far */
2212   if( cur == first ) {
2213    trie->minlen = minchars;
2214    trie->maxlen = maxchars;
2215   } else if (minchars < trie->minlen) {
2216    trie->minlen = minchars;
2217   } else if (maxchars > trie->maxlen) {
2218    trie->maxlen = maxchars;
2219   }
2220  } /* end first pass */
2221  DEBUG_TRIE_COMPILE_r(
2222   PerlIO_printf( Perl_debug_log,
2223     "%*sTRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n",
2224     (int)depth * 2 + 2,"",
2225     ( widecharmap ? "UTF8" : "NATIVE" ), (int)word_count,
2226     (int)TRIE_CHARCOUNT(trie), trie->uniquecharcount,
2227     (int)trie->minlen, (int)trie->maxlen )
2228  );
2229
2230  /*
2231   We now know what we are dealing with in terms of unique chars and
2232   string sizes so we can calculate how much memory a naive
2233   representation using a flat table  will take. If it's over a reasonable
2234   limit (as specified by ${^RE_TRIE_MAXBUF}) we use a more memory
2235   conservative but potentially much slower representation using an array
2236   of lists.
2237
2238   At the end we convert both representations into the same compressed
2239   form that will be used in regexec.c for matching with. The latter
2240   is a form that cannot be used to construct with but has memory
2241   properties similar to the list form and access properties similar
2242   to the table form making it both suitable for fast searches and
2243   small enough that its feasable to store for the duration of a program.
2244
2245   See the comment in the code where the compressed table is produced
2246   inplace from the flat tabe representation for an explanation of how
2247   the compression works.
2248
2249  */
2250
2251
2252  Newx(prev_states, TRIE_CHARCOUNT(trie) + 2, U32);
2253  prev_states[1] = 0;
2254
2255  if ( (IV)( ( TRIE_CHARCOUNT(trie) + 1 ) * trie->uniquecharcount + 1)
2256              > SvIV(re_trie_maxbuff) )
2257  {
2258   /*
2259    Second Pass -- Array Of Lists Representation
2260
2261    Each state will be represented by a list of charid:state records
2262    (reg_trie_trans_le) the first such element holds the CUR and LEN
2263    points of the allocated array. (See defines above).
2264
2265    We build the initial structure using the lists, and then convert
2266    it into the compressed table form which allows faster lookups
2267    (but cant be modified once converted).
2268   */
2269
2270   STRLEN transcount = 1;
2271
2272   DEBUG_TRIE_COMPILE_MORE_r( PerlIO_printf( Perl_debug_log,
2273    "%*sCompiling trie using list compiler\n",
2274    (int)depth * 2 + 2, ""));
2275
2276   trie->states = (reg_trie_state *)
2277    PerlMemShared_calloc( TRIE_CHARCOUNT(trie) + 2,
2278         sizeof(reg_trie_state) );
2279   TRIE_LIST_NEW(1);
2280   next_alloc = 2;
2281
2282   for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
2283
2284    regnode *noper   = NEXTOPER( cur );
2285    U8 *uc           = (U8*)STRING( noper );
2286    const U8 *e      = uc + STR_LEN( noper );
2287    U32 state        = 1;         /* required init */
2288    U16 charid       = 0;         /* sanity init */
2289    U32 wordlen      = 0;         /* required init */
2290
2291    if (OP(noper) == NOTHING) {
2292     regnode *noper_next= regnext(noper);
2293     if (noper_next != tail && OP(noper_next) == flags) {
2294      noper = noper_next;
2295      uc= (U8*)STRING(noper);
2296      e= uc + STR_LEN(noper);
2297     }
2298    }
2299
2300    if (OP(noper) != NOTHING) {
2301     for ( ; uc < e ; uc += len ) {
2302
2303      TRIE_READ_CHAR;
2304
2305      if ( uvc < 256 ) {
2306       charid = trie->charmap[ uvc ];
2307      } else {
2308       SV** const svpp = hv_fetch( widecharmap,
2309              (char*)&uvc,
2310              sizeof( UV ),
2311              0);
2312       if ( !svpp ) {
2313        charid = 0;
2314       } else {
2315        charid=(U16)SvIV( *svpp );
2316       }
2317      }
2318      /* charid is now 0 if we dont know the char read, or
2319      * nonzero if we do */
2320      if ( charid ) {
2321
2322       U16 check;
2323       U32 newstate = 0;
2324
2325       charid--;
2326       if ( !trie->states[ state ].trans.list ) {
2327        TRIE_LIST_NEW( state );
2328       }
2329       for ( check = 1;
2330        check <= TRIE_LIST_USED( state );
2331        check++ )
2332       {
2333        if ( TRIE_LIST_ITEM( state, check ).forid
2334                  == charid )
2335        {
2336         newstate = TRIE_LIST_ITEM( state, check ).newstate;
2337         break;
2338        }
2339       }
2340       if ( ! newstate ) {
2341        newstate = next_alloc++;
2342        prev_states[newstate] = state;
2343        TRIE_LIST_PUSH( state, charid, newstate );
2344        transcount++;
2345       }
2346       state = newstate;
2347      } else {
2348       Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %"IVdf, uvc );
2349      }
2350     }
2351    }
2352    TRIE_HANDLE_WORD(state);
2353
2354   } /* end second pass */
2355
2356   /* next alloc is the NEXT state to be allocated */
2357   trie->statecount = next_alloc;
2358   trie->states = (reg_trie_state *)
2359    PerlMemShared_realloc( trie->states,
2360         next_alloc
2361         * sizeof(reg_trie_state) );
2362
2363   /* and now dump it out before we compress it */
2364   DEBUG_TRIE_COMPILE_MORE_r(dump_trie_interim_list(trie, widecharmap,
2365               revcharmap, next_alloc,
2366               depth+1)
2367   );
2368
2369   trie->trans = (reg_trie_trans *)
2370    PerlMemShared_calloc( transcount, sizeof(reg_trie_trans) );
2371   {
2372    U32 state;
2373    U32 tp = 0;
2374    U32 zp = 0;
2375
2376
2377    for( state=1 ; state < next_alloc ; state ++ ) {
2378     U32 base=0;
2379
2380     /*
2381     DEBUG_TRIE_COMPILE_MORE_r(
2382      PerlIO_printf( Perl_debug_log, "tp: %d zp: %d ",tp,zp)
2383     );
2384     */
2385
2386     if (trie->states[state].trans.list) {
2387      U16 minid=TRIE_LIST_ITEM( state, 1).forid;
2388      U16 maxid=minid;
2389      U16 idx;
2390
2391      for( idx = 2 ; idx <= TRIE_LIST_USED( state ) ; idx++ ) {
2392       const U16 forid = TRIE_LIST_ITEM( state, idx).forid;
2393       if ( forid < minid ) {
2394        minid=forid;
2395       } else if ( forid > maxid ) {
2396        maxid=forid;
2397       }
2398      }
2399      if ( transcount < tp + maxid - minid + 1) {
2400       transcount *= 2;
2401       trie->trans = (reg_trie_trans *)
2402        PerlMemShared_realloc( trie->trans,
2403              transcount
2404              * sizeof(reg_trie_trans) );
2405       Zero( trie->trans + (transcount / 2),
2406        transcount / 2,
2407        reg_trie_trans );
2408      }
2409      base = trie->uniquecharcount + tp - minid;
2410      if ( maxid == minid ) {
2411       U32 set = 0;
2412       for ( ; zp < tp ; zp++ ) {
2413        if ( ! trie->trans[ zp ].next ) {
2414         base = trie->uniquecharcount + zp - minid;
2415         trie->trans[ zp ].next = TRIE_LIST_ITEM( state,
2416                 1).newstate;
2417         trie->trans[ zp ].check = state;
2418         set = 1;
2419         break;
2420        }
2421       }
2422       if ( !set ) {
2423        trie->trans[ tp ].next = TRIE_LIST_ITEM( state,
2424                 1).newstate;
2425        trie->trans[ tp ].check = state;
2426        tp++;
2427        zp = tp;
2428       }
2429      } else {
2430       for ( idx=1; idx <= TRIE_LIST_USED( state ) ; idx++ ) {
2431        const U32 tid = base
2432           - trie->uniquecharcount
2433           + TRIE_LIST_ITEM( state, idx ).forid;
2434        trie->trans[ tid ].next = TRIE_LIST_ITEM( state,
2435                 idx ).newstate;
2436        trie->trans[ tid ].check = state;
2437       }
2438       tp += ( maxid - minid + 1 );
2439      }
2440      Safefree(trie->states[ state ].trans.list);
2441     }
2442     /*
2443     DEBUG_TRIE_COMPILE_MORE_r(
2444      PerlIO_printf( Perl_debug_log, " base: %d\n",base);
2445     );
2446     */
2447     trie->states[ state ].trans.base=base;
2448    }
2449    trie->lasttrans = tp + 1;
2450   }
2451  } else {
2452   /*
2453   Second Pass -- Flat Table Representation.
2454
2455   we dont use the 0 slot of either trans[] or states[] so we add 1 to
2456   each.  We know that we will need Charcount+1 trans at most to store
2457   the data (one row per char at worst case) So we preallocate both
2458   structures assuming worst case.
2459
2460   We then construct the trie using only the .next slots of the entry
2461   structs.
2462
2463   We use the .check field of the first entry of the node temporarily
2464   to make compression both faster and easier by keeping track of how
2465   many non zero fields are in the node.
2466
2467   Since trans are numbered from 1 any 0 pointer in the table is a FAIL
2468   transition.
2469
2470   There are two terms at use here: state as a TRIE_NODEIDX() which is
2471   a number representing the first entry of the node, and state as a
2472   TRIE_NODENUM() which is the trans number. state 1 is TRIE_NODEIDX(1)
2473   and TRIE_NODENUM(1), state 2 is TRIE_NODEIDX(2) and TRIE_NODENUM(3)
2474   if there are 2 entrys per node. eg:
2475
2476    A B       A B
2477   1. 2 4    1. 3 7
2478   2. 0 3    3. 0 5
2479   3. 0 0    5. 0 0
2480   4. 0 0    7. 0 0
2481
2482   The table is internally in the right hand, idx form. However as we
2483   also have to deal with the states array which is indexed by nodenum
2484   we have to use TRIE_NODENUM() to convert.
2485
2486   */
2487   DEBUG_TRIE_COMPILE_MORE_r( PerlIO_printf( Perl_debug_log,
2488    "%*sCompiling trie using table compiler\n",
2489    (int)depth * 2 + 2, ""));
2490
2491   trie->trans = (reg_trie_trans *)
2492    PerlMemShared_calloc( ( TRIE_CHARCOUNT(trie) + 1 )
2493         * trie->uniquecharcount + 1,
2494         sizeof(reg_trie_trans) );
2495   trie->states = (reg_trie_state *)
2496    PerlMemShared_calloc( TRIE_CHARCOUNT(trie) + 2,
2497         sizeof(reg_trie_state) );
2498   next_alloc = trie->uniquecharcount + 1;
2499
2500
2501   for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
2502
2503    regnode *noper   = NEXTOPER( cur );
2504    const U8 *uc     = (U8*)STRING( noper );
2505    const U8 *e      = uc + STR_LEN( noper );
2506
2507    U32 state        = 1;         /* required init */
2508
2509    U16 charid       = 0;         /* sanity init */
2510    U32 accept_state = 0;         /* sanity init */
2511
2512    U32 wordlen      = 0;         /* required init */
2513
2514    if (OP(noper) == NOTHING) {
2515     regnode *noper_next= regnext(noper);
2516     if (noper_next != tail && OP(noper_next) == flags) {
2517      noper = noper_next;
2518      uc= (U8*)STRING(noper);
2519      e= uc + STR_LEN(noper);
2520     }
2521    }
2522
2523    if ( OP(noper) != NOTHING ) {
2524     for ( ; uc < e ; uc += len ) {
2525
2526      TRIE_READ_CHAR;
2527
2528      if ( uvc < 256 ) {
2529       charid = trie->charmap[ uvc ];
2530      } else {
2531       SV* const * const svpp = hv_fetch( widecharmap,
2532               (char*)&uvc,
2533               sizeof( UV ),
2534               0);
2535       charid = svpp ? (U16)SvIV(*svpp) : 0;
2536      }
2537      if ( charid ) {
2538       charid--;
2539       if ( !trie->trans[ state + charid ].next ) {
2540        trie->trans[ state + charid ].next = next_alloc;
2541        trie->trans[ state ].check++;
2542        prev_states[TRIE_NODENUM(next_alloc)]
2543          = TRIE_NODENUM(state);
2544        next_alloc += trie->uniquecharcount;
2545       }
2546       state = trie->trans[ state + charid ].next;
2547      } else {
2548       Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %"IVdf, uvc );
2549      }
2550      /* charid is now 0 if we dont know the char read, or
2551      * nonzero if we do */
2552     }
2553    }
2554    accept_state = TRIE_NODENUM( state );
2555    TRIE_HANDLE_WORD(accept_state);
2556
2557   } /* end second pass */
2558
2559   /* and now dump it out before we compress it */
2560   DEBUG_TRIE_COMPILE_MORE_r(dump_trie_interim_table(trie, widecharmap,
2561               revcharmap,
2562               next_alloc, depth+1));
2563
2564   {
2565   /*
2566   * Inplace compress the table.*
2567
2568   For sparse data sets the table constructed by the trie algorithm will
2569   be mostly 0/FAIL transitions or to put it another way mostly empty.
2570   (Note that leaf nodes will not contain any transitions.)
2571
2572   This algorithm compresses the tables by eliminating most such
2573   transitions, at the cost of a modest bit of extra work during lookup:
2574
2575   - Each states[] entry contains a .base field which indicates the
2576   index in the state[] array wheres its transition data is stored.
2577
2578   - If .base is 0 there are no valid transitions from that node.
2579
2580   - If .base is nonzero then charid is added to it to find an entry in
2581   the trans array.
2582
2583   -If trans[states[state].base+charid].check!=state then the
2584   transition is taken to be a 0/Fail transition. Thus if there are fail
2585   transitions at the front of the node then the .base offset will point
2586   somewhere inside the previous nodes data (or maybe even into a node
2587   even earlier), but the .check field determines if the transition is
2588   valid.
2589
2590   XXX - wrong maybe?
2591   The following process inplace converts the table to the compressed
2592   table: We first do not compress the root node 1,and mark all its
2593   .check pointers as 1 and set its .base pointer as 1 as well. This
2594   allows us to do a DFA construction from the compressed table later,
2595   and ensures that any .base pointers we calculate later are greater
2596   than 0.
2597
2598   - We set 'pos' to indicate the first entry of the second node.
2599
2600   - We then iterate over the columns of the node, finding the first and
2601   last used entry at l and m. We then copy l..m into pos..(pos+m-l),
2602   and set the .check pointers accordingly, and advance pos
2603   appropriately and repreat for the next node. Note that when we copy
2604   the next pointers we have to convert them from the original
2605   NODEIDX form to NODENUM form as the former is not valid post
2606   compression.
2607
2608   - If a node has no transitions used we mark its base as 0 and do not
2609   advance the pos pointer.
2610
2611   - If a node only has one transition we use a second pointer into the
2612   structure to fill in allocated fail transitions from other states.
2613   This pointer is independent of the main pointer and scans forward
2614   looking for null transitions that are allocated to a state. When it
2615   finds one it writes the single transition into the "hole".  If the
2616   pointer doesnt find one the single transition is appended as normal.
2617
2618   - Once compressed we can Renew/realloc the structures to release the
2619   excess space.
2620
2621   See "Table-Compression Methods" in sec 3.9 of the Red Dragon,
2622   specifically Fig 3.47 and the associated pseudocode.
2623
2624   demq
2625   */
2626   const U32 laststate = TRIE_NODENUM( next_alloc );
2627   U32 state, charid;
2628   U32 pos = 0, zp=0;
2629   trie->statecount = laststate;
2630
2631   for ( state = 1 ; state < laststate ; state++ ) {
2632    U8 flag = 0;
2633    const U32 stateidx = TRIE_NODEIDX( state );
2634    const U32 o_used = trie->trans[ stateidx ].check;
2635    U32 used = trie->trans[ stateidx ].check;
2636    trie->trans[ stateidx ].check = 0;
2637
2638    for ( charid = 0;
2639     used && charid < trie->uniquecharcount;
2640     charid++ )
2641    {
2642     if ( flag || trie->trans[ stateidx + charid ].next ) {
2643      if ( trie->trans[ stateidx + charid ].next ) {
2644       if (o_used == 1) {
2645        for ( ; zp < pos ; zp++ ) {
2646         if ( ! trie->trans[ zp ].next ) {
2647          break;
2648         }
2649        }
2650        trie->states[ state ].trans.base
2651              = zp
2652              + trie->uniquecharcount
2653              - charid ;
2654        trie->trans[ zp ].next
2655         = SAFE_TRIE_NODENUM( trie->trans[ stateidx
2656                + charid ].next );
2657        trie->trans[ zp ].check = state;
2658        if ( ++zp > pos ) pos = zp;
2659        break;
2660       }
2661       used--;
2662      }
2663      if ( !flag ) {
2664       flag = 1;
2665       trie->states[ state ].trans.base
2666          = pos + trie->uniquecharcount - charid ;
2667      }
2668      trie->trans[ pos ].next
2669       = SAFE_TRIE_NODENUM(
2670          trie->trans[ stateidx + charid ].next );
2671      trie->trans[ pos ].check = state;
2672      pos++;
2673     }
2674    }
2675   }
2676   trie->lasttrans = pos + 1;
2677   trie->states = (reg_trie_state *)
2678    PerlMemShared_realloc( trie->states, laststate
2679         * sizeof(reg_trie_state) );
2680   DEBUG_TRIE_COMPILE_MORE_r(
2681    PerlIO_printf( Perl_debug_log,
2682     "%*sAlloc: %d Orig: %"IVdf" elements, Final:%"IVdf". Savings of %%%5.2f\n",
2683     (int)depth * 2 + 2,"",
2684     (int)( ( TRIE_CHARCOUNT(trie) + 1 ) * trie->uniquecharcount
2685      + 1 ),
2686     (IV)next_alloc,
2687     (IV)pos,
2688     ( ( next_alloc - pos ) * 100 ) / (double)next_alloc );
2689    );
2690
2691   } /* end table compress */
2692  }
2693  DEBUG_TRIE_COMPILE_MORE_r(
2694    PerlIO_printf(Perl_debug_log,
2695     "%*sStatecount:%"UVxf" Lasttrans:%"UVxf"\n",
2696     (int)depth * 2 + 2, "",
2697     (UV)trie->statecount,
2698     (UV)trie->lasttrans)
2699  );
2700  /* resize the trans array to remove unused space */
2701  trie->trans = (reg_trie_trans *)
2702   PerlMemShared_realloc( trie->trans, trie->lasttrans
2703        * sizeof(reg_trie_trans) );
2704
2705  {   /* Modify the program and insert the new TRIE node */
2706   U8 nodetype =(U8)(flags & 0xFF);
2707   char *str=NULL;
2708
2709 #ifdef DEBUGGING
2710   regnode *optimize = NULL;
2711 #ifdef RE_TRACK_PATTERN_OFFSETS
2712
2713   U32 mjd_offset = 0;
2714   U32 mjd_nodelen = 0;
2715 #endif /* RE_TRACK_PATTERN_OFFSETS */
2716 #endif /* DEBUGGING */
2717   /*
2718   This means we convert either the first branch or the first Exact,
2719   depending on whether the thing following (in 'last') is a branch
2720   or not and whther first is the startbranch (ie is it a sub part of
2721   the alternation or is it the whole thing.)
2722   Assuming its a sub part we convert the EXACT otherwise we convert
2723   the whole branch sequence, including the first.
2724   */
2725   /* Find the node we are going to overwrite */
2726   if ( first != startbranch || OP( last ) == BRANCH ) {
2727    /* branch sub-chain */
2728    NEXT_OFF( first ) = (U16)(last - first);
2729 #ifdef RE_TRACK_PATTERN_OFFSETS
2730    DEBUG_r({
2731     mjd_offset= Node_Offset((convert));
2732     mjd_nodelen= Node_Length((convert));
2733    });
2734 #endif
2735    /* whole branch chain */
2736   }
2737 #ifdef RE_TRACK_PATTERN_OFFSETS
2738   else {
2739    DEBUG_r({
2740     const  regnode *nop = NEXTOPER( convert );
2741     mjd_offset= Node_Offset((nop));
2742     mjd_nodelen= Node_Length((nop));
2743    });
2744   }
2745   DEBUG_OPTIMISE_r(
2746    PerlIO_printf(Perl_debug_log,
2747     "%*sMJD offset:%"UVuf" MJD length:%"UVuf"\n",
2748     (int)depth * 2 + 2, "",
2749     (UV)mjd_offset, (UV)mjd_nodelen)
2750   );
2751 #endif
2752   /* But first we check to see if there is a common prefix we can
2753   split out as an EXACT and put in front of the TRIE node.  */
2754   trie->startstate= 1;
2755   if ( trie->bitmap && !widecharmap && !trie->jump  ) {
2756    U32 state;
2757    for ( state = 1 ; state < trie->statecount-1 ; state++ ) {
2758     U32 ofs = 0;
2759     I32 idx = -1;
2760     U32 count = 0;
2761     const U32 base = trie->states[ state ].trans.base;
2762
2763     if ( trie->states[state].wordnum )
2764       count = 1;
2765
2766     for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
2767      if ( ( base + ofs >= trie->uniquecharcount ) &&
2768       ( base + ofs - trie->uniquecharcount < trie->lasttrans ) &&
2769       trie->trans[ base + ofs - trie->uniquecharcount ].check == state )
2770      {
2771       if ( ++count > 1 ) {
2772        SV **tmp = av_fetch( revcharmap, ofs, 0);
2773        const U8 *ch = (U8*)SvPV_nolen_const( *tmp );
2774        if ( state == 1 ) break;
2775        if ( count == 2 ) {
2776         Zero(trie->bitmap, ANYOF_BITMAP_SIZE, char);
2777         DEBUG_OPTIMISE_r(
2778          PerlIO_printf(Perl_debug_log,
2779           "%*sNew Start State=%"UVuf" Class: [",
2780           (int)depth * 2 + 2, "",
2781           (UV)state));
2782         if (idx >= 0) {
2783          SV ** const tmp = av_fetch( revcharmap, idx, 0);
2784          const U8 * const ch = (U8*)SvPV_nolen_const( *tmp );
2785
2786          TRIE_BITMAP_SET(trie,*ch);
2787          if ( folder )
2788           TRIE_BITMAP_SET(trie, folder[ *ch ]);
2789          DEBUG_OPTIMISE_r(
2790           PerlIO_printf(Perl_debug_log, "%s", (char*)ch)
2791          );
2792         }
2793        }
2794        TRIE_BITMAP_SET(trie,*ch);
2795        if ( folder )
2796         TRIE_BITMAP_SET(trie,folder[ *ch ]);
2797        DEBUG_OPTIMISE_r(PerlIO_printf( Perl_debug_log,"%s", ch));
2798       }
2799       idx = ofs;
2800      }
2801     }
2802     if ( count == 1 ) {
2803      SV **tmp = av_fetch( revcharmap, idx, 0);
2804      STRLEN len;
2805      char *ch = SvPV( *tmp, len );
2806      DEBUG_OPTIMISE_r({
2807       SV *sv=sv_newmortal();
2808       PerlIO_printf( Perl_debug_log,
2809        "%*sPrefix State: %"UVuf" Idx:%"UVuf" Char='%s'\n",
2810        (int)depth * 2 + 2, "",
2811        (UV)state, (UV)idx,
2812        pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), 6,
2813         PL_colors[0], PL_colors[1],
2814         (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
2815         PERL_PV_ESCAPE_FIRSTCHAR
2816        )
2817       );
2818      });
2819      if ( state==1 ) {
2820       OP( convert ) = nodetype;
2821       str=STRING(convert);
2822       STR_LEN(convert)=0;
2823      }
2824      STR_LEN(convert) += len;
2825      while (len--)
2826       *str++ = *ch++;
2827     } else {
2828 #ifdef DEBUGGING
2829      if (state>1)
2830       DEBUG_OPTIMISE_r(PerlIO_printf( Perl_debug_log,"]\n"));
2831 #endif
2832      break;
2833     }
2834    }
2835    trie->prefixlen = (state-1);
2836    if (str) {
2837     regnode *n = convert+NODE_SZ_STR(convert);
2838     NEXT_OFF(convert) = NODE_SZ_STR(convert);
2839     trie->startstate = state;
2840     trie->minlen -= (state - 1);
2841     trie->maxlen -= (state - 1);
2842 #ifdef DEBUGGING
2843    /* At least the UNICOS C compiler choked on this
2844     * being argument to DEBUG_r(), so let's just have
2845     * it right here. */
2846    if (
2847 #ifdef PERL_EXT_RE_BUILD
2848     1
2849 #else
2850     DEBUG_r_TEST
2851 #endif
2852     ) {
2853     regnode *fix = convert;
2854     U32 word = trie->wordcount;
2855     mjd_nodelen++;
2856     Set_Node_Offset_Length(convert, mjd_offset, state - 1);
2857     while( ++fix < n ) {
2858      Set_Node_Offset_Length(fix, 0, 0);
2859     }
2860     while (word--) {
2861      SV ** const tmp = av_fetch( trie_words, word, 0 );
2862      if (tmp) {
2863       if ( STR_LEN(convert) <= SvCUR(*tmp) )
2864        sv_chop(*tmp, SvPV_nolen(*tmp) + STR_LEN(convert));
2865       else
2866        sv_chop(*tmp, SvPV_nolen(*tmp) + SvCUR(*tmp));
2867      }
2868     }
2869    }
2870 #endif
2871     if (trie->maxlen) {
2872      convert = n;
2873     } else {
2874      NEXT_OFF(convert) = (U16)(tail - convert);
2875      DEBUG_r(optimize= n);
2876     }
2877    }
2878   }
2879   if (!jumper)
2880    jumper = last;
2881   if ( trie->maxlen ) {
2882    NEXT_OFF( convert ) = (U16)(tail - convert);
2883    ARG_SET( convert, data_slot );
2884    /* Store the offset to the first unabsorbed branch in
2885    jump[0], which is otherwise unused by the jump logic.
2886    We use this when dumping a trie and during optimisation. */
2887    if (trie->jump)
2888     trie->jump[0] = (U16)(nextbranch - convert);
2889
2890    /* If the start state is not accepting (meaning there is no empty string/NOTHING)
2891    *   and there is a bitmap
2892    *   and the first "jump target" node we found leaves enough room
2893    * then convert the TRIE node into a TRIEC node, with the bitmap
2894    * embedded inline in the opcode - this is hypothetically faster.
2895    */
2896    if ( !trie->states[trie->startstate].wordnum
2897     && trie->bitmap
2898     && ( (char *)jumper - (char *)convert) >= (int)sizeof(struct regnode_charclass) )
2899    {
2900     OP( convert ) = TRIEC;
2901     Copy(trie->bitmap, ((struct regnode_charclass *)convert)->bitmap, ANYOF_BITMAP_SIZE, char);
2902     PerlMemShared_free(trie->bitmap);
2903     trie->bitmap= NULL;
2904    } else
2905     OP( convert ) = TRIE;
2906
2907    /* store the type in the flags */
2908    convert->flags = nodetype;
2909    DEBUG_r({
2910    optimize = convert
2911      + NODE_STEP_REGNODE
2912      + regarglen[ OP( convert ) ];
2913    });
2914    /* XXX We really should free up the resource in trie now,
2915     as we won't use them - (which resources?) dmq */
2916   }
2917   /* needed for dumping*/
2918   DEBUG_r(if (optimize) {
2919    regnode *opt = convert;
2920
2921    while ( ++opt < optimize) {
2922     Set_Node_Offset_Length(opt,0,0);
2923    }
2924    /*
2925     Try to clean up some of the debris left after the
2926     optimisation.
2927    */
2928    while( optimize < jumper ) {
2929     mjd_nodelen += Node_Length((optimize));
2930     OP( optimize ) = OPTIMIZED;
2931     Set_Node_Offset_Length(optimize,0,0);
2932     optimize++;
2933    }
2934    Set_Node_Offset_Length(convert,mjd_offset,mjd_nodelen);
2935   });
2936  } /* end node insert */
2937  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, convert);
2938
2939  /*  Finish populating the prev field of the wordinfo array.  Walk back
2940  *  from each accept state until we find another accept state, and if
2941  *  so, point the first word's .prev field at the second word. If the
2942  *  second already has a .prev field set, stop now. This will be the
2943  *  case either if we've already processed that word's accept state,
2944  *  or that state had multiple words, and the overspill words were
2945  *  already linked up earlier.
2946  */
2947  {
2948   U16 word;
2949   U32 state;
2950   U16 prev;
2951
2952   for (word=1; word <= trie->wordcount; word++) {
2953    prev = 0;
2954    if (trie->wordinfo[word].prev)
2955     continue;
2956    state = trie->wordinfo[word].accept;
2957    while (state) {
2958     state = prev_states[state];
2959     if (!state)
2960      break;
2961     prev = trie->states[state].wordnum;
2962     if (prev)
2963      break;
2964    }
2965    trie->wordinfo[word].prev = prev;
2966   }
2967   Safefree(prev_states);
2968  }
2969
2970
2971  /* and now dump out the compressed format */
2972  DEBUG_TRIE_COMPILE_r(dump_trie(trie, widecharmap, revcharmap, depth+1));
2973
2974  RExC_rxi->data->data[ data_slot + 1 ] = (void*)widecharmap;
2975 #ifdef DEBUGGING
2976  RExC_rxi->data->data[ data_slot + TRIE_WORDS_OFFSET ] = (void*)trie_words;
2977  RExC_rxi->data->data[ data_slot + 3 ] = (void*)revcharmap;
2978 #else
2979  SvREFCNT_dec_NN(revcharmap);
2980 #endif
2981  return trie->jump
2982   ? MADE_JUMP_TRIE
2983   : trie->startstate>1
2984    ? MADE_EXACT_TRIE
2985    : MADE_TRIE;
2986 }
2987
2988 STATIC void
2989 S_make_trie_failtable(pTHX_ RExC_state_t *pRExC_state, regnode *source,  regnode *stclass, U32 depth)
2990 {
2991 /* The Trie is constructed and compressed now so we can build a fail array if
2992  * it's needed
2993
2994    This is basically the Aho-Corasick algorithm. Its from exercise 3.31 and
2995    3.32 in the
2996    "Red Dragon" -- Compilers, principles, techniques, and tools. Aho, Sethi,
2997    Ullman 1985/88
2998    ISBN 0-201-10088-6
2999
3000    We find the fail state for each state in the trie, this state is the longest
3001    proper suffix of the current state's 'word' that is also a proper prefix of
3002    another word in our trie. State 1 represents the word '' and is thus the
3003    default fail state. This allows the DFA not to have to restart after its
3004    tried and failed a word at a given point, it simply continues as though it
3005    had been matching the other word in the first place.
3006    Consider
3007  'abcdgu'=~/abcdefg|cdgu/
3008    When we get to 'd' we are still matching the first word, we would encounter
3009    'g' which would fail, which would bring us to the state representing 'd' in
3010    the second word where we would try 'g' and succeed, proceeding to match
3011    'cdgu'.
3012  */
3013  /* add a fail transition */
3014  const U32 trie_offset = ARG(source);
3015  reg_trie_data *trie=(reg_trie_data *)RExC_rxi->data->data[trie_offset];
3016  U32 *q;
3017  const U32 ucharcount = trie->uniquecharcount;
3018  const U32 numstates = trie->statecount;
3019  const U32 ubound = trie->lasttrans + ucharcount;
3020  U32 q_read = 0;
3021  U32 q_write = 0;
3022  U32 charid;
3023  U32 base = trie->states[ 1 ].trans.base;
3024  U32 *fail;
3025  reg_ac_data *aho;
3026  const U32 data_slot = add_data( pRExC_state, STR_WITH_LEN("T"));
3027  GET_RE_DEBUG_FLAGS_DECL;
3028
3029  PERL_ARGS_ASSERT_MAKE_TRIE_FAILTABLE;
3030 #ifndef DEBUGGING
3031  PERL_UNUSED_ARG(depth);
3032 #endif
3033
3034
3035  ARG_SET( stclass, data_slot );
3036  aho = (reg_ac_data *) PerlMemShared_calloc( 1, sizeof(reg_ac_data) );
3037  RExC_rxi->data->data[ data_slot ] = (void*)aho;
3038  aho->trie=trie_offset;
3039  aho->states=(reg_trie_state *)PerlMemShared_malloc( numstates * sizeof(reg_trie_state) );
3040  Copy( trie->states, aho->states, numstates, reg_trie_state );
3041  Newxz( q, numstates, U32);
3042  aho->fail = (U32 *) PerlMemShared_calloc( numstates, sizeof(U32) );
3043  aho->refcount = 1;
3044  fail = aho->fail;
3045  /* initialize fail[0..1] to be 1 so that we always have
3046  a valid final fail state */
3047  fail[ 0 ] = fail[ 1 ] = 1;
3048
3049  for ( charid = 0; charid < ucharcount ; charid++ ) {
3050   const U32 newstate = TRIE_TRANS_STATE( 1, base, ucharcount, charid, 0 );
3051   if ( newstate ) {
3052    q[ q_write ] = newstate;
3053    /* set to point at the root */
3054    fail[ q[ q_write++ ] ]=1;
3055   }
3056  }
3057  while ( q_read < q_write) {
3058   const U32 cur = q[ q_read++ % numstates ];
3059   base = trie->states[ cur ].trans.base;
3060
3061   for ( charid = 0 ; charid < ucharcount ; charid++ ) {
3062    const U32 ch_state = TRIE_TRANS_STATE( cur, base, ucharcount, charid, 1 );
3063    if (ch_state) {
3064     U32 fail_state = cur;
3065     U32 fail_base;
3066     do {
3067      fail_state = fail[ fail_state ];
3068      fail_base = aho->states[ fail_state ].trans.base;
3069     } while ( !TRIE_TRANS_STATE( fail_state, fail_base, ucharcount, charid, 1 ) );
3070
3071     fail_state = TRIE_TRANS_STATE( fail_state, fail_base, ucharcount, charid, 1 );
3072     fail[ ch_state ] = fail_state;
3073     if ( !aho->states[ ch_state ].wordnum && aho->states[ fail_state ].wordnum )
3074     {
3075       aho->states[ ch_state ].wordnum =  aho->states[ fail_state ].wordnum;
3076     }
3077     q[ q_write++ % numstates] = ch_state;
3078    }
3079   }
3080  }
3081  /* restore fail[0..1] to 0 so that we "fall out" of the AC loop
3082  when we fail in state 1, this allows us to use the
3083  charclass scan to find a valid start char. This is based on the principle
3084  that theres a good chance the string being searched contains lots of stuff
3085  that cant be a start char.
3086  */
3087  fail[ 0 ] = fail[ 1 ] = 0;
3088  DEBUG_TRIE_COMPILE_r({
3089   PerlIO_printf(Perl_debug_log,
3090      "%*sStclass Failtable (%"UVuf" states): 0",
3091      (int)(depth * 2), "", (UV)numstates
3092   );
3093   for( q_read=1; q_read<numstates; q_read++ ) {
3094    PerlIO_printf(Perl_debug_log, ", %"UVuf, (UV)fail[q_read]);
3095   }
3096   PerlIO_printf(Perl_debug_log, "\n");
3097  });
3098  Safefree(q);
3099  /*RExC_seen |= REG_TRIEDFA_SEEN;*/
3100 }
3101
3102
3103 #define DEBUG_PEEP(str,scan,depth) \
3104  DEBUG_OPTIMISE_r({if (scan){ \
3105  SV * const mysv=sv_newmortal(); \
3106  regnode *Next = regnext(scan); \
3107  regprop(RExC_rx, mysv, scan, NULL); \
3108  PerlIO_printf(Perl_debug_log, "%*s" str ">%3d: %s (%d)\n", \
3109  (int)depth*2, "", REG_NODE_NUM(scan), SvPV_nolen_const(mysv),\
3110  Next ? (REG_NODE_NUM(Next)) : 0 ); \
3111    }});
3112
3113
3114 /* The below joins as many adjacent EXACTish nodes as possible into a single
3115  * one.  The regop may be changed if the node(s) contain certain sequences that
3116  * require special handling.  The joining is only done if:
3117  * 1) there is room in the current conglomerated node to entirely contain the
3118  *    next one.
3119  * 2) they are the exact same node type
3120  *
3121  * The adjacent nodes actually may be separated by NOTHING-kind nodes, and
3122  * these get optimized out
3123  *
3124  * If a node is to match under /i (folded), the number of characters it matches
3125  * can be different than its character length if it contains a multi-character
3126  * fold.  *min_subtract is set to the total delta number of characters of the
3127  * input nodes.
3128  *
3129  * And *unfolded_multi_char is set to indicate whether or not the node contains
3130  * an unfolded multi-char fold.  This happens when whether the fold is valid or
3131  * not won't be known until runtime; namely for EXACTF nodes that contain LATIN
3132  * SMALL LETTER SHARP S, as only if the target string being matched against
3133  * turns out to be UTF-8 is that fold valid; and also for EXACTFL nodes whose
3134  * folding rules depend on the locale in force at runtime.  (Multi-char folds
3135  * whose components are all above the Latin1 range are not run-time locale
3136  * dependent, and have already been folded by the time this function is
3137  * called.)
3138  *
3139  * This is as good a place as any to discuss the design of handling these
3140  * multi-character fold sequences.  It's been wrong in Perl for a very long
3141  * time.  There are three code points in Unicode whose multi-character folds
3142  * were long ago discovered to mess things up.  The previous designs for
3143  * dealing with these involved assigning a special node for them.  This
3144  * approach doesn't always work, as evidenced by this example:
3145  *      "\xDFs" =~ /s\xDF/ui    # Used to fail before these patches
3146  * Both sides fold to "sss", but if the pattern is parsed to create a node that
3147  * would match just the \xDF, it won't be able to handle the case where a
3148  * successful match would have to cross the node's boundary.  The new approach
3149  * that hopefully generally solves the problem generates an EXACTFU_SS node
3150  * that is "sss" in this case.
3151  *
3152  * It turns out that there are problems with all multi-character folds, and not
3153  * just these three.  Now the code is general, for all such cases.  The
3154  * approach taken is:
3155  * 1)   This routine examines each EXACTFish node that could contain multi-
3156  *      character folded sequences.  Since a single character can fold into
3157  *      such a sequence, the minimum match length for this node is less than
3158  *      the number of characters in the node.  This routine returns in
3159  *      *min_subtract how many characters to subtract from the the actual
3160  *      length of the string to get a real minimum match length; it is 0 if
3161  *      there are no multi-char foldeds.  This delta is used by the caller to
3162  *      adjust the min length of the match, and the delta between min and max,
3163  *      so that the optimizer doesn't reject these possibilities based on size
3164  *      constraints.
3165  * 2)   For the sequence involving the Sharp s (\xDF), the node type EXACTFU_SS
3166  *      is used for an EXACTFU node that contains at least one "ss" sequence in
3167  *      it.  For non-UTF-8 patterns and strings, this is the only case where
3168  *      there is a possible fold length change.  That means that a regular
3169  *      EXACTFU node without UTF-8 involvement doesn't have to concern itself
3170  *      with length changes, and so can be processed faster.  regexec.c takes
3171  *      advantage of this.  Generally, an EXACTFish node that is in UTF-8 is
3172  *      pre-folded by regcomp.c (except EXACTFL, some of whose folds aren't
3173  *      known until runtime).  This saves effort in regex matching.  However,
3174  *      the pre-folding isn't done for non-UTF8 patterns because the fold of
3175  *      the MICRO SIGN requires UTF-8, and we don't want to slow things down by
3176  *      forcing the pattern into UTF8 unless necessary.  Also what EXACTF (and,
3177  *      again, EXACTFL) nodes fold to isn't known until runtime.  The fold
3178  *      possibilities for the non-UTF8 patterns are quite simple, except for
3179  *      the sharp s.  All the ones that don't involve a UTF-8 target string are
3180  *      members of a fold-pair, and arrays are set up for all of them so that
3181  *      the other member of the pair can be found quickly.  Code elsewhere in
3182  *      this file makes sure that in EXACTFU nodes, the sharp s gets folded to
3183  *      'ss', even if the pattern isn't UTF-8.  This avoids the issues
3184  *      described in the next item.
3185  * 3)   A problem remains for unfolded multi-char folds. (These occur when the
3186  *      validity of the fold won't be known until runtime, and so must remain
3187  *      unfolded for now.  This happens for the sharp s in EXACTF and EXACTFA
3188  *      nodes when the pattern isn't in UTF-8.  (Note, BTW, that there cannot
3189  *      be an EXACTF node with a UTF-8 pattern.)  They also occur for various
3190  *      folds in EXACTFL nodes, regardless of the UTF-ness of the pattern.)
3191  *      The reason this is a problem is that the optimizer part of regexec.c
3192  *      (probably unwittingly, in Perl_regexec_flags()) makes an assumption
3193  *      that a character in the pattern corresponds to at most a single
3194  *      character in the target string.  (And I do mean character, and not byte
3195  *      here, unlike other parts of the documentation that have never been
3196  *      updated to account for multibyte Unicode.)  sharp s in EXACTF and
3197  *      EXACTFL nodes can match the two character string 'ss'; in EXACTFA nodes
3198  *      it can match "\x{17F}\x{17F}".  These, along with other ones in EXACTFL
3199  *      nodes, violate the assumption, and they are the only instances where it
3200  *      is violated.  I'm reluctant to try to change the assumption, as the
3201  *      code involved is impenetrable to me (khw), so instead the code here
3202  *      punts.  This routine examines EXACTFL nodes, and (when the pattern
3203  *      isn't UTF-8) EXACTF and EXACTFA for such unfolded folds, and returns a
3204  *      boolean indicating whether or not the node contains such a fold.  When
3205  *      it is true, the caller sets a flag that later causes the optimizer in
3206  *      this file to not set values for the floating and fixed string lengths,
3207  *      and thus avoids the optimizer code in regexec.c that makes the invalid
3208  *      assumption.  Thus, there is no optimization based on string lengths for
3209  *      EXACTFL nodes that contain these few folds, nor for non-UTF8-pattern
3210  *      EXACTF and EXACTFA nodes that contain the sharp s.  (The reason the
3211  *      assumption is wrong only in these cases is that all other non-UTF-8
3212  *      folds are 1-1; and, for UTF-8 patterns, we pre-fold all other folds to
3213  *      their expanded versions.  (Again, we can't prefold sharp s to 'ss' in
3214  *      EXACTF nodes because we don't know at compile time if it actually
3215  *      matches 'ss' or not.  For EXACTF nodes it will match iff the target
3216  *      string is in UTF-8.  This is in contrast to EXACTFU nodes, where it
3217  *      always matches; and EXACTFA where it never does.  In an EXACTFA node in
3218  *      a UTF-8 pattern, sharp s is folded to "\x{17F}\x{17F}, avoiding the
3219  *      problem; but in a non-UTF8 pattern, folding it to that above-Latin1
3220  *      string would require the pattern to be forced into UTF-8, the overhead
3221  *      of which we want to avoid.  Similarly the unfolded multi-char folds in
3222  *      EXACTFL nodes will match iff the locale at the time of match is a UTF-8
3223  *      locale.)
3224  *
3225  *      Similarly, the code that generates tries doesn't currently handle
3226  *      not-already-folded multi-char folds, and it looks like a pain to change
3227  *      that.  Therefore, trie generation of EXACTFA nodes with the sharp s
3228  *      doesn't work.  Instead, such an EXACTFA is turned into a new regnode,
3229  *      EXACTFA_NO_TRIE, which the trie code knows not to handle.  Most people
3230  *      using /iaa matching will be doing so almost entirely with ASCII
3231  *      strings, so this should rarely be encountered in practice */
3232
3233 #define JOIN_EXACT(scan,min_subtract,unfolded_multi_char, flags) \
3234  if (PL_regkind[OP(scan)] == EXACT) \
3235   join_exact(pRExC_state,(scan),(min_subtract),unfolded_multi_char, (flags),NULL,depth+1)
3236
3237 STATIC U32
3238 S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
3239     UV *min_subtract, bool *unfolded_multi_char,
3240     U32 flags,regnode *val, U32 depth)
3241 {
3242  /* Merge several consecutive EXACTish nodes into one. */
3243  regnode *n = regnext(scan);
3244  U32 stringok = 1;
3245  regnode *next = scan + NODE_SZ_STR(scan);
3246  U32 merged = 0;
3247  U32 stopnow = 0;
3248 #ifdef DEBUGGING
3249  regnode *stop = scan;
3250  GET_RE_DEBUG_FLAGS_DECL;
3251 #else
3252  PERL_UNUSED_ARG(depth);
3253 #endif
3254
3255  PERL_ARGS_ASSERT_JOIN_EXACT;
3256 #ifndef EXPERIMENTAL_INPLACESCAN
3257  PERL_UNUSED_ARG(flags);
3258  PERL_UNUSED_ARG(val);
3259 #endif
3260  DEBUG_PEEP("join",scan,depth);
3261
3262  /* Look through the subsequent nodes in the chain.  Skip NOTHING, merge
3263  * EXACT ones that are mergeable to the current one. */
3264  while (n
3265   && (PL_regkind[OP(n)] == NOTHING
3266    || (stringok && OP(n) == OP(scan)))
3267   && NEXT_OFF(n)
3268   && NEXT_OFF(scan) + NEXT_OFF(n) < I16_MAX)
3269  {
3270
3271   if (OP(n) == TAIL || n > next)
3272    stringok = 0;
3273   if (PL_regkind[OP(n)] == NOTHING) {
3274    DEBUG_PEEP("skip:",n,depth);
3275    NEXT_OFF(scan) += NEXT_OFF(n);
3276    next = n + NODE_STEP_REGNODE;
3277 #ifdef DEBUGGING
3278    if (stringok)
3279     stop = n;
3280 #endif
3281    n = regnext(n);
3282   }
3283   else if (stringok) {
3284    const unsigned int oldl = STR_LEN(scan);
3285    regnode * const nnext = regnext(n);
3286
3287    /* XXX I (khw) kind of doubt that this works on platforms (should
3288    * Perl ever run on one) where U8_MAX is above 255 because of lots
3289    * of other assumptions */
3290    /* Don't join if the sum can't fit into a single node */
3291    if (oldl + STR_LEN(n) > U8_MAX)
3292     break;
3293
3294    DEBUG_PEEP("merg",n,depth);
3295    merged++;
3296
3297    NEXT_OFF(scan) += NEXT_OFF(n);
3298    STR_LEN(scan) += STR_LEN(n);
3299    next = n + NODE_SZ_STR(n);
3300    /* Now we can overwrite *n : */
3301    Move(STRING(n), STRING(scan) + oldl, STR_LEN(n), char);
3302 #ifdef DEBUGGING
3303    stop = next - 1;
3304 #endif
3305    n = nnext;
3306    if (stopnow) break;
3307   }
3308
3309 #ifdef EXPERIMENTAL_INPLACESCAN
3310   if (flags && !NEXT_OFF(n)) {
3311    DEBUG_PEEP("atch", val, depth);
3312    if (reg_off_by_arg[OP(n)]) {
3313     ARG_SET(n, val - n);
3314    }
3315    else {
3316     NEXT_OFF(n) = val - n;
3317    }
3318    stopnow = 1;
3319   }
3320 #endif
3321  }
3322
3323  *min_subtract = 0;
3324  *unfolded_multi_char = FALSE;
3325
3326  /* Here, all the adjacent mergeable EXACTish nodes have been merged.  We
3327  * can now analyze for sequences of problematic code points.  (Prior to
3328  * this final joining, sequences could have been split over boundaries, and
3329  * hence missed).  The sequences only happen in folding, hence for any
3330  * non-EXACT EXACTish node */
3331  if (OP(scan) != EXACT) {
3332   U8* s0 = (U8*) STRING(scan);
3333   U8* s = s0;
3334   U8* s_end = s0 + STR_LEN(scan);
3335
3336   int total_count_delta = 0;  /* Total delta number of characters that
3337          multi-char folds expand to */
3338
3339   /* One pass is made over the node's string looking for all the
3340   * possibilities.  To avoid some tests in the loop, there are two main
3341   * cases, for UTF-8 patterns (which can't have EXACTF nodes) and
3342   * non-UTF-8 */
3343   if (UTF) {
3344    U8* folded = NULL;
3345
3346    if (OP(scan) == EXACTFL) {
3347     U8 *d;
3348
3349     /* An EXACTFL node would already have been changed to another
3350     * node type unless there is at least one character in it that
3351     * is problematic; likely a character whose fold definition
3352     * won't be known until runtime, and so has yet to be folded.
3353     * For all but the UTF-8 locale, folds are 1-1 in length, but
3354     * to handle the UTF-8 case, we need to create a temporary
3355     * folded copy using UTF-8 locale rules in order to analyze it.
3356     * This is because our macros that look to see if a sequence is
3357     * a multi-char fold assume everything is folded (otherwise the
3358     * tests in those macros would be too complicated and slow).
3359     * Note that here, the non-problematic folds will have already
3360     * been done, so we can just copy such characters.  We actually
3361     * don't completely fold the EXACTFL string.  We skip the
3362     * unfolded multi-char folds, as that would just create work
3363     * below to figure out the size they already are */
3364
3365     Newx(folded, UTF8_MAX_FOLD_CHAR_EXPAND * STR_LEN(scan) + 1, U8);
3366     d = folded;
3367     while (s < s_end) {
3368      STRLEN s_len = UTF8SKIP(s);
3369      if (! is_PROBLEMATIC_LOCALE_FOLD_utf8(s)) {
3370       Copy(s, d, s_len, U8);
3371       d += s_len;
3372      }
3373      else if (is_FOLDS_TO_MULTI_utf8(s)) {
3374       *unfolded_multi_char = TRUE;
3375       Copy(s, d, s_len, U8);
3376       d += s_len;
3377      }
3378      else if (isASCII(*s)) {
3379       *(d++) = toFOLD(*s);
3380      }
3381      else {
3382       STRLEN len;
3383       _to_utf8_fold_flags(s, d, &len, FOLD_FLAGS_FULL);
3384       d += len;
3385      }
3386      s += s_len;
3387     }
3388
3389     /* Point the remainder of the routine to look at our temporary
3390     * folded copy */
3391     s = folded;
3392     s_end = d;
3393    } /* End of creating folded copy of EXACTFL string */
3394
3395    /* Examine the string for a multi-character fold sequence.  UTF-8
3396    * patterns have all characters pre-folded by the time this code is
3397    * executed */
3398    while (s < s_end - 1) /* Can stop 1 before the end, as minimum
3399          length sequence we are looking for is 2 */
3400    {
3401     int count = 0;  /* How many characters in a multi-char fold */
3402     int len = is_MULTI_CHAR_FOLD_utf8_safe(s, s_end);
3403     if (! len) {    /* Not a multi-char fold: get next char */
3404      s += UTF8SKIP(s);
3405      continue;
3406     }
3407
3408     /* Nodes with 'ss' require special handling, except for
3409     * EXACTFA-ish for which there is no multi-char fold to this */
3410     if (len == 2 && *s == 's' && *(s+1) == 's'
3411      && OP(scan) != EXACTFA
3412      && OP(scan) != EXACTFA_NO_TRIE)
3413     {
3414      count = 2;
3415      if (OP(scan) != EXACTFL) {
3416       OP(scan) = EXACTFU_SS;
3417      }
3418      s += 2;
3419     }
3420     else { /* Here is a generic multi-char fold. */
3421      U8* multi_end  = s + len;
3422
3423      /* Count how many characters in it.  In the case of /aa, no
3424      * folds which contain ASCII code points are allowed, so
3425      * check for those, and skip if found. */
3426      if (OP(scan) != EXACTFA && OP(scan) != EXACTFA_NO_TRIE) {
3427       count = utf8_length(s, multi_end);
3428       s = multi_end;
3429      }
3430      else {
3431       while (s < multi_end) {
3432        if (isASCII(*s)) {
3433         s++;
3434         goto next_iteration;
3435        }
3436        else {
3437         s += UTF8SKIP(s);
3438        }
3439        count++;
3440       }
3441      }
3442     }
3443
3444     /* The delta is how long the sequence is minus 1 (1 is how long
3445     * the character that folds to the sequence is) */
3446     total_count_delta += count - 1;
3447    next_iteration: ;
3448    }
3449
3450    /* We created a temporary folded copy of the string in EXACTFL
3451    * nodes.  Therefore we need to be sure it doesn't go below zero,
3452    * as the real string could be shorter */
3453    if (OP(scan) == EXACTFL) {
3454     int total_chars = utf8_length((U8*) STRING(scan),
3455           (U8*) STRING(scan) + STR_LEN(scan));
3456     if (total_count_delta > total_chars) {
3457      total_count_delta = total_chars;
3458     }
3459    }
3460
3461    *min_subtract += total_count_delta;
3462    Safefree(folded);
3463   }
3464   else if (OP(scan) == EXACTFA) {
3465
3466    /* Non-UTF-8 pattern, EXACTFA node.  There can't be a multi-char
3467    * fold to the ASCII range (and there are no existing ones in the
3468    * upper latin1 range).  But, as outlined in the comments preceding
3469    * this function, we need to flag any occurrences of the sharp s.
3470    * This character forbids trie formation (because of added
3471    * complexity) */
3472    while (s < s_end) {
3473     if (*s == LATIN_SMALL_LETTER_SHARP_S) {
3474      OP(scan) = EXACTFA_NO_TRIE;
3475      *unfolded_multi_char = TRUE;
3476      break;
3477     }
3478     s++;
3479     continue;
3480    }
3481   }
3482   else {
3483
3484    /* Non-UTF-8 pattern, not EXACTFA node.  Look for the multi-char
3485    * folds that are all Latin1.  As explained in the comments
3486    * preceding this function, we look also for the sharp s in EXACTF
3487    * and EXACTFL nodes; it can be in the final position.  Otherwise
3488    * we can stop looking 1 byte earlier because have to find at least
3489    * two characters for a multi-fold */
3490    const U8* upper = (OP(scan) == EXACTF || OP(scan) == EXACTFL)
3491        ? s_end
3492        : s_end -1;
3493
3494    while (s < upper) {
3495     int len = is_MULTI_CHAR_FOLD_latin1_safe(s, s_end);
3496     if (! len) {    /* Not a multi-char fold. */
3497      if (*s == LATIN_SMALL_LETTER_SHARP_S
3498       && (OP(scan) == EXACTF || OP(scan) == EXACTFL))
3499      {
3500       *unfolded_multi_char = TRUE;
3501      }
3502      s++;
3503      continue;
3504     }
3505
3506     if (len == 2
3507      && isARG2_lower_or_UPPER_ARG1('s', *s)
3508      && isARG2_lower_or_UPPER_ARG1('s', *(s+1)))
3509     {
3510
3511      /* EXACTF nodes need to know that the minimum length
3512      * changed so that a sharp s in the string can match this
3513      * ss in the pattern, but they remain EXACTF nodes, as they
3514      * won't match this unless the target string is is UTF-8,
3515      * which we don't know until runtime.  EXACTFL nodes can't
3516      * transform into EXACTFU nodes */
3517      if (OP(scan) != EXACTF && OP(scan) != EXACTFL) {
3518       OP(scan) = EXACTFU_SS;
3519      }
3520     }
3521
3522     *min_subtract += len - 1;
3523     s += len;
3524    }
3525   }
3526  }
3527
3528 #ifdef DEBUGGING
3529  /* Allow dumping but overwriting the collection of skipped
3530  * ops and/or strings with fake optimized ops */
3531  n = scan + NODE_SZ_STR(scan);
3532  while (n <= stop) {
3533   OP(n) = OPTIMIZED;
3534   FLAGS(n) = 0;
3535   NEXT_OFF(n) = 0;
3536   n++;
3537  }
3538 #endif
3539  DEBUG_OPTIMISE_r(if (merged){DEBUG_PEEP("finl",scan,depth)});
3540  return stopnow;
3541 }
3542
3543 /* REx optimizer.  Converts nodes into quicker variants "in place".
3544    Finds fixed substrings.  */
3545
3546 /* Stops at toplevel WHILEM as well as at "last". At end *scanp is set
3547    to the position after last scanned or to NULL. */
3548
3549 #define INIT_AND_WITHP \
3550  assert(!and_withp); \
3551  Newx(and_withp,1, regnode_ssc); \
3552  SAVEFREEPV(and_withp)
3553
3554 /* this is a chain of data about sub patterns we are processing that
3555    need to be handled separately/specially in study_chunk. Its so
3556    we can simulate recursion without losing state.  */
3557 struct scan_frame;
3558 typedef struct scan_frame {
3559  regnode *last;  /* last node to process in this frame */
3560  regnode *next;  /* next node to process when last is reached */
3561  struct scan_frame *prev; /*previous frame*/
3562  U32 prev_recursed_depth;
3563  I32 stop; /* what stopparen do we use */
3564 } scan_frame;
3565
3566
3567 STATIC SSize_t
3568 S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
3569       SSize_t *minlenp, SSize_t *deltap,
3570       regnode *last,
3571       scan_data_t *data,
3572       I32 stopparen,
3573       U32 recursed_depth,
3574       regnode_ssc *and_withp,
3575       U32 flags, U32 depth)
3576       /* scanp: Start here (read-write). */
3577       /* deltap: Write maxlen-minlen here. */
3578       /* last: Stop before this one. */
3579       /* data: string data about the pattern */
3580       /* stopparen: treat close N as END */
3581       /* recursed: which subroutines have we recursed into */
3582       /* and_withp: Valid if flags & SCF_DO_STCLASS_OR */
3583 {
3584  dVAR;
3585  /* There must be at least this number of characters to match */
3586  SSize_t min = 0;
3587  I32 pars = 0, code;
3588  regnode *scan = *scanp, *next;
3589  SSize_t delta = 0;
3590  int is_inf = (flags & SCF_DO_SUBSTR) && (data->flags & SF_IS_INF);
3591  int is_inf_internal = 0;  /* The studied chunk is infinite */
3592  I32 is_par = OP(scan) == OPEN ? ARG(scan) : 0;
3593  scan_data_t data_fake;
3594  SV *re_trie_maxbuff = NULL;
3595  regnode *first_non_open = scan;
3596  SSize_t stopmin = SSize_t_MAX;
3597  scan_frame *frame = NULL;
3598  GET_RE_DEBUG_FLAGS_DECL;
3599
3600  PERL_ARGS_ASSERT_STUDY_CHUNK;
3601
3602 #ifdef DEBUGGING
3603  StructCopy(&zero_scan_data, &data_fake, scan_data_t);
3604 #endif
3605  if ( depth == 0 ) {
3606   while (first_non_open && OP(first_non_open) == OPEN)
3607    first_non_open=regnext(first_non_open);
3608  }
3609
3610
3611   fake_study_recurse:
3612  while ( scan && OP(scan) != END && scan < last ){
3613   UV min_subtract = 0;    /* How mmany chars to subtract from the minimum
3614         node length to get a real minimum (because
3615         the folded version may be shorter) */
3616   bool unfolded_multi_char = FALSE;
3617   /* Peephole optimizer: */
3618   DEBUG_OPTIMISE_MORE_r(
3619   {
3620    PerlIO_printf(Perl_debug_log,
3621     "%*sstudy_chunk stopparen=%ld depth=%lu recursed_depth=%lu ",
3622     ((int) depth*2), "", (long)stopparen,
3623     (unsigned long)depth, (unsigned long)recursed_depth);
3624    if (recursed_depth) {
3625     U32 i;
3626     U32 j;
3627     for ( j = 0 ; j < recursed_depth ; j++ ) {
3628      PerlIO_printf(Perl_debug_log,"[");
3629      for ( i = 0 ; i < (U32)RExC_npar ; i++ )
3630       PerlIO_printf(Perl_debug_log,"%d",
3631        PAREN_TEST(RExC_study_chunk_recursed +
3632          (j * RExC_study_chunk_recursed_bytes), i)
3633        ? 1 : 0
3634       );
3635      PerlIO_printf(Perl_debug_log,"]");
3636     }
3637    }
3638    PerlIO_printf(Perl_debug_log,"\n");
3639   }
3640   );
3641   DEBUG_STUDYDATA("Peep:", data, depth);
3642   DEBUG_PEEP("Peep", scan, depth);
3643
3644
3645   /* The reason we do this here we need to deal with things like /(?:f)(?:o)(?:o)/
3646   * which cant be dealt with by the normal EXACT parsing code, as each (?:..) is handled
3647   * by a different invocation of reg() -- Yves
3648   */
3649   JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
3650
3651   /* Follow the next-chain of the current node and optimize
3652   away all the NOTHINGs from it.  */
3653   if (OP(scan) != CURLYX) {
3654    const int max = (reg_off_by_arg[OP(scan)]
3655      ? I32_MAX
3656      /* I32 may be smaller than U16 on CRAYs! */
3657      : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
3658    int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan));
3659    int noff;
3660    regnode *n = scan;
3661
3662    /* Skip NOTHING and LONGJMP. */
3663    while ((n = regnext(n))
3664     && ((PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
3665      || ((OP(n) == LONGJMP) && (noff = ARG(n))))
3666     && off + noff < max)
3667     off += noff;
3668    if (reg_off_by_arg[OP(scan)])
3669     ARG(scan) = off;
3670    else
3671     NEXT_OFF(scan) = off;
3672   }
3673
3674
3675
3676   /* The principal pseudo-switch.  Cannot be a switch, since we
3677   look into several different things.  */
3678   if (OP(scan) == BRANCH || OP(scan) == BRANCHJ
3679     || OP(scan) == IFTHEN) {
3680    next = regnext(scan);
3681    code = OP(scan);
3682    /* demq: the op(next)==code check is to see if we have
3683    * "branch-branch" AFAICT */
3684
3685    if (OP(next) == code || code == IFTHEN) {
3686     /* NOTE - There is similar code to this block below for
3687     * handling TRIE nodes on a re-study.  If you change stuff here
3688     * check there too. */
3689     SSize_t max1 = 0, min1 = SSize_t_MAX, num = 0;
3690     regnode_ssc accum;
3691     regnode * const startbranch=scan;
3692
3693     if (flags & SCF_DO_SUBSTR) {
3694      /* Cannot merge strings after this. */
3695      scan_commit(pRExC_state, data, minlenp, is_inf);
3696     }
3697
3698     if (flags & SCF_DO_STCLASS)
3699      ssc_init_zero(pRExC_state, &accum);
3700
3701     while (OP(scan) == code) {
3702      SSize_t deltanext, minnext, fake;
3703      I32 f = 0;
3704      regnode_ssc this_class;
3705
3706      num++;
3707      data_fake.flags = 0;
3708      if (data) {
3709       data_fake.whilem_c = data->whilem_c;
3710       data_fake.last_closep = data->last_closep;
3711      }
3712      else
3713       data_fake.last_closep = &fake;
3714
3715      data_fake.pos_delta = delta;
3716      next = regnext(scan);
3717      scan = NEXTOPER(scan);
3718      if (code != BRANCH)
3719       scan = NEXTOPER(scan);
3720      if (flags & SCF_DO_STCLASS) {
3721       ssc_init(pRExC_state, &this_class);
3722       data_fake.start_class = &this_class;
3723       f = SCF_DO_STCLASS_AND;
3724      }
3725      if (flags & SCF_WHILEM_VISITED_POS)
3726       f |= SCF_WHILEM_VISITED_POS;
3727
3728      /* we suppose the run is continuous, last=next...*/
3729      minnext = study_chunk(pRExC_state, &scan, minlenp,
3730          &deltanext, next, &data_fake, stopparen,
3731          recursed_depth, NULL, f,depth+1);
3732      if (min1 > minnext)
3733       min1 = minnext;
3734      if (deltanext == SSize_t_MAX) {
3735       is_inf = is_inf_internal = 1;
3736       max1 = SSize_t_MAX;
3737      } else if (max1 < minnext + deltanext)
3738       max1 = minnext + deltanext;
3739      scan = next;
3740      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
3741       pars++;
3742      if (data_fake.flags & SCF_SEEN_ACCEPT) {
3743       if ( stopmin > minnext)
3744        stopmin = min + min1;
3745       flags &= ~SCF_DO_SUBSTR;
3746       if (data)
3747        data->flags |= SCF_SEEN_ACCEPT;
3748      }
3749      if (data) {
3750       if (data_fake.flags & SF_HAS_EVAL)
3751        data->flags |= SF_HAS_EVAL;
3752       data->whilem_c = data_fake.whilem_c;
3753      }
3754      if (flags & SCF_DO_STCLASS)
3755       ssc_or(pRExC_state, &accum, (regnode_charclass*)&this_class);
3756     }
3757     if (code == IFTHEN && num < 2) /* Empty ELSE branch */
3758      min1 = 0;
3759     if (flags & SCF_DO_SUBSTR) {
3760      data->pos_min += min1;
3761      if (data->pos_delta >= SSize_t_MAX - (max1 - min1))
3762       data->pos_delta = SSize_t_MAX;
3763      else
3764       data->pos_delta += max1 - min1;
3765      if (max1 != min1 || is_inf)
3766       data->longest = &(data->longest_float);
3767     }
3768     min += min1;
3769     if (delta == SSize_t_MAX
3770     || SSize_t_MAX - delta - (max1 - min1) < 0)
3771      delta = SSize_t_MAX;
3772     else
3773      delta += max1 - min1;
3774     if (flags & SCF_DO_STCLASS_OR) {
3775      ssc_or(pRExC_state, data->start_class, (regnode_charclass*) &accum);
3776      if (min1) {
3777       ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
3778       flags &= ~SCF_DO_STCLASS;
3779      }
3780     }
3781     else if (flags & SCF_DO_STCLASS_AND) {
3782      if (min1) {
3783       ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &accum);
3784       flags &= ~SCF_DO_STCLASS;
3785      }
3786      else {
3787       /* Switch to OR mode: cache the old value of
3788       * data->start_class */
3789       INIT_AND_WITHP;
3790       StructCopy(data->start_class, and_withp, regnode_ssc);
3791       flags &= ~SCF_DO_STCLASS_AND;
3792       StructCopy(&accum, data->start_class, regnode_ssc);
3793       flags |= SCF_DO_STCLASS_OR;
3794      }
3795     }
3796
3797     if (PERL_ENABLE_TRIE_OPTIMISATION &&
3798       OP( startbranch ) == BRANCH )
3799     {
3800     /* demq.
3801
3802     Assuming this was/is a branch we are dealing with: 'scan'
3803     now points at the item that follows the branch sequence,
3804     whatever it is. We now start at the beginning of the
3805     sequence and look for subsequences of
3806
3807     BRANCH->EXACT=>x1
3808     BRANCH->EXACT=>x2
3809     tail
3810
3811     which would be constructed from a pattern like
3812     /A|LIST|OF|WORDS/
3813
3814     If we can find such a subsequence we need to turn the first
3815     element into a trie and then add the subsequent branch exact
3816     strings to the trie.
3817
3818     We have two cases
3819
3820      1. patterns where the whole set of branches can be
3821       converted.
3822
3823      2. patterns where only a subset can be converted.
3824
3825     In case 1 we can replace the whole set with a single regop
3826     for the trie. In case 2 we need to keep the start and end
3827     branches so
3828
3829      'BRANCH EXACT; BRANCH EXACT; BRANCH X'
3830      becomes BRANCH TRIE; BRANCH X;
3831
3832     There is an additional case, that being where there is a
3833     common prefix, which gets split out into an EXACT like node
3834     preceding the TRIE node.
3835
3836     If x(1..n)==tail then we can do a simple trie, if not we make
3837     a "jump" trie, such that when we match the appropriate word
3838     we "jump" to the appropriate tail node. Essentially we turn
3839     a nested if into a case structure of sorts.
3840
3841     */
3842
3843      int made=0;
3844      if (!re_trie_maxbuff) {
3845       re_trie_maxbuff = get_sv(RE_TRIE_MAXBUF_NAME, 1);
3846       if (!SvIOK(re_trie_maxbuff))
3847        sv_setiv(re_trie_maxbuff, RE_TRIE_MAXBUF_INIT);
3848      }
3849      if ( SvIV(re_trie_maxbuff)>=0  ) {
3850       regnode *cur;
3851       regnode *first = (regnode *)NULL;
3852       regnode *last = (regnode *)NULL;
3853       regnode *tail = scan;
3854       U8 trietype = 0;
3855       U32 count=0;
3856
3857 #ifdef DEBUGGING
3858       SV * const mysv = sv_newmortal();   /* for dumping */
3859 #endif
3860       /* var tail is used because there may be a TAIL
3861       regop in the way. Ie, the exacts will point to the
3862       thing following the TAIL, but the last branch will
3863       point at the TAIL. So we advance tail. If we
3864       have nested (?:) we may have to move through several
3865       tails.
3866       */
3867
3868       while ( OP( tail ) == TAIL ) {
3869        /* this is the TAIL generated by (?:) */
3870        tail = regnext( tail );
3871       }
3872
3873
3874       DEBUG_TRIE_COMPILE_r({
3875        regprop(RExC_rx, mysv, tail, NULL);
3876        PerlIO_printf( Perl_debug_log, "%*s%s%s\n",
3877        (int)depth * 2 + 2, "",
3878        "Looking for TRIE'able sequences. Tail node is: ",
3879        SvPV_nolen_const( mysv )
3880        );
3881       });
3882
3883       /*
3884
3885        Step through the branches
3886         cur represents each branch,
3887         noper is the first thing to be matched as part
3888          of that branch
3889         noper_next is the regnext() of that node.
3890
3891        We normally handle a case like this
3892        /FOO[xyz]|BAR[pqr]/ via a "jump trie" but we also
3893        support building with NOJUMPTRIE, which restricts
3894        the trie logic to structures like /FOO|BAR/.
3895
3896        If noper is a trieable nodetype then the branch is
3897        a possible optimization target. If we are building
3898        under NOJUMPTRIE then we require that noper_next is
3899        the same as scan (our current position in the regex
3900        program).
3901
3902        Once we have two or more consecutive such branches
3903        we can create a trie of the EXACT's contents and
3904        stitch it in place into the program.
3905
3906        If the sequence represents all of the branches in
3907        the alternation we replace the entire thing with a
3908        single TRIE node.
3909
3910        Otherwise when it is a subsequence we need to
3911        stitch it in place and replace only the relevant
3912        branches. This means the first branch has to remain
3913        as it is used by the alternation logic, and its
3914        next pointer, and needs to be repointed at the item
3915        on the branch chain following the last branch we
3916        have optimized away.
3917
3918        This could be either a BRANCH, in which case the
3919        subsequence is internal, or it could be the item
3920        following the branch sequence in which case the
3921        subsequence is at the end (which does not
3922        necessarily mean the first node is the start of the
3923        alternation).
3924
3925        TRIE_TYPE(X) is a define which maps the optype to a
3926        trietype.
3927
3928         optype          |  trietype
3929         ----------------+-----------
3930         NOTHING         | NOTHING
3931         EXACT           | EXACT
3932         EXACTFU         | EXACTFU
3933         EXACTFU_SS      | EXACTFU
3934         EXACTFA         | EXACTFA
3935
3936
3937       */
3938 #define TRIE_TYPE(X) ( ( NOTHING == (X) ) ? NOTHING :   \
3939      ( EXACT == (X) )   ? EXACT :        \
3940      ( EXACTFU == (X) || EXACTFU_SS == (X) ) ? EXACTFU :        \
3941      ( EXACTFA == (X) ) ? EXACTFA :        \
3942      0 )
3943
3944       /* dont use tail as the end marker for this traverse */
3945       for ( cur = startbranch ; cur != scan ; cur = regnext( cur ) ) {
3946        regnode * const noper = NEXTOPER( cur );
3947        U8 noper_type = OP( noper );
3948        U8 noper_trietype = TRIE_TYPE( noper_type );
3949 #if defined(DEBUGGING) || defined(NOJUMPTRIE)
3950        regnode * const noper_next = regnext( noper );
3951        U8 noper_next_type = (noper_next && noper_next != tail) ? OP(noper_next) : 0;
3952        U8 noper_next_trietype = (noper_next && noper_next != tail) ? TRIE_TYPE( noper_next_type ) :0;
3953 #endif
3954
3955        DEBUG_TRIE_COMPILE_r({
3956         regprop(RExC_rx, mysv, cur, NULL);
3957         PerlIO_printf( Perl_debug_log, "%*s- %s (%d)",
3958         (int)depth * 2 + 2,"", SvPV_nolen_const( mysv ), REG_NODE_NUM(cur) );
3959
3960         regprop(RExC_rx, mysv, noper, NULL);
3961         PerlIO_printf( Perl_debug_log, " -> %s",
3962          SvPV_nolen_const(mysv));
3963
3964         if ( noper_next ) {
3965         regprop(RExC_rx, mysv, noper_next, NULL);
3966         PerlIO_printf( Perl_debug_log,"\t=> %s\t",
3967          SvPV_nolen_const(mysv));
3968         }
3969         PerlIO_printf( Perl_debug_log, "(First==%d,Last==%d,Cur==%d,tt==%s,nt==%s,nnt==%s)\n",
3970         REG_NODE_NUM(first), REG_NODE_NUM(last), REG_NODE_NUM(cur),
3971         PL_reg_name[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype]
3972         );
3973        });
3974
3975        /* Is noper a trieable nodetype that can be merged
3976        * with the current trie (if there is one)? */
3977        if ( noper_trietype
3978         &&
3979         (
3980           ( noper_trietype == NOTHING)
3981           || ( trietype == NOTHING )
3982           || ( trietype == noper_trietype )
3983         )
3984 #ifdef NOJUMPTRIE
3985         && noper_next == tail
3986 #endif
3987         && count < U16_MAX)
3988        {
3989         /* Handle mergable triable node Either we are
3990         * the first node in a new trieable sequence,
3991         * in which case we do some bookkeeping,
3992         * otherwise we update the end pointer. */
3993         if ( !first ) {
3994          first = cur;
3995          if ( noper_trietype == NOTHING ) {
3996 #if !defined(DEBUGGING) && !defined(NOJUMPTRIE)
3997           regnode * const noper_next = regnext( noper );
3998           U8 noper_next_type = (noper_next && noper_next!=tail) ? OP(noper_next) : 0;
3999           U8 noper_next_trietype = noper_next_type ? TRIE_TYPE( noper_next_type ) :0;
4000 #endif
4001
4002           if ( noper_next_trietype ) {
4003            trietype = noper_next_trietype;
4004           } else if (noper_next_type)  {
4005            /* a NOTHING regop is 1 regop wide.
4006            * We need at least two for a trie
4007            * so we can't merge this in */
4008            first = NULL;
4009           }
4010          } else {
4011           trietype = noper_trietype;
4012          }
4013         } else {
4014          if ( trietype == NOTHING )
4015           trietype = noper_trietype;
4016          last = cur;
4017         }
4018         if (first)
4019          count++;
4020        } /* end handle mergable triable node */
4021        else {
4022         /* handle unmergable node -
4023         * noper may either be a triable node which can
4024         * not be tried together with the current trie,
4025         * or a non triable node */
4026         if ( last ) {
4027          /* If last is set and trietype is not
4028          * NOTHING then we have found at least two
4029          * triable branch sequences in a row of a
4030          * similar trietype so we can turn them
4031          * into a trie. If/when we allow NOTHING to
4032          * start a trie sequence this condition
4033          * will be required, and it isn't expensive
4034          * so we leave it in for now. */
4035          if ( trietype && trietype != NOTHING )
4036           make_trie( pRExC_state,
4037             startbranch, first, cur, tail,
4038             count, trietype, depth+1 );
4039          last = NULL; /* note: we clear/update
4040              first, trietype etc below,
4041              so we dont do it here */
4042         }
4043         if ( noper_trietype
4044 #ifdef NOJUMPTRIE
4045          && noper_next == tail
4046 #endif
4047         ){
4048          /* noper is triable, so we can start a new
4049          * trie sequence */
4050          count = 1;
4051          first = cur;
4052          trietype = noper_trietype;
4053         } else if (first) {
4054          /* if we already saw a first but the
4055          * current node is not triable then we have
4056          * to reset the first information. */
4057          count = 0;
4058          first = NULL;
4059          trietype = 0;
4060         }
4061        } /* end handle unmergable node */
4062       } /* loop over branches */
4063       DEBUG_TRIE_COMPILE_r({
4064        regprop(RExC_rx, mysv, cur, NULL);
4065        PerlIO_printf( Perl_debug_log,
4066        "%*s- %s (%d) <SCAN FINISHED>\n",
4067        (int)depth * 2 + 2,
4068        "", SvPV_nolen_const( mysv ),REG_NODE_NUM(cur));
4069
4070       });
4071       if ( last && trietype ) {
4072        if ( trietype != NOTHING ) {
4073         /* the last branch of the sequence was part of
4074         * a trie, so we have to construct it here
4075         * outside of the loop */
4076         made= make_trie( pRExC_state, startbranch,
4077             first, scan, tail, count,
4078             trietype, depth+1 );
4079 #ifdef TRIE_STUDY_OPT
4080         if ( ((made == MADE_EXACT_TRIE &&
4081          startbranch == first)
4082          || ( first_non_open == first )) &&
4083          depth==0 ) {
4084          flags |= SCF_TRIE_RESTUDY;
4085          if ( startbranch == first
4086           && scan == tail )
4087          {
4088           RExC_seen &=~REG_TOP_LEVEL_BRANCHES_SEEN;
4089          }
4090         }
4091 #endif
4092        } else {
4093         /* at this point we know whatever we have is a
4094         * NOTHING sequence/branch AND if 'startbranch'
4095         * is 'first' then we can turn the whole thing
4096         * into a NOTHING
4097         */
4098         if ( startbranch == first ) {
4099          regnode *opt;
4100          /* the entire thing is a NOTHING sequence,
4101          * something like this: (?:|) So we can
4102          * turn it into a plain NOTHING op. */
4103          DEBUG_TRIE_COMPILE_r({
4104           regprop(RExC_rx, mysv, cur, NULL);
4105           PerlIO_printf( Perl_debug_log,
4106           "%*s- %s (%d) <NOTHING BRANCH SEQUENCE>\n", (int)depth * 2 + 2,
4107           "", SvPV_nolen_const( mysv ),REG_NODE_NUM(cur));
4108
4109          });
4110          OP(startbranch)= NOTHING;
4111          NEXT_OFF(startbranch)= tail - startbranch;
4112          for ( opt= startbranch + 1; opt < tail ; opt++ )
4113           OP(opt)= OPTIMIZED;
4114         }
4115        }
4116       } /* end if ( last) */
4117      } /* TRIE_MAXBUF is non zero */
4118
4119     } /* do trie */
4120
4121    }
4122    else if ( code == BRANCHJ ) {  /* single branch is optimized. */
4123     scan = NEXTOPER(NEXTOPER(scan));
4124    } else   /* single branch is optimized. */
4125     scan = NEXTOPER(scan);
4126    continue;
4127   } else if (OP(scan) == SUSPEND || OP(scan) == GOSUB || OP(scan) == GOSTART) {
4128    scan_frame *newframe = NULL;
4129    I32 paren;
4130    regnode *start;
4131    regnode *end;
4132    U32 my_recursed_depth= recursed_depth;
4133
4134    if (OP(scan) != SUSPEND) {
4135     /* set the pointer */
4136     if (OP(scan) == GOSUB) {
4137      paren = ARG(scan);
4138      RExC_recurse[ARG2L(scan)] = scan;
4139      start = RExC_open_parens[paren-1];
4140      end   = RExC_close_parens[paren-1];
4141     } else {
4142      paren = 0;
4143      start = RExC_rxi->program + 1;
4144      end   = RExC_opend;
4145     }
4146     if (!recursed_depth
4147      ||
4148      !PAREN_TEST(RExC_study_chunk_recursed + ((recursed_depth-1) * RExC_study_chunk_recursed_bytes), paren)
4149     ) {
4150      if (!recursed_depth) {
4151       Zero(RExC_study_chunk_recursed, RExC_study_chunk_recursed_bytes, U8);
4152      } else {
4153       Copy(RExC_study_chunk_recursed + ((recursed_depth-1) * RExC_study_chunk_recursed_bytes),
4154        RExC_study_chunk_recursed + (recursed_depth * RExC_study_chunk_recursed_bytes),
4155        RExC_study_chunk_recursed_bytes, U8);
4156      }
4157      /* we havent recursed into this paren yet, so recurse into it */
4158      DEBUG_STUDYDATA("set:", data,depth);
4159      PAREN_SET(RExC_study_chunk_recursed + (recursed_depth * RExC_study_chunk_recursed_bytes), paren);
4160      my_recursed_depth= recursed_depth + 1;
4161      Newx(newframe,1,scan_frame);
4162     } else {
4163      DEBUG_STUDYDATA("inf:", data,depth);
4164      /* some form of infinite recursion, assume infinite length
4165      * */
4166      if (flags & SCF_DO_SUBSTR) {
4167       scan_commit(pRExC_state, data, minlenp, is_inf);
4168       data->longest = &(data->longest_float);
4169      }
4170      is_inf = is_inf_internal = 1;
4171      if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
4172       ssc_anything(data->start_class);
4173      flags &= ~SCF_DO_STCLASS;
4174     }
4175    } else {
4176     Newx(newframe,1,scan_frame);
4177     paren = stopparen;
4178     start = scan+2;
4179     end = regnext(scan);
4180    }
4181    if (newframe) {
4182     assert(start);
4183     assert(end);
4184     SAVEFREEPV(newframe);
4185     newframe->next = regnext(scan);
4186     newframe->last = last;
4187     newframe->stop = stopparen;
4188     newframe->prev = frame;
4189     newframe->prev_recursed_depth = recursed_depth;
4190
4191     DEBUG_STUDYDATA("frame-new:",data,depth);
4192     DEBUG_PEEP("fnew", scan, depth);
4193
4194     frame = newframe;
4195     scan =  start;
4196     stopparen = paren;
4197     last = end;
4198     depth = depth + 1;
4199     recursed_depth= my_recursed_depth;
4200
4201     continue;
4202    }
4203   }
4204   else if (OP(scan) == EXACT) {
4205    SSize_t l = STR_LEN(scan);
4206    UV uc;
4207    if (UTF) {
4208     const U8 * const s = (U8*)STRING(scan);
4209     uc = utf8_to_uvchr_buf(s, s + l, NULL);
4210     l = utf8_length(s, s + l);
4211    } else {
4212     uc = *((U8*)STRING(scan));
4213    }
4214    min += l;
4215    if (flags & SCF_DO_SUBSTR) { /* Update longest substr. */
4216     /* The code below prefers earlier match for fixed
4217     offset, later match for variable offset.  */
4218     if (data->last_end == -1) { /* Update the start info. */
4219      data->last_start_min = data->pos_min;
4220      data->last_start_max = is_inf
4221       ? SSize_t_MAX : data->pos_min + data->pos_delta;
4222     }
4223     sv_catpvn(data->last_found, STRING(scan), STR_LEN(scan));
4224     if (UTF)
4225      SvUTF8_on(data->last_found);
4226     {
4227      SV * const sv = data->last_found;
4228      MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ?
4229       mg_find(sv, PERL_MAGIC_utf8) : NULL;
4230      if (mg && mg->mg_len >= 0)
4231       mg->mg_len += utf8_length((U8*)STRING(scan),
4232            (U8*)STRING(scan)+STR_LEN(scan));
4233     }
4234     data->last_end = data->pos_min + l;
4235     data->pos_min += l; /* As in the first entry. */
4236     data->flags &= ~SF_BEFORE_EOL;
4237    }
4238
4239    /* ANDing the code point leaves at most it, and not in locale, and
4240    * can't match null string */
4241    if (flags & SCF_DO_STCLASS_AND) {
4242     ssc_cp_and(data->start_class, uc);
4243     ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4244     ssc_clear_locale(data->start_class);
4245    }
4246    else if (flags & SCF_DO_STCLASS_OR) {
4247     ssc_add_cp(data->start_class, uc);
4248     ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
4249
4250     /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
4251     ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4252    }
4253    flags &= ~SCF_DO_STCLASS;
4254   }
4255   else if (PL_regkind[OP(scan)] == EXACT) { /* But OP != EXACT! */
4256    SSize_t l = STR_LEN(scan);
4257    UV uc = *((U8*)STRING(scan));
4258    SV* EXACTF_invlist = _new_invlist(4); /* Start out big enough for 2
4259              separate code points */
4260
4261    /* Search for fixed substrings supports EXACT only. */
4262    if (flags & SCF_DO_SUBSTR) {
4263     assert(data);
4264     scan_commit(pRExC_state, data, minlenp, is_inf);
4265    }
4266    if (UTF) {
4267     const U8 * const s = (U8 *)STRING(scan);
4268     uc = utf8_to_uvchr_buf(s, s + l, NULL);
4269     l = utf8_length(s, s + l);
4270    }
4271    if (unfolded_multi_char) {
4272     RExC_seen |= REG_UNFOLDED_MULTI_SEEN;
4273    }
4274    min += l - min_subtract;
4275    assert (min >= 0);
4276    delta += min_subtract;
4277    if (flags & SCF_DO_SUBSTR) {
4278     data->pos_min += l - min_subtract;
4279     if (data->pos_min < 0) {
4280      data->pos_min = 0;
4281     }
4282     data->pos_delta += min_subtract;
4283     if (min_subtract) {
4284      data->longest = &(data->longest_float);
4285     }
4286    }
4287    if (OP(scan) == EXACTFL) {
4288
4289     /* We don't know what the folds are; it could be anything. XXX
4290     * Actually, we only support UTF-8 encoding for code points
4291     * above Latin1, so we could know what those folds are. */
4292     EXACTF_invlist = _add_range_to_invlist(EXACTF_invlist,
4293              0,
4294              UV_MAX);
4295    }
4296    else {  /* Non-locale EXACTFish */
4297     EXACTF_invlist = add_cp_to_invlist(EXACTF_invlist, uc);
4298     if (flags & SCF_DO_STCLASS_AND) {
4299      ssc_clear_locale(data->start_class);
4300     }
4301     if (uc < 256) { /* We know what the Latin1 folds are ... */
4302      if (IS_IN_SOME_FOLD_L1(uc)) {   /* For instance, we
4303              know if anything folds
4304              with this */
4305       EXACTF_invlist = add_cp_to_invlist(EXACTF_invlist,
4306               PL_fold_latin1[uc]);
4307       if (OP(scan) != EXACTFA) { /* The folds below aren't
4308              legal under /iaa */
4309        if (isARG2_lower_or_UPPER_ARG1('s', uc)) {
4310         EXACTF_invlist
4311          = add_cp_to_invlist(EXACTF_invlist,
4312             LATIN_SMALL_LETTER_SHARP_S);
4313        }
4314        else if (uc == LATIN_SMALL_LETTER_SHARP_S) {
4315         EXACTF_invlist
4316          = add_cp_to_invlist(EXACTF_invlist, 's');
4317         EXACTF_invlist
4318          = add_cp_to_invlist(EXACTF_invlist, 'S');
4319        }
4320       }
4321
4322       /* We also know if there are above-Latin1 code points
4323       * that fold to this (none legal for ASCII and /iaa) */
4324       if ((! isASCII(uc) || OP(scan) != EXACTFA)
4325        && HAS_NONLATIN1_FOLD_CLOSURE(uc))
4326       {
4327        /* XXX We could know exactly what does fold to this
4328        * if the reverse folds are loaded, as currently in
4329        * S_regclass() */
4330        _invlist_union(EXACTF_invlist,
4331           PL_AboveLatin1,
4332           &EXACTF_invlist);
4333       }
4334      }
4335     }
4336     else {  /* Non-locale, above Latin1.  XXX We don't currently
4337       know what participates in folds with this, so have
4338       to assume anything could */
4339
4340      /* XXX We could know exactly what does fold to this if the
4341      * reverse folds are loaded, as currently in S_regclass().
4342      * But we do know that under /iaa nothing in the ASCII
4343      * range can participate */
4344      if (OP(scan) == EXACTFA) {
4345       _invlist_union_complement_2nd(EXACTF_invlist,
4346              PL_XPosix_ptrs[_CC_ASCII],
4347              &EXACTF_invlist);
4348      }
4349      else {
4350       EXACTF_invlist = _add_range_to_invlist(EXACTF_invlist,
4351                0, UV_MAX);
4352      }
4353     }
4354    }
4355    if (flags & SCF_DO_STCLASS_AND) {
4356     ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4357     ANYOF_POSIXL_ZERO(data->start_class);
4358     ssc_intersection(data->start_class, EXACTF_invlist, FALSE);
4359    }
4360    else if (flags & SCF_DO_STCLASS_OR) {
4361     ssc_union(data->start_class, EXACTF_invlist, FALSE);
4362     ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
4363
4364     /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
4365     ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4366    }
4367    flags &= ~SCF_DO_STCLASS;
4368    SvREFCNT_dec(EXACTF_invlist);
4369   }
4370   else if (REGNODE_VARIES(OP(scan))) {
4371    SSize_t mincount, maxcount, minnext, deltanext, pos_before = 0;
4372    I32 fl = 0, f = flags;
4373    regnode * const oscan = scan;
4374    regnode_ssc this_class;
4375    regnode_ssc *oclass = NULL;
4376    I32 next_is_eval = 0;
4377
4378    switch (PL_regkind[OP(scan)]) {
4379    case WHILEM:  /* End of (?:...)* . */
4380     scan = NEXTOPER(scan);
4381     goto finish;
4382    case PLUS:
4383     if (flags & (SCF_DO_SUBSTR | SCF_DO_STCLASS)) {
4384      next = NEXTOPER(scan);
4385      if (OP(next) == EXACT || (flags & SCF_DO_STCLASS)) {
4386       mincount = 1;
4387       maxcount = REG_INFTY;
4388       next = regnext(scan);
4389       scan = NEXTOPER(scan);
4390       goto do_curly;
4391      }
4392     }
4393     if (flags & SCF_DO_SUBSTR)
4394      data->pos_min++;
4395     min++;
4396     /* Fall through. */
4397    case STAR:
4398     if (flags & SCF_DO_STCLASS) {
4399      mincount = 0;
4400      maxcount = REG_INFTY;
4401      next = regnext(scan);
4402      scan = NEXTOPER(scan);
4403      goto do_curly;
4404     }
4405     if (flags & SCF_DO_SUBSTR) {
4406      scan_commit(pRExC_state, data, minlenp, is_inf);
4407      /* Cannot extend fixed substrings */
4408      data->longest = &(data->longest_float);
4409     }
4410     is_inf = is_inf_internal = 1;
4411     scan = regnext(scan);
4412     goto optimize_curly_tail;
4413    case CURLY:
4414     if (stopparen>0 && (OP(scan)==CURLYN || OP(scan)==CURLYM)
4415      && (scan->flags == stopparen))
4416     {
4417      mincount = 1;
4418      maxcount = 1;
4419     } else {
4420      mincount = ARG1(scan);
4421      maxcount = ARG2(scan);
4422     }
4423     next = regnext(scan);
4424     if (OP(scan) == CURLYX) {
4425      I32 lp = (data ? *(data->last_closep) : 0);
4426      scan->flags = ((lp <= (I32)U8_MAX) ? (U8)lp : U8_MAX);
4427     }
4428     scan = NEXTOPER(scan) + EXTRA_STEP_2ARGS;
4429     next_is_eval = (OP(scan) == EVAL);
4430    do_curly:
4431     if (flags & SCF_DO_SUBSTR) {
4432      if (mincount == 0)
4433       scan_commit(pRExC_state, data, minlenp, is_inf);
4434      /* Cannot extend fixed substrings */
4435      pos_before = data->pos_min;
4436     }
4437     if (data) {
4438      fl = data->flags;
4439      data->flags &= ~(SF_HAS_PAR|SF_IN_PAR|SF_HAS_EVAL);
4440      if (is_inf)
4441       data->flags |= SF_IS_INF;
4442     }
4443     if (flags & SCF_DO_STCLASS) {
4444      ssc_init(pRExC_state, &this_class);
4445      oclass = data->start_class;
4446      data->start_class = &this_class;
4447      f |= SCF_DO_STCLASS_AND;
4448      f &= ~SCF_DO_STCLASS_OR;
4449     }
4450     /* Exclude from super-linear cache processing any {n,m}
4451     regops for which the combination of input pos and regex
4452     pos is not enough information to determine if a match
4453     will be possible.
4454
4455     For example, in the regex /foo(bar\s*){4,8}baz/ with the
4456     regex pos at the \s*, the prospects for a match depend not
4457     only on the input position but also on how many (bar\s*)
4458     repeats into the {4,8} we are. */
4459    if ((mincount > 1) || (maxcount > 1 && maxcount != REG_INFTY))
4460      f &= ~SCF_WHILEM_VISITED_POS;
4461
4462     /* This will finish on WHILEM, setting scan, or on NULL: */
4463     minnext = study_chunk(pRExC_state, &scan, minlenp, &deltanext,
4464         last, data, stopparen, recursed_depth, NULL,
4465         (mincount == 0
4466         ? (f & ~SCF_DO_SUBSTR)
4467         : f)
4468         ,depth+1);
4469
4470     if (flags & SCF_DO_STCLASS)
4471      data->start_class = oclass;
4472     if (mincount == 0 || minnext == 0) {
4473      if (flags & SCF_DO_STCLASS_OR) {
4474       ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &this_class);
4475      }
4476      else if (flags & SCF_DO_STCLASS_AND) {
4477       /* Switch to OR mode: cache the old value of
4478       * data->start_class */
4479       INIT_AND_WITHP;
4480       StructCopy(data->start_class, and_withp, regnode_ssc);
4481       flags &= ~SCF_DO_STCLASS_AND;
4482       StructCopy(&this_class, data->start_class, regnode_ssc);
4483       flags |= SCF_DO_STCLASS_OR;
4484       ANYOF_FLAGS(data->start_class) |= ANYOF_EMPTY_STRING;
4485      }
4486     } else {  /* Non-zero len */
4487      if (flags & SCF_DO_STCLASS_OR) {
4488       ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &this_class);
4489       ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
4490      }
4491      else if (flags & SCF_DO_STCLASS_AND)
4492       ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &this_class);
4493      flags &= ~SCF_DO_STCLASS;
4494     }
4495     if (!scan)   /* It was not CURLYX, but CURLY. */
4496      scan = next;
4497     if (!(flags & SCF_TRIE_DOING_RESTUDY)
4498      /* ? quantifier ok, except for (?{ ... }) */
4499      && (next_is_eval || !(mincount == 0 && maxcount == 1))
4500      && (minnext == 0) && (deltanext == 0)
4501      && data && !(data->flags & (SF_HAS_PAR|SF_IN_PAR))
4502      && maxcount <= REG_INFTY/3) /* Complement check for big
4503             count */
4504     {
4505      /* Fatal warnings may leak the regexp without this: */
4506      SAVEFREESV(RExC_rx_sv);
4507      ckWARNreg(RExC_parse,
4508        "Quantifier unexpected on zero-length expression");
4509      (void)ReREFCNT_inc(RExC_rx_sv);
4510     }
4511
4512     min += minnext * mincount;
4513     is_inf_internal |= deltanext == SSize_t_MAX
4514       || (maxcount == REG_INFTY && minnext + deltanext > 0);
4515     is_inf |= is_inf_internal;
4516     if (is_inf) {
4517      delta = SSize_t_MAX;
4518     } else {
4519      delta += (minnext + deltanext) * maxcount
4520        - minnext * mincount;
4521     }
4522     /* Try powerful optimization CURLYX => CURLYN. */
4523     if (  OP(oscan) == CURLYX && data
4524      && data->flags & SF_IN_PAR
4525      && !(data->flags & SF_HAS_EVAL)
4526      && !deltanext && minnext == 1 ) {
4527      /* Try to optimize to CURLYN.  */
4528      regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS;
4529      regnode * const nxt1 = nxt;
4530 #ifdef DEBUGGING
4531      regnode *nxt2;
4532 #endif
4533
4534      /* Skip open. */
4535      nxt = regnext(nxt);
4536      if (!REGNODE_SIMPLE(OP(nxt))
4537       && !(PL_regkind[OP(nxt)] == EXACT
4538        && STR_LEN(nxt) == 1))
4539       goto nogo;
4540 #ifdef DEBUGGING
4541      nxt2 = nxt;
4542 #endif
4543      nxt = regnext(nxt);
4544      if (OP(nxt) != CLOSE)
4545       goto nogo;
4546      if (RExC_open_parens) {
4547       RExC_open_parens[ARG(nxt1)-1]=oscan; /*open->CURLYM*/
4548       RExC_close_parens[ARG(nxt1)-1]=nxt+2; /*close->while*/
4549      }
4550      /* Now we know that nxt2 is the only contents: */
4551      oscan->flags = (U8)ARG(nxt);
4552      OP(oscan) = CURLYN;
4553      OP(nxt1) = NOTHING; /* was OPEN. */
4554
4555 #ifdef DEBUGGING
4556      OP(nxt1 + 1) = OPTIMIZED; /* was count. */
4557      NEXT_OFF(nxt1+ 1) = 0; /* just for consistency. */
4558      NEXT_OFF(nxt2) = 0; /* just for consistency with CURLY. */
4559      OP(nxt) = OPTIMIZED; /* was CLOSE. */
4560      OP(nxt + 1) = OPTIMIZED; /* was count. */
4561      NEXT_OFF(nxt+ 1) = 0; /* just for consistency. */
4562 #endif
4563     }
4564    nogo:
4565
4566     /* Try optimization CURLYX => CURLYM. */
4567     if (  OP(oscan) == CURLYX && data
4568      && !(data->flags & SF_HAS_PAR)
4569      && !(data->flags & SF_HAS_EVAL)
4570      && !deltanext /* atom is fixed width */
4571      && minnext != 0 /* CURLYM can't handle zero width */
4572
4573       /* Nor characters whose fold at run-time may be
4574       * multi-character */
4575      && ! (RExC_seen & REG_UNFOLDED_MULTI_SEEN)
4576     ) {
4577      /* XXXX How to optimize if data == 0? */
4578      /* Optimize to a simpler form.  */
4579      regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; /* OPEN */
4580      regnode *nxt2;
4581
4582      OP(oscan) = CURLYM;
4583      while ( (nxt2 = regnext(nxt)) /* skip over embedded stuff*/
4584        && (OP(nxt2) != WHILEM))
4585       nxt = nxt2;
4586      OP(nxt2)  = SUCCEED; /* Whas WHILEM */
4587      /* Need to optimize away parenths. */
4588      if ((data->flags & SF_IN_PAR) && OP(nxt) == CLOSE) {
4589       /* Set the parenth number.  */
4590       regnode *nxt1 = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; /* OPEN*/
4591
4592       oscan->flags = (U8)ARG(nxt);
4593       if (RExC_open_parens) {
4594        RExC_open_parens[ARG(nxt1)-1]=oscan; /*open->CURLYM*/
4595        RExC_close_parens[ARG(nxt1)-1]=nxt2+1; /*close->NOTHING*/
4596       }
4597       OP(nxt1) = OPTIMIZED; /* was OPEN. */
4598       OP(nxt) = OPTIMIZED; /* was CLOSE. */
4599
4600 #ifdef DEBUGGING
4601       OP(nxt1 + 1) = OPTIMIZED; /* was count. */
4602       OP(nxt + 1) = OPTIMIZED; /* was count. */
4603       NEXT_OFF(nxt1 + 1) = 0; /* just for consistency. */
4604       NEXT_OFF(nxt + 1) = 0; /* just for consistency. */
4605 #endif
4606 #if 0
4607       while ( nxt1 && (OP(nxt1) != WHILEM)) {
4608        regnode *nnxt = regnext(nxt1);
4609        if (nnxt == nxt) {
4610         if (reg_off_by_arg[OP(nxt1)])
4611          ARG_SET(nxt1, nxt2 - nxt1);
4612         else if (nxt2 - nxt1 < U16_MAX)
4613          NEXT_OFF(nxt1) = nxt2 - nxt1;
4614         else
4615          OP(nxt) = NOTHING; /* Cannot beautify */
4616        }
4617        nxt1 = nnxt;
4618       }
4619 #endif
4620       /* Optimize again: */
4621       study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt,
4622          NULL, stopparen, recursed_depth, NULL, 0,depth+1);
4623      }
4624      else
4625       oscan->flags = 0;
4626     }
4627     else if ((OP(oscan) == CURLYX)
4628       && (flags & SCF_WHILEM_VISITED_POS)
4629       /* See the comment on a similar expression above.
4630        However, this time it's not a subexpression
4631        we care about, but the expression itself. */
4632       && (maxcount == REG_INFTY)
4633       && data && ++data->whilem_c < 16) {
4634      /* This stays as CURLYX, we can put the count/of pair. */
4635      /* Find WHILEM (as in regexec.c) */
4636      regnode *nxt = oscan + NEXT_OFF(oscan);
4637
4638      if (OP(PREVOPER(nxt)) == NOTHING) /* LONGJMP */
4639       nxt += ARG(nxt);
4640      PREVOPER(nxt)->flags = (U8)(data->whilem_c
4641       | (RExC_whilem_seen << 4)); /* On WHILEM */
4642     }
4643     if (data && fl & (SF_HAS_PAR|SF_IN_PAR))
4644      pars++;
4645     if (flags & SCF_DO_SUBSTR) {
4646      SV *last_str = NULL;
4647      STRLEN last_chrs = 0;
4648      int counted = mincount != 0;
4649
4650      if (data->last_end > 0 && mincount != 0) { /* Ends with a
4651                 string. */
4652       SSize_t b = pos_before >= data->last_start_min
4653        ? pos_before : data->last_start_min;
4654       STRLEN l;
4655       const char * const s = SvPV_const(data->last_found, l);
4656       SSize_t old = b - data->last_start_min;
4657
4658       if (UTF)
4659        old = utf8_hop((U8*)s, old) - (U8*)s;
4660       l -= old;
4661       /* Get the added string: */
4662       last_str = newSVpvn_utf8(s  + old, l, UTF);
4663       last_chrs = UTF ? utf8_length((U8*)(s + old),
4664            (U8*)(s + old + l)) : l;
4665       if (deltanext == 0 && pos_before == b) {
4666        /* What was added is a constant string */
4667        if (mincount > 1) {
4668
4669         SvGROW(last_str, (mincount * l) + 1);
4670         repeatcpy(SvPVX(last_str) + l,
4671           SvPVX_const(last_str), l,
4672           mincount - 1);
4673         SvCUR_set(last_str, SvCUR(last_str) * mincount);
4674         /* Add additional parts. */
4675         SvCUR_set(data->last_found,
4676           SvCUR(data->last_found) - l);
4677         sv_catsv(data->last_found, last_str);
4678         {
4679          SV * sv = data->last_found;
4680          MAGIC *mg =
4681           SvUTF8(sv) && SvMAGICAL(sv) ?
4682           mg_find(sv, PERL_MAGIC_utf8) : NULL;
4683          if (mg && mg->mg_len >= 0)
4684           mg->mg_len += last_chrs * (mincount-1);
4685         }
4686         last_chrs *= mincount;
4687         data->last_end += l * (mincount - 1);
4688        }
4689       } else {
4690        /* start offset must point into the last copy */
4691        data->last_start_min += minnext * (mincount - 1);
4692        data->last_start_max += is_inf ? SSize_t_MAX
4693         : (maxcount - 1) * (minnext + data->pos_delta);
4694       }
4695      }
4696      /* It is counted once already... */
4697      data->pos_min += minnext * (mincount - counted);
4698 #if 0
4699 PerlIO_printf(Perl_debug_log, "counted=%"UVdf" deltanext=%"UVdf
4700        " SSize_t_MAX=%"UVdf" minnext=%"UVdf
4701        " maxcount=%"UVdf" mincount=%"UVdf"\n",
4702  (UV)counted, (UV)deltanext, (UV)SSize_t_MAX, (UV)minnext, (UV)maxcount,
4703  (UV)mincount);
4704 if (deltanext != SSize_t_MAX)
4705 PerlIO_printf(Perl_debug_log, "LHS=%"UVdf" RHS=%"UVdf"\n",
4706  (UV)(-counted * deltanext + (minnext + deltanext) * maxcount
4707   - minnext * mincount), (UV)(SSize_t_MAX - data->pos_delta));
4708 #endif
4709      if (deltanext == SSize_t_MAX
4710       || -counted * deltanext + (minnext + deltanext) * maxcount - minnext * mincount >= SSize_t_MAX - data->pos_delta)
4711       data->pos_delta = SSize_t_MAX;
4712      else
4713       data->pos_delta += - counted * deltanext +
4714       (minnext + deltanext) * maxcount - minnext * mincount;
4715      if (mincount != maxcount) {
4716       /* Cannot extend fixed substrings found inside
4717        the group.  */
4718       scan_commit(pRExC_state, data, minlenp, is_inf);
4719       if (mincount && last_str) {
4720        SV * const sv = data->last_found;
4721        MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ?
4722         mg_find(sv, PERL_MAGIC_utf8) : NULL;
4723
4724        if (mg)
4725         mg->mg_len = -1;
4726        sv_setsv(sv, last_str);
4727        data->last_end = data->pos_min;
4728        data->last_start_min = data->pos_min - last_chrs;
4729        data->last_start_max = is_inf
4730         ? SSize_t_MAX
4731         : data->pos_min + data->pos_delta - last_chrs;
4732       }
4733       data->longest = &(data->longest_float);
4734      }
4735      SvREFCNT_dec(last_str);
4736     }
4737     if (data && (fl & SF_HAS_EVAL))
4738      data->flags |= SF_HAS_EVAL;
4739    optimize_curly_tail:
4740     if (OP(oscan) != CURLYX) {
4741      while (PL_regkind[OP(next = regnext(oscan))] == NOTHING
4742       && NEXT_OFF(next))
4743       NEXT_OFF(oscan) += NEXT_OFF(next);
4744     }
4745     continue;
4746
4747    default:
4748 #ifdef DEBUGGING
4749     Perl_croak(aTHX_ "panic: unexpected varying REx opcode %d",
4750                  OP(scan));
4751 #endif
4752    case REF:
4753    case CLUMP:
4754     if (flags & SCF_DO_SUBSTR) {
4755      /* Cannot expect anything... */
4756      scan_commit(pRExC_state, data, minlenp, is_inf);
4757      data->longest = &(data->longest_float);
4758     }
4759     is_inf = is_inf_internal = 1;
4760     if (flags & SCF_DO_STCLASS_OR) {
4761      if (OP(scan) == CLUMP) {
4762       /* Actually is any start char, but very few code points
4763       * aren't start characters */
4764       ssc_match_all_cp(data->start_class);
4765      }
4766      else {
4767       ssc_anything(data->start_class);
4768      }
4769     }
4770     flags &= ~SCF_DO_STCLASS;
4771     break;
4772    }
4773   }
4774   else if (OP(scan) == LNBREAK) {
4775    if (flags & SCF_DO_STCLASS) {
4776      if (flags & SCF_DO_STCLASS_AND) {
4777      ssc_intersection(data->start_class,
4778          PL_XPosix_ptrs[_CC_VERTSPACE], FALSE);
4779      ssc_clear_locale(data->start_class);
4780      ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4781     }
4782     else if (flags & SCF_DO_STCLASS_OR) {
4783      ssc_union(data->start_class,
4784        PL_XPosix_ptrs[_CC_VERTSPACE],
4785        FALSE);
4786      ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
4787
4788      /* See commit msg for
4789      * 749e076fceedeb708a624933726e7989f2302f6a */
4790      ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4791     }
4792     flags &= ~SCF_DO_STCLASS;
4793    }
4794    min++;
4795    delta++;    /* Because of the 2 char string cr-lf */
4796    if (flags & SCF_DO_SUBSTR) {
4797     /* Cannot expect anything... */
4798     scan_commit(pRExC_state, data, minlenp, is_inf);
4799      data->pos_min += 1;
4800     data->pos_delta += 1;
4801     data->longest = &(data->longest_float);
4802     }
4803   }
4804   else if (REGNODE_SIMPLE(OP(scan))) {
4805
4806    if (flags & SCF_DO_SUBSTR) {
4807     scan_commit(pRExC_state, data, minlenp, is_inf);
4808     data->pos_min++;
4809    }
4810    min++;
4811    if (flags & SCF_DO_STCLASS) {
4812     bool invert = 0;
4813     SV* my_invlist = NULL;
4814     U8 namedclass;
4815
4816     /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
4817     ANYOF_FLAGS(data->start_class) &= ~ANYOF_EMPTY_STRING;
4818
4819     /* Some of the logic below assumes that switching
4820     locale on will only add false positives. */
4821     switch (OP(scan)) {
4822
4823     default:
4824 #ifdef DEBUGGING
4825     Perl_croak(aTHX_ "panic: unexpected simple REx opcode %d",
4826                  OP(scan));
4827 #endif
4828     case CANY:
4829     case SANY:
4830      if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
4831       ssc_match_all_cp(data->start_class);
4832      break;
4833
4834     case REG_ANY:
4835      {
4836       SV* REG_ANY_invlist = _new_invlist(2);
4837       REG_ANY_invlist = add_cp_to_invlist(REG_ANY_invlist,
4838                '\n');
4839       if (flags & SCF_DO_STCLASS_OR) {
4840        ssc_union(data->start_class,
4841          REG_ANY_invlist,
4842          TRUE /* TRUE => invert, hence all but \n
4843            */
4844          );
4845       }
4846       else if (flags & SCF_DO_STCLASS_AND) {
4847        ssc_intersection(data->start_class,
4848            REG_ANY_invlist,
4849            TRUE  /* TRUE => invert */
4850            );
4851        ssc_clear_locale(data->start_class);
4852       }
4853       SvREFCNT_dec_NN(REG_ANY_invlist);
4854      }
4855      break;
4856
4857     case ANYOF:
4858      if (flags & SCF_DO_STCLASS_AND)
4859       ssc_and(pRExC_state, data->start_class,
4860         (regnode_charclass *) scan);
4861      else
4862       ssc_or(pRExC_state, data->start_class,
4863               (regnode_charclass *) scan);
4864      break;
4865
4866     case NPOSIXL:
4867      invert = 1;
4868      /* FALL THROUGH */
4869
4870     case POSIXL:
4871      namedclass = classnum_to_namedclass(FLAGS(scan)) + invert;
4872      if (flags & SCF_DO_STCLASS_AND) {
4873       bool was_there = cBOOL(
4874           ANYOF_POSIXL_TEST(data->start_class,
4875                 namedclass));
4876       ANYOF_POSIXL_ZERO(data->start_class);
4877       if (was_there) {    /* Do an AND */
4878        ANYOF_POSIXL_SET(data->start_class, namedclass);
4879       }
4880       /* No individual code points can now match */
4881       data->start_class->invlist
4882             = sv_2mortal(_new_invlist(0));
4883      }
4884      else {
4885       int complement = namedclass + ((invert) ? -1 : 1);
4886
4887       assert(flags & SCF_DO_STCLASS_OR);
4888
4889       /* If the complement of this class was already there,
4890       * the result is that they match all code points,
4891       * (\d + \D == everything).  Remove the classes from
4892       * future consideration.  Locale is not relevant in
4893       * this case */
4894       if (ANYOF_POSIXL_TEST(data->start_class, complement)) {
4895        ssc_match_all_cp(data->start_class);
4896        ANYOF_POSIXL_CLEAR(data->start_class, namedclass);
4897        ANYOF_POSIXL_CLEAR(data->start_class, complement);
4898       }
4899       else {  /* The usual case; just add this class to the
4900         existing set */
4901        ANYOF_POSIXL_SET(data->start_class, namedclass);
4902       }
4903      }
4904      break;
4905
4906     case NPOSIXA:   /* For these, we always know the exact set of
4907         what's matched */
4908      invert = 1;
4909      /* FALL THROUGH */
4910     case POSIXA:
4911      if (FLAGS(scan) == _CC_ASCII) {
4912       my_invlist = invlist_clone(PL_XPosix_ptrs[_CC_ASCII]);
4913      }
4914      else {
4915       _invlist_intersection(PL_XPosix_ptrs[FLAGS(scan)],
4916            PL_XPosix_ptrs[_CC_ASCII],
4917            &my_invlist);
4918      }
4919      goto join_posix;
4920
4921     case NPOSIXD:
4922     case NPOSIXU:
4923      invert = 1;
4924      /* FALL THROUGH */
4925     case POSIXD:
4926     case POSIXU:
4927      my_invlist = invlist_clone(PL_XPosix_ptrs[FLAGS(scan)]);
4928
4929      /* NPOSIXD matches all upper Latin1 code points unless the
4930      * target string being matched is UTF-8, which is
4931      * unknowable until match time.  Since we are going to
4932      * invert, we want to get rid of all of them so that the
4933      * inversion will match all */
4934      if (OP(scan) == NPOSIXD) {
4935       _invlist_subtract(my_invlist, PL_UpperLatin1,
4936           &my_invlist);
4937      }
4938
4939     join_posix:
4940
4941      if (flags & SCF_DO_STCLASS_AND) {
4942       ssc_intersection(data->start_class, my_invlist, invert);
4943       ssc_clear_locale(data->start_class);
4944      }
4945      else {
4946       assert(flags & SCF_DO_STCLASS_OR);
4947       ssc_union(data->start_class, my_invlist, invert);
4948      }
4949      SvREFCNT_dec(my_invlist);
4950     }
4951     if (flags & SCF_DO_STCLASS_OR)
4952      ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
4953     flags &= ~SCF_DO_STCLASS;
4954    }
4955   }
4956   else if (PL_regkind[OP(scan)] == EOL && flags & SCF_DO_SUBSTR) {
4957    data->flags |= (OP(scan) == MEOL
4958        ? SF_BEFORE_MEOL
4959        : SF_BEFORE_SEOL);
4960    scan_commit(pRExC_state, data, minlenp, is_inf);
4961
4962   }
4963   else if (  PL_regkind[OP(scan)] == BRANCHJ
4964     /* Lookbehind, or need to calculate parens/evals/stclass: */
4965     && (scan->flags || data || (flags & SCF_DO_STCLASS))
4966     && (OP(scan) == IFMATCH || OP(scan) == UNLESSM)) {
4967    if ( OP(scan) == UNLESSM &&
4968     scan->flags == 0 &&
4969     OP(NEXTOPER(NEXTOPER(scan))) == NOTHING &&
4970     OP(regnext(NEXTOPER(NEXTOPER(scan)))) == SUCCEED
4971    ) {
4972     regnode *opt;
4973     regnode *upto= regnext(scan);
4974     DEBUG_PARSE_r({
4975      SV * const mysv_val=sv_newmortal();
4976      DEBUG_STUDYDATA("OPFAIL",data,depth);
4977
4978      /*DEBUG_PARSE_MSG("opfail");*/
4979      regprop(RExC_rx, mysv_val, upto, NULL);
4980      PerlIO_printf(Perl_debug_log,
4981       "~ replace with OPFAIL pointed at %s (%"IVdf") offset %"IVdf"\n",
4982       SvPV_nolen_const(mysv_val),
4983       (IV)REG_NODE_NUM(upto),
4984       (IV)(upto - scan)
4985      );
4986     });
4987     OP(scan) = OPFAIL;
4988     NEXT_OFF(scan) = upto - scan;
4989     for (opt= scan + 1; opt < upto ; opt++)
4990      OP(opt) = OPTIMIZED;
4991     scan= upto;
4992     continue;
4993    }
4994    if ( !PERL_ENABLE_POSITIVE_ASSERTION_STUDY
4995     || OP(scan) == UNLESSM )
4996    {
4997     /* Negative Lookahead/lookbehind
4998     In this case we can't do fixed string optimisation.
4999     */
5000
5001     SSize_t deltanext, minnext, fake = 0;
5002     regnode *nscan;
5003     regnode_ssc intrnl;
5004     int f = 0;
5005
5006     data_fake.flags = 0;
5007     if (data) {
5008      data_fake.whilem_c = data->whilem_c;
5009      data_fake.last_closep = data->last_closep;
5010     }
5011     else
5012      data_fake.last_closep = &fake;
5013     data_fake.pos_delta = delta;
5014     if ( flags & SCF_DO_STCLASS && !scan->flags
5015      && OP(scan) == IFMATCH ) { /* Lookahead */
5016      ssc_init(pRExC_state, &intrnl);
5017      data_fake.start_class = &intrnl;
5018      f |= SCF_DO_STCLASS_AND;
5019     }
5020     if (flags & SCF_WHILEM_VISITED_POS)
5021      f |= SCF_WHILEM_VISITED_POS;
5022     next = regnext(scan);
5023     nscan = NEXTOPER(NEXTOPER(scan));
5024     minnext = study_chunk(pRExC_state, &nscan, minlenp, &deltanext,
5025          last, &data_fake, stopparen,
5026          recursed_depth, NULL, f, depth+1);
5027     if (scan->flags) {
5028      if (deltanext) {
5029       FAIL("Variable length lookbehind not implemented");
5030      }
5031      else if (minnext > (I32)U8_MAX) {
5032       FAIL2("Lookbehind longer than %"UVuf" not implemented",
5033        (UV)U8_MAX);
5034      }
5035      scan->flags = (U8)minnext;
5036     }
5037     if (data) {
5038      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
5039       pars++;
5040      if (data_fake.flags & SF_HAS_EVAL)
5041       data->flags |= SF_HAS_EVAL;
5042      data->whilem_c = data_fake.whilem_c;
5043     }
5044     if (f & SCF_DO_STCLASS_AND) {
5045      if (flags & SCF_DO_STCLASS_OR) {
5046       /* OR before, AND after: ideally we would recurse with
5047       * data_fake to get the AND applied by study of the
5048       * remainder of the pattern, and then derecurse;
5049       * *** HACK *** for now just treat as "no information".
5050       * See [perl #56690].
5051       */
5052       ssc_init(pRExC_state, data->start_class);
5053      }  else {
5054       /* AND before and after: combine and continue.  These
5055       * assertions are zero-length, so can match an EMPTY
5056       * string */
5057       ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &intrnl);
5058       ANYOF_FLAGS(data->start_class) |= ANYOF_EMPTY_STRING;
5059      }
5060     }
5061    }
5062 #if PERL_ENABLE_POSITIVE_ASSERTION_STUDY
5063    else {
5064     /* Positive Lookahead/lookbehind
5065     In this case we can do fixed string optimisation,
5066     but we must be careful about it. Note in the case of
5067     lookbehind the positions will be offset by the minimum
5068     length of the pattern, something we won't know about
5069     until after the recurse.
5070     */
5071     SSize_t deltanext, fake = 0;
5072     regnode *nscan;
5073     regnode_ssc intrnl;
5074     int f = 0;
5075     /* We use SAVEFREEPV so that when the full compile
5076      is finished perl will clean up the allocated
5077      minlens when it's all done. This way we don't
5078      have to worry about freeing them when we know
5079      they wont be used, which would be a pain.
5080     */
5081     SSize_t *minnextp;
5082     Newx( minnextp, 1, SSize_t );
5083     SAVEFREEPV(minnextp);
5084
5085     if (data) {
5086      StructCopy(data, &data_fake, scan_data_t);
5087      if ((flags & SCF_DO_SUBSTR) && data->last_found) {
5088       f |= SCF_DO_SUBSTR;
5089       if (scan->flags)
5090        scan_commit(pRExC_state, &data_fake, minlenp, is_inf);
5091       data_fake.last_found=newSVsv(data->last_found);
5092      }
5093     }
5094     else
5095      data_fake.last_closep = &fake;
5096     data_fake.flags = 0;
5097     data_fake.pos_delta = delta;
5098     if (is_inf)
5099      data_fake.flags |= SF_IS_INF;
5100     if ( flags & SCF_DO_STCLASS && !scan->flags
5101      && OP(scan) == IFMATCH ) { /* Lookahead */
5102      ssc_init(pRExC_state, &intrnl);
5103      data_fake.start_class = &intrnl;
5104      f |= SCF_DO_STCLASS_AND;
5105     }
5106     if (flags & SCF_WHILEM_VISITED_POS)
5107      f |= SCF_WHILEM_VISITED_POS;
5108     next = regnext(scan);
5109     nscan = NEXTOPER(NEXTOPER(scan));
5110
5111     *minnextp = study_chunk(pRExC_state, &nscan, minnextp,
5112           &deltanext, last, &data_fake,
5113           stopparen, recursed_depth, NULL,
5114           f,depth+1);
5115     if (scan->flags) {
5116      if (deltanext) {
5117       FAIL("Variable length lookbehind not implemented");
5118      }
5119      else if (*minnextp > (I32)U8_MAX) {
5120       FAIL2("Lookbehind longer than %"UVuf" not implemented",
5121        (UV)U8_MAX);
5122      }
5123      scan->flags = (U8)*minnextp;
5124     }
5125
5126     *minnextp += min;
5127
5128     if (f & SCF_DO_STCLASS_AND) {
5129      ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &intrnl);
5130      ANYOF_FLAGS(data->start_class) |= ANYOF_EMPTY_STRING;
5131     }
5132     if (data) {
5133      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
5134       pars++;
5135      if (data_fake.flags & SF_HAS_EVAL)
5136       data->flags |= SF_HAS_EVAL;
5137      data->whilem_c = data_fake.whilem_c;
5138      if ((flags & SCF_DO_SUBSTR) && data_fake.last_found) {
5139       if (RExC_rx->minlen<*minnextp)
5140        RExC_rx->minlen=*minnextp;
5141       scan_commit(pRExC_state, &data_fake, minnextp, is_inf);
5142       SvREFCNT_dec_NN(data_fake.last_found);
5143
5144       if ( data_fake.minlen_fixed != minlenp )
5145       {
5146        data->offset_fixed= data_fake.offset_fixed;
5147        data->minlen_fixed= data_fake.minlen_fixed;
5148        data->lookbehind_fixed+= scan->flags;
5149       }
5150       if ( data_fake.minlen_float != minlenp )
5151       {
5152        data->minlen_float= data_fake.minlen_float;
5153        data->offset_float_min=data_fake.offset_float_min;
5154        data->offset_float_max=data_fake.offset_float_max;
5155        data->lookbehind_float+= scan->flags;
5156       }
5157      }
5158     }
5159    }
5160 #endif
5161   }
5162   else if (OP(scan) == OPEN) {
5163    if (stopparen != (I32)ARG(scan))
5164     pars++;
5165   }
5166   else if (OP(scan) == CLOSE) {
5167    if (stopparen == (I32)ARG(scan)) {
5168     break;
5169    }
5170    if ((I32)ARG(scan) == is_par) {
5171     next = regnext(scan);
5172
5173     if ( next && (OP(next) != WHILEM) && next < last)
5174      is_par = 0;  /* Disable optimization */
5175    }
5176    if (data)
5177     *(data->last_closep) = ARG(scan);
5178   }
5179   else if (OP(scan) == EVAL) {
5180     if (data)
5181      data->flags |= SF_HAS_EVAL;
5182   }
5183   else if ( PL_regkind[OP(scan)] == ENDLIKE ) {
5184    if (flags & SCF_DO_SUBSTR) {
5185     scan_commit(pRExC_state, data, minlenp, is_inf);
5186     flags &= ~SCF_DO_SUBSTR;
5187    }
5188    if (data && OP(scan)==ACCEPT) {
5189     data->flags |= SCF_SEEN_ACCEPT;
5190     if (stopmin > min)
5191      stopmin = min;
5192    }
5193   }
5194   else if (OP(scan) == LOGICAL && scan->flags == 2) /* Embedded follows */
5195   {
5196     if (flags & SCF_DO_SUBSTR) {
5197      scan_commit(pRExC_state, data, minlenp, is_inf);
5198      data->longest = &(data->longest_float);
5199     }
5200     is_inf = is_inf_internal = 1;
5201     if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
5202      ssc_anything(data->start_class);
5203     flags &= ~SCF_DO_STCLASS;
5204   }
5205   else if (OP(scan) == GPOS) {
5206    if (!(RExC_rx->intflags & PREGf_GPOS_FLOAT) &&
5207     !(delta || is_inf || (data && data->pos_delta)))
5208    {
5209     if (!(RExC_rx->intflags & PREGf_ANCH) && (flags & SCF_DO_SUBSTR))
5210      RExC_rx->intflags |= PREGf_ANCH_GPOS;
5211     if (RExC_rx->gofs < (STRLEN)min)
5212      RExC_rx->gofs = min;
5213    } else {
5214     RExC_rx->intflags |= PREGf_GPOS_FLOAT;
5215     RExC_rx->gofs = 0;
5216    }
5217   }
5218 #ifdef TRIE_STUDY_OPT
5219 #ifdef FULL_TRIE_STUDY
5220   else if (PL_regkind[OP(scan)] == TRIE) {
5221    /* NOTE - There is similar code to this block above for handling
5222    BRANCH nodes on the initial study.  If you change stuff here
5223    check there too. */
5224    regnode *trie_node= scan;
5225    regnode *tail= regnext(scan);
5226    reg_trie_data *trie = (reg_trie_data*)RExC_rxi->data->data[ ARG(scan) ];
5227    SSize_t max1 = 0, min1 = SSize_t_MAX;
5228    regnode_ssc accum;
5229
5230    if (flags & SCF_DO_SUBSTR) { /* XXXX Add !SUSPEND? */
5231     /* Cannot merge strings after this. */
5232     scan_commit(pRExC_state, data, minlenp, is_inf);
5233    }
5234    if (flags & SCF_DO_STCLASS)
5235     ssc_init_zero(pRExC_state, &accum);
5236
5237    if (!trie->jump) {
5238     min1= trie->minlen;
5239     max1= trie->maxlen;
5240    } else {
5241     const regnode *nextbranch= NULL;
5242     U32 word;
5243
5244     for ( word=1 ; word <= trie->wordcount ; word++)
5245     {
5246      SSize_t deltanext=0, minnext=0, f = 0, fake;
5247      regnode_ssc this_class;
5248
5249      data_fake.flags = 0;
5250      if (data) {
5251       data_fake.whilem_c = data->whilem_c;
5252       data_fake.last_closep = data->last_closep;
5253      }
5254      else
5255       data_fake.last_closep = &fake;
5256      data_fake.pos_delta = delta;
5257      if (flags & SCF_DO_STCLASS) {
5258       ssc_init(pRExC_state, &this_class);
5259       data_fake.start_class = &this_class;
5260       f = SCF_DO_STCLASS_AND;
5261      }
5262      if (flags & SCF_WHILEM_VISITED_POS)
5263       f |= SCF_WHILEM_VISITED_POS;
5264
5265      if (trie->jump[word]) {
5266       if (!nextbranch)
5267        nextbranch = trie_node + trie->jump[0];
5268       scan= trie_node + trie->jump[word];
5269       /* We go from the jump point to the branch that follows
5270       it. Note this means we need the vestigal unused
5271       branches even though they arent otherwise used. */
5272       minnext = study_chunk(pRExC_state, &scan, minlenp,
5273        &deltanext, (regnode *)nextbranch, &data_fake,
5274        stopparen, recursed_depth, NULL, f,depth+1);
5275      }
5276      if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH)
5277       nextbranch= regnext((regnode*)nextbranch);
5278
5279      if (min1 > (SSize_t)(minnext + trie->minlen))
5280       min1 = minnext + trie->minlen;
5281      if (deltanext == SSize_t_MAX) {
5282       is_inf = is_inf_internal = 1;
5283       max1 = SSize_t_MAX;
5284      } else if (max1 < (SSize_t)(minnext + deltanext + trie->maxlen))
5285       max1 = minnext + deltanext + trie->maxlen;
5286
5287      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
5288       pars++;
5289      if (data_fake.flags & SCF_SEEN_ACCEPT) {
5290       if ( stopmin > min + min1)
5291        stopmin = min + min1;
5292       flags &= ~SCF_DO_SUBSTR;
5293       if (data)
5294        data->flags |= SCF_SEEN_ACCEPT;
5295      }
5296      if (data) {
5297       if (data_fake.flags & SF_HAS_EVAL)
5298        data->flags |= SF_HAS_EVAL;
5299       data->whilem_c = data_fake.whilem_c;
5300      }
5301      if (flags & SCF_DO_STCLASS)
5302       ssc_or(pRExC_state, &accum, (regnode_charclass *) &this_class);
5303     }
5304    }
5305    if (flags & SCF_DO_SUBSTR) {
5306     data->pos_min += min1;
5307     data->pos_delta += max1 - min1;
5308     if (max1 != min1 || is_inf)
5309      data->longest = &(data->longest_float);
5310    }
5311    min += min1;
5312    delta += max1 - min1;
5313    if (flags & SCF_DO_STCLASS_OR) {
5314     ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &accum);
5315     if (min1) {
5316      ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
5317      flags &= ~SCF_DO_STCLASS;
5318     }
5319    }
5320    else if (flags & SCF_DO_STCLASS_AND) {
5321     if (min1) {
5322      ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &accum);
5323      flags &= ~SCF_DO_STCLASS;
5324     }
5325     else {
5326      /* Switch to OR mode: cache the old value of
5327      * data->start_class */
5328      INIT_AND_WITHP;
5329      StructCopy(data->start_class, and_withp, regnode_ssc);
5330      flags &= ~SCF_DO_STCLASS_AND;
5331      StructCopy(&accum, data->start_class, regnode_ssc);
5332      flags |= SCF_DO_STCLASS_OR;
5333     }
5334    }
5335    scan= tail;
5336    continue;
5337   }
5338 #else
5339   else if (PL_regkind[OP(scan)] == TRIE) {
5340    reg_trie_data *trie = (reg_trie_data*)RExC_rxi->data->data[ ARG(scan) ];
5341    U8*bang=NULL;
5342
5343    min += trie->minlen;
5344    delta += (trie->maxlen - trie->minlen);
5345    flags &= ~SCF_DO_STCLASS; /* xxx */
5346    if (flags & SCF_DO_SUBSTR) {
5347     /* Cannot expect anything... */
5348     scan_commit(pRExC_state, data, minlenp, is_inf);
5349      data->pos_min += trie->minlen;
5350      data->pos_delta += (trie->maxlen - trie->minlen);
5351     if (trie->maxlen != trie->minlen)
5352      data->longest = &(data->longest_float);
5353     }
5354     if (trie->jump) /* no more substrings -- for now /grr*/
5355    flags &= ~SCF_DO_SUBSTR;
5356   }
5357 #endif /* old or new */
5358 #endif /* TRIE_STUDY_OPT */
5359
5360   /* Else: zero-length, ignore. */
5361   scan = regnext(scan);
5362  }
5363  /* If we are exiting a recursion we can unset its recursed bit
5364  * and allow ourselves to enter it again - no danger of an
5365  * infinite loop there.
5366  if (stopparen > -1 && recursed) {
5367   DEBUG_STUDYDATA("unset:", data,depth);
5368   PAREN_UNSET( recursed, stopparen);
5369  }
5370  */
5371  if (frame) {
5372   DEBUG_STUDYDATA("frame-end:",data,depth);
5373   DEBUG_PEEP("fend", scan, depth);
5374   /* restore previous context */
5375   last = frame->last;
5376   scan = frame->next;
5377   stopparen = frame->stop;
5378   recursed_depth = frame->prev_recursed_depth;
5379   depth = depth - 1;
5380
5381   frame = frame->prev;
5382   goto fake_study_recurse;
5383  }
5384
5385   finish:
5386  assert(!frame);
5387  DEBUG_STUDYDATA("pre-fin:",data,depth);
5388
5389  *scanp = scan;
5390  *deltap = is_inf_internal ? SSize_t_MAX : delta;
5391
5392  if (flags & SCF_DO_SUBSTR && is_inf)
5393   data->pos_delta = SSize_t_MAX - data->pos_min;
5394  if (is_par > (I32)U8_MAX)
5395   is_par = 0;
5396  if (is_par && pars==1 && data) {
5397   data->flags |= SF_IN_PAR;
5398   data->flags &= ~SF_HAS_PAR;
5399  }
5400  else if (pars && data) {
5401   data->flags |= SF_HAS_PAR;
5402   data->flags &= ~SF_IN_PAR;
5403  }
5404  if (flags & SCF_DO_STCLASS_OR)
5405   ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
5406  if (flags & SCF_TRIE_RESTUDY)
5407   data->flags |=  SCF_TRIE_RESTUDY;
5408
5409  DEBUG_STUDYDATA("post-fin:",data,depth);
5410
5411  {
5412   SSize_t final_minlen= min < stopmin ? min : stopmin;
5413
5414   if (!(RExC_seen & REG_UNBOUNDED_QUANTIFIER_SEEN) && (RExC_maxlen < final_minlen + delta)) {
5415    RExC_maxlen = final_minlen + delta;
5416   }
5417   return final_minlen;
5418  }
5419  /* not-reached */
5420 }
5421
5422 STATIC U32
5423 S_add_data(RExC_state_t* const pRExC_state, const char* const s, const U32 n)
5424 {
5425  U32 count = RExC_rxi->data ? RExC_rxi->data->count : 0;
5426
5427  PERL_ARGS_ASSERT_ADD_DATA;
5428
5429  Renewc(RExC_rxi->data,
5430   sizeof(*RExC_rxi->data) + sizeof(void*) * (count + n - 1),
5431   char, struct reg_data);
5432  if(count)
5433   Renew(RExC_rxi->data->what, count + n, U8);
5434  else
5435   Newx(RExC_rxi->data->what, n, U8);
5436  RExC_rxi->data->count = count + n;
5437  Copy(s, RExC_rxi->data->what + count, n, U8);
5438  return count;
5439 }
5440
5441 /*XXX: todo make this not included in a non debugging perl */
5442 #ifndef PERL_IN_XSUB_RE
5443 void
5444 Perl_reginitcolors(pTHX)
5445 {
5446  dVAR;
5447  const char * const s = PerlEnv_getenv("PERL_RE_COLORS");
5448  if (s) {
5449   char *t = savepv(s);
5450   int i = 0;
5451   PL_colors[0] = t;
5452   while (++i < 6) {
5453    t = strchr(t, '\t');
5454    if (t) {
5455     *t = '\0';
5456     PL_colors[i] = ++t;
5457    }
5458    else
5459     PL_colors[i] = t = (char *)"";
5460   }
5461  } else {
5462   int i = 0;
5463   while (i < 6)
5464    PL_colors[i++] = (char *)"";
5465  }
5466  PL_colorset = 1;
5467 }
5468 #endif
5469
5470
5471 #ifdef TRIE_STUDY_OPT
5472 #define CHECK_RESTUDY_GOTO_butfirst(dOsomething)            \
5473  STMT_START {                                            \
5474   if (                                                \
5475    (data.flags & SCF_TRIE_RESTUDY)               \
5476    && ! restudied++                              \
5477   ) {                                                 \
5478    dOsomething;                                    \
5479    goto reStudy;                                   \
5480   }                                                   \
5481  } STMT_END
5482 #else
5483 #define CHECK_RESTUDY_GOTO_butfirst
5484 #endif
5485
5486 /*
5487  * pregcomp - compile a regular expression into internal code
5488  *
5489  * Decides which engine's compiler to call based on the hint currently in
5490  * scope
5491  */
5492
5493 #ifndef PERL_IN_XSUB_RE
5494
5495 /* return the currently in-scope regex engine (or the default if none)  */
5496
5497 regexp_engine const *
5498 Perl_current_re_engine(pTHX)
5499 {
5500  dVAR;
5501
5502  if (IN_PERL_COMPILETIME) {
5503   HV * const table = GvHV(PL_hintgv);
5504   SV **ptr;
5505
5506   if (!table || !(PL_hints & HINT_LOCALIZE_HH))
5507    return &reh_regexp_engine;
5508   ptr = hv_fetchs(table, "regcomp", FALSE);
5509   if ( !(ptr && SvIOK(*ptr) && SvIV(*ptr)))
5510    return &reh_regexp_engine;
5511   return INT2PTR(regexp_engine*,SvIV(*ptr));
5512  }
5513  else {
5514   SV *ptr;
5515   if (!PL_curcop->cop_hints_hash)
5516    return &reh_regexp_engine;
5517   ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0);
5518   if ( !(ptr && SvIOK(ptr) && SvIV(ptr)))
5519    return &reh_regexp_engine;
5520   return INT2PTR(regexp_engine*,SvIV(ptr));
5521  }
5522 }
5523
5524
5525 REGEXP *
5526 Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags)
5527 {
5528  dVAR;
5529  regexp_engine const *eng = current_re_engine();
5530  GET_RE_DEBUG_FLAGS_DECL;
5531
5532  PERL_ARGS_ASSERT_PREGCOMP;
5533
5534  /* Dispatch a request to compile a regexp to correct regexp engine. */
5535  DEBUG_COMPILE_r({
5536   PerlIO_printf(Perl_debug_log, "Using engine %"UVxf"\n",
5537       PTR2UV(eng));
5538  });
5539  return CALLREGCOMP_ENG(eng, pattern, flags);
5540 }
5541 #endif
5542
5543 /* public(ish) entry point for the perl core's own regex compiling code.
5544  * It's actually a wrapper for Perl_re_op_compile that only takes an SV
5545  * pattern rather than a list of OPs, and uses the internal engine rather
5546  * than the current one */
5547
5548 REGEXP *
5549 Perl_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
5550 {
5551  SV *pat = pattern; /* defeat constness! */
5552  PERL_ARGS_ASSERT_RE_COMPILE;
5553  return Perl_re_op_compile(aTHX_ &pat, 1, NULL,
5554 #ifdef PERL_IN_XSUB_RE
5555         &my_reg_engine,
5556 #else
5557         &reh_regexp_engine,
5558 #endif
5559         NULL, NULL, rx_flags, 0);
5560 }
5561
5562
5563 /* upgrade pattern pat_p of length plen_p to UTF8, and if there are code
5564  * blocks, recalculate the indices. Update pat_p and plen_p in-place to
5565  * point to the realloced string and length.
5566  *
5567  * This is essentially a copy of Perl_bytes_to_utf8() with the code index
5568  * stuff added */
5569
5570 static void
5571 S_pat_upgrade_to_utf8(pTHX_ RExC_state_t * const pRExC_state,
5572      char **pat_p, STRLEN *plen_p, int num_code_blocks)
5573 {
5574  U8 *const src = (U8*)*pat_p;
5575  U8 *dst;
5576  int n=0;
5577  STRLEN s = 0, d = 0;
5578  bool do_end = 0;
5579  GET_RE_DEBUG_FLAGS_DECL;
5580
5581  DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log,
5582   "UTF8 mismatch! Converting to utf8 for resizing and compile\n"));
5583
5584  Newx(dst, *plen_p * 2 + 1, U8);
5585
5586  while (s < *plen_p) {
5587   if (NATIVE_BYTE_IS_INVARIANT(src[s]))
5588    dst[d]   = src[s];
5589   else {
5590    dst[d++] = UTF8_EIGHT_BIT_HI(src[s]);
5591    dst[d]   = UTF8_EIGHT_BIT_LO(src[s]);
5592   }
5593   if (n < num_code_blocks) {
5594    if (!do_end && pRExC_state->code_blocks[n].start == s) {
5595     pRExC_state->code_blocks[n].start = d;
5596     assert(dst[d] == '(');
5597     do_end = 1;
5598    }
5599    else if (do_end && pRExC_state->code_blocks[n].end == s) {
5600     pRExC_state->code_blocks[n].end = d;
5601     assert(dst[d] == ')');
5602     do_end = 0;
5603     n++;
5604    }
5605   }
5606   s++;
5607   d++;
5608  }
5609  dst[d] = '\0';
5610  *plen_p = d;
5611  *pat_p = (char*) dst;
5612  SAVEFREEPV(*pat_p);
5613  RExC_orig_utf8 = RExC_utf8 = 1;
5614 }
5615
5616
5617
5618 /* S_concat_pat(): concatenate a list of args to the pattern string pat,
5619  * while recording any code block indices, and handling overloading,
5620  * nested qr// objects etc.  If pat is null, it will allocate a new
5621  * string, or just return the first arg, if there's only one.
5622  *
5623  * Returns the malloced/updated pat.
5624  * patternp and pat_count is the array of SVs to be concatted;
5625  * oplist is the optional list of ops that generated the SVs;
5626  * recompile_p is a pointer to a boolean that will be set if
5627  *   the regex will need to be recompiled.
5628  * delim, if non-null is an SV that will be inserted between each element
5629  */
5630
5631 static SV*
5632 S_concat_pat(pTHX_ RExC_state_t * const pRExC_state,
5633     SV *pat, SV ** const patternp, int pat_count,
5634     OP *oplist, bool *recompile_p, SV *delim)
5635 {
5636  SV **svp;
5637  int n = 0;
5638  bool use_delim = FALSE;
5639  bool alloced = FALSE;
5640
5641  /* if we know we have at least two args, create an empty string,
5642  * then concatenate args to that. For no args, return an empty string */
5643  if (!pat && pat_count != 1) {
5644   pat = newSVpvn("", 0);
5645   SAVEFREESV(pat);
5646   alloced = TRUE;
5647  }
5648
5649  for (svp = patternp; svp < patternp + pat_count; svp++) {
5650   SV *sv;
5651   SV *rx  = NULL;
5652   STRLEN orig_patlen = 0;
5653   bool code = 0;
5654   SV *msv = use_delim ? delim : *svp;
5655   if (!msv) msv = &PL_sv_undef;
5656
5657   /* if we've got a delimiter, we go round the loop twice for each
5658   * svp slot (except the last), using the delimiter the second
5659   * time round */
5660   if (use_delim) {
5661    svp--;
5662    use_delim = FALSE;
5663   }
5664   else if (delim)
5665    use_delim = TRUE;
5666
5667   if (SvTYPE(msv) == SVt_PVAV) {
5668    /* we've encountered an interpolated array within
5669    * the pattern, e.g. /...@a..../. Expand the list of elements,
5670    * then recursively append elements.
5671    * The code in this block is based on S_pushav() */
5672
5673    AV *const av = (AV*)msv;
5674    const SSize_t maxarg = AvFILL(av) + 1;
5675    SV **array;
5676
5677    if (oplist) {
5678     assert(oplist->op_type == OP_PADAV
5679      || oplist->op_type == OP_RV2AV);
5680     oplist = oplist->op_sibling;;
5681    }
5682
5683    if (SvRMAGICAL(av)) {
5684     SSize_t i;
5685
5686     Newx(array, maxarg, SV*);
5687     SAVEFREEPV(array);
5688     for (i=0; i < maxarg; i++) {
5689      SV ** const svp = av_fetch(av, i, FALSE);
5690      array[i] = svp ? *svp : &PL_sv_undef;
5691     }
5692    }
5693    else
5694     array = AvARRAY(av);
5695
5696    pat = S_concat_pat(aTHX_ pRExC_state, pat,
5697         array, maxarg, NULL, recompile_p,
5698         /* $" */
5699         GvSV((gv_fetchpvs("\"", GV_ADDMULTI, SVt_PV))));
5700
5701    continue;
5702   }
5703
5704
5705   /* we make the assumption here that each op in the list of
5706   * op_siblings maps to one SV pushed onto the stack,
5707   * except for code blocks, with have both an OP_NULL and
5708   * and OP_CONST.
5709   * This allows us to match up the list of SVs against the
5710   * list of OPs to find the next code block.
5711   *
5712   * Note that       PUSHMARK PADSV PADSV ..
5713   * is optimised to
5714   *                 PADRANGE PADSV  PADSV  ..
5715   * so the alignment still works. */
5716
5717   if (oplist) {
5718    if (oplist->op_type == OP_NULL
5719     && (oplist->op_flags & OPf_SPECIAL))
5720    {
5721     assert(n < pRExC_state->num_code_blocks);
5722     pRExC_state->code_blocks[n].start = pat ? SvCUR(pat) : 0;
5723     pRExC_state->code_blocks[n].block = oplist;
5724     pRExC_state->code_blocks[n].src_regex = NULL;
5725     n++;
5726     code = 1;
5727     oplist = oplist->op_sibling; /* skip CONST */
5728     assert(oplist);
5729    }
5730    oplist = oplist->op_sibling;;
5731   }
5732
5733   /* apply magic and QR overloading to arg */
5734
5735   SvGETMAGIC(msv);
5736   if (SvROK(msv) && SvAMAGIC(msv)) {
5737    SV *sv = AMG_CALLunary(msv, regexp_amg);
5738    if (sv) {
5739     if (SvROK(sv))
5740      sv = SvRV(sv);
5741     if (SvTYPE(sv) != SVt_REGEXP)
5742      Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP");
5743     msv = sv;
5744    }
5745   }
5746
5747   /* try concatenation overload ... */
5748   if (pat && (SvAMAGIC(pat) || SvAMAGIC(msv)) &&
5749     (sv = amagic_call(pat, msv, concat_amg, AMGf_assign)))
5750   {
5751    sv_setsv(pat, sv);
5752    /* overloading involved: all bets are off over literal
5753    * code. Pretend we haven't seen it */
5754    pRExC_state->num_code_blocks -= n;
5755    n = 0;
5756   }
5757   else  {
5758    /* ... or failing that, try "" overload */
5759    while (SvAMAGIC(msv)
5760      && (sv = AMG_CALLunary(msv, string_amg))
5761      && sv != msv
5762      &&  !(   SvROK(msv)
5763       && SvROK(sv)
5764       && SvRV(msv) == SvRV(sv))
5765    ) {
5766     msv = sv;
5767     SvGETMAGIC(msv);
5768    }
5769    if (SvROK(msv) && SvTYPE(SvRV(msv)) == SVt_REGEXP)
5770     msv = SvRV(msv);
5771
5772    if (pat) {
5773     /* this is a partially unrolled
5774     *     sv_catsv_nomg(pat, msv);
5775     * that allows us to adjust code block indices if
5776     * needed */
5777     STRLEN dlen;
5778     char *dst = SvPV_force_nomg(pat, dlen);
5779     orig_patlen = dlen;
5780     if (SvUTF8(msv) && !SvUTF8(pat)) {
5781      S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &dst, &dlen, n);
5782      sv_setpvn(pat, dst, dlen);
5783      SvUTF8_on(pat);
5784     }
5785     sv_catsv_nomg(pat, msv);
5786     rx = msv;
5787    }
5788    else
5789     pat = msv;
5790
5791    if (code)
5792     pRExC_state->code_blocks[n-1].end = SvCUR(pat)-1;
5793   }
5794
5795   /* extract any code blocks within any embedded qr//'s */
5796   if (rx && SvTYPE(rx) == SVt_REGEXP
5797    && RX_ENGINE((REGEXP*)rx)->op_comp)
5798   {
5799
5800    RXi_GET_DECL(ReANY((REGEXP *)rx), ri);
5801    if (ri->num_code_blocks) {
5802     int i;
5803     /* the presence of an embedded qr// with code means
5804     * we should always recompile: the text of the
5805     * qr// may not have changed, but it may be a
5806     * different closure than last time */
5807     *recompile_p = 1;
5808     Renew(pRExC_state->code_blocks,
5809      pRExC_state->num_code_blocks + ri->num_code_blocks,
5810      struct reg_code_block);
5811     pRExC_state->num_code_blocks += ri->num_code_blocks;
5812
5813     for (i=0; i < ri->num_code_blocks; i++) {
5814      struct reg_code_block *src, *dst;
5815      STRLEN offset =  orig_patlen
5816       + ReANY((REGEXP *)rx)->pre_prefix;
5817      assert(n < pRExC_state->num_code_blocks);
5818      src = &ri->code_blocks[i];
5819      dst = &pRExC_state->code_blocks[n];
5820      dst->start     = src->start + offset;
5821      dst->end     = src->end   + offset;
5822      dst->block     = src->block;
5823      dst->src_regex  = (REGEXP*) SvREFCNT_inc( (SV*)
5824            src->src_regex
5825             ? src->src_regex
5826             : (REGEXP*)rx);
5827      n++;
5828     }
5829    }
5830   }
5831  }
5832  /* avoid calling magic multiple times on a single element e.g. =~ $qr */
5833  if (alloced)
5834   SvSETMAGIC(pat);
5835
5836  return pat;
5837 }
5838
5839
5840
5841 /* see if there are any run-time code blocks in the pattern.
5842  * False positives are allowed */
5843
5844 static bool
5845 S_has_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
5846      char *pat, STRLEN plen)
5847 {
5848  int n = 0;
5849  STRLEN s;
5850
5851  for (s = 0; s < plen; s++) {
5852   if (n < pRExC_state->num_code_blocks
5853    && s == pRExC_state->code_blocks[n].start)
5854   {
5855    s = pRExC_state->code_blocks[n].end;
5856    n++;
5857    continue;
5858   }
5859   /* TODO ideally should handle [..], (#..), /#.../x to reduce false
5860   * positives here */
5861   if (pat[s] == '(' && s+2 <= plen && pat[s+1] == '?' &&
5862    (pat[s+2] == '{'
5863     || (s + 2 <= plen && pat[s+2] == '?' && pat[s+3] == '{'))
5864   )
5865    return 1;
5866  }
5867  return 0;
5868 }
5869
5870 /* Handle run-time code blocks. We will already have compiled any direct
5871  * or indirect literal code blocks. Now, take the pattern 'pat' and make a
5872  * copy of it, but with any literal code blocks blanked out and
5873  * appropriate chars escaped; then feed it into
5874  *
5875  *    eval "qr'modified_pattern'"
5876  *
5877  * For example,
5878  *
5879  *       a\bc(?{"this was literal"})def'ghi\\jkl(?{"this is runtime"})mno
5880  *
5881  * becomes
5882  *
5883  *    qr'a\\bc_______________________def\'ghi\\\\jkl(?{"this is runtime"})mno'
5884  *
5885  * After eval_sv()-ing that, grab any new code blocks from the returned qr
5886  * and merge them with any code blocks of the original regexp.
5887  *
5888  * If the pat is non-UTF8, while the evalled qr is UTF8, don't merge;
5889  * instead, just save the qr and return FALSE; this tells our caller that
5890  * the original pattern needs upgrading to utf8.
5891  */
5892
5893 static bool
5894 S_compile_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
5895  char *pat, STRLEN plen)
5896 {
5897  SV *qr;
5898
5899  GET_RE_DEBUG_FLAGS_DECL;
5900
5901  if (pRExC_state->runtime_code_qr) {
5902   /* this is the second time we've been called; this should
5903   * only happen if the main pattern got upgraded to utf8
5904   * during compilation; re-use the qr we compiled first time
5905   * round (which should be utf8 too)
5906   */
5907   qr = pRExC_state->runtime_code_qr;
5908   pRExC_state->runtime_code_qr = NULL;
5909   assert(RExC_utf8 && SvUTF8(qr));
5910  }
5911  else {
5912   int n = 0;
5913   STRLEN s;
5914   char *p, *newpat;
5915   int newlen = plen + 6; /* allow for "qr''x\0" extra chars */
5916   SV *sv, *qr_ref;
5917   dSP;
5918
5919   /* determine how many extra chars we need for ' and \ escaping */
5920   for (s = 0; s < plen; s++) {
5921    if (pat[s] == '\'' || pat[s] == '\\')
5922     newlen++;
5923   }
5924
5925   Newx(newpat, newlen, char);
5926   p = newpat;
5927   *p++ = 'q'; *p++ = 'r'; *p++ = '\'';
5928
5929   for (s = 0; s < plen; s++) {
5930    if (n < pRExC_state->num_code_blocks
5931     && s == pRExC_state->code_blocks[n].start)
5932    {
5933     /* blank out literal code block */
5934     assert(pat[s] == '(');
5935     while (s <= pRExC_state->code_blocks[n].end) {
5936      *p++ = '_';
5937      s++;
5938     }
5939     s--;
5940     n++;
5941     continue;
5942    }
5943    if (pat[s] == '\'' || pat[s] == '\\')
5944     *p++ = '\\';
5945    *p++ = pat[s];
5946   }
5947   *p++ = '\'';
5948   if (pRExC_state->pm_flags & RXf_PMf_EXTENDED)
5949    *p++ = 'x';
5950   *p++ = '\0';
5951   DEBUG_COMPILE_r({
5952    PerlIO_printf(Perl_debug_log,
5953     "%sre-parsing pattern for runtime code:%s %s\n",
5954     PL_colors[4],PL_colors[5],newpat);
5955   });
5956
5957   sv = newSVpvn_flags(newpat, p-newpat-1, RExC_utf8 ? SVf_UTF8 : 0);
5958   Safefree(newpat);
5959
5960   ENTER;
5961   SAVETMPS;
5962   save_re_context();
5963   PUSHSTACKi(PERLSI_REQUIRE);
5964   /* G_RE_REPARSING causes the toker to collapse \\ into \ when
5965   * parsing qr''; normally only q'' does this. It also alters
5966   * hints handling */
5967   eval_sv(sv, G_SCALAR|G_RE_REPARSING);
5968   SvREFCNT_dec_NN(sv);
5969   SPAGAIN;
5970   qr_ref = POPs;
5971   PUTBACK;
5972   {
5973    SV * const errsv = ERRSV;
5974    if (SvTRUE_NN(errsv))
5975    {
5976     Safefree(pRExC_state->code_blocks);
5977     /* use croak_sv ? */
5978     Perl_croak_nocontext("%"SVf, SVfARG(errsv));
5979    }
5980   }
5981   assert(SvROK(qr_ref));
5982   qr = SvRV(qr_ref);
5983   assert(SvTYPE(qr) == SVt_REGEXP && RX_ENGINE((REGEXP*)qr)->op_comp);
5984   /* the leaving below frees the tmp qr_ref.
5985   * Give qr a life of its own */
5986   SvREFCNT_inc(qr);
5987   POPSTACK;
5988   FREETMPS;
5989   LEAVE;
5990
5991  }
5992
5993  if (!RExC_utf8 && SvUTF8(qr)) {
5994   /* first time through; the pattern got upgraded; save the
5995   * qr for the next time through */
5996   assert(!pRExC_state->runtime_code_qr);
5997   pRExC_state->runtime_code_qr = qr;
5998   return 0;
5999  }
6000
6001
6002  /* extract any code blocks within the returned qr//  */
6003
6004
6005  /* merge the main (r1) and run-time (r2) code blocks into one */
6006  {
6007   RXi_GET_DECL(ReANY((REGEXP *)qr), r2);
6008   struct reg_code_block *new_block, *dst;
6009   RExC_state_t * const r1 = pRExC_state; /* convenient alias */
6010   int i1 = 0, i2 = 0;
6011
6012   if (!r2->num_code_blocks) /* we guessed wrong */
6013   {
6014    SvREFCNT_dec_NN(qr);
6015    return 1;
6016   }
6017
6018   Newx(new_block,
6019    r1->num_code_blocks + r2->num_code_blocks,
6020    struct reg_code_block);
6021   dst = new_block;
6022
6023   while (    i1 < r1->num_code_blocks
6024     || i2 < r2->num_code_blocks)
6025   {
6026    struct reg_code_block *src;
6027    bool is_qr = 0;
6028
6029    if (i1 == r1->num_code_blocks) {
6030     src = &r2->code_blocks[i2++];
6031     is_qr = 1;
6032    }
6033    else if (i2 == r2->num_code_blocks)
6034     src = &r1->code_blocks[i1++];
6035    else if (  r1->code_blocks[i1].start
6036      < r2->code_blocks[i2].start)
6037    {
6038     src = &r1->code_blocks[i1++];
6039     assert(src->end < r2->code_blocks[i2].start);
6040    }
6041    else {
6042     assert(  r1->code_blocks[i1].start
6043      > r2->code_blocks[i2].start);
6044     src = &r2->code_blocks[i2++];
6045     is_qr = 1;
6046     assert(src->end < r1->code_blocks[i1].start);
6047    }
6048
6049    assert(pat[src->start] == '(');
6050    assert(pat[src->end]   == ')');
6051    dst->start     = src->start;
6052    dst->end     = src->end;
6053    dst->block     = src->block;
6054    dst->src_regex  = is_qr ? (REGEXP*) SvREFCNT_inc( (SV*) qr)
6055          : src->src_regex;
6056    dst++;
6057   }
6058   r1->num_code_blocks += r2->num_code_blocks;
6059   Safefree(r1->code_blocks);
6060   r1->code_blocks = new_block;
6061  }
6062
6063  SvREFCNT_dec_NN(qr);
6064  return 1;
6065 }
6066
6067
6068 STATIC bool
6069 S_setup_longest(pTHX_ RExC_state_t *pRExC_state, SV* sv_longest,
6070      SV** rx_utf8, SV** rx_substr, SSize_t* rx_end_shift,
6071      SSize_t lookbehind, SSize_t offset, SSize_t *minlen,
6072      STRLEN longest_length, bool eol, bool meol)
6073 {
6074  /* This is the common code for setting up the floating and fixed length
6075  * string data extracted from Perl_re_op_compile() below.  Returns a boolean
6076  * as to whether succeeded or not */
6077
6078  I32 t;
6079  SSize_t ml;
6080
6081  if (! (longest_length
6082   || (eol /* Can't have SEOL and MULTI */
6083    && (! meol || (RExC_flags & RXf_PMf_MULTILINE)))
6084   )
6085    /* See comments for join_exact for why REG_UNFOLDED_MULTI_SEEN */
6086   || (RExC_seen & REG_UNFOLDED_MULTI_SEEN))
6087  {
6088   return FALSE;
6089  }
6090
6091  /* copy the information about the longest from the reg_scan_data
6092   over to the program. */
6093  if (SvUTF8(sv_longest)) {
6094   *rx_utf8 = sv_longest;
6095   *rx_substr = NULL;
6096  } else {
6097   *rx_substr = sv_longest;
6098   *rx_utf8 = NULL;
6099  }
6100  /* end_shift is how many chars that must be matched that
6101   follow this item. We calculate it ahead of time as once the
6102   lookbehind offset is added in we lose the ability to correctly
6103   calculate it.*/
6104  ml = minlen ? *(minlen) : (SSize_t)longest_length;
6105  *rx_end_shift = ml - offset
6106   - longest_length + (SvTAIL(sv_longest) != 0)
6107   + lookbehind;
6108
6109  t = (eol/* Can't have SEOL and MULTI */
6110   && (! meol || (RExC_flags & RXf_PMf_MULTILINE)));
6111  fbm_compile(sv_longest, t ? FBMcf_TAIL : 0);
6112
6113  return TRUE;
6114 }
6115
6116 /*
6117  * Perl_re_op_compile - the perl internal RE engine's function to compile a
6118  * regular expression into internal code.
6119  * The pattern may be passed either as:
6120  *    a list of SVs (patternp plus pat_count)
6121  *    a list of OPs (expr)
6122  * If both are passed, the SV list is used, but the OP list indicates
6123  * which SVs are actually pre-compiled code blocks
6124  *
6125  * The SVs in the list have magic and qr overloading applied to them (and
6126  * the list may be modified in-place with replacement SVs in the latter
6127  * case).
6128  *
6129  * If the pattern hasn't changed from old_re, then old_re will be
6130  * returned.
6131  *
6132  * eng is the current engine. If that engine has an op_comp method, then
6133  * handle directly (i.e. we assume that op_comp was us); otherwise, just
6134  * do the initial concatenation of arguments and pass on to the external
6135  * engine.
6136  *
6137  * If is_bare_re is not null, set it to a boolean indicating whether the
6138  * arg list reduced (after overloading) to a single bare regex which has
6139  * been returned (i.e. /$qr/).
6140  *
6141  * orig_rx_flags contains RXf_* flags. See perlreapi.pod for more details.
6142  *
6143  * pm_flags contains the PMf_* flags, typically based on those from the
6144  * pm_flags field of the related PMOP. Currently we're only interested in
6145  * PMf_HAS_CV, PMf_IS_QR, PMf_USE_RE_EVAL.
6146  *
6147  * We can't allocate space until we know how big the compiled form will be,
6148  * but we can't compile it (and thus know how big it is) until we've got a
6149  * place to put the code.  So we cheat:  we compile it twice, once with code
6150  * generation turned off and size counting turned on, and once "for real".
6151  * This also means that we don't allocate space until we are sure that the
6152  * thing really will compile successfully, and we never have to move the
6153  * code and thus invalidate pointers into it.  (Note that it has to be in
6154  * one piece because free() must be able to free it all.) [NB: not true in perl]
6155  *
6156  * Beware that the optimization-preparation code in here knows about some
6157  * of the structure of the compiled regexp.  [I'll say.]
6158  */
6159
6160 REGEXP *
6161 Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
6162      OP *expr, const regexp_engine* eng, REGEXP *old_re,
6163      bool *is_bare_re, U32 orig_rx_flags, U32 pm_flags)
6164 {
6165  dVAR;
6166  REGEXP *rx;
6167  struct regexp *r;
6168  regexp_internal *ri;
6169  STRLEN plen;
6170  char *exp;
6171  regnode *scan;
6172  I32 flags;
6173  SSize_t minlen = 0;
6174  U32 rx_flags;
6175  SV *pat;
6176  SV *code_blocksv = NULL;
6177  SV** new_patternp = patternp;
6178
6179  /* these are all flags - maybe they should be turned
6180  * into a single int with different bit masks */
6181  I32 sawlookahead = 0;
6182  I32 sawplus = 0;
6183  I32 sawopen = 0;
6184  I32 sawminmod = 0;
6185
6186  regex_charset initial_charset = get_regex_charset(orig_rx_flags);
6187  bool recompile = 0;
6188  bool runtime_code = 0;
6189  scan_data_t data;
6190  RExC_state_t RExC_state;
6191  RExC_state_t * const pRExC_state = &RExC_state;
6192 #ifdef TRIE_STUDY_OPT
6193  int restudied = 0;
6194  RExC_state_t copyRExC_state;
6195 #endif
6196  GET_RE_DEBUG_FLAGS_DECL;
6197
6198  PERL_ARGS_ASSERT_RE_OP_COMPILE;
6199
6200  DEBUG_r(if (!PL_colorset) reginitcolors());
6201
6202 #ifndef PERL_IN_XSUB_RE
6203  /* Initialize these here instead of as-needed, as is quick and avoids
6204  * having to test them each time otherwise */
6205  if (! PL_AboveLatin1) {
6206   PL_AboveLatin1 = _new_invlist_C_array(AboveLatin1_invlist);
6207   PL_Latin1 = _new_invlist_C_array(Latin1_invlist);
6208   PL_UpperLatin1 = _new_invlist_C_array(UpperLatin1_invlist);
6209   PL_utf8_foldable = _new_invlist_C_array(_Perl_Any_Folds_invlist);
6210   PL_HasMultiCharFold =
6211      _new_invlist_C_array(_Perl_Folds_To_Multi_Char_invlist);
6212  }
6213 #endif
6214
6215  pRExC_state->code_blocks = NULL;
6216  pRExC_state->num_code_blocks = 0;
6217
6218  if (is_bare_re)
6219   *is_bare_re = FALSE;
6220
6221  if (expr && (expr->op_type == OP_LIST ||
6222     (expr->op_type == OP_NULL && expr->op_targ == OP_LIST))) {
6223   /* allocate code_blocks if needed */
6224   OP *o;
6225   int ncode = 0;
6226
6227   for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling)
6228    if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL))
6229     ncode++; /* count of DO blocks */
6230   if (ncode) {
6231    pRExC_state->num_code_blocks = ncode;
6232    Newx(pRExC_state->code_blocks, ncode, struct reg_code_block);
6233   }
6234  }
6235
6236  if (!pat_count) {
6237   /* compile-time pattern with just OP_CONSTs and DO blocks */
6238
6239   int n;
6240   OP *o;
6241
6242   /* find how many CONSTs there are */
6243   assert(expr);
6244   n = 0;
6245   if (expr->op_type == OP_CONST)
6246    n = 1;
6247   else
6248    for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
6249     if (o->op_type == OP_CONST)
6250      n++;
6251    }
6252
6253   /* fake up an SV array */
6254
6255   assert(!new_patternp);
6256   Newx(new_patternp, n, SV*);
6257   SAVEFREEPV(new_patternp);
6258   pat_count = n;
6259
6260   n = 0;
6261   if (expr->op_type == OP_CONST)
6262    new_patternp[n] = cSVOPx_sv(expr);
6263   else
6264    for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
6265     if (o->op_type == OP_CONST)
6266      new_patternp[n++] = cSVOPo_sv;
6267    }
6268
6269  }
6270
6271  DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log,
6272   "Assembling pattern from %d elements%s\n", pat_count,
6273    orig_rx_flags & RXf_SPLIT ? " for split" : ""));
6274
6275  /* set expr to the first arg op */
6276
6277  if (pRExC_state->num_code_blocks
6278   && expr->op_type != OP_CONST)
6279  {
6280    expr = cLISTOPx(expr)->op_first;
6281    assert(   expr->op_type == OP_PUSHMARK
6282     || (expr->op_type == OP_NULL && expr->op_targ == OP_PUSHMARK)
6283     || expr->op_type == OP_PADRANGE);
6284    expr = expr->op_sibling;
6285  }
6286
6287  pat = S_concat_pat(aTHX_ pRExC_state, NULL, new_patternp, pat_count,
6288       expr, &recompile, NULL);
6289
6290  /* handle bare (possibly after overloading) regex: foo =~ $re */
6291  {
6292   SV *re = pat;
6293   if (SvROK(re))
6294    re = SvRV(re);
6295   if (SvTYPE(re) == SVt_REGEXP) {
6296    if (is_bare_re)
6297     *is_bare_re = TRUE;
6298    SvREFCNT_inc(re);
6299    Safefree(pRExC_state->code_blocks);
6300    DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log,
6301     "Precompiled pattern%s\n",
6302      orig_rx_flags & RXf_SPLIT ? " for split" : ""));
6303
6304    return (REGEXP*)re;
6305   }
6306  }
6307
6308  exp = SvPV_nomg(pat, plen);
6309
6310  if (!eng->op_comp) {
6311   if ((SvUTF8(pat) && IN_BYTES)
6312     || SvGMAGICAL(pat) || SvAMAGIC(pat))
6313   {
6314    /* make a temporary copy; either to convert to bytes,
6315    * or to avoid repeating get-magic / overloaded stringify */
6316    pat = newSVpvn_flags(exp, plen, SVs_TEMP |
6317           (IN_BYTES ? 0 : SvUTF8(pat)));
6318   }
6319   Safefree(pRExC_state->code_blocks);
6320   return CALLREGCOMP_ENG(eng, pat, orig_rx_flags);
6321  }
6322
6323  /* ignore the utf8ness if the pattern is 0 length */
6324  RExC_utf8 = RExC_orig_utf8 = (plen == 0 || IN_BYTES) ? 0 : SvUTF8(pat);
6325  RExC_uni_semantics = 0;
6326  RExC_contains_locale = 0;
6327  RExC_contains_i = 0;
6328  pRExC_state->runtime_code_qr = NULL;
6329
6330  DEBUG_COMPILE_r({
6331    SV *dsv= sv_newmortal();
6332    RE_PV_QUOTED_DECL(s, RExC_utf8, dsv, exp, plen, 60);
6333    PerlIO_printf(Perl_debug_log, "%sCompiling REx%s %s\n",
6334       PL_colors[4],PL_colors[5],s);
6335   });
6336
6337   redo_first_pass:
6338  /* we jump here if we upgrade the pattern to utf8 and have to
6339  * recompile */
6340
6341  if ((pm_flags & PMf_USE_RE_EVAL)
6342     /* this second condition covers the non-regex literal case,
6343     * i.e.  $foo =~ '(?{})'. */
6344     || (IN_PERL_COMPILETIME && (PL_hints & HINT_RE_EVAL))
6345  )
6346   runtime_code = S_has_runtime_code(aTHX_ pRExC_state, exp, plen);
6347
6348  /* return old regex if pattern hasn't changed */
6349  /* XXX: note in the below we have to check the flags as well as the
6350  * pattern.
6351  *
6352  * Things get a touch tricky as we have to compare the utf8 flag
6353  * independently from the compile flags.  */
6354
6355  if (   old_re
6356   && !recompile
6357   && !!RX_UTF8(old_re) == !!RExC_utf8
6358   && ( RX_COMPFLAGS(old_re) == ( orig_rx_flags & RXf_PMf_FLAGCOPYMASK ) )
6359   && RX_PRECOMP(old_re)
6360   && RX_PRELEN(old_re) == plen
6361   && memEQ(RX_PRECOMP(old_re), exp, plen)
6362   && !runtime_code /* with runtime code, always recompile */ )
6363  {
6364   Safefree(pRExC_state->code_blocks);
6365   return old_re;
6366  }
6367
6368  rx_flags = orig_rx_flags;
6369
6370  if (rx_flags & PMf_FOLD) {
6371   RExC_contains_i = 1;
6372  }
6373  if (RExC_utf8 && initial_charset == REGEX_DEPENDS_CHARSET) {
6374
6375   /* Set to use unicode semantics if the pattern is in utf8 and has the
6376   * 'depends' charset specified, as it means unicode when utf8  */
6377   set_regex_charset(&rx_flags, REGEX_UNICODE_CHARSET);
6378  }
6379
6380  RExC_precomp = exp;
6381  RExC_flags = rx_flags;
6382  RExC_pm_flags = pm_flags;
6383
6384  if (runtime_code) {
6385   if (TAINTING_get && TAINT_get)
6386    Perl_croak(aTHX_ "Eval-group in insecure regular expression");
6387
6388   if (!S_compile_runtime_code(aTHX_ pRExC_state, exp, plen)) {
6389    /* whoops, we have a non-utf8 pattern, whilst run-time code
6390    * got compiled as utf8. Try again with a utf8 pattern */
6391    S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &exp, &plen,
6392          pRExC_state->num_code_blocks);
6393    goto redo_first_pass;
6394   }
6395  }
6396  assert(!pRExC_state->runtime_code_qr);
6397
6398  RExC_sawback = 0;
6399
6400  RExC_seen = 0;
6401  RExC_maxlen = 0;
6402  RExC_in_lookbehind = 0;
6403  RExC_seen_zerolen = *exp == '^' ? -1 : 0;
6404  RExC_extralen = 0;
6405  RExC_override_recoding = 0;
6406  RExC_in_multi_char_class = 0;
6407
6408  /* First pass: determine size, legality. */
6409  RExC_parse = exp;
6410  RExC_start = exp;
6411  RExC_end = exp + plen;
6412  RExC_naughty = 0;
6413  RExC_npar = 1;
6414  RExC_nestroot = 0;
6415  RExC_size = 0L;
6416  RExC_emit = (regnode *) &RExC_emit_dummy;
6417  RExC_whilem_seen = 0;
6418  RExC_open_parens = NULL;
6419  RExC_close_parens = NULL;
6420  RExC_opend = NULL;
6421  RExC_paren_names = NULL;
6422 #ifdef DEBUGGING
6423  RExC_paren_name_list = NULL;
6424 #endif
6425  RExC_recurse = NULL;
6426  RExC_study_chunk_recursed = NULL;
6427  RExC_study_chunk_recursed_bytes= 0;
6428  RExC_recurse_count = 0;
6429  pRExC_state->code_index = 0;
6430
6431 #if 0 /* REGC() is (currently) a NOP at the first pass.
6432  * Clever compilers notice this and complain. --jhi */
6433  REGC((U8)REG_MAGIC, (char*)RExC_emit);
6434 #endif
6435  DEBUG_PARSE_r(
6436   PerlIO_printf(Perl_debug_log, "Starting first pass (sizing)\n");
6437   RExC_lastnum=0;
6438   RExC_lastparse=NULL;
6439  );
6440  /* reg may croak on us, not giving us a chance to free
6441  pRExC_state->code_blocks.  We cannot SAVEFREEPV it now, as we may
6442  need it to survive as long as the regexp (qr/(?{})/).
6443  We must check that code_blocksv is not already set, because we may
6444  have jumped back to restart the sizing pass. */
6445  if (pRExC_state->code_blocks && !code_blocksv) {
6446   code_blocksv = newSV_type(SVt_PV);
6447   SAVEFREESV(code_blocksv);
6448   SvPV_set(code_blocksv, (char *)pRExC_state->code_blocks);
6449   SvLEN_set(code_blocksv, 1); /*sufficient to make sv_clear free it*/
6450  }
6451  if (reg(pRExC_state, 0, &flags,1) == NULL) {
6452   /* It's possible to write a regexp in ascii that represents Unicode
6453   codepoints outside of the byte range, such as via \x{100}. If we
6454   detect such a sequence we have to convert the entire pattern to utf8
6455   and then recompile, as our sizing calculation will have been based
6456   on 1 byte == 1 character, but we will need to use utf8 to encode
6457   at least some part of the pattern, and therefore must convert the whole
6458   thing.
6459   -- dmq */
6460   if (flags & RESTART_UTF8) {
6461    S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &exp, &plen,
6462          pRExC_state->num_code_blocks);
6463    goto redo_first_pass;
6464   }
6465   Perl_croak(aTHX_ "panic: reg returned NULL to re_op_compile for sizing pass, flags=%#"UVxf"", (UV) flags);
6466  }
6467  if (code_blocksv)
6468   SvLEN_set(code_blocksv,0); /* no you can't have it, sv_clear */
6469
6470  DEBUG_PARSE_r({
6471   PerlIO_printf(Perl_debug_log,
6472    "Required size %"IVdf" nodes\n"
6473    "Starting second pass (creation)\n",
6474    (IV)RExC_size);
6475   RExC_lastnum=0;
6476   RExC_lastparse=NULL;
6477  });
6478
6479  /* The first pass could have found things that force Unicode semantics */
6480  if ((RExC_utf8 || RExC_uni_semantics)
6481   && get_regex_charset(rx_flags) == REGEX_DEPENDS_CHARSET)
6482  {
6483   set_regex_charset(&rx_flags, REGEX_UNICODE_CHARSET);
6484  }
6485
6486  /* Small enough for pointer-storage convention?
6487  If extralen==0, this means that we will not need long jumps. */
6488  if (RExC_size >= 0x10000L && RExC_extralen)
6489   RExC_size += RExC_extralen;
6490  else
6491   RExC_extralen = 0;
6492  if (RExC_whilem_seen > 15)
6493   RExC_whilem_seen = 15;
6494
6495  /* Allocate space and zero-initialize. Note, the two step process
6496  of zeroing when in debug mode, thus anything assigned has to
6497  happen after that */
6498  rx = (REGEXP*) newSV_type(SVt_REGEXP);
6499  r = ReANY(rx);
6500  Newxc(ri, sizeof(regexp_internal) + (unsigned)RExC_size * sizeof(regnode),
6501   char, regexp_internal);
6502  if ( r == NULL || ri == NULL )
6503   FAIL("Regexp out of space");
6504 #ifdef DEBUGGING
6505  /* avoid reading uninitialized memory in DEBUGGING code in study_chunk() */
6506  Zero(ri, sizeof(regexp_internal) + (unsigned)RExC_size * sizeof(regnode),
6507   char);
6508 #else
6509  /* bulk initialize base fields with 0. */
6510  Zero(ri, sizeof(regexp_internal), char);
6511 #endif
6512
6513  /* non-zero initialization begins here */
6514  RXi_SET( r, ri );
6515  r->engine= eng;
6516  r->extflags = rx_flags;
6517  RXp_COMPFLAGS(r) = orig_rx_flags & RXf_PMf_FLAGCOPYMASK;
6518
6519  if (pm_flags & PMf_IS_QR) {
6520   ri->code_blocks = pRExC_state->code_blocks;
6521   ri->num_code_blocks = pRExC_state->num_code_blocks;
6522  }
6523  else
6524  {
6525   int n;
6526   for (n = 0; n < pRExC_state->num_code_blocks; n++)
6527    if (pRExC_state->code_blocks[n].src_regex)
6528     SAVEFREESV(pRExC_state->code_blocks[n].src_regex);
6529   SAVEFREEPV(pRExC_state->code_blocks);
6530  }
6531
6532  {
6533   bool has_p     = ((r->extflags & RXf_PMf_KEEPCOPY) == RXf_PMf_KEEPCOPY);
6534   bool has_charset = (get_regex_charset(r->extflags)
6535              != REGEX_DEPENDS_CHARSET);
6536
6537   /* The caret is output if there are any defaults: if not all the STD
6538   * flags are set, or if no character set specifier is needed */
6539   bool has_default =
6540      (((r->extflags & RXf_PMf_STD_PMMOD) != RXf_PMf_STD_PMMOD)
6541      || ! has_charset);
6542   bool has_runon = ((RExC_seen & REG_RUN_ON_COMMENT_SEEN)
6543             == REG_RUN_ON_COMMENT_SEEN);
6544   U16 reganch = (U16)((r->extflags & RXf_PMf_STD_PMMOD)
6545        >> RXf_PMf_STD_PMMOD_SHIFT);
6546   const char *fptr = STD_PAT_MODS;        /*"msix"*/
6547   char *p;
6548   /* Allocate for the worst case, which is all the std flags are turned
6549   * on.  If more precision is desired, we could do a population count of
6550   * the flags set.  This could be done with a small lookup table, or by
6551   * shifting, masking and adding, or even, when available, assembly
6552   * language for a machine-language population count.
6553   * We never output a minus, as all those are defaults, so are
6554   * covered by the caret */
6555   const STRLEN wraplen = plen + has_p + has_runon
6556    + has_default       /* If needs a caret */
6557
6558     /* If needs a character set specifier */
6559    + ((has_charset) ? MAX_CHARSET_NAME_LENGTH : 0)
6560    + (sizeof(STD_PAT_MODS) - 1)
6561    + (sizeof("(?:)") - 1);
6562
6563   Newx(p, wraplen + 1, char); /* +1 for the ending NUL */
6564   r->xpv_len_u.xpvlenu_pv = p;
6565   if (RExC_utf8)
6566    SvFLAGS(rx) |= SVf_UTF8;
6567   *p++='('; *p++='?';
6568
6569   /* If a default, cover it using the caret */
6570   if (has_default) {
6571    *p++= DEFAULT_PAT_MOD;
6572   }
6573   if (has_charset) {
6574    STRLEN len;
6575    const char* const name = get_regex_charset_name(r->extflags, &len);
6576    Copy(name, p, len, char);
6577    p += len;
6578   }
6579   if (has_p)
6580    *p++ = KEEPCOPY_PAT_MOD; /*'p'*/
6581   {
6582    char ch;
6583    while((ch = *fptr++)) {
6584     if(reganch & 1)
6585      *p++ = ch;
6586     reganch >>= 1;
6587    }
6588   }
6589
6590   *p++ = ':';
6591   Copy(RExC_precomp, p, plen, char);
6592   assert ((RX_WRAPPED(rx) - p) < 16);
6593   r->pre_prefix = p - RX_WRAPPED(rx);
6594   p += plen;
6595   if (has_runon)
6596    *p++ = '\n';
6597   *p++ = ')';
6598   *p = 0;
6599   SvCUR_set(rx, p - RX_WRAPPED(rx));
6600  }
6601
6602  r->intflags = 0;
6603  r->nparens = RExC_npar - 1; /* set early to validate backrefs */
6604
6605  /* setup various meta data about recursion, this all requires
6606  * RExC_npar to be correctly set, and a bit later on we clear it */
6607  if (RExC_seen & REG_RECURSE_SEEN) {
6608   Newxz(RExC_open_parens, RExC_npar,regnode *);
6609   SAVEFREEPV(RExC_open_parens);
6610   Newxz(RExC_close_parens,RExC_npar,regnode *);
6611   SAVEFREEPV(RExC_close_parens);
6612  }
6613  if (RExC_seen & (REG_RECURSE_SEEN | REG_GOSTART_SEEN)) {
6614   /* Note, RExC_npar is 1 + the number of parens in a pattern.
6615   * So its 1 if there are no parens. */
6616   RExC_study_chunk_recursed_bytes= (RExC_npar >> 3) +
6617           ((RExC_npar & 0x07) != 0);
6618   Newx(RExC_study_chunk_recursed,
6619    RExC_study_chunk_recursed_bytes * RExC_npar, U8);
6620   SAVEFREEPV(RExC_study_chunk_recursed);
6621  }
6622
6623  /* Useful during FAIL. */
6624 #ifdef RE_TRACK_PATTERN_OFFSETS
6625  Newxz(ri->u.offsets, 2*RExC_size+1, U32); /* MJD 20001228 */
6626  DEBUG_OFFSETS_r(PerlIO_printf(Perl_debug_log,
6627       "%s %"UVuf" bytes for offset annotations.\n",
6628       ri->u.offsets ? "Got" : "Couldn't get",
6629       (UV)((2*RExC_size+1) * sizeof(U32))));
6630 #endif
6631  SetProgLen(ri,RExC_size);
6632  RExC_rx_sv = rx;
6633  RExC_rx = r;
6634  RExC_rxi = ri;
6635  REH_CALL_COMP_BEGIN_HOOK(pRExC_state->rx);
6636
6637  /* Second pass: emit code. */
6638  RExC_flags = rx_flags; /* don't let top level (?i) bleed */
6639  RExC_pm_flags = pm_flags;
6640  RExC_parse = exp;
6641  RExC_end = exp + plen;
6642  RExC_naughty = 0;
6643  RExC_npar = 1;
6644  RExC_emit_start = ri->program;
6645  RExC_emit = ri->program;
6646  RExC_emit_bound = ri->program + RExC_size + 1;
6647  pRExC_state->code_index = 0;
6648
6649  REGC((U8)REG_MAGIC, (char*) RExC_emit++);
6650  if (reg(pRExC_state, 0, &flags,1) == NULL) {
6651   ReREFCNT_dec(rx);
6652   Perl_croak(aTHX_ "panic: reg returned NULL to re_op_compile for generation pass, flags=%#"UVxf"", (UV) flags);
6653  }
6654  /* XXXX To minimize changes to RE engine we always allocate
6655  3-units-long substrs field. */
6656  Newx(r->substrs, 1, struct reg_substr_data);
6657  if (RExC_recurse_count) {
6658   Newxz(RExC_recurse,RExC_recurse_count,regnode *);
6659   SAVEFREEPV(RExC_recurse);
6660  }
6661
6662 reStudy:
6663  r->minlen = minlen = sawlookahead = sawplus = sawopen = sawminmod = 0;
6664  Zero(r->substrs, 1, struct reg_substr_data);
6665  if (RExC_study_chunk_recursed)
6666   Zero(RExC_study_chunk_recursed,
6667    RExC_study_chunk_recursed_bytes * RExC_npar, U8);
6668
6669 #ifdef TRIE_STUDY_OPT
6670  if (!restudied) {
6671   StructCopy(&zero_scan_data, &data, scan_data_t);
6672   copyRExC_state = RExC_state;
6673  } else {
6674   U32 seen=RExC_seen;
6675   DEBUG_OPTIMISE_r(PerlIO_printf(Perl_debug_log,"Restudying\n"));
6676
6677   RExC_state = copyRExC_state;
6678   if (seen & REG_TOP_LEVEL_BRANCHES_SEEN)
6679    RExC_seen |= REG_TOP_LEVEL_BRANCHES_SEEN;
6680   else
6681    RExC_seen &= ~REG_TOP_LEVEL_BRANCHES_SEEN;
6682   StructCopy(&zero_scan_data, &data, scan_data_t);
6683  }
6684 #else
6685  StructCopy(&zero_scan_data, &data, scan_data_t);
6686 #endif
6687
6688  /* Dig out information for optimizations. */
6689  r->extflags = RExC_flags; /* was pm_op */
6690  /*dmq: removed as part of de-PMOP: pm->op_pmflags = RExC_flags; */
6691
6692  if (UTF)
6693   SvUTF8_on(rx); /* Unicode in it? */
6694  ri->regstclass = NULL;
6695  if (RExC_naughty >= 10) /* Probably an expensive pattern. */
6696   r->intflags |= PREGf_NAUGHTY;
6697  scan = ri->program + 1;  /* First BRANCH. */
6698
6699  /* testing for BRANCH here tells us whether there is "must appear"
6700  data in the pattern. If there is then we can use it for optimisations */
6701  if (!(RExC_seen & REG_TOP_LEVEL_BRANCHES_SEEN)) { /*  Only one top-level choice.
6702             */
6703   SSize_t fake;
6704   STRLEN longest_float_length, longest_fixed_length;
6705   regnode_ssc ch_class; /* pointed to by data */
6706   int stclass_flag;
6707   SSize_t last_close = 0; /* pointed to by data */
6708   regnode *first= scan;
6709   regnode *first_next= regnext(first);
6710   /*
6711   * Skip introductions and multiplicators >= 1
6712   * so that we can extract the 'meat' of the pattern that must
6713   * match in the large if() sequence following.
6714   * NOTE that EXACT is NOT covered here, as it is normally
6715   * picked up by the optimiser separately.
6716   *
6717   * This is unfortunate as the optimiser isnt handling lookahead
6718   * properly currently.
6719   *
6720   */
6721   while ((OP(first) == OPEN && (sawopen = 1)) ||
6722    /* An OR of *one* alternative - should not happen now. */
6723    (OP(first) == BRANCH && OP(first_next) != BRANCH) ||
6724    /* for now we can't handle lookbehind IFMATCH*/
6725    (OP(first) == IFMATCH && !first->flags && (sawlookahead = 1)) ||
6726    (OP(first) == PLUS) ||
6727    (OP(first) == MINMOD) ||
6728    /* An {n,m} with n>0 */
6729    (PL_regkind[OP(first)] == CURLY && ARG1(first) > 0) ||
6730    (OP(first) == NOTHING && PL_regkind[OP(first_next)] != END ))
6731   {
6732     /*
6733     * the only op that could be a regnode is PLUS, all the rest
6734     * will be regnode_1 or regnode_2.
6735     *
6736     * (yves doesn't think this is true)
6737     */
6738     if (OP(first) == PLUS)
6739      sawplus = 1;
6740     else {
6741      if (OP(first) == MINMOD)
6742       sawminmod = 1;
6743      first += regarglen[OP(first)];
6744     }
6745     first = NEXTOPER(first);
6746     first_next= regnext(first);
6747   }
6748
6749   /* Starting-point info. */
6750  again:
6751   DEBUG_PEEP("first:",first,0);
6752   /* Ignore EXACT as we deal with it later. */
6753   if (PL_regkind[OP(first)] == EXACT) {
6754    if (OP(first) == EXACT)
6755     NOOP; /* Empty, get anchored substr later. */
6756    else
6757     ri->regstclass = first;
6758   }
6759 #ifdef TRIE_STCLASS
6760   else if (PL_regkind[OP(first)] == TRIE &&
6761     ((reg_trie_data *)ri->data->data[ ARG(first) ])->minlen>0)
6762   {
6763    regnode *trie_op;
6764    /* this can happen only on restudy */
6765    if ( OP(first) == TRIE ) {
6766     struct regnode_1 *trieop = (struct regnode_1 *)
6767      PerlMemShared_calloc(1, sizeof(struct regnode_1));
6768     StructCopy(first,trieop,struct regnode_1);
6769     trie_op=(regnode *)trieop;
6770    } else {
6771     struct regnode_charclass *trieop = (struct regnode_charclass *)
6772      PerlMemShared_calloc(1, sizeof(struct regnode_charclass));
6773     StructCopy(first,trieop,struct regnode_charclass);
6774     trie_op=(regnode *)trieop;
6775    }
6776    OP(trie_op)+=2;
6777    make_trie_failtable(pRExC_state, (regnode *)first, trie_op, 0);
6778    ri->regstclass = trie_op;
6779   }
6780 #endif
6781   else if (REGNODE_SIMPLE(OP(first)))
6782    ri->regstclass = first;
6783   else if (PL_regkind[OP(first)] == BOUND ||
6784     PL_regkind[OP(first)] == NBOUND)
6785    ri->regstclass = first;
6786   else if (PL_regkind[OP(first)] == BOL) {
6787    r->intflags |= (OP(first) == MBOL
6788       ? PREGf_ANCH_MBOL
6789       : (OP(first) == SBOL
6790        ? PREGf_ANCH_SBOL
6791        : PREGf_ANCH_BOL));
6792    first = NEXTOPER(first);
6793    goto again;
6794   }
6795   else if (OP(first) == GPOS) {
6796    r->intflags |= PREGf_ANCH_GPOS;
6797    first = NEXTOPER(first);
6798    goto again;
6799   }
6800   else if ((!sawopen || !RExC_sawback) &&
6801    (OP(first) == STAR &&
6802    PL_regkind[OP(NEXTOPER(first))] == REG_ANY) &&
6803    !(r->intflags & PREGf_ANCH) && !pRExC_state->num_code_blocks)
6804   {
6805    /* turn .* into ^.* with an implied $*=1 */
6806    const int type =
6807     (OP(NEXTOPER(first)) == REG_ANY)
6808      ? PREGf_ANCH_MBOL
6809      : PREGf_ANCH_SBOL;
6810    r->intflags |= (type | PREGf_IMPLICIT);
6811    first = NEXTOPER(first);
6812    goto again;
6813   }
6814   if (sawplus && !sawminmod && !sawlookahead
6815    && (!sawopen || !RExC_sawback)
6816    && !pRExC_state->num_code_blocks) /* May examine pos and $& */
6817    /* x+ must match at the 1st pos of run of x's */
6818    r->intflags |= PREGf_SKIP;
6819
6820   /* Scan is after the zeroth branch, first is atomic matcher. */
6821 #ifdef TRIE_STUDY_OPT
6822   DEBUG_PARSE_r(
6823    if (!restudied)
6824     PerlIO_printf(Perl_debug_log, "first at %"IVdf"\n",
6825        (IV)(first - scan + 1))
6826   );
6827 #else
6828   DEBUG_PARSE_r(
6829    PerlIO_printf(Perl_debug_log, "first at %"IVdf"\n",
6830     (IV)(first - scan + 1))
6831   );
6832 #endif
6833
6834
6835   /*
6836   * If there's something expensive in the r.e., find the
6837   * longest literal string that must appear and make it the
6838   * regmust.  Resolve ties in favor of later strings, since
6839   * the regstart check works with the beginning of the r.e.
6840   * and avoiding duplication strengthens checking.  Not a
6841   * strong reason, but sufficient in the absence of others.
6842   * [Now we resolve ties in favor of the earlier string if
6843   * it happens that c_offset_min has been invalidated, since the
6844   * earlier string may buy us something the later one won't.]
6845   */
6846
6847   data.longest_fixed = newSVpvs("");
6848   data.longest_float = newSVpvs("");
6849   data.last_found = newSVpvs("");
6850   data.longest = &(data.longest_fixed);
6851   ENTER_with_name("study_chunk");
6852   SAVEFREESV(data.longest_fixed);
6853   SAVEFREESV(data.longest_float);
6854   SAVEFREESV(data.last_found);
6855   first = scan;
6856   if (!ri->regstclass) {
6857    ssc_init(pRExC_state, &ch_class);
6858    data.start_class = &ch_class;
6859    stclass_flag = SCF_DO_STCLASS_AND;
6860   } else    /* XXXX Check for BOUND? */
6861    stclass_flag = 0;
6862   data.last_closep = &last_close;
6863
6864   DEBUG_RExC_seen();
6865   minlen = study_chunk(pRExC_state, &first, &minlen, &fake,
6866        scan + RExC_size, /* Up to end */
6867    &data, -1, 0, NULL,
6868    SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flag
6869       | (restudied ? SCF_TRIE_DOING_RESTUDY : 0),
6870    0);
6871
6872
6873   CHECK_RESTUDY_GOTO_butfirst(LEAVE_with_name("study_chunk"));
6874
6875
6876   if ( RExC_npar == 1 && data.longest == &(data.longest_fixed)
6877    && data.last_start_min == 0 && data.last_end > 0
6878    && !RExC_seen_zerolen
6879    && !(RExC_seen & REG_VERBARG_SEEN)
6880    && !(RExC_seen & REG_GPOS_SEEN)
6881   ){
6882    r->extflags |= RXf_CHECK_ALL;
6883   }
6884   scan_commit(pRExC_state, &data,&minlen,0);
6885
6886   longest_float_length = CHR_SVLEN(data.longest_float);
6887
6888   if (! ((SvCUR(data.longest_fixed)  /* ok to leave SvCUR */
6889     && data.offset_fixed == data.offset_float_min
6890     && SvCUR(data.longest_fixed) == SvCUR(data.longest_float)))
6891    && S_setup_longest (aTHX_ pRExC_state,
6892          data.longest_float,
6893          &(r->float_utf8),
6894          &(r->float_substr),
6895          &(r->float_end_shift),
6896          data.lookbehind_float,
6897          data.offset_float_min,
6898          data.minlen_float,
6899          longest_float_length,
6900          cBOOL(data.flags & SF_FL_BEFORE_EOL),
6901          cBOOL(data.flags & SF_FL_BEFORE_MEOL)))
6902   {
6903    r->float_min_offset = data.offset_float_min - data.lookbehind_float;
6904    r->float_max_offset = data.offset_float_max;
6905    if (data.offset_float_max < SSize_t_MAX) /* Don't offset infinity */
6906     r->float_max_offset -= data.lookbehind_float;
6907    SvREFCNT_inc_simple_void_NN(data.longest_float);
6908   }
6909   else {
6910    r->float_substr = r->float_utf8 = NULL;
6911    longest_float_length = 0;
6912   }
6913
6914   longest_fixed_length = CHR_SVLEN(data.longest_fixed);
6915
6916   if (S_setup_longest (aTHX_ pRExC_state,
6917         data.longest_fixed,
6918         &(r->anchored_utf8),
6919         &(r->anchored_substr),
6920         &(r->anchored_end_shift),
6921         data.lookbehind_fixed,
6922         data.offset_fixed,
6923         data.minlen_fixed,
6924         longest_fixed_length,
6925         cBOOL(data.flags & SF_FIX_BEFORE_EOL),
6926         cBOOL(data.flags & SF_FIX_BEFORE_MEOL)))
6927   {
6928    r->anchored_offset = data.offset_fixed - data.lookbehind_fixed;
6929    SvREFCNT_inc_simple_void_NN(data.longest_fixed);
6930   }
6931   else {
6932    r->anchored_substr = r->anchored_utf8 = NULL;
6933    longest_fixed_length = 0;
6934   }
6935   LEAVE_with_name("study_chunk");
6936
6937   if (ri->regstclass
6938    && (OP(ri->regstclass) == REG_ANY || OP(ri->regstclass) == SANY))
6939    ri->regstclass = NULL;
6940
6941   if ((!(r->anchored_substr || r->anchored_utf8) || r->anchored_offset)
6942    && stclass_flag
6943    && ! (ANYOF_FLAGS(data.start_class) & ANYOF_EMPTY_STRING)
6944    && !ssc_is_anything(data.start_class))
6945   {
6946    const U32 n = add_data(pRExC_state, STR_WITH_LEN("f"));
6947
6948    ssc_finalize(pRExC_state, data.start_class);
6949
6950    Newx(RExC_rxi->data->data[n], 1, regnode_ssc);
6951    StructCopy(data.start_class,
6952      (regnode_ssc*)RExC_rxi->data->data[n],
6953      regnode_ssc);
6954    ri->regstclass = (regnode*)RExC_rxi->data->data[n];
6955    r->intflags &= ~PREGf_SKIP; /* Used in find_byclass(). */
6956    DEBUG_COMPILE_r({ SV *sv = sv_newmortal();
6957      regprop(r, sv, (regnode*)data.start_class, NULL);
6958      PerlIO_printf(Perl_debug_log,
6959          "synthetic stclass \"%s\".\n",
6960          SvPVX_const(sv));});
6961    data.start_class = NULL;
6962   }
6963
6964   /* A temporary algorithm prefers floated substr to fixed one to dig
6965   * more info. */
6966   if (longest_fixed_length > longest_float_length) {
6967    r->substrs->check_ix = 0;
6968    r->check_end_shift = r->anchored_end_shift;
6969    r->check_substr = r->anchored_substr;
6970    r->check_utf8 = r->anchored_utf8;
6971    r->check_offset_min = r->check_offset_max = r->anchored_offset;
6972    if (r->intflags & (PREGf_ANCH_SBOL|PREGf_ANCH_GPOS))
6973     r->intflags |= PREGf_NOSCAN;
6974   }
6975   else {
6976    r->substrs->check_ix = 1;
6977    r->check_end_shift = r->float_end_shift;
6978    r->check_substr = r->float_substr;
6979    r->check_utf8 = r->float_utf8;
6980    r->check_offset_min = r->float_min_offset;
6981    r->check_offset_max = r->float_max_offset;
6982   }
6983   if ((r->check_substr || r->check_utf8) ) {
6984    r->extflags |= RXf_USE_INTUIT;
6985    if (SvTAIL(r->check_substr ? r->check_substr : r->check_utf8))
6986     r->extflags |= RXf_INTUIT_TAIL;
6987   }
6988   r->substrs->data[0].max_offset = r->substrs->data[0].min_offset;
6989
6990   /* XXX Unneeded? dmq (shouldn't as this is handled elsewhere)
6991   if ( (STRLEN)minlen < longest_float_length )
6992    minlen= longest_float_length;
6993   if ( (STRLEN)minlen < longest_fixed_length )
6994    minlen= longest_fixed_length;
6995   */
6996  }
6997  else {
6998   /* Several toplevels. Best we can is to set minlen. */
6999   SSize_t fake;
7000   regnode_ssc ch_class;
7001   SSize_t last_close = 0;
7002
7003   DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log, "\nMulti Top Level\n"));
7004
7005   scan = ri->program + 1;
7006   ssc_init(pRExC_state, &ch_class);
7007   data.start_class = &ch_class;
7008   data.last_closep = &last_close;
7009
7010   DEBUG_RExC_seen();
7011   minlen = study_chunk(pRExC_state,
7012    &scan, &minlen, &fake, scan + RExC_size, &data, -1, 0, NULL,
7013    SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS|(restudied
7014              ? SCF_TRIE_DOING_RESTUDY
7015              : 0),
7016    0);
7017
7018   CHECK_RESTUDY_GOTO_butfirst(NOOP);
7019
7020   r->check_substr = r->check_utf8 = r->anchored_substr = r->anchored_utf8
7021     = r->float_substr = r->float_utf8 = NULL;
7022
7023   if (! (ANYOF_FLAGS(data.start_class) & ANYOF_EMPTY_STRING)
7024    && ! ssc_is_anything(data.start_class))
7025   {
7026    const U32 n = add_data(pRExC_state, STR_WITH_LEN("f"));
7027
7028    ssc_finalize(pRExC_state, data.start_class);
7029
7030    Newx(RExC_rxi->data->data[n], 1, regnode_ssc);
7031    StructCopy(data.start_class,
7032      (regnode_ssc*)RExC_rxi->data->data[n],
7033      regnode_ssc);
7034    ri->regstclass = (regnode*)RExC_rxi->data->data[n];
7035    r->intflags &= ~PREGf_SKIP; /* Used in find_byclass(). */
7036    DEBUG_COMPILE_r({ SV* sv = sv_newmortal();
7037      regprop(r, sv, (regnode*)data.start_class, NULL);
7038      PerlIO_printf(Perl_debug_log,
7039          "synthetic stclass \"%s\".\n",
7040          SvPVX_const(sv));});
7041    data.start_class = NULL;
7042   }
7043  }
7044
7045  if (RExC_seen & REG_UNBOUNDED_QUANTIFIER_SEEN) {
7046   r->extflags |= RXf_UNBOUNDED_QUANTIFIER_SEEN;
7047   r->maxlen = REG_INFTY;
7048  }
7049  else {
7050   r->maxlen = RExC_maxlen;
7051  }
7052
7053  /* Guard against an embedded (?=) or (?<=) with a longer minlen than
7054  the "real" pattern. */
7055  DEBUG_OPTIMISE_r({
7056   PerlIO_printf(Perl_debug_log,"minlen: %"IVdf" r->minlen:%"IVdf" maxlen:%ld\n",
7057      (IV)minlen, (IV)r->minlen, RExC_maxlen);
7058  });
7059  r->minlenret = minlen;
7060  if (r->minlen < minlen)
7061   r->minlen = minlen;
7062
7063  if (RExC_seen & REG_GPOS_SEEN)
7064   r->intflags |= PREGf_GPOS_SEEN;
7065  if (RExC_seen & REG_LOOKBEHIND_SEEN)
7066   r->extflags |= RXf_NO_INPLACE_SUBST; /* inplace might break the
7067             lookbehind */
7068  if (pRExC_state->num_code_blocks)
7069   r->extflags |= RXf_EVAL_SEEN;
7070  if (RExC_seen & REG_CANY_SEEN)
7071   r->intflags |= PREGf_CANY_SEEN;
7072  if (RExC_seen & REG_VERBARG_SEEN)
7073  {
7074   r->intflags |= PREGf_VERBARG_SEEN;
7075   r->extflags |= RXf_NO_INPLACE_SUBST; /* don't understand this! Yves */
7076  }
7077  if (RExC_seen & REG_CUTGROUP_SEEN)
7078   r->intflags |= PREGf_CUTGROUP_SEEN;
7079  if (pm_flags & PMf_USE_RE_EVAL)
7080   r->intflags |= PREGf_USE_RE_EVAL;
7081  if (RExC_paren_names)
7082   RXp_PAREN_NAMES(r) = MUTABLE_HV(SvREFCNT_inc(RExC_paren_names));
7083  else
7084   RXp_PAREN_NAMES(r) = NULL;
7085
7086  /* If we have seen an anchor in our pattern then we set the extflag RXf_IS_ANCHORED
7087  * so it can be used in pp.c */
7088  if (r->intflags & PREGf_ANCH)
7089   r->extflags |= RXf_IS_ANCHORED;
7090
7091
7092  {
7093   /* this is used to identify "special" patterns that might result
7094   * in Perl NOT calling the regex engine and instead doing the match "itself",
7095   * particularly special cases in split//. By having the regex compiler
7096   * do this pattern matching at a regop level (instead of by inspecting the pattern)
7097   * we avoid weird issues with equivalent patterns resulting in different behavior,
7098   * AND we allow non Perl engines to get the same optimizations by the setting the
7099   * flags appropriately - Yves */
7100   regnode *first = ri->program + 1;
7101   U8 fop = OP(first);
7102   regnode *next = NEXTOPER(first);
7103   U8 nop = OP(next);
7104
7105   if (PL_regkind[fop] == NOTHING && nop == END)
7106    r->extflags |= RXf_NULL;
7107   else if (PL_regkind[fop] == BOL && nop == END)
7108    r->extflags |= RXf_START_ONLY;
7109   else if (fop == PLUS
7110     && PL_regkind[nop] == POSIXD && FLAGS(next) == _CC_SPACE
7111     && OP(regnext(first)) == END)
7112    r->extflags |= RXf_WHITE;
7113   else if ( r->extflags & RXf_SPLIT
7114     && fop == EXACT
7115     && STR_LEN(first) == 1
7116     && *(STRING(first)) == ' '
7117     && OP(regnext(first)) == END )
7118    r->extflags |= (RXf_SKIPWHITE|RXf_WHITE);
7119
7120  }
7121
7122  if (RExC_contains_locale) {
7123   RXp_EXTFLAGS(r) |= RXf_TAINTED;
7124  }
7125
7126 #ifdef DEBUGGING
7127  if (RExC_paren_names) {
7128   ri->name_list_idx = add_data( pRExC_state, STR_WITH_LEN("a"));
7129   ri->data->data[ri->name_list_idx]
7130         = (void*)SvREFCNT_inc(RExC_paren_name_list);
7131  } else
7132 #endif
7133   ri->name_list_idx = 0;
7134
7135  if (RExC_recurse_count) {
7136   for ( ; RExC_recurse_count ; RExC_recurse_count-- ) {
7137    const regnode *scan = RExC_recurse[RExC_recurse_count-1];
7138    ARG2L_SET( scan, RExC_open_parens[ARG(scan)-1] - scan );
7139   }
7140  }
7141  Newxz(r->offs, RExC_npar, regexp_paren_pair);
7142  /* assume we don't need to swap parens around before we match */
7143
7144  DEBUG_DUMP_r({
7145   DEBUG_RExC_seen();
7146   PerlIO_printf(Perl_debug_log,"Final program:\n");
7147   regdump(r);
7148  });
7149 #ifdef RE_TRACK_PATTERN_OFFSETS
7150  DEBUG_OFFSETS_r(if (ri->u.offsets) {
7151   const STRLEN len = ri->u.offsets[0];
7152   STRLEN i;
7153   GET_RE_DEBUG_FLAGS_DECL;
7154   PerlIO_printf(Perl_debug_log,
7155      "Offsets: [%"UVuf"]\n\t", (UV)ri->u.offsets[0]);
7156   for (i = 1; i <= len; i++) {
7157    if (ri->u.offsets[i*2-1] || ri->u.offsets[i*2])
7158     PerlIO_printf(Perl_debug_log, "%"UVuf":%"UVuf"[%"UVuf"] ",
7159     (UV)i, (UV)ri->u.offsets[i*2-1], (UV)ri->u.offsets[i*2]);
7160    }
7161   PerlIO_printf(Perl_debug_log, "\n");
7162  });
7163 #endif
7164
7165 #ifdef USE_ITHREADS
7166  /* under ithreads the ?pat? PMf_USED flag on the pmop is simulated
7167  * by setting the regexp SV to readonly-only instead. If the
7168  * pattern's been recompiled, the USEDness should remain. */
7169  if (old_re && SvREADONLY(old_re))
7170   SvREADONLY_on(rx);
7171 #endif
7172  return rx;
7173 }
7174
7175
7176 SV*
7177 Perl_reg_named_buff(pTHX_ REGEXP * const rx, SV * const key, SV * const value,
7178      const U32 flags)
7179 {
7180  PERL_ARGS_ASSERT_REG_NAMED_BUFF;
7181
7182  PERL_UNUSED_ARG(value);
7183
7184  if (flags & RXapif_FETCH) {
7185   return reg_named_buff_fetch(rx, key, flags);
7186  } else if (flags & (RXapif_STORE | RXapif_DELETE | RXapif_CLEAR)) {
7187   Perl_croak_no_modify();
7188   return NULL;
7189  } else if (flags & RXapif_EXISTS) {
7190   return reg_named_buff_exists(rx, key, flags)
7191    ? &PL_sv_yes
7192    : &PL_sv_no;
7193  } else if (flags & RXapif_REGNAMES) {
7194   return reg_named_buff_all(rx, flags);
7195  } else if (flags & (RXapif_SCALAR | RXapif_REGNAMES_COUNT)) {
7196   return reg_named_buff_scalar(rx, flags);
7197  } else {
7198   Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff", (int)flags);
7199   return NULL;
7200  }
7201 }
7202
7203 SV*
7204 Perl_reg_named_buff_iter(pTHX_ REGEXP * const rx, const SV * const lastkey,
7205       const U32 flags)
7206 {
7207  PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER;
7208  PERL_UNUSED_ARG(lastkey);
7209
7210  if (flags & RXapif_FIRSTKEY)
7211   return reg_named_buff_firstkey(rx, flags);
7212  else if (flags & RXapif_NEXTKEY)
7213   return reg_named_buff_nextkey(rx, flags);
7214  else {
7215   Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_iter",
7216            (int)flags);
7217   return NULL;
7218  }
7219 }
7220
7221 SV*
7222 Perl_reg_named_buff_fetch(pTHX_ REGEXP * const r, SV * const namesv,
7223       const U32 flags)
7224 {
7225  AV *retarray = NULL;
7226  SV *ret;
7227  struct regexp *const rx = ReANY(r);
7228
7229  PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH;
7230
7231  if (flags & RXapif_ALL)
7232   retarray=newAV();
7233
7234  if (rx && RXp_PAREN_NAMES(rx)) {
7235   HE *he_str = hv_fetch_ent( RXp_PAREN_NAMES(rx), namesv, 0, 0 );
7236   if (he_str) {
7237    IV i;
7238    SV* sv_dat=HeVAL(he_str);
7239    I32 *nums=(I32*)SvPVX(sv_dat);
7240    for ( i=0; i<SvIVX(sv_dat); i++ ) {
7241     if ((I32)(rx->nparens) >= nums[i]
7242      && rx->offs[nums[i]].start != -1
7243      && rx->offs[nums[i]].end != -1)
7244     {
7245      ret = newSVpvs("");
7246      CALLREG_NUMBUF_FETCH(r,nums[i],ret);
7247      if (!retarray)
7248       return ret;
7249     } else {
7250      if (retarray)
7251       ret = newSVsv(&PL_sv_undef);
7252     }
7253     if (retarray)
7254      av_push(retarray, ret);
7255    }
7256    if (retarray)
7257     return newRV_noinc(MUTABLE_SV(retarray));
7258   }
7259  }
7260  return NULL;
7261 }
7262
7263 bool
7264 Perl_reg_named_buff_exists(pTHX_ REGEXP * const r, SV * const key,
7265       const U32 flags)
7266 {
7267  struct regexp *const rx = ReANY(r);
7268
7269  PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS;
7270
7271  if (rx && RXp_PAREN_NAMES(rx)) {
7272   if (flags & RXapif_ALL) {
7273    return hv_exists_ent(RXp_PAREN_NAMES(rx), key, 0);
7274   } else {
7275    SV *sv = CALLREG_NAMED_BUFF_FETCH(r, key, flags);
7276    if (sv) {
7277     SvREFCNT_dec_NN(sv);
7278     return TRUE;
7279    } else {
7280     return FALSE;
7281    }
7282   }
7283  } else {
7284   return FALSE;
7285  }
7286 }
7287
7288 SV*
7289 Perl_reg_named_buff_firstkey(pTHX_ REGEXP * const r, const U32 flags)
7290 {
7291  struct regexp *const rx = ReANY(r);
7292
7293  PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY;
7294
7295  if ( rx && RXp_PAREN_NAMES(rx) ) {
7296   (void)hv_iterinit(RXp_PAREN_NAMES(rx));
7297
7298   return CALLREG_NAMED_BUFF_NEXTKEY(r, NULL, flags & ~RXapif_FIRSTKEY);
7299  } else {
7300   return FALSE;
7301  }
7302 }
7303
7304 SV*
7305 Perl_reg_named_buff_nextkey(pTHX_ REGEXP * const r, const U32 flags)
7306 {
7307  struct regexp *const rx = ReANY(r);
7308  GET_RE_DEBUG_FLAGS_DECL;
7309
7310  PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY;
7311
7312  if (rx && RXp_PAREN_NAMES(rx)) {
7313   HV *hv = RXp_PAREN_NAMES(rx);
7314   HE *temphe;
7315   while ( (temphe = hv_iternext_flags(hv,0)) ) {
7316    IV i;
7317    IV parno = 0;
7318    SV* sv_dat = HeVAL(temphe);
7319    I32 *nums = (I32*)SvPVX(sv_dat);
7320    for ( i = 0; i < SvIVX(sv_dat); i++ ) {
7321     if ((I32)(rx->lastparen) >= nums[i] &&
7322      rx->offs[nums[i]].start != -1 &&
7323      rx->offs[nums[i]].end != -1)
7324     {
7325      parno = nums[i];
7326      break;
7327     }
7328    }
7329    if (parno || flags & RXapif_ALL) {
7330     return newSVhek(HeKEY_hek(temphe));
7331    }
7332   }
7333  }
7334  return NULL;
7335 }
7336
7337 SV*
7338 Perl_reg_named_buff_scalar(pTHX_ REGEXP * const r, const U32 flags)
7339 {
7340  SV *ret;
7341  AV *av;
7342  SSize_t length;
7343  struct regexp *const rx = ReANY(r);
7344
7345  PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR;
7346
7347  if (rx && RXp_PAREN_NAMES(rx)) {
7348   if (flags & (RXapif_ALL | RXapif_REGNAMES_COUNT)) {
7349    return newSViv(HvTOTALKEYS(RXp_PAREN_NAMES(rx)));
7350   } else if (flags & RXapif_ONE) {
7351    ret = CALLREG_NAMED_BUFF_ALL(r, (flags | RXapif_REGNAMES));
7352    av = MUTABLE_AV(SvRV(ret));
7353    length = av_tindex(av);
7354    SvREFCNT_dec_NN(ret);
7355    return newSViv(length + 1);
7356   } else {
7357    Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_scalar",
7358             (int)flags);
7359    return NULL;
7360   }
7361  }
7362  return &PL_sv_undef;
7363 }
7364
7365 SV*
7366 Perl_reg_named_buff_all(pTHX_ REGEXP * const r, const U32 flags)
7367 {
7368  struct regexp *const rx = ReANY(r);
7369  AV *av = newAV();
7370
7371  PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL;
7372
7373  if (rx && RXp_PAREN_NAMES(rx)) {
7374   HV *hv= RXp_PAREN_NAMES(rx);
7375   HE *temphe;
7376   (void)hv_iterinit(hv);
7377   while ( (temphe = hv_iternext_flags(hv,0)) ) {
7378    IV i;
7379    IV parno = 0;
7380    SV* sv_dat = HeVAL(temphe);
7381    I32 *nums = (I32*)SvPVX(sv_dat);
7382    for ( i = 0; i < SvIVX(sv_dat); i++ ) {
7383     if ((I32)(rx->lastparen) >= nums[i] &&
7384      rx->offs[nums[i]].start != -1 &&
7385      rx->offs[nums[i]].end != -1)
7386     {
7387      parno = nums[i];
7388      break;
7389     }
7390    }
7391    if (parno || flags & RXapif_ALL) {
7392     av_push(av, newSVhek(HeKEY_hek(temphe)));
7393    }
7394   }
7395  }
7396
7397  return newRV_noinc(MUTABLE_SV(av));
7398 }
7399
7400 void
7401 Perl_reg_numbered_buff_fetch(pTHX_ REGEXP * const r, const I32 paren,
7402        SV * const sv)
7403 {
7404  struct regexp *const rx = ReANY(r);
7405  char *s = NULL;
7406  SSize_t i = 0;
7407  SSize_t s1, t1;
7408  I32 n = paren;
7409
7410  PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH;
7411
7412  if (      n == RX_BUFF_IDX_CARET_PREMATCH
7413   || n == RX_BUFF_IDX_CARET_FULLMATCH
7414   || n == RX_BUFF_IDX_CARET_POSTMATCH
7415  )
7416  {
7417   bool keepcopy = cBOOL(rx->extflags & RXf_PMf_KEEPCOPY);
7418   if (!keepcopy) {
7419    /* on something like
7420    *    $r = qr/.../;
7421    *    /$qr/p;
7422    * the KEEPCOPY is set on the PMOP rather than the regex */
7423    if (PL_curpm && r == PM_GETRE(PL_curpm))
7424     keepcopy = cBOOL(PL_curpm->op_pmflags & PMf_KEEPCOPY);
7425   }
7426   if (!keepcopy)
7427    goto ret_undef;
7428  }
7429
7430  if (!rx->subbeg)
7431   goto ret_undef;
7432
7433  if (n == RX_BUFF_IDX_CARET_FULLMATCH)
7434   /* no need to distinguish between them any more */
7435   n = RX_BUFF_IDX_FULLMATCH;
7436
7437  if ((n == RX_BUFF_IDX_PREMATCH || n == RX_BUFF_IDX_CARET_PREMATCH)
7438   && rx->offs[0].start != -1)
7439  {
7440   /* $`, ${^PREMATCH} */
7441   i = rx->offs[0].start;
7442   s = rx->subbeg;
7443  }
7444  else
7445  if ((n == RX_BUFF_IDX_POSTMATCH || n == RX_BUFF_IDX_CARET_POSTMATCH)
7446   && rx->offs[0].end != -1)
7447  {
7448   /* $', ${^POSTMATCH} */
7449   s = rx->subbeg - rx->suboffset + rx->offs[0].end;
7450   i = rx->sublen + rx->suboffset - rx->offs[0].end;
7451  }
7452  else
7453  if ( 0 <= n && n <= (I32)rx->nparens &&
7454   (s1 = rx->offs[n].start) != -1 &&
7455   (t1 = rx->offs[n].end) != -1)
7456  {
7457   /* $&, ${^MATCH},  $1 ... */
7458   i = t1 - s1;
7459   s = rx->subbeg + s1 - rx->suboffset;
7460  } else {
7461   goto ret_undef;
7462  }
7463
7464  assert(s >= rx->subbeg);
7465  assert((STRLEN)rx->sublen >= (STRLEN)((s - rx->subbeg) + i) );
7466  if (i >= 0) {
7467 #ifdef NO_TAINT_SUPPORT
7468   sv_setpvn(sv, s, i);
7469 #else
7470   const int oldtainted = TAINT_get;
7471   TAINT_NOT;
7472   sv_setpvn(sv, s, i);
7473   TAINT_set(oldtainted);
7474 #endif
7475   if ( (rx->intflags & PREGf_CANY_SEEN)
7476    ? (RXp_MATCH_UTF8(rx)
7477       && (!i || is_utf8_string((U8*)s, i)))
7478    : (RXp_MATCH_UTF8(rx)) )
7479   {
7480    SvUTF8_on(sv);
7481   }
7482   else
7483    SvUTF8_off(sv);
7484   if (TAINTING_get) {
7485    if (RXp_MATCH_TAINTED(rx)) {
7486     if (SvTYPE(sv) >= SVt_PVMG) {
7487      MAGIC* const mg = SvMAGIC(sv);
7488      MAGIC* mgt;
7489      TAINT;
7490      SvMAGIC_set(sv, mg->mg_moremagic);
7491      SvTAINT(sv);
7492      if ((mgt = SvMAGIC(sv))) {
7493       mg->mg_moremagic = mgt;
7494       SvMAGIC_set(sv, mg);
7495      }
7496     } else {
7497      TAINT;
7498      SvTAINT(sv);
7499     }
7500    } else
7501     SvTAINTED_off(sv);
7502   }
7503  } else {
7504  ret_undef:
7505   sv_setsv(sv,&PL_sv_undef);
7506   return;
7507  }
7508 }
7509
7510 void
7511 Perl_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren,
7512               SV const * const value)
7513 {
7514  PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE;
7515
7516  PERL_UNUSED_ARG(rx);
7517  PERL_UNUSED_ARG(paren);
7518  PERL_UNUSED_ARG(value);
7519
7520  if (!PL_localizing)
7521   Perl_croak_no_modify();
7522 }
7523
7524 I32
7525 Perl_reg_numbered_buff_length(pTHX_ REGEXP * const r, const SV * const sv,
7526        const I32 paren)
7527 {
7528  struct regexp *const rx = ReANY(r);
7529  I32 i;
7530  I32 s1, t1;
7531
7532  PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH;
7533
7534  if (   paren == RX_BUFF_IDX_CARET_PREMATCH
7535   || paren == RX_BUFF_IDX_CARET_FULLMATCH
7536   || paren == RX_BUFF_IDX_CARET_POSTMATCH
7537  )
7538  {
7539   bool keepcopy = cBOOL(rx->extflags & RXf_PMf_KEEPCOPY);
7540   if (!keepcopy) {
7541    /* on something like
7542    *    $r = qr/.../;
7543    *    /$qr/p;
7544    * the KEEPCOPY is set on the PMOP rather than the regex */
7545    if (PL_curpm && r == PM_GETRE(PL_curpm))
7546     keepcopy = cBOOL(PL_curpm->op_pmflags & PMf_KEEPCOPY);
7547   }
7548   if (!keepcopy)
7549    goto warn_undef;
7550  }
7551
7552  /* Some of this code was originally in C<Perl_magic_len> in F<mg.c> */
7553  switch (paren) {
7554  case RX_BUFF_IDX_CARET_PREMATCH: /* ${^PREMATCH} */
7555  case RX_BUFF_IDX_PREMATCH:       /* $` */
7556   if (rx->offs[0].start != -1) {
7557       i = rx->offs[0].start;
7558       if (i > 0) {
7559         s1 = 0;
7560         t1 = i;
7561         goto getlen;
7562       }
7563    }
7564   return 0;
7565
7566  case RX_BUFF_IDX_CARET_POSTMATCH: /* ${^POSTMATCH} */
7567  case RX_BUFF_IDX_POSTMATCH:       /* $' */
7568    if (rx->offs[0].end != -1) {
7569       i = rx->sublen - rx->offs[0].end;
7570       if (i > 0) {
7571         s1 = rx->offs[0].end;
7572         t1 = rx->sublen;
7573         goto getlen;
7574       }
7575    }
7576   return 0;
7577
7578  default: /* $& / ${^MATCH}, $1, $2, ... */
7579    if (paren <= (I32)rx->nparens &&
7580    (s1 = rx->offs[paren].start) != -1 &&
7581    (t1 = rx->offs[paren].end) != -1)
7582    {
7583    i = t1 - s1;
7584    goto getlen;
7585   } else {
7586   warn_undef:
7587    if (ckWARN(WARN_UNINITIALIZED))
7588     report_uninit((const SV *)sv);
7589    return 0;
7590   }
7591  }
7592   getlen:
7593  if (i > 0 && RXp_MATCH_UTF8(rx)) {
7594   const char * const s = rx->subbeg - rx->suboffset + s1;
7595   const U8 *ep;
7596   STRLEN el;
7597
7598   i = t1 - s1;
7599   if (is_utf8_string_loclen((U8*)s, i, &ep, &el))
7600       i = el;
7601  }
7602  return i;
7603 }
7604
7605 SV*
7606 Perl_reg_qr_package(pTHX_ REGEXP * const rx)
7607 {
7608  PERL_ARGS_ASSERT_REG_QR_PACKAGE;
7609   PERL_UNUSED_ARG(rx);
7610   if (0)
7611    return NULL;
7612   else
7613    return newSVpvs("Regexp");
7614 }
7615
7616 /* Scans the name of a named buffer from the pattern.
7617  * If flags is REG_RSN_RETURN_NULL returns null.
7618  * If flags is REG_RSN_RETURN_NAME returns an SV* containing the name
7619  * If flags is REG_RSN_RETURN_DATA returns the data SV* corresponding
7620  * to the parsed name as looked up in the RExC_paren_names hash.
7621  * If there is an error throws a vFAIL().. type exception.
7622  */
7623
7624 #define REG_RSN_RETURN_NULL    0
7625 #define REG_RSN_RETURN_NAME    1
7626 #define REG_RSN_RETURN_DATA    2
7627
7628 STATIC SV*
7629 S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags)
7630 {
7631  char *name_start = RExC_parse;
7632
7633  PERL_ARGS_ASSERT_REG_SCAN_NAME;
7634
7635  assert (RExC_parse <= RExC_end);
7636  if (RExC_parse == RExC_end) NOOP;
7637  else if (isIDFIRST_lazy_if(RExC_parse, UTF)) {
7638   /* skip IDFIRST by using do...while */
7639   if (UTF)
7640    do {
7641     RExC_parse += UTF8SKIP(RExC_parse);
7642    } while (isWORDCHAR_utf8((U8*)RExC_parse));
7643   else
7644    do {
7645     RExC_parse++;
7646    } while (isWORDCHAR(*RExC_parse));
7647  } else {
7648   RExC_parse++; /* so the <- from the vFAIL is after the offending
7649       character */
7650   vFAIL("Group name must start with a non-digit word character");
7651  }
7652  if ( flags ) {
7653   SV* sv_name
7654    = newSVpvn_flags(name_start, (int)(RExC_parse - name_start),
7655        SVs_TEMP | (UTF ? SVf_UTF8 : 0));
7656   if ( flags == REG_RSN_RETURN_NAME)
7657    return sv_name;
7658   else if (flags==REG_RSN_RETURN_DATA) {
7659    HE *he_str = NULL;
7660    SV *sv_dat = NULL;
7661    if ( ! sv_name )      /* should not happen*/
7662     Perl_croak(aTHX_ "panic: no svname in reg_scan_name");
7663    if (RExC_paren_names)
7664     he_str = hv_fetch_ent( RExC_paren_names, sv_name, 0, 0 );
7665    if ( he_str )
7666     sv_dat = HeVAL(he_str);
7667    if ( ! sv_dat )
7668     vFAIL("Reference to nonexistent named group");
7669    return sv_dat;
7670   }
7671   else {
7672    Perl_croak(aTHX_ "panic: bad flag %lx in reg_scan_name",
7673      (unsigned long) flags);
7674   }
7675   assert(0); /* NOT REACHED */
7676  }
7677  return NULL;
7678 }
7679
7680 #define DEBUG_PARSE_MSG(funcname)     DEBUG_PARSE_r({           \
7681  int rem=(int)(RExC_end - RExC_parse);                       \
7682  int cut;                                                    \
7683  int num;                                                    \
7684  int iscut=0;                                                \
7685  if (rem>10) {                                               \
7686   rem=10;                                                 \
7687   iscut=1;                                                \
7688  }                                                           \
7689  cut=10-rem;                                                 \
7690  if (RExC_lastparse!=RExC_parse)                             \
7691   PerlIO_printf(Perl_debug_log," >%.*s%-*s",              \
7692    rem, RExC_parse,                                    \
7693    cut + 4,                                            \
7694    iscut ? "..." : "<"                                 \
7695   );                                                      \
7696  else                                                        \
7697   PerlIO_printf(Perl_debug_log,"%16s","");                \
7698                 \
7699  if (SIZE_ONLY)                                              \
7700  num = RExC_size + 1;                                     \
7701  else                                                        \
7702  num=REG_NODE_NUM(RExC_emit);                             \
7703  if (RExC_lastnum!=num)                                      \
7704  PerlIO_printf(Perl_debug_log,"|%4d",num);                \
7705  else                                                        \
7706  PerlIO_printf(Perl_debug_log,"|%4s","");                 \
7707  PerlIO_printf(Perl_debug_log,"|%*s%-4s",                    \
7708   (int)((depth*2)), "",                                   \
7709   (funcname)                                              \
7710  );                                                          \
7711  RExC_lastnum=num;                                           \
7712  RExC_lastparse=RExC_parse;                                  \
7713 })
7714
7715
7716
7717 #define DEBUG_PARSE(funcname)     DEBUG_PARSE_r({           \
7718  DEBUG_PARSE_MSG((funcname));                            \
7719  PerlIO_printf(Perl_debug_log,"%4s","\n");               \
7720 })
7721 #define DEBUG_PARSE_FMT(funcname,fmt,args)     DEBUG_PARSE_r({           \
7722  DEBUG_PARSE_MSG((funcname));                            \
7723  PerlIO_printf(Perl_debug_log,fmt "\n",args);               \
7724 })
7725
7726 /* This section of code defines the inversion list object and its methods.  The
7727  * interfaces are highly subject to change, so as much as possible is static to
7728  * this file.  An inversion list is here implemented as a malloc'd C UV array
7729  * as an SVt_INVLIST scalar.
7730  *
7731  * An inversion list for Unicode is an array of code points, sorted by ordinal
7732  * number.  The zeroth element is the first code point in the list.  The 1th
7733  * element is the first element beyond that not in the list.  In other words,
7734  * the first range is
7735  *  invlist[0]..(invlist[1]-1)
7736  * The other ranges follow.  Thus every element whose index is divisible by two
7737  * marks the beginning of a range that is in the list, and every element not
7738  * divisible by two marks the beginning of a range not in the list.  A single
7739  * element inversion list that contains the single code point N generally
7740  * consists of two elements
7741  *  invlist[0] == N
7742  *  invlist[1] == N+1
7743  * (The exception is when N is the highest representable value on the
7744  * machine, in which case the list containing just it would be a single
7745  * element, itself.  By extension, if the last range in the list extends to
7746  * infinity, then the first element of that range will be in the inversion list
7747  * at a position that is divisible by two, and is the final element in the
7748  * list.)
7749  * Taking the complement (inverting) an inversion list is quite simple, if the
7750  * first element is 0, remove it; otherwise add a 0 element at the beginning.
7751  * This implementation reserves an element at the beginning of each inversion
7752  * list to always contain 0; there is an additional flag in the header which
7753  * indicates if the list begins at the 0, or is offset to begin at the next
7754  * element.
7755  *
7756  * More about inversion lists can be found in "Unicode Demystified"
7757  * Chapter 13 by Richard Gillam, published by Addison-Wesley.
7758  * More will be coming when functionality is added later.
7759  *
7760  * The inversion list data structure is currently implemented as an SV pointing
7761  * to an array of UVs that the SV thinks are bytes.  This allows us to have an
7762  * array of UV whose memory management is automatically handled by the existing
7763  * facilities for SV's.
7764  *
7765  * Some of the methods should always be private to the implementation, and some
7766  * should eventually be made public */
7767
7768 /* The header definitions are in F<inline_invlist.c> */
7769
7770 PERL_STATIC_INLINE UV*
7771 S__invlist_array_init(pTHX_ SV* const invlist, const bool will_have_0)
7772 {
7773  /* Returns a pointer to the first element in the inversion list's array.
7774  * This is called upon initialization of an inversion list.  Where the
7775  * array begins depends on whether the list has the code point U+0000 in it
7776  * or not.  The other parameter tells it whether the code that follows this
7777  * call is about to put a 0 in the inversion list or not.  The first
7778  * element is either the element reserved for 0, if TRUE, or the element
7779  * after it, if FALSE */
7780
7781  bool* offset = get_invlist_offset_addr(invlist);
7782  UV* zero_addr = (UV *) SvPVX(invlist);
7783
7784  PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT;
7785
7786  /* Must be empty */
7787  assert(! _invlist_len(invlist));
7788
7789  *zero_addr = 0;
7790
7791  /* 1^1 = 0; 1^0 = 1 */
7792  *offset = 1 ^ will_have_0;
7793  return zero_addr + *offset;
7794 }
7795
7796 PERL_STATIC_INLINE UV*
7797 S_invlist_array(pTHX_ SV* const invlist)
7798 {
7799  /* Returns the pointer to the inversion list's array.  Every time the
7800  * length changes, this needs to be called in case malloc or realloc moved
7801  * it */
7802
7803  PERL_ARGS_ASSERT_INVLIST_ARRAY;
7804
7805  /* Must not be empty.  If these fail, you probably didn't check for <len>
7806  * being non-zero before trying to get the array */
7807  assert(_invlist_len(invlist));
7808
7809  /* The very first element always contains zero, The array begins either
7810  * there, or if the inversion list is offset, at the element after it.
7811  * The offset header field determines which; it contains 0 or 1 to indicate
7812  * how much additionally to add */
7813  assert(0 == *(SvPVX(invlist)));
7814  return ((UV *) SvPVX(invlist) + *get_invlist_offset_addr(invlist));
7815 }
7816
7817 PERL_STATIC_INLINE void
7818 S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset)
7819 {
7820  /* Sets the current number of elements stored in the inversion list.
7821  * Updates SvCUR correspondingly */
7822
7823  PERL_ARGS_ASSERT_INVLIST_SET_LEN;
7824
7825  assert(SvTYPE(invlist) == SVt_INVLIST);
7826
7827  SvCUR_set(invlist,
7828    (len == 0)
7829    ? 0
7830    : TO_INTERNAL_SIZE(len + offset));
7831  assert(SvLEN(invlist) == 0 || SvCUR(invlist) <= SvLEN(invlist));
7832 }
7833
7834 PERL_STATIC_INLINE IV*
7835 S_get_invlist_previous_index_addr(pTHX_ SV* invlist)
7836 {
7837  /* Return the address of the IV that is reserved to hold the cached index
7838  * */
7839
7840  PERL_ARGS_ASSERT_GET_INVLIST_PREVIOUS_INDEX_ADDR;
7841
7842  assert(SvTYPE(invlist) == SVt_INVLIST);
7843
7844  return &(((XINVLIST*) SvANY(invlist))->prev_index);
7845 }
7846
7847 PERL_STATIC_INLINE IV
7848 S_invlist_previous_index(pTHX_ SV* const invlist)
7849 {
7850  /* Returns cached index of previous search */
7851
7852  PERL_ARGS_ASSERT_INVLIST_PREVIOUS_INDEX;
7853
7854  return *get_invlist_previous_index_addr(invlist);
7855 }
7856
7857 PERL_STATIC_INLINE void
7858 S_invlist_set_previous_index(pTHX_ SV* const invlist, const IV index)
7859 {
7860  /* Caches <index> for later retrieval */
7861
7862  PERL_ARGS_ASSERT_INVLIST_SET_PREVIOUS_INDEX;
7863
7864  assert(index == 0 || index < (int) _invlist_len(invlist));
7865
7866  *get_invlist_previous_index_addr(invlist) = index;
7867 }
7868
7869 PERL_STATIC_INLINE UV
7870 S_invlist_max(pTHX_ SV* const invlist)
7871 {
7872  /* Returns the maximum number of elements storable in the inversion list's
7873  * array, without having to realloc() */
7874
7875  PERL_ARGS_ASSERT_INVLIST_MAX;
7876
7877  assert(SvTYPE(invlist) == SVt_INVLIST);
7878
7879  /* Assumes worst case, in which the 0 element is not counted in the
7880  * inversion list, so subtracts 1 for that */
7881  return SvLEN(invlist) == 0  /* This happens under _new_invlist_C_array */
7882   ? FROM_INTERNAL_SIZE(SvCUR(invlist)) - 1
7883   : FROM_INTERNAL_SIZE(SvLEN(invlist)) - 1;
7884 }
7885
7886 #ifndef PERL_IN_XSUB_RE
7887 SV*
7888 Perl__new_invlist(pTHX_ IV initial_size)
7889 {
7890
7891  /* Return a pointer to a newly constructed inversion list, with enough
7892  * space to store 'initial_size' elements.  If that number is negative, a
7893  * system default is used instead */
7894
7895  SV* new_list;
7896
7897  if (initial_size < 0) {
7898   initial_size = 10;
7899  }
7900
7901  /* Allocate the initial space */
7902  new_list = newSV_type(SVt_INVLIST);
7903
7904  /* First 1 is in case the zero element isn't in the list; second 1 is for
7905  * trailing NUL */
7906  SvGROW(new_list, TO_INTERNAL_SIZE(initial_size + 1) + 1);
7907  invlist_set_len(new_list, 0, 0);
7908
7909  /* Force iterinit() to be used to get iteration to work */
7910  *get_invlist_iter_addr(new_list) = (STRLEN) UV_MAX;
7911
7912  *get_invlist_previous_index_addr(new_list) = 0;
7913
7914  return new_list;
7915 }
7916
7917 SV*
7918 Perl__new_invlist_C_array(pTHX_ const UV* const list)
7919 {
7920  /* Return a pointer to a newly constructed inversion list, initialized to
7921  * point to <list>, which has to be in the exact correct inversion list
7922  * form, including internal fields.  Thus this is a dangerous routine that
7923  * should not be used in the wrong hands.  The passed in 'list' contains
7924  * several header fields at the beginning that are not part of the
7925  * inversion list body proper */
7926
7927  const STRLEN length = (STRLEN) list[0];
7928  const UV version_id =          list[1];
7929  const bool offset   =    cBOOL(list[2]);
7930 #define HEADER_LENGTH 3
7931  /* If any of the above changes in any way, you must change HEADER_LENGTH
7932  * (if appropriate) and regenerate INVLIST_VERSION_ID by running
7933  *      perl -E 'say int(rand 2**31-1)'
7934  */
7935 #define INVLIST_VERSION_ID 148565664 /* This is a combination of a version and
7936           data structure type, so that one being
7937           passed in can be validated to be an
7938           inversion list of the correct vintage.
7939          */
7940
7941  SV* invlist = newSV_type(SVt_INVLIST);
7942
7943  PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY;
7944
7945  if (version_id != INVLIST_VERSION_ID) {
7946   Perl_croak(aTHX_ "panic: Incorrect version for previously generated inversion list");
7947  }
7948
7949  /* The generated array passed in includes header elements that aren't part
7950  * of the list proper, so start it just after them */
7951  SvPV_set(invlist, (char *) (list + HEADER_LENGTH));
7952
7953  SvLEN_set(invlist, 0);  /* Means we own the contents, and the system
7954        shouldn't touch it */
7955
7956  *(get_invlist_offset_addr(invlist)) = offset;
7957
7958  /* The 'length' passed to us is the physical number of elements in the
7959  * inversion list.  But if there is an offset the logical number is one
7960  * less than that */
7961  invlist_set_len(invlist, length  - offset, offset);
7962
7963  invlist_set_previous_index(invlist, 0);
7964
7965  /* Initialize the iteration pointer. */
7966  invlist_iterfinish(invlist);
7967
7968  SvREADONLY_on(invlist);
7969
7970  return invlist;
7971 }
7972 #endif /* ifndef PERL_IN_XSUB_RE */
7973
7974 STATIC void
7975 S_invlist_extend(pTHX_ SV* const invlist, const UV new_max)
7976 {
7977  /* Grow the maximum size of an inversion list */
7978
7979  PERL_ARGS_ASSERT_INVLIST_EXTEND;
7980
7981  assert(SvTYPE(invlist) == SVt_INVLIST);
7982
7983  /* Add one to account for the zero element at the beginning which may not
7984  * be counted by the calling parameters */
7985  SvGROW((SV *)invlist, TO_INTERNAL_SIZE(new_max + 1));
7986 }
7987
7988 PERL_STATIC_INLINE void
7989 S_invlist_trim(pTHX_ SV* const invlist)
7990 {
7991  PERL_ARGS_ASSERT_INVLIST_TRIM;
7992
7993  assert(SvTYPE(invlist) == SVt_INVLIST);
7994
7995  /* Change the length of the inversion list to how many entries it currently
7996  * has */
7997  SvPV_shrink_to_cur((SV *) invlist);
7998 }
7999
8000 STATIC void
8001 S__append_range_to_invlist(pTHX_ SV* const invlist,
8002         const UV start, const UV end)
8003 {
8004    /* Subject to change or removal.  Append the range from 'start' to 'end' at
8005  * the end of the inversion list.  The range must be above any existing
8006  * ones. */
8007
8008  UV* array;
8009  UV max = invlist_max(invlist);
8010  UV len = _invlist_len(invlist);
8011  bool offset;
8012
8013  PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST;
8014
8015  if (len == 0) { /* Empty lists must be initialized */
8016   offset = start != 0;
8017   array = _invlist_array_init(invlist, ! offset);
8018  }
8019  else {
8020   /* Here, the existing list is non-empty. The current max entry in the
8021   * list is generally the first value not in the set, except when the
8022   * set extends to the end of permissible values, in which case it is
8023   * the first entry in that final set, and so this call is an attempt to
8024   * append out-of-order */
8025
8026   UV final_element = len - 1;
8027   array = invlist_array(invlist);
8028   if (array[final_element] > start
8029    || ELEMENT_RANGE_MATCHES_INVLIST(final_element))
8030   {
8031    Perl_croak(aTHX_ "panic: attempting to append to an inversion list, but wasn't at the end of the list, final=%"UVuf", start=%"UVuf", match=%c",
8032      array[final_element], start,
8033      ELEMENT_RANGE_MATCHES_INVLIST(final_element) ? 't' : 'f');
8034   }
8035
8036   /* Here, it is a legal append.  If the new range begins with the first
8037   * value not in the set, it is extending the set, so the new first
8038   * value not in the set is one greater than the newly extended range.
8039   * */
8040   offset = *get_invlist_offset_addr(invlist);
8041   if (array[final_element] == start) {
8042    if (end != UV_MAX) {
8043     array[final_element] = end + 1;
8044    }
8045    else {
8046     /* But if the end is the maximum representable on the machine,
8047     * just let the range that this would extend to have no end */
8048     invlist_set_len(invlist, len - 1, offset);
8049    }
8050    return;
8051   }
8052  }
8053
8054  /* Here the new range doesn't extend any existing set.  Add it */
8055
8056  len += 2; /* Includes an element each for the start and end of range */
8057
8058  /* If wll overflow the existing space, extend, which may cause the array to
8059  * be moved */
8060  if (max < len) {
8061   invlist_extend(invlist, len);
8062
8063   /* Have to set len here to avoid assert failure in invlist_array() */
8064   invlist_set_len(invlist, len, offset);
8065
8066   array = invlist_array(invlist);
8067  }
8068  else {
8069   invlist_set_len(invlist, len, offset);
8070  }
8071
8072  /* The next item on the list starts the range, the one after that is
8073  * one past the new range.  */
8074  array[len - 2] = start;
8075  if (end != UV_MAX) {
8076   array[len - 1] = end + 1;
8077  }
8078  else {
8079   /* But if the end is the maximum representable on the machine, just let
8080   * the range have no end */
8081   invlist_set_len(invlist, len - 1, offset);
8082  }
8083 }
8084
8085 #ifndef PERL_IN_XSUB_RE
8086
8087 IV
8088 Perl__invlist_search(pTHX_ SV* const invlist, const UV cp)
8089 {
8090  /* Searches the inversion list for the entry that contains the input code
8091  * point <cp>.  If <cp> is not in the list, -1 is returned.  Otherwise, the
8092  * return value is the index into the list's array of the range that
8093  * contains <cp> */
8094
8095  IV low = 0;
8096  IV mid;
8097  IV high = _invlist_len(invlist);
8098  const IV highest_element = high - 1;
8099  const UV* array;
8100
8101  PERL_ARGS_ASSERT__INVLIST_SEARCH;
8102
8103  /* If list is empty, return failure. */
8104  if (high == 0) {
8105   return -1;
8106  }
8107
8108  /* (We can't get the array unless we know the list is non-empty) */
8109  array = invlist_array(invlist);
8110
8111  mid = invlist_previous_index(invlist);
8112  assert(mid >=0 && mid <= highest_element);
8113
8114  /* <mid> contains the cache of the result of the previous call to this
8115  * function (0 the first time).  See if this call is for the same result,
8116  * or if it is for mid-1.  This is under the theory that calls to this
8117  * function will often be for related code points that are near each other.
8118  * And benchmarks show that caching gives better results.  We also test
8119  * here if the code point is within the bounds of the list.  These tests
8120  * replace others that would have had to be made anyway to make sure that
8121  * the array bounds were not exceeded, and these give us extra information
8122  * at the same time */
8123  if (cp >= array[mid]) {
8124   if (cp >= array[highest_element]) {
8125    return highest_element;
8126   }
8127
8128   /* Here, array[mid] <= cp < array[highest_element].  This means that
8129   * the final element is not the answer, so can exclude it; it also
8130   * means that <mid> is not the final element, so can refer to 'mid + 1'
8131   * safely */
8132   if (cp < array[mid + 1]) {
8133    return mid;
8134   }
8135   high--;
8136   low = mid + 1;
8137  }
8138  else { /* cp < aray[mid] */
8139   if (cp < array[0]) { /* Fail if outside the array */
8140    return -1;
8141   }
8142   high = mid;
8143   if (cp >= array[mid - 1]) {
8144    goto found_entry;
8145   }
8146  }
8147
8148  /* Binary search.  What we are looking for is <i> such that
8149  * array[i] <= cp < array[i+1]
8150  * The loop below converges on the i+1.  Note that there may not be an
8151  * (i+1)th element in the array, and things work nonetheless */
8152  while (low < high) {
8153   mid = (low + high) / 2;
8154   assert(mid <= highest_element);
8155   if (array[mid] <= cp) { /* cp >= array[mid] */
8156    low = mid + 1;
8157
8158    /* We could do this extra test to exit the loop early.
8159    if (cp < array[low]) {
8160     return mid;
8161    }
8162    */
8163   }
8164   else { /* cp < array[mid] */
8165    high = mid;
8166   }
8167  }
8168
8169   found_entry:
8170  high--;
8171  invlist_set_previous_index(invlist, high);
8172  return high;
8173 }
8174
8175 void
8176 Perl__invlist_populate_swatch(pTHX_ SV* const invlist,
8177          const UV start, const UV end, U8* swatch)
8178 {
8179  /* populates a swatch of a swash the same way swatch_get() does in utf8.c,
8180  * but is used when the swash has an inversion list.  This makes this much
8181  * faster, as it uses a binary search instead of a linear one.  This is
8182  * intimately tied to that function, and perhaps should be in utf8.c,
8183  * except it is intimately tied to inversion lists as well.  It assumes
8184  * that <swatch> is all 0's on input */
8185
8186  UV current = start;
8187  const IV len = _invlist_len(invlist);
8188  IV i;
8189  const UV * array;
8190
8191  PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH;
8192
8193  if (len == 0) { /* Empty inversion list */
8194   return;
8195  }
8196
8197  array = invlist_array(invlist);
8198
8199  /* Find which element it is */
8200  i = _invlist_search(invlist, start);
8201
8202  /* We populate from <start> to <end> */
8203  while (current < end) {
8204   UV upper;
8205
8206   /* The inversion list gives the results for every possible code point
8207   * after the first one in the list.  Only those ranges whose index is
8208   * even are ones that the inversion list matches.  For the odd ones,
8209   * and if the initial code point is not in the list, we have to skip
8210   * forward to the next element */
8211   if (i == -1 || ! ELEMENT_RANGE_MATCHES_INVLIST(i)) {
8212    i++;
8213    if (i >= len) { /* Finished if beyond the end of the array */
8214     return;
8215    }
8216    current = array[i];
8217    if (current >= end) {   /* Finished if beyond the end of what we
8218          are populating */
8219     if (LIKELY(end < UV_MAX)) {
8220      return;
8221     }
8222
8223     /* We get here when the upper bound is the maximum
8224     * representable on the machine, and we are looking for just
8225     * that code point.  Have to special case it */
8226     i = len;
8227     goto join_end_of_list;
8228    }
8229   }
8230   assert(current >= start);
8231
8232   /* The current range ends one below the next one, except don't go past
8233   * <end> */
8234   i++;
8235   upper = (i < len && array[i] < end) ? array[i] : end;
8236
8237   /* Here we are in a range that matches.  Populate a bit in the 3-bit U8
8238   * for each code point in it */
8239   for (; current < upper; current++) {
8240    const STRLEN offset = (STRLEN)(current - start);
8241    swatch[offset >> 3] |= 1 << (offset & 7);
8242   }
8243
8244  join_end_of_list:
8245
8246   /* Quit if at the end of the list */
8247   if (i >= len) {
8248
8249    /* But first, have to deal with the highest possible code point on
8250    * the platform.  The previous code assumes that <end> is one
8251    * beyond where we want to populate, but that is impossible at the
8252    * platform's infinity, so have to handle it specially */
8253    if (UNLIKELY(end == UV_MAX && ELEMENT_RANGE_MATCHES_INVLIST(len-1)))
8254    {
8255     const STRLEN offset = (STRLEN)(end - start);
8256     swatch[offset >> 3] |= 1 << (offset & 7);
8257    }
8258    return;
8259   }
8260
8261   /* Advance to the next range, which will be for code points not in the
8262   * inversion list */
8263   current = array[i];
8264  }
8265
8266  return;
8267 }
8268
8269 void
8270 Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b,
8271           const bool complement_b, SV** output)
8272 {
8273  /* Take the union of two inversion lists and point <output> to it.  *output
8274  * SHOULD BE DEFINED upon input, and if it points to one of the two lists,
8275  * the reference count to that list will be decremented if not already a
8276  * temporary (mortal); otherwise *output will be made correspondingly
8277  * mortal.  The first list, <a>, may be NULL, in which case a copy of the
8278  * second list is returned.  If <complement_b> is TRUE, the union is taken
8279  * of the complement (inversion) of <b> instead of b itself.
8280  *
8281  * The basis for this comes from "Unicode Demystified" Chapter 13 by
8282  * Richard Gillam, published by Addison-Wesley, and explained at some
8283  * length there.  The preface says to incorporate its examples into your
8284  * code at your own risk.
8285  *
8286  * The algorithm is like a merge sort.
8287  *
8288  * XXX A potential performance improvement is to keep track as we go along
8289  * if only one of the inputs contributes to the result, meaning the other
8290  * is a subset of that one.  In that case, we can skip the final copy and
8291  * return the larger of the input lists, but then outside code might need
8292  * to keep track of whether to free the input list or not */
8293
8294  const UV* array_a;    /* a's array */
8295  const UV* array_b;
8296  UV len_a;     /* length of a's array */
8297  UV len_b;
8298
8299  SV* u;   /* the resulting union */
8300  UV* array_u;
8301  UV len_u;
8302
8303  UV i_a = 0;      /* current index into a's array */
8304  UV i_b = 0;
8305  UV i_u = 0;
8306
8307  /* running count, as explained in the algorithm source book; items are
8308  * stopped accumulating and are output when the count changes to/from 0.
8309  * The count is incremented when we start a range that's in the set, and
8310  * decremented when we start a range that's not in the set.  So its range
8311  * is 0 to 2.  Only when the count is zero is something not in the set.
8312  */
8313  UV count = 0;
8314
8315  PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND;
8316  assert(a != b);
8317
8318  /* If either one is empty, the union is the other one */
8319  if (a == NULL || ((len_a = _invlist_len(a)) == 0)) {
8320   bool make_temp = FALSE; /* Should we mortalize the result? */
8321
8322   if (*output == a) {
8323    if (a != NULL) {
8324     if (! (make_temp = cBOOL(SvTEMP(a)))) {
8325      SvREFCNT_dec_NN(a);
8326     }
8327    }
8328   }
8329   if (*output != b) {
8330    *output = invlist_clone(b);
8331    if (complement_b) {
8332     _invlist_invert(*output);
8333    }
8334   } /* else *output already = b; */
8335
8336   if (make_temp) {
8337    sv_2mortal(*output);
8338   }
8339   return;
8340  }
8341  else if ((len_b = _invlist_len(b)) == 0) {
8342   bool make_temp = FALSE;
8343   if (*output == b) {
8344    if (! (make_temp = cBOOL(SvTEMP(b)))) {
8345     SvREFCNT_dec_NN(b);
8346    }
8347   }
8348
8349   /* The complement of an empty list is a list that has everything in it,
8350   * so the union with <a> includes everything too */
8351   if (complement_b) {
8352    if (a == *output) {
8353     if (! (make_temp = cBOOL(SvTEMP(a)))) {
8354      SvREFCNT_dec_NN(a);
8355     }
8356    }
8357    *output = _new_invlist(1);
8358    _append_range_to_invlist(*output, 0, UV_MAX);
8359   }
8360   else if (*output != a) {
8361    *output = invlist_clone(a);
8362   }
8363   /* else *output already = a; */
8364
8365   if (make_temp) {
8366    sv_2mortal(*output);
8367   }
8368   return;
8369  }
8370
8371  /* Here both lists exist and are non-empty */
8372  array_a = invlist_array(a);
8373  array_b = invlist_array(b);
8374
8375  /* If are to take the union of 'a' with the complement of b, set it
8376  * up so are looking at b's complement. */
8377  if (complement_b) {
8378
8379   /* To complement, we invert: if the first element is 0, remove it.  To
8380   * do this, we just pretend the array starts one later */
8381   if (array_b[0] == 0) {
8382    array_b++;
8383    len_b--;
8384   }
8385   else {
8386
8387    /* But if the first element is not zero, we pretend the list starts
8388    * at the 0 that is always stored immediately before the array. */
8389    array_b--;
8390    len_b++;
8391   }
8392  }
8393
8394  /* Size the union for the worst case: that the sets are completely
8395  * disjoint */
8396  u = _new_invlist(len_a + len_b);
8397
8398  /* Will contain U+0000 if either component does */
8399  array_u = _invlist_array_init(u, (len_a > 0 && array_a[0] == 0)
8400          || (len_b > 0 && array_b[0] == 0));
8401
8402  /* Go through each list item by item, stopping when exhausted one of
8403  * them */
8404  while (i_a < len_a && i_b < len_b) {
8405   UV cp;     /* The element to potentially add to the union's array */
8406   bool cp_in_set;   /* is it in the the input list's set or not */
8407
8408   /* We need to take one or the other of the two inputs for the union.
8409   * Since we are merging two sorted lists, we take the smaller of the
8410   * next items.  In case of a tie, we take the one that is in its set
8411   * first.  If we took one not in the set first, it would decrement the
8412   * count, possibly to 0 which would cause it to be output as ending the
8413   * range, and the next time through we would take the same number, and
8414   * output it again as beginning the next range.  By doing it the
8415   * opposite way, there is no possibility that the count will be
8416   * momentarily decremented to 0, and thus the two adjoining ranges will
8417   * be seamlessly merged.  (In a tie and both are in the set or both not
8418   * in the set, it doesn't matter which we take first.) */
8419   if (array_a[i_a] < array_b[i_b]
8420    || (array_a[i_a] == array_b[i_b]
8421     && ELEMENT_RANGE_MATCHES_INVLIST(i_a)))
8422   {
8423    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_a);
8424    cp= array_a[i_a++];
8425   }
8426   else {
8427    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_b);
8428    cp = array_b[i_b++];
8429   }
8430
8431   /* Here, have chosen which of the two inputs to look at.  Only output
8432   * if the running count changes to/from 0, which marks the
8433   * beginning/end of a range in that's in the set */
8434   if (cp_in_set) {
8435    if (count == 0) {
8436     array_u[i_u++] = cp;
8437    }
8438    count++;
8439   }
8440   else {
8441    count--;
8442    if (count == 0) {
8443     array_u[i_u++] = cp;
8444    }
8445   }
8446  }
8447
8448  /* Here, we are finished going through at least one of the lists, which
8449  * means there is something remaining in at most one.  We check if the list
8450  * that hasn't been exhausted is positioned such that we are in the middle
8451  * of a range in its set or not.  (i_a and i_b point to the element beyond
8452  * the one we care about.) If in the set, we decrement 'count'; if 0, there
8453  * is potentially more to output.
8454  * There are four cases:
8455  * 1) Both weren't in their sets, count is 0, and remains 0.  What's left
8456  *    in the union is entirely from the non-exhausted set.
8457  * 2) Both were in their sets, count is 2.  Nothing further should
8458  *    be output, as everything that remains will be in the exhausted
8459  *    list's set, hence in the union; decrementing to 1 but not 0 insures
8460  *    that
8461  * 3) the exhausted was in its set, non-exhausted isn't, count is 1.
8462  *    Nothing further should be output because the union includes
8463  *    everything from the exhausted set.  Not decrementing ensures that.
8464  * 4) the exhausted wasn't in its set, non-exhausted is, count is 1;
8465  *    decrementing to 0 insures that we look at the remainder of the
8466  *    non-exhausted set */
8467  if ((i_a != len_a && PREV_RANGE_MATCHES_INVLIST(i_a))
8468   || (i_b != len_b && PREV_RANGE_MATCHES_INVLIST(i_b)))
8469  {
8470   count--;
8471  }
8472
8473  /* The final length is what we've output so far, plus what else is about to
8474  * be output.  (If 'count' is non-zero, then the input list we exhausted
8475  * has everything remaining up to the machine's limit in its set, and hence
8476  * in the union, so there will be no further output. */
8477  len_u = i_u;
8478  if (count == 0) {
8479   /* At most one of the subexpressions will be non-zero */
8480   len_u += (len_a - i_a) + (len_b - i_b);
8481  }
8482
8483  /* Set result to final length, which can change the pointer to array_u, so
8484  * re-find it */
8485  if (len_u != _invlist_len(u)) {
8486   invlist_set_len(u, len_u, *get_invlist_offset_addr(u));
8487   invlist_trim(u);
8488   array_u = invlist_array(u);
8489  }
8490
8491  /* When 'count' is 0, the list that was exhausted (if one was shorter than
8492  * the other) ended with everything above it not in its set.  That means
8493  * that the remaining part of the union is precisely the same as the
8494  * non-exhausted list, so can just copy it unchanged.  (If both list were
8495  * exhausted at the same time, then the operations below will be both 0.)
8496  */
8497  if (count == 0) {
8498   IV copy_count; /* At most one will have a non-zero copy count */
8499   if ((copy_count = len_a - i_a) > 0) {
8500    Copy(array_a + i_a, array_u + i_u, copy_count, UV);
8501   }
8502   else if ((copy_count = len_b - i_b) > 0) {
8503    Copy(array_b + i_b, array_u + i_u, copy_count, UV);
8504   }
8505  }
8506
8507  /*  We may be removing a reference to one of the inputs.  If so, the output
8508  *  is made mortal if the input was.  (Mortal SVs shouldn't have their ref
8509  *  count decremented) */
8510  if (a == *output || b == *output) {
8511   assert(! invlist_is_iterating(*output));
8512   if ((SvTEMP(*output))) {
8513    sv_2mortal(u);
8514   }
8515   else {
8516    SvREFCNT_dec_NN(*output);
8517   }
8518  }
8519
8520  *output = u;
8521
8522  return;
8523 }
8524
8525 void
8526 Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b,
8527            const bool complement_b, SV** i)
8528 {
8529  /* Take the intersection of two inversion lists and point <i> to it.  *i
8530  * SHOULD BE DEFINED upon input, and if it points to one of the two lists,
8531  * the reference count to that list will be decremented if not already a
8532  * temporary (mortal); otherwise *i will be made correspondingly mortal.
8533  * The first list, <a>, may be NULL, in which case an empty list is
8534  * returned.  If <complement_b> is TRUE, the result will be the
8535  * intersection of <a> and the complement (or inversion) of <b> instead of
8536  * <b> directly.
8537  *
8538  * The basis for this comes from "Unicode Demystified" Chapter 13 by
8539  * Richard Gillam, published by Addison-Wesley, and explained at some
8540  * length there.  The preface says to incorporate its examples into your
8541  * code at your own risk.  In fact, it had bugs
8542  *
8543  * The algorithm is like a merge sort, and is essentially the same as the
8544  * union above
8545  */
8546
8547  const UV* array_a;  /* a's array */
8548  const UV* array_b;
8549  UV len_a; /* length of a's array */
8550  UV len_b;
8551
8552  SV* r;       /* the resulting intersection */
8553  UV* array_r;
8554  UV len_r;
8555
8556  UV i_a = 0;      /* current index into a's array */
8557  UV i_b = 0;
8558  UV i_r = 0;
8559
8560  /* running count, as explained in the algorithm source book; items are
8561  * stopped accumulating and are output when the count changes to/from 2.
8562  * The count is incremented when we start a range that's in the set, and
8563  * decremented when we start a range that's not in the set.  So its range
8564  * is 0 to 2.  Only when the count is 2 is something in the intersection.
8565  */
8566  UV count = 0;
8567
8568  PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND;
8569  assert(a != b);
8570
8571  /* Special case if either one is empty */
8572  len_a = (a == NULL) ? 0 : _invlist_len(a);
8573  if ((len_a == 0) || ((len_b = _invlist_len(b)) == 0)) {
8574   bool make_temp = FALSE;
8575
8576   if (len_a != 0 && complement_b) {
8577
8578    /* Here, 'a' is not empty, therefore from the above 'if', 'b' must
8579    * be empty.  Here, also we are using 'b's complement, which hence
8580    * must be every possible code point.  Thus the intersection is
8581    * simply 'a'. */
8582    if (*i != a) {
8583     if (*i == b) {
8584      if (! (make_temp = cBOOL(SvTEMP(b)))) {
8585       SvREFCNT_dec_NN(b);
8586      }
8587     }
8588
8589     *i = invlist_clone(a);
8590    }
8591    /* else *i is already 'a' */
8592
8593    if (make_temp) {
8594     sv_2mortal(*i);
8595    }
8596    return;
8597   }
8598
8599   /* Here, 'a' or 'b' is empty and not using the complement of 'b'.  The
8600   * intersection must be empty */
8601   if (*i == a) {
8602    if (! (make_temp = cBOOL(SvTEMP(a)))) {
8603     SvREFCNT_dec_NN(a);
8604    }
8605   }
8606   else if (*i == b) {
8607    if (! (make_temp = cBOOL(SvTEMP(b)))) {
8608     SvREFCNT_dec_NN(b);
8609    }
8610   }
8611   *i = _new_invlist(0);
8612   if (make_temp) {
8613    sv_2mortal(*i);
8614   }
8615
8616   return;
8617  }
8618
8619  /* Here both lists exist and are non-empty */
8620  array_a = invlist_array(a);
8621  array_b = invlist_array(b);
8622
8623  /* If are to take the intersection of 'a' with the complement of b, set it
8624  * up so are looking at b's complement. */
8625  if (complement_b) {
8626
8627   /* To complement, we invert: if the first element is 0, remove it.  To
8628   * do this, we just pretend the array starts one later */
8629   if (array_b[0] == 0) {
8630    array_b++;
8631    len_b--;
8632   }
8633   else {
8634
8635    /* But if the first element is not zero, we pretend the list starts
8636    * at the 0 that is always stored immediately before the array. */
8637    array_b--;
8638    len_b++;
8639   }
8640  }
8641
8642  /* Size the intersection for the worst case: that the intersection ends up
8643  * fragmenting everything to be completely disjoint */
8644  r= _new_invlist(len_a + len_b);
8645
8646  /* Will contain U+0000 iff both components do */
8647  array_r = _invlist_array_init(r, len_a > 0 && array_a[0] == 0
8648          && len_b > 0 && array_b[0] == 0);
8649
8650  /* Go through each list item by item, stopping when exhausted one of
8651  * them */
8652  while (i_a < len_a && i_b < len_b) {
8653   UV cp;     /* The element to potentially add to the intersection's
8654      array */
8655   bool cp_in_set; /* Is it in the input list's set or not */
8656
8657   /* We need to take one or the other of the two inputs for the
8658   * intersection.  Since we are merging two sorted lists, we take the
8659   * smaller of the next items.  In case of a tie, we take the one that
8660   * is not in its set first (a difference from the union algorithm).  If
8661   * we took one in the set first, it would increment the count, possibly
8662   * to 2 which would cause it to be output as starting a range in the
8663   * intersection, and the next time through we would take that same
8664   * number, and output it again as ending the set.  By doing it the
8665   * opposite of this, there is no possibility that the count will be
8666   * momentarily incremented to 2.  (In a tie and both are in the set or
8667   * both not in the set, it doesn't matter which we take first.) */
8668   if (array_a[i_a] < array_b[i_b]
8669    || (array_a[i_a] == array_b[i_b]
8670     && ! ELEMENT_RANGE_MATCHES_INVLIST(i_a)))
8671   {
8672    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_a);
8673    cp= array_a[i_a++];
8674   }
8675   else {
8676    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_b);
8677    cp= array_b[i_b++];
8678   }
8679
8680   /* Here, have chosen which of the two inputs to look at.  Only output
8681   * if the running count changes to/from 2, which marks the
8682   * beginning/end of a range that's in the intersection */
8683   if (cp_in_set) {
8684    count++;
8685    if (count == 2) {
8686     array_r[i_r++] = cp;
8687    }
8688   }
8689   else {
8690    if (count == 2) {
8691     array_r[i_r++] = cp;
8692    }
8693    count--;
8694   }
8695  }
8696
8697  /* Here, we are finished going through at least one of the lists, which
8698  * means there is something remaining in at most one.  We check if the list
8699  * that has been exhausted is positioned such that we are in the middle
8700  * of a range in its set or not.  (i_a and i_b point to elements 1 beyond
8701  * the ones we care about.)  There are four cases:
8702  * 1) Both weren't in their sets, count is 0, and remains 0.  There's
8703  *    nothing left in the intersection.
8704  * 2) Both were in their sets, count is 2 and perhaps is incremented to
8705  *    above 2.  What should be output is exactly that which is in the
8706  *    non-exhausted set, as everything it has is also in the intersection
8707  *    set, and everything it doesn't have can't be in the intersection
8708  * 3) The exhausted was in its set, non-exhausted isn't, count is 1, and
8709  *    gets incremented to 2.  Like the previous case, the intersection is
8710  *    everything that remains in the non-exhausted set.
8711  * 4) the exhausted wasn't in its set, non-exhausted is, count is 1, and
8712  *    remains 1.  And the intersection has nothing more. */
8713  if ((i_a == len_a && PREV_RANGE_MATCHES_INVLIST(i_a))
8714   || (i_b == len_b && PREV_RANGE_MATCHES_INVLIST(i_b)))
8715  {
8716   count++;
8717  }
8718
8719  /* The final length is what we've output so far plus what else is in the
8720  * intersection.  At most one of the subexpressions below will be non-zero
8721  * */
8722  len_r = i_r;
8723  if (count >= 2) {
8724   len_r += (len_a - i_a) + (len_b - i_b);
8725  }
8726
8727  /* Set result to final length, which can change the pointer to array_r, so
8728  * re-find it */
8729  if (len_r != _invlist_len(r)) {
8730   invlist_set_len(r, len_r, *get_invlist_offset_addr(r));
8731   invlist_trim(r);
8732   array_r = invlist_array(r);
8733  }
8734
8735  /* Finish outputting any remaining */
8736  if (count >= 2) { /* At most one will have a non-zero copy count */
8737   IV copy_count;
8738   if ((copy_count = len_a - i_a) > 0) {
8739    Copy(array_a + i_a, array_r + i_r, copy_count, UV);
8740   }
8741   else if ((copy_count = len_b - i_b) > 0) {
8742    Copy(array_b + i_b, array_r + i_r, copy_count, UV);
8743   }
8744  }
8745
8746  /*  We may be removing a reference to one of the inputs.  If so, the output
8747  *  is made mortal if the input was.  (Mortal SVs shouldn't have their ref
8748  *  count decremented) */
8749  if (a == *i || b == *i) {
8750   assert(! invlist_is_iterating(*i));
8751   if (SvTEMP(*i)) {
8752    sv_2mortal(r);
8753   }
8754   else {
8755    SvREFCNT_dec_NN(*i);
8756   }
8757  }
8758
8759  *i = r;
8760
8761  return;
8762 }
8763
8764 SV*
8765 Perl__add_range_to_invlist(pTHX_ SV* invlist, const UV start, const UV end)
8766 {
8767  /* Add the range from 'start' to 'end' inclusive to the inversion list's
8768  * set.  A pointer to the inversion list is returned.  This may actually be
8769  * a new list, in which case the passed in one has been destroyed.  The
8770  * passed in inversion list can be NULL, in which case a new one is created
8771  * with just the one range in it */
8772
8773  SV* range_invlist;
8774  UV len;
8775
8776  if (invlist == NULL) {
8777   invlist = _new_invlist(2);
8778   len = 0;
8779  }
8780  else {
8781   len = _invlist_len(invlist);
8782  }
8783
8784  /* If comes after the final entry actually in the list, can just append it
8785  * to the end, */
8786  if (len == 0
8787   || (! ELEMENT_RANGE_MATCHES_INVLIST(len - 1)
8788    && start >= invlist_array(invlist)[len - 1]))
8789  {
8790   _append_range_to_invlist(invlist, start, end);
8791   return invlist;
8792  }
8793
8794  /* Here, can't just append things, create and return a new inversion list
8795  * which is the union of this range and the existing inversion list */
8796  range_invlist = _new_invlist(2);
8797  _append_range_to_invlist(range_invlist, start, end);
8798
8799  _invlist_union(invlist, range_invlist, &invlist);
8800
8801  /* The temporary can be freed */
8802  SvREFCNT_dec_NN(range_invlist);
8803
8804  return invlist;
8805 }
8806
8807 SV*
8808 Perl__setup_canned_invlist(pTHX_ const STRLEN size, const UV element0,
8809         UV** other_elements_ptr)
8810 {
8811  /* Create and return an inversion list whose contents are to be populated
8812  * by the caller.  The caller gives the number of elements (in 'size') and
8813  * the very first element ('element0').  This function will set
8814  * '*other_elements_ptr' to an array of UVs, where the remaining elements
8815  * are to be placed.
8816  *
8817  * Obviously there is some trust involved that the caller will properly
8818  * fill in the other elements of the array.
8819  *
8820  * (The first element needs to be passed in, as the underlying code does
8821  * things differently depending on whether it is zero or non-zero) */
8822
8823  SV* invlist = _new_invlist(size);
8824  bool offset;
8825
8826  PERL_ARGS_ASSERT__SETUP_CANNED_INVLIST;
8827
8828  _append_range_to_invlist(invlist, element0, element0);
8829  offset = *get_invlist_offset_addr(invlist);
8830
8831  invlist_set_len(invlist, size, offset);
8832  *other_elements_ptr = invlist_array(invlist) + 1;
8833  return invlist;
8834 }
8835
8836 #endif
8837
8838 PERL_STATIC_INLINE SV*
8839 S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) {
8840  return _add_range_to_invlist(invlist, cp, cp);
8841 }
8842
8843 #ifndef PERL_IN_XSUB_RE
8844 void
8845 Perl__invlist_invert(pTHX_ SV* const invlist)
8846 {
8847  /* Complement the input inversion list.  This adds a 0 if the list didn't
8848  * have a zero; removes it otherwise.  As described above, the data
8849  * structure is set up so that this is very efficient */
8850
8851  PERL_ARGS_ASSERT__INVLIST_INVERT;
8852
8853  assert(! invlist_is_iterating(invlist));
8854
8855  /* The inverse of matching nothing is matching everything */
8856  if (_invlist_len(invlist) == 0) {
8857   _append_range_to_invlist(invlist, 0, UV_MAX);
8858   return;
8859  }
8860
8861  *get_invlist_offset_addr(invlist) = ! *get_invlist_offset_addr(invlist);
8862 }
8863
8864 #endif
8865
8866 PERL_STATIC_INLINE SV*
8867 S_invlist_clone(pTHX_ SV* const invlist)
8868 {
8869
8870  /* Return a new inversion list that is a copy of the input one, which is
8871  * unchanged.  The new list will not be mortal even if the old one was. */
8872
8873  /* Need to allocate extra space to accommodate Perl's addition of a
8874  * trailing NUL to SvPV's, since it thinks they are always strings */
8875  SV* new_invlist = _new_invlist(_invlist_len(invlist) + 1);
8876  STRLEN physical_length = SvCUR(invlist);
8877  bool offset = *(get_invlist_offset_addr(invlist));
8878
8879  PERL_ARGS_ASSERT_INVLIST_CLONE;
8880
8881  *(get_invlist_offset_addr(new_invlist)) = offset;
8882  invlist_set_len(new_invlist, _invlist_len(invlist), offset);
8883  Copy(SvPVX(invlist), SvPVX(new_invlist), physical_length, char);
8884
8885  return new_invlist;
8886 }
8887
8888 PERL_STATIC_INLINE STRLEN*
8889 S_get_invlist_iter_addr(pTHX_ SV* invlist)
8890 {
8891  /* Return the address of the UV that contains the current iteration
8892  * position */
8893
8894  PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR;
8895
8896  assert(SvTYPE(invlist) == SVt_INVLIST);
8897
8898  return &(((XINVLIST*) SvANY(invlist))->iterator);
8899 }
8900
8901 PERL_STATIC_INLINE void
8902 S_invlist_iterinit(pTHX_ SV* invlist) /* Initialize iterator for invlist */
8903 {
8904  PERL_ARGS_ASSERT_INVLIST_ITERINIT;
8905
8906  *get_invlist_iter_addr(invlist) = 0;
8907 }
8908
8909 PERL_STATIC_INLINE void
8910 S_invlist_iterfinish(pTHX_ SV* invlist)
8911 {
8912  /* Terminate iterator for invlist.  This is to catch development errors.
8913  * Any iteration that is interrupted before completed should call this
8914  * function.  Functions that add code points anywhere else but to the end
8915  * of an inversion list assert that they are not in the middle of an
8916  * iteration.  If they were, the addition would make the iteration
8917  * problematical: if the iteration hadn't reached the place where things
8918  * were being added, it would be ok */
8919
8920  PERL_ARGS_ASSERT_INVLIST_ITERFINISH;
8921
8922  *get_invlist_iter_addr(invlist) = (STRLEN) UV_MAX;
8923 }
8924
8925 STATIC bool
8926 S_invlist_iternext(pTHX_ SV* invlist, UV* start, UV* end)
8927 {
8928  /* An C<invlist_iterinit> call on <invlist> must be used to set this up.
8929  * This call sets in <*start> and <*end>, the next range in <invlist>.
8930  * Returns <TRUE> if successful and the next call will return the next
8931  * range; <FALSE> if was already at the end of the list.  If the latter,
8932  * <*start> and <*end> are unchanged, and the next call to this function
8933  * will start over at the beginning of the list */
8934
8935  STRLEN* pos = get_invlist_iter_addr(invlist);
8936  UV len = _invlist_len(invlist);
8937  UV *array;
8938
8939  PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
8940
8941  if (*pos >= len) {
8942   *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
8943   return FALSE;
8944  }
8945
8946  array = invlist_array(invlist);
8947
8948  *start = array[(*pos)++];
8949
8950  if (*pos >= len) {
8951   *end = UV_MAX;
8952  }
8953  else {
8954   *end = array[(*pos)++] - 1;
8955  }
8956
8957  return TRUE;
8958 }
8959
8960 PERL_STATIC_INLINE bool
8961 S_invlist_is_iterating(pTHX_ SV* const invlist)
8962 {
8963  PERL_ARGS_ASSERT_INVLIST_IS_ITERATING;
8964
8965  return *(get_invlist_iter_addr(invlist)) < (STRLEN) UV_MAX;
8966 }
8967
8968 PERL_STATIC_INLINE UV
8969 S_invlist_highest(pTHX_ SV* const invlist)
8970 {
8971  /* Returns the highest code point that matches an inversion list.  This API
8972  * has an ambiguity, as it returns 0 under either the highest is actually
8973  * 0, or if the list is empty.  If this distinction matters to you, check
8974  * for emptiness before calling this function */
8975
8976  UV len = _invlist_len(invlist);
8977  UV *array;
8978
8979  PERL_ARGS_ASSERT_INVLIST_HIGHEST;
8980
8981  if (len == 0) {
8982   return 0;
8983  }
8984
8985  array = invlist_array(invlist);
8986
8987  /* The last element in the array in the inversion list always starts a
8988  * range that goes to infinity.  That range may be for code points that are
8989  * matched in the inversion list, or it may be for ones that aren't
8990  * matched.  In the latter case, the highest code point in the set is one
8991  * less than the beginning of this range; otherwise it is the final element
8992  * of this range: infinity */
8993  return (ELEMENT_RANGE_MATCHES_INVLIST(len - 1))
8994   ? UV_MAX
8995   : array[len - 1] - 1;
8996 }
8997
8998 #ifndef PERL_IN_XSUB_RE
8999 SV *
9000 Perl__invlist_contents(pTHX_ SV* const invlist)
9001 {
9002  /* Get the contents of an inversion list into a string SV so that they can
9003  * be printed out.  It uses the format traditionally done for debug tracing
9004  */
9005
9006  UV start, end;
9007  SV* output = newSVpvs("\n");
9008
9009  PERL_ARGS_ASSERT__INVLIST_CONTENTS;
9010
9011  assert(! invlist_is_iterating(invlist));
9012
9013  invlist_iterinit(invlist);
9014  while (invlist_iternext(invlist, &start, &end)) {
9015   if (end == UV_MAX) {
9016    Perl_sv_catpvf(aTHX_ output, "%04"UVXf"\tINFINITY\n", start);
9017   }
9018   else if (end != start) {
9019    Perl_sv_catpvf(aTHX_ output, "%04"UVXf"\t%04"UVXf"\n",
9020      start,       end);
9021   }
9022   else {
9023    Perl_sv_catpvf(aTHX_ output, "%04"UVXf"\n", start);
9024   }
9025  }
9026
9027  return output;
9028 }
9029 #endif
9030
9031 #ifndef PERL_IN_XSUB_RE
9032 void
9033 Perl__invlist_dump(pTHX_ PerlIO *file, I32 level,
9034       const char * const indent, SV* const invlist)
9035 {
9036  /* Designed to be called only by do_sv_dump().  Dumps out the ranges of the
9037  * inversion list 'invlist' to 'file' at 'level'  Each line is prefixed by
9038  * the string 'indent'.  The output looks like this:
9039   [0] 0x000A .. 0x000D
9040   [2] 0x0085
9041   [4] 0x2028 .. 0x2029
9042   [6] 0x3104 .. INFINITY
9043  * This means that the first range of code points matched by the list are
9044  * 0xA through 0xD; the second range contains only the single code point
9045  * 0x85, etc.  An inversion list is an array of UVs.  Two array elements
9046  * are used to define each range (except if the final range extends to
9047  * infinity, only a single element is needed).  The array index of the
9048  * first element for the corresponding range is given in brackets. */
9049
9050  UV start, end;
9051  STRLEN count = 0;
9052
9053  PERL_ARGS_ASSERT__INVLIST_DUMP;
9054
9055  if (invlist_is_iterating(invlist)) {
9056   Perl_dump_indent(aTHX_ level, file,
9057    "%sCan't dump inversion list because is in middle of iterating\n",
9058    indent);
9059   return;
9060  }
9061
9062  invlist_iterinit(invlist);
9063  while (invlist_iternext(invlist, &start, &end)) {
9064   if (end == UV_MAX) {
9065    Perl_dump_indent(aTHX_ level, file,
9066          "%s[%"UVuf"] 0x%04"UVXf" .. INFINITY\n",
9067         indent, (UV)count, start);
9068   }
9069   else if (end != start) {
9070    Perl_dump_indent(aTHX_ level, file,
9071          "%s[%"UVuf"] 0x%04"UVXf" .. 0x%04"UVXf"\n",
9072         indent, (UV)count, start,         end);
9073   }
9074   else {
9075    Perl_dump_indent(aTHX_ level, file, "%s[%"UVuf"] 0x%04"UVXf"\n",
9076            indent, (UV)count, start);
9077   }
9078   count += 2;
9079  }
9080 }
9081 #endif
9082
9083 #ifdef PERL_ARGS_ASSERT__INVLISTEQ
9084 bool
9085 S__invlistEQ(pTHX_ SV* const a, SV* const b, const bool complement_b)
9086 {
9087  /* Return a boolean as to if the two passed in inversion lists are
9088  * identical.  The final argument, if TRUE, says to take the complement of
9089  * the second inversion list before doing the comparison */
9090
9091  const UV* array_a = invlist_array(a);
9092  const UV* array_b = invlist_array(b);
9093  UV len_a = _invlist_len(a);
9094  UV len_b = _invlist_len(b);
9095
9096  UV i = 0;      /* current index into the arrays */
9097  bool retval = TRUE;     /* Assume are identical until proven otherwise */
9098
9099  PERL_ARGS_ASSERT__INVLISTEQ;
9100
9101  /* If are to compare 'a' with the complement of b, set it
9102  * up so are looking at b's complement. */
9103  if (complement_b) {
9104
9105   /* The complement of nothing is everything, so <a> would have to have
9106   * just one element, starting at zero (ending at infinity) */
9107   if (len_b == 0) {
9108    return (len_a == 1 && array_a[0] == 0);
9109   }
9110   else if (array_b[0] == 0) {
9111
9112    /* Otherwise, to complement, we invert.  Here, the first element is
9113    * 0, just remove it.  To do this, we just pretend the array starts
9114    * one later */
9115
9116    array_b++;
9117    len_b--;
9118   }
9119   else {
9120
9121    /* But if the first element is not zero, we pretend the list starts
9122    * at the 0 that is always stored immediately before the array. */
9123    array_b--;
9124    len_b++;
9125   }
9126  }
9127
9128  /* Make sure that the lengths are the same, as well as the final element
9129  * before looping through the remainder.  (Thus we test the length, final,
9130  * and first elements right off the bat) */
9131  if (len_a != len_b || array_a[len_a-1] != array_b[len_a-1]) {
9132   retval = FALSE;
9133  }
9134  else for (i = 0; i < len_a - 1; i++) {
9135   if (array_a[i] != array_b[i]) {
9136    retval = FALSE;
9137    break;
9138   }
9139  }
9140
9141  return retval;
9142 }
9143 #endif
9144
9145 #undef HEADER_LENGTH
9146 #undef TO_INTERNAL_SIZE
9147 #undef FROM_INTERNAL_SIZE
9148 #undef INVLIST_VERSION_ID
9149
9150 /* End of inversion list object */
9151
9152 STATIC void
9153 S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
9154 {
9155  /* This parses the flags that are in either the '(?foo)' or '(?foo:bar)'
9156  * constructs, and updates RExC_flags with them.  On input, RExC_parse
9157  * should point to the first flag; it is updated on output to point to the
9158  * final ')' or ':'.  There needs to be at least one flag, or this will
9159  * abort */
9160
9161  /* for (?g), (?gc), and (?o) warnings; warning
9162  about (?c) will warn about (?g) -- japhy    */
9163
9164 #define WASTED_O  0x01
9165 #define WASTED_G  0x02
9166 #define WASTED_C  0x04
9167 #define WASTED_GC (WASTED_G|WASTED_C)
9168  I32 wastedflags = 0x00;
9169  U32 posflags = 0, negflags = 0;
9170  U32 *flagsp = &posflags;
9171  char has_charset_modifier = '\0';
9172  regex_charset cs;
9173  bool has_use_defaults = FALSE;
9174  const char* const seqstart = RExC_parse - 1; /* Point to the '?' */
9175
9176  PERL_ARGS_ASSERT_PARSE_LPAREN_QUESTION_FLAGS;
9177
9178  /* '^' as an initial flag sets certain defaults */
9179  if (UCHARAT(RExC_parse) == '^') {
9180   RExC_parse++;
9181   has_use_defaults = TRUE;
9182   STD_PMMOD_FLAGS_CLEAR(&RExC_flags);
9183   set_regex_charset(&RExC_flags, (RExC_utf8 || RExC_uni_semantics)
9184           ? REGEX_UNICODE_CHARSET
9185           : REGEX_DEPENDS_CHARSET);
9186  }
9187
9188  cs = get_regex_charset(RExC_flags);
9189  if (cs == REGEX_DEPENDS_CHARSET
9190   && (RExC_utf8 || RExC_uni_semantics))
9191  {
9192   cs = REGEX_UNICODE_CHARSET;
9193  }
9194
9195  while (*RExC_parse) {
9196   /* && strchr("iogcmsx", *RExC_parse) */
9197   /* (?g), (?gc) and (?o) are useless here
9198   and must be globally applied -- japhy */
9199   switch (*RExC_parse) {
9200
9201    /* Code for the imsx flags */
9202    CASE_STD_PMMOD_FLAGS_PARSE_SET(flagsp);
9203
9204    case LOCALE_PAT_MOD:
9205     if (has_charset_modifier) {
9206      goto excess_modifier;
9207     }
9208     else if (flagsp == &negflags) {
9209      goto neg_modifier;
9210     }
9211     cs = REGEX_LOCALE_CHARSET;
9212     has_charset_modifier = LOCALE_PAT_MOD;
9213     break;
9214    case UNICODE_PAT_MOD:
9215     if (has_charset_modifier) {
9216      goto excess_modifier;
9217     }
9218     else if (flagsp == &negflags) {
9219      goto neg_modifier;
9220     }
9221     cs = REGEX_UNICODE_CHARSET;
9222     has_charset_modifier = UNICODE_PAT_MOD;
9223     break;
9224    case ASCII_RESTRICT_PAT_MOD:
9225     if (flagsp == &negflags) {
9226      goto neg_modifier;
9227     }
9228     if (has_charset_modifier) {
9229      if (cs != REGEX_ASCII_RESTRICTED_CHARSET) {
9230       goto excess_modifier;
9231      }
9232      /* Doubled modifier implies more restricted */
9233      cs = REGEX_ASCII_MORE_RESTRICTED_CHARSET;
9234     }
9235     else {
9236      cs = REGEX_ASCII_RESTRICTED_CHARSET;
9237     }
9238     has_charset_modifier = ASCII_RESTRICT_PAT_MOD;
9239     break;
9240    case DEPENDS_PAT_MOD:
9241     if (has_use_defaults) {
9242      goto fail_modifiers;
9243     }
9244     else if (flagsp == &negflags) {
9245      goto neg_modifier;
9246     }
9247     else if (has_charset_modifier) {
9248      goto excess_modifier;
9249     }
9250
9251     /* The dual charset means unicode semantics if the
9252     * pattern (or target, not known until runtime) are
9253     * utf8, or something in the pattern indicates unicode
9254     * semantics */
9255     cs = (RExC_utf8 || RExC_uni_semantics)
9256      ? REGEX_UNICODE_CHARSET
9257      : REGEX_DEPENDS_CHARSET;
9258     has_charset_modifier = DEPENDS_PAT_MOD;
9259     break;
9260    excess_modifier:
9261     RExC_parse++;
9262     if (has_charset_modifier == ASCII_RESTRICT_PAT_MOD) {
9263      vFAIL2("Regexp modifier \"%c\" may appear a maximum of twice", ASCII_RESTRICT_PAT_MOD);
9264     }
9265     else if (has_charset_modifier == *(RExC_parse - 1)) {
9266      vFAIL2("Regexp modifier \"%c\" may not appear twice",
9267           *(RExC_parse - 1));
9268     }
9269     else {
9270      vFAIL3("Regexp modifiers \"%c\" and \"%c\" are mutually exclusive", has_charset_modifier, *(RExC_parse - 1));
9271     }
9272     /*NOTREACHED*/
9273    neg_modifier:
9274     RExC_parse++;
9275     vFAIL2("Regexp modifier \"%c\" may not appear after the \"-\"",
9276          *(RExC_parse - 1));
9277     /*NOTREACHED*/
9278    case ONCE_PAT_MOD: /* 'o' */
9279    case GLOBAL_PAT_MOD: /* 'g' */
9280     if (SIZE_ONLY && ckWARN(WARN_REGEXP)) {
9281      const I32 wflagbit = *RExC_parse == 'o'
9282           ? WASTED_O
9283           : WASTED_G;
9284      if (! (wastedflags & wflagbit) ) {
9285       wastedflags |= wflagbit;
9286       /* diag_listed_as: Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/ */
9287       vWARN5(
9288        RExC_parse + 1,
9289        "Useless (%s%c) - %suse /%c modifier",
9290        flagsp == &negflags ? "?-" : "?",
9291        *RExC_parse,
9292        flagsp == &negflags ? "don't " : "",
9293        *RExC_parse
9294       );
9295      }
9296     }
9297     break;
9298
9299    case CONTINUE_PAT_MOD: /* 'c' */
9300     if (SIZE_ONLY && ckWARN(WARN_REGEXP)) {
9301      if (! (wastedflags & WASTED_C) ) {
9302       wastedflags |= WASTED_GC;
9303       /* diag_listed_as: Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/ */
9304       vWARN3(
9305        RExC_parse + 1,
9306        "Useless (%sc) - %suse /gc modifier",
9307        flagsp == &negflags ? "?-" : "?",
9308        flagsp == &negflags ? "don't " : ""
9309       );
9310      }
9311     }
9312     break;
9313    case KEEPCOPY_PAT_MOD: /* 'p' */
9314     if (flagsp == &negflags) {
9315      if (SIZE_ONLY)
9316       ckWARNreg(RExC_parse + 1,"Useless use of (?-p)");
9317     } else {
9318      *flagsp |= RXf_PMf_KEEPCOPY;
9319     }
9320     break;
9321    case '-':
9322     /* A flag is a default iff it is following a minus, so
9323     * if there is a minus, it means will be trying to
9324     * re-specify a default which is an error */
9325     if (has_use_defaults || flagsp == &negflags) {
9326      goto fail_modifiers;
9327     }
9328     flagsp = &negflags;
9329     wastedflags = 0;  /* reset so (?g-c) warns twice */
9330     break;
9331    case ':':
9332    case ')':
9333     RExC_flags |= posflags;
9334     RExC_flags &= ~negflags;
9335     set_regex_charset(&RExC_flags, cs);
9336     if (RExC_flags & RXf_PMf_FOLD) {
9337      RExC_contains_i = 1;
9338     }
9339     return;
9340     /*NOTREACHED*/
9341    default:
9342    fail_modifiers:
9343     RExC_parse += UTF ? UTF8SKIP(RExC_parse) : 1;
9344     /* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
9345     vFAIL2utf8f("Sequence (%"UTF8f"...) not recognized",
9346      UTF8fARG(UTF, RExC_parse-seqstart, seqstart));
9347     /*NOTREACHED*/
9348   }
9349
9350   ++RExC_parse;
9351  }
9352 }
9353
9354 /*
9355  - reg - regular expression, i.e. main body or parenthesized thing
9356  *
9357  * Caller must absorb opening parenthesis.
9358  *
9359  * Combining parenthesis handling with the base level of regular expression
9360  * is a trifle forced, but the need to tie the tails of the branches to what
9361  * follows makes it hard to avoid.
9362  */
9363 #define REGTAIL(x,y,z) regtail((x),(y),(z),depth+1)
9364 #ifdef DEBUGGING
9365 #define REGTAIL_STUDY(x,y,z) regtail_study((x),(y),(z),depth+1)
9366 #else
9367 #define REGTAIL_STUDY(x,y,z) regtail((x),(y),(z),depth+1)
9368 #endif
9369
9370 /* Returns NULL, setting *flagp to TRYAGAIN at the end of (?) that only sets
9371    flags. Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan
9372    needs to be restarted.
9373    Otherwise would only return NULL if regbranch() returns NULL, which
9374    cannot happen.  */
9375 STATIC regnode *
9376 S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp,U32 depth)
9377  /* paren: Parenthesized? 0=top; 1,2=inside '(': changed to letter.
9378  * 2 is like 1, but indicates that nextchar() has been called to advance
9379  * RExC_parse beyond the '('.  Things like '(?' are indivisible tokens, and
9380  * this flag alerts us to the need to check for that */
9381 {
9382  dVAR;
9383  regnode *ret;  /* Will be the head of the group. */
9384  regnode *br;
9385  regnode *lastbr;
9386  regnode *ender = NULL;
9387  I32 parno = 0;
9388  I32 flags;
9389  U32 oregflags = RExC_flags;
9390  bool have_branch = 0;
9391  bool is_open = 0;
9392  I32 freeze_paren = 0;
9393  I32 after_freeze = 0;
9394
9395  char * parse_start = RExC_parse; /* MJD */
9396  char * const oregcomp_parse = RExC_parse;
9397
9398  GET_RE_DEBUG_FLAGS_DECL;
9399
9400  PERL_ARGS_ASSERT_REG;
9401  DEBUG_PARSE("reg ");
9402
9403  *flagp = 0;    /* Tentatively. */
9404
9405
9406  /* Make an OPEN node, if parenthesized. */
9407  if (paren) {
9408
9409   /* Under /x, space and comments can be gobbled up between the '(' and
9410   * here (if paren ==2).  The forms '(*VERB' and '(?...' disallow such
9411   * intervening space, as the sequence is a token, and a token should be
9412   * indivisible */
9413   bool has_intervening_patws = paren == 2 && *(RExC_parse - 1) != '(';
9414
9415   if ( *RExC_parse == '*') { /* (*VERB:ARG) */
9416    char *start_verb = RExC_parse;
9417    STRLEN verb_len = 0;
9418    char *start_arg = NULL;
9419    unsigned char op = 0;
9420    int argok = 1;
9421    int internal_argval = 0; /* internal_argval is only useful if
9422           !argok */
9423
9424    if (has_intervening_patws && SIZE_ONLY) {
9425     ckWARNregdep(RExC_parse + 1, "In '(*VERB...)', splitting the initial '(*' is deprecated");
9426    }
9427    while ( *RExC_parse && *RExC_parse != ')' ) {
9428     if ( *RExC_parse == ':' ) {
9429      start_arg = RExC_parse + 1;
9430      break;
9431     }
9432     RExC_parse++;
9433    }
9434    ++start_verb;
9435    verb_len = RExC_parse - start_verb;
9436    if ( start_arg ) {
9437     RExC_parse++;
9438     while ( *RExC_parse && *RExC_parse != ')' )
9439      RExC_parse++;
9440     if ( *RExC_parse != ')' )
9441      vFAIL("Unterminated verb pattern argument");
9442     if ( RExC_parse == start_arg )
9443      start_arg = NULL;
9444    } else {
9445     if ( *RExC_parse != ')' )
9446      vFAIL("Unterminated verb pattern");
9447    }
9448
9449    switch ( *start_verb ) {
9450    case 'A':  /* (*ACCEPT) */
9451     if ( memEQs(start_verb,verb_len,"ACCEPT") ) {
9452      op = ACCEPT;
9453      internal_argval = RExC_nestroot;
9454     }
9455     break;
9456    case 'C':  /* (*COMMIT) */
9457     if ( memEQs(start_verb,verb_len,"COMMIT") )
9458      op = COMMIT;
9459     break;
9460    case 'F':  /* (*FAIL) */
9461     if ( verb_len==1 || memEQs(start_verb,verb_len,"FAIL") ) {
9462      op = OPFAIL;
9463      argok = 0;
9464     }
9465     break;
9466    case ':':  /* (*:NAME) */
9467    case 'M':  /* (*MARK:NAME) */
9468     if ( verb_len==0 || memEQs(start_verb,verb_len,"MARK") ) {
9469      op = MARKPOINT;
9470      argok = -1;
9471     }
9472     break;
9473    case 'P':  /* (*PRUNE) */
9474     if ( memEQs(start_verb,verb_len,"PRUNE") )
9475      op = PRUNE;
9476     break;
9477    case 'S':   /* (*SKIP) */
9478     if ( memEQs(start_verb,verb_len,"SKIP") )
9479      op = SKIP;
9480     break;
9481    case 'T':  /* (*THEN) */
9482     /* [19:06] <TimToady> :: is then */
9483     if ( memEQs(start_verb,verb_len,"THEN") ) {
9484      op = CUTGROUP;
9485      RExC_seen |= REG_CUTGROUP_SEEN;
9486     }
9487     break;
9488    }
9489    if ( ! op ) {
9490     RExC_parse += UTF ? UTF8SKIP(RExC_parse) : 1;
9491     vFAIL2utf8f(
9492      "Unknown verb pattern '%"UTF8f"'",
9493      UTF8fARG(UTF, verb_len, start_verb));
9494    }
9495    if ( argok ) {
9496     if ( start_arg && internal_argval ) {
9497      vFAIL3("Verb pattern '%.*s' may not have an argument",
9498       verb_len, start_verb);
9499     } else if ( argok < 0 && !start_arg ) {
9500      vFAIL3("Verb pattern '%.*s' has a mandatory argument",
9501       verb_len, start_verb);
9502     } else {
9503      ret = reganode(pRExC_state, op, internal_argval);
9504      if ( ! internal_argval && ! SIZE_ONLY ) {
9505       if (start_arg) {
9506        SV *sv = newSVpvn( start_arg,
9507            RExC_parse - start_arg);
9508        ARG(ret) = add_data( pRExC_state,
9509             STR_WITH_LEN("S"));
9510        RExC_rxi->data->data[ARG(ret)]=(void*)sv;
9511        ret->flags = 0;
9512       } else {
9513        ret->flags = 1;
9514       }
9515      }
9516     }
9517     if (!internal_argval)
9518      RExC_seen |= REG_VERBARG_SEEN;
9519    } else if ( start_arg ) {
9520     vFAIL3("Verb pattern '%.*s' may not have an argument",
9521       verb_len, start_verb);
9522    } else {
9523     ret = reg_node(pRExC_state, op);
9524    }
9525    nextchar(pRExC_state);
9526    return ret;
9527   }
9528   else if (*RExC_parse == '?') { /* (?...) */
9529    bool is_logical = 0;
9530    const char * const seqstart = RExC_parse;
9531    if (has_intervening_patws && SIZE_ONLY) {
9532     ckWARNregdep(RExC_parse + 1, "In '(?...)', splitting the initial '(?' is deprecated");
9533    }
9534
9535    RExC_parse++;
9536    paren = *RExC_parse++;
9537    ret = NULL;   /* For look-ahead/behind. */
9538    switch (paren) {
9539
9540    case 'P': /* (?P...) variants for those used to PCRE/Python */
9541     paren = *RExC_parse++;
9542     if ( paren == '<')         /* (?P<...>) named capture */
9543      goto named_capture;
9544     else if (paren == '>') {   /* (?P>name) named recursion */
9545      goto named_recursion;
9546     }
9547     else if (paren == '=') {   /* (?P=...)  named backref */
9548      /* this pretty much dupes the code for \k<NAME> in
9549      * regatom(), if you change this make sure you change that
9550      * */
9551      char* name_start = RExC_parse;
9552      U32 num = 0;
9553      SV *sv_dat = reg_scan_name(pRExC_state,
9554       SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
9555      if (RExC_parse == name_start || *RExC_parse != ')')
9556       /* diag_listed_as: Sequence ?P=... not terminated in regex; marked by <-- HERE in m/%s/ */
9557       vFAIL2("Sequence %.3s... not terminated",parse_start);
9558
9559      if (!SIZE_ONLY) {
9560       num = add_data( pRExC_state, STR_WITH_LEN("S"));
9561       RExC_rxi->data->data[num]=(void*)sv_dat;
9562       SvREFCNT_inc_simple_void(sv_dat);
9563      }
9564      RExC_sawback = 1;
9565      ret = reganode(pRExC_state,
9566         ((! FOLD)
9567          ? NREF
9568          : (ASCII_FOLD_RESTRICTED)
9569          ? NREFFA
9570          : (AT_LEAST_UNI_SEMANTICS)
9571           ? NREFFU
9572           : (LOC)
9573           ? NREFFL
9574           : NREFF),
9575          num);
9576      *flagp |= HASWIDTH;
9577
9578      Set_Node_Offset(ret, parse_start+1);
9579      Set_Node_Cur_Length(ret, parse_start);
9580
9581      nextchar(pRExC_state);
9582      return ret;
9583     }
9584     RExC_parse++;
9585     /* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
9586     vFAIL3("Sequence (%.*s...) not recognized",
9587         RExC_parse-seqstart, seqstart);
9588     /*NOTREACHED*/
9589    case '<':           /* (?<...) */
9590     if (*RExC_parse == '!')
9591      paren = ',';
9592     else if (*RExC_parse != '=')
9593    named_capture:
9594     {               /* (?<...>) */
9595      char *name_start;
9596      SV *svname;
9597      paren= '>';
9598    case '\'':          /* (?'...') */
9599       name_start= RExC_parse;
9600       svname = reg_scan_name(pRExC_state,
9601       SIZE_ONLY    /* reverse test from the others */
9602       ? REG_RSN_RETURN_NAME
9603       : REG_RSN_RETURN_NULL);
9604      if (RExC_parse == name_start || *RExC_parse != paren)
9605       vFAIL2("Sequence (?%c... not terminated",
9606        paren=='>' ? '<' : paren);
9607      if (SIZE_ONLY) {
9608       HE *he_str;
9609       SV *sv_dat = NULL;
9610       if (!svname) /* shouldn't happen */
9611        Perl_croak(aTHX_
9612         "panic: reg_scan_name returned NULL");
9613       if (!RExC_paren_names) {
9614        RExC_paren_names= newHV();
9615        sv_2mortal(MUTABLE_SV(RExC_paren_names));
9616 #ifdef DEBUGGING
9617        RExC_paren_name_list= newAV();
9618        sv_2mortal(MUTABLE_SV(RExC_paren_name_list));
9619 #endif
9620       }
9621       he_str = hv_fetch_ent( RExC_paren_names, svname, 1, 0 );
9622       if ( he_str )
9623        sv_dat = HeVAL(he_str);
9624       if ( ! sv_dat ) {
9625        /* croak baby croak */
9626        Perl_croak(aTHX_
9627         "panic: paren_name hash element allocation failed");
9628       } else if ( SvPOK(sv_dat) ) {
9629        /* (?|...) can mean we have dupes so scan to check
9630        its already been stored. Maybe a flag indicating
9631        we are inside such a construct would be useful,
9632        but the arrays are likely to be quite small, so
9633        for now we punt -- dmq */
9634        IV count = SvIV(sv_dat);
9635        I32 *pv = (I32*)SvPVX(sv_dat);
9636        IV i;
9637        for ( i = 0 ; i < count ; i++ ) {
9638         if ( pv[i] == RExC_npar ) {
9639          count = 0;
9640          break;
9641         }
9642        }
9643        if ( count ) {
9644         pv = (I32*)SvGROW(sv_dat,
9645             SvCUR(sv_dat) + sizeof(I32)+1);
9646         SvCUR_set(sv_dat, SvCUR(sv_dat) + sizeof(I32));
9647         pv[count] = RExC_npar;
9648         SvIV_set(sv_dat, SvIVX(sv_dat) + 1);
9649        }
9650       } else {
9651        (void)SvUPGRADE(sv_dat,SVt_PVNV);
9652        sv_setpvn(sv_dat, (char *)&(RExC_npar),
9653                 sizeof(I32));
9654        SvIOK_on(sv_dat);
9655        SvIV_set(sv_dat, 1);
9656       }
9657 #ifdef DEBUGGING
9658       /* Yes this does cause a memory leak in debugging Perls
9659       * */
9660       if (!av_store(RExC_paren_name_list,
9661          RExC_npar, SvREFCNT_inc(svname)))
9662        SvREFCNT_dec_NN(svname);
9663 #endif
9664
9665       /*sv_dump(sv_dat);*/
9666      }
9667      nextchar(pRExC_state);
9668      paren = 1;
9669      goto capturing_parens;
9670     }
9671     RExC_seen |= REG_LOOKBEHIND_SEEN;
9672     RExC_in_lookbehind++;
9673     RExC_parse++;
9674    case '=':           /* (?=...) */
9675     RExC_seen_zerolen++;
9676     break;
9677    case '!':           /* (?!...) */
9678     RExC_seen_zerolen++;
9679     if (*RExC_parse == ')') {
9680      ret=reg_node(pRExC_state, OPFAIL);
9681      nextchar(pRExC_state);
9682      return ret;
9683     }
9684     break;
9685    case '|':           /* (?|...) */
9686     /* branch reset, behave like a (?:...) except that
9687     buffers in alternations share the same numbers */
9688     paren = ':';
9689     after_freeze = freeze_paren = RExC_npar;
9690     break;
9691    case ':':           /* (?:...) */
9692    case '>':           /* (?>...) */
9693     break;
9694    case '$':           /* (?$...) */
9695    case '@':           /* (?@...) */
9696     vFAIL2("Sequence (?%c...) not implemented", (int)paren);
9697     break;
9698    case '#':           /* (?#...) */
9699     /* XXX As soon as we disallow separating the '?' and '*' (by
9700     * spaces or (?#...) comment), it is believed that this case
9701     * will be unreachable and can be removed.  See
9702     * [perl #117327] */
9703     while (*RExC_parse && *RExC_parse != ')')
9704      RExC_parse++;
9705     if (*RExC_parse != ')')
9706      FAIL("Sequence (?#... not terminated");
9707     nextchar(pRExC_state);
9708     *flagp = TRYAGAIN;
9709     return NULL;
9710    case '0' :           /* (?0) */
9711    case 'R' :           /* (?R) */
9712     if (*RExC_parse != ')')
9713      FAIL("Sequence (?R) not terminated");
9714     ret = reg_node(pRExC_state, GOSTART);
9715      RExC_seen |= REG_GOSTART_SEEN;
9716     *flagp |= POSTPONED;
9717     nextchar(pRExC_state);
9718     return ret;
9719     /*notreached*/
9720    { /* named and numeric backreferences */
9721     I32 num;
9722    case '&':            /* (?&NAME) */
9723     parse_start = RExC_parse - 1;
9724    named_recursion:
9725     {
9726       SV *sv_dat = reg_scan_name(pRExC_state,
9727        SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
9728       num = sv_dat ? *((I32 *)SvPVX(sv_dat)) : 0;
9729     }
9730     if (RExC_parse == RExC_end || *RExC_parse != ')')
9731      vFAIL("Sequence (?&... not terminated");
9732     goto gen_recurse_regop;
9733     assert(0); /* NOT REACHED */
9734    case '+':
9735     if (!(RExC_parse[0] >= '1' && RExC_parse[0] <= '9')) {
9736      RExC_parse++;
9737      vFAIL("Illegal pattern");
9738     }
9739     goto parse_recursion;
9740     /* NOT REACHED*/
9741    case '-': /* (?-1) */
9742     if (!(RExC_parse[0] >= '1' && RExC_parse[0] <= '9')) {
9743      RExC_parse--; /* rewind to let it be handled later */
9744      goto parse_flags;
9745     }
9746     /*FALLTHROUGH */
9747    case '1': case '2': case '3': case '4': /* (?1) */
9748    case '5': case '6': case '7': case '8': case '9':
9749     RExC_parse--;
9750    parse_recursion:
9751     num = atoi(RExC_parse);
9752     parse_start = RExC_parse - 1; /* MJD */
9753     if (*RExC_parse == '-')
9754      RExC_parse++;
9755     while (isDIGIT(*RExC_parse))
9756       RExC_parse++;
9757     if (*RExC_parse!=')')
9758      vFAIL("Expecting close bracket");
9759
9760    gen_recurse_regop:
9761     if ( paren == '-' ) {
9762      /*
9763      Diagram of capture buffer numbering.
9764      Top line is the normal capture buffer numbers
9765      Bottom line is the negative indexing as from
9766      the X (the (?-2))
9767
9768      +   1 2    3 4 5 X          6 7
9769      /(a(x)y)(a(b(c(?-2)d)e)f)(g(h))/
9770      -   5 4    3 2 1 X          x x
9771
9772      */
9773      num = RExC_npar + num;
9774      if (num < 1)  {
9775       RExC_parse++;
9776       vFAIL("Reference to nonexistent group");
9777      }
9778     } else if ( paren == '+' ) {
9779      num = RExC_npar + num - 1;
9780     }
9781
9782     ret = reganode(pRExC_state, GOSUB, num);
9783     if (!SIZE_ONLY) {
9784      if (num > (I32)RExC_rx->nparens) {
9785       RExC_parse++;
9786       vFAIL("Reference to nonexistent group");
9787      }
9788      ARG2L_SET( ret, RExC_recurse_count++);
9789      RExC_emit++;
9790      DEBUG_OPTIMISE_MORE_r(PerlIO_printf(Perl_debug_log,
9791       "Recurse #%"UVuf" to %"IVdf"\n",
9792        (UV)ARG(ret), (IV)ARG2L(ret)));
9793     } else {
9794      RExC_size++;
9795      }
9796      RExC_seen |= REG_RECURSE_SEEN;
9797     Set_Node_Length(ret, 1 + regarglen[OP(ret)]); /* MJD */
9798     Set_Node_Offset(ret, parse_start); /* MJD */
9799
9800     *flagp |= POSTPONED;
9801     nextchar(pRExC_state);
9802     return ret;
9803    } /* named and numeric backreferences */
9804    assert(0); /* NOT REACHED */
9805
9806    case '?':           /* (??...) */
9807     is_logical = 1;
9808     if (*RExC_parse != '{') {
9809      RExC_parse++;
9810      /* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
9811      vFAIL2utf8f(
9812       "Sequence (%"UTF8f"...) not recognized",
9813       UTF8fARG(UTF, RExC_parse-seqstart, seqstart));
9814      /*NOTREACHED*/
9815     }
9816     *flagp |= POSTPONED;
9817     paren = *RExC_parse++;
9818     /* FALL THROUGH */
9819    case '{':           /* (?{...}) */
9820    {
9821     U32 n = 0;
9822     struct reg_code_block *cb;
9823
9824     RExC_seen_zerolen++;
9825
9826     if (   !pRExC_state->num_code_blocks
9827      || pRExC_state->code_index >= pRExC_state->num_code_blocks
9828      || pRExC_state->code_blocks[pRExC_state->code_index].start
9829       != (STRLEN)((RExC_parse -3 - (is_logical ? 1 : 0))
9830        - RExC_start)
9831     ) {
9832      if (RExC_pm_flags & PMf_USE_RE_EVAL)
9833       FAIL("panic: Sequence (?{...}): no code block found\n");
9834      FAIL("Eval-group not allowed at runtime, use re 'eval'");
9835     }
9836     /* this is a pre-compiled code block (?{...}) */
9837     cb = &pRExC_state->code_blocks[pRExC_state->code_index];
9838     RExC_parse = RExC_start + cb->end;
9839     if (!SIZE_ONLY) {
9840      OP *o = cb->block;
9841      if (cb->src_regex) {
9842       n = add_data(pRExC_state, STR_WITH_LEN("rl"));
9843       RExC_rxi->data->data[n] =
9844        (void*)SvREFCNT_inc((SV*)cb->src_regex);
9845       RExC_rxi->data->data[n+1] = (void*)o;
9846      }
9847      else {
9848       n = add_data(pRExC_state,
9849        (RExC_pm_flags & PMf_HAS_CV) ? "L" : "l", 1);
9850       RExC_rxi->data->data[n] = (void*)o;
9851      }
9852     }
9853     pRExC_state->code_index++;
9854     nextchar(pRExC_state);
9855
9856     if (is_logical) {
9857      regnode *eval;
9858      ret = reg_node(pRExC_state, LOGICAL);
9859      eval = reganode(pRExC_state, EVAL, n);
9860      if (!SIZE_ONLY) {
9861       ret->flags = 2;
9862       /* for later propagation into (??{}) return value */
9863       eval->flags = (U8) (RExC_flags & RXf_PMf_COMPILETIME);
9864      }
9865      REGTAIL(pRExC_state, ret, eval);
9866      /* deal with the length of this later - MJD */
9867      return ret;
9868     }
9869     ret = reganode(pRExC_state, EVAL, n);
9870     Set_Node_Length(ret, RExC_parse - parse_start + 1);
9871     Set_Node_Offset(ret, parse_start);
9872     return ret;
9873    }
9874    case '(':           /* (?(?{...})...) and (?(?=...)...) */
9875    {
9876     int is_define= 0;
9877     if (RExC_parse[0] == '?') {        /* (?(?...)) */
9878      if (RExC_parse[1] == '=' || RExC_parse[1] == '!'
9879       || RExC_parse[1] == '<'
9880       || RExC_parse[1] == '{') { /* Lookahead or eval. */
9881       I32 flag;
9882       regnode *tail;
9883
9884       ret = reg_node(pRExC_state, LOGICAL);
9885       if (!SIZE_ONLY)
9886        ret->flags = 1;
9887
9888       tail = reg(pRExC_state, 1, &flag, depth+1);
9889       if (flag & RESTART_UTF8) {
9890        *flagp = RESTART_UTF8;
9891        return NULL;
9892       }
9893       REGTAIL(pRExC_state, ret, tail);
9894       goto insert_if;
9895      }
9896     }
9897     else if ( RExC_parse[0] == '<'     /* (?(<NAME>)...) */
9898       || RExC_parse[0] == '\'' ) /* (?('NAME')...) */
9899     {
9900      char ch = RExC_parse[0] == '<' ? '>' : '\'';
9901      char *name_start= RExC_parse++;
9902      U32 num = 0;
9903      SV *sv_dat=reg_scan_name(pRExC_state,
9904       SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
9905      if (RExC_parse == name_start || *RExC_parse != ch)
9906       vFAIL2("Sequence (?(%c... not terminated",
9907        (ch == '>' ? '<' : ch));
9908      RExC_parse++;
9909      if (!SIZE_ONLY) {
9910       num = add_data( pRExC_state, STR_WITH_LEN("S"));
9911       RExC_rxi->data->data[num]=(void*)sv_dat;
9912       SvREFCNT_inc_simple_void(sv_dat);
9913      }
9914      ret = reganode(pRExC_state,NGROUPP,num);
9915      goto insert_if_check_paren;
9916     }
9917     else if (RExC_parse[0] == 'D' &&
9918       RExC_parse[1] == 'E' &&
9919       RExC_parse[2] == 'F' &&
9920       RExC_parse[3] == 'I' &&
9921       RExC_parse[4] == 'N' &&
9922       RExC_parse[5] == 'E')
9923     {
9924      ret = reganode(pRExC_state,DEFINEP,0);
9925      RExC_parse +=6 ;
9926      is_define = 1;
9927      goto insert_if_check_paren;
9928     }
9929     else if (RExC_parse[0] == 'R') {
9930      RExC_parse++;
9931      parno = 0;
9932      if (RExC_parse[0] >= '1' && RExC_parse[0] <= '9' ) {
9933       parno = atoi(RExC_parse++);
9934       while (isDIGIT(*RExC_parse))
9935        RExC_parse++;
9936      } else if (RExC_parse[0] == '&') {
9937       SV *sv_dat;
9938       RExC_parse++;
9939       sv_dat = reg_scan_name(pRExC_state,
9940        SIZE_ONLY
9941        ? REG_RSN_RETURN_NULL
9942        : REG_RSN_RETURN_DATA);
9943        parno = sv_dat ? *((I32 *)SvPVX(sv_dat)) : 0;
9944      }
9945      ret = reganode(pRExC_state,INSUBP,parno);
9946      goto insert_if_check_paren;
9947     }
9948     else if (RExC_parse[0] >= '1' && RExC_parse[0] <= '9' ) {
9949      /* (?(1)...) */
9950      char c;
9951      char *tmp;
9952      parno = atoi(RExC_parse++);
9953
9954      while (isDIGIT(*RExC_parse))
9955       RExC_parse++;
9956      ret = reganode(pRExC_state, GROUPP, parno);
9957
9958     insert_if_check_paren:
9959      if (*(tmp = nextchar(pRExC_state)) != ')') {
9960       /* nextchar also skips comments, so undo its work
9961       * and skip over the the next character.
9962       */
9963       RExC_parse = tmp;
9964       RExC_parse += UTF ? UTF8SKIP(RExC_parse) : 1;
9965       vFAIL("Switch condition not recognized");
9966      }
9967     insert_if:
9968      REGTAIL(pRExC_state, ret, reganode(pRExC_state, IFTHEN, 0));
9969      br = regbranch(pRExC_state, &flags, 1,depth+1);
9970      if (br == NULL) {
9971       if (flags & RESTART_UTF8) {
9972        *flagp = RESTART_UTF8;
9973        return NULL;
9974       }
9975       FAIL2("panic: regbranch returned NULL, flags=%#"UVxf"",
9976        (UV) flags);
9977      } else
9978       REGTAIL(pRExC_state, br, reganode(pRExC_state,
9979               LONGJMP, 0));
9980      c = *nextchar(pRExC_state);
9981      if (flags&HASWIDTH)
9982       *flagp |= HASWIDTH;
9983      if (c == '|') {
9984       if (is_define)
9985        vFAIL("(?(DEFINE)....) does not allow branches");
9986
9987       /* Fake one for optimizer.  */
9988       lastbr = reganode(pRExC_state, IFTHEN, 0);
9989
9990       if (!regbranch(pRExC_state, &flags, 1,depth+1)) {
9991        if (flags & RESTART_UTF8) {
9992         *flagp = RESTART_UTF8;
9993         return NULL;
9994        }
9995        FAIL2("panic: regbranch returned NULL, flags=%#"UVxf"",
9996         (UV) flags);
9997       }
9998       REGTAIL(pRExC_state, ret, lastbr);
9999       if (flags&HASWIDTH)
10000        *flagp |= HASWIDTH;
10001       c = *nextchar(pRExC_state);
10002      }
10003      else
10004       lastbr = NULL;
10005      if (c != ')')
10006       vFAIL("Switch (?(condition)... contains too many branches");
10007      ender = reg_node(pRExC_state, TAIL);
10008      REGTAIL(pRExC_state, br, ender);
10009      if (lastbr) {
10010       REGTAIL(pRExC_state, lastbr, ender);
10011       REGTAIL(pRExC_state, NEXTOPER(NEXTOPER(lastbr)), ender);
10012      }
10013      else
10014       REGTAIL(pRExC_state, ret, ender);
10015      RExC_size++; /* XXX WHY do we need this?!!
10016          For large programs it seems to be required
10017          but I can't figure out why. -- dmq*/
10018      return ret;
10019     }
10020     else {
10021      RExC_parse += UTF ? UTF8SKIP(RExC_parse) : 1;
10022      vFAIL("Unknown switch condition (?(...))");
10023     }
10024    }
10025    case '[':           /* (?[ ... ]) */
10026     return handle_regex_sets(pRExC_state, NULL, flagp, depth,
10027           oregcomp_parse);
10028    case 0:
10029     RExC_parse--; /* for vFAIL to print correctly */
10030     vFAIL("Sequence (? incomplete");
10031     break;
10032    default: /* e.g., (?i) */
10033     --RExC_parse;
10034    parse_flags:
10035     parse_lparen_question_flags(pRExC_state);
10036     if (UCHARAT(RExC_parse) != ':') {
10037      nextchar(pRExC_state);
10038      *flagp = TRYAGAIN;
10039      return NULL;
10040     }
10041     paren = ':';
10042     nextchar(pRExC_state);
10043     ret = NULL;
10044     goto parse_rest;
10045    } /* end switch */
10046   }
10047   else {                  /* (...) */
10048   capturing_parens:
10049    parno = RExC_npar;
10050    RExC_npar++;
10051
10052    ret = reganode(pRExC_state, OPEN, parno);
10053    if (!SIZE_ONLY ){
10054     if (!RExC_nestroot)
10055      RExC_nestroot = parno;
10056     if (RExC_seen & REG_RECURSE_SEEN
10057      && !RExC_open_parens[parno-1])
10058     {
10059      DEBUG_OPTIMISE_MORE_r(PerlIO_printf(Perl_debug_log,
10060       "Setting open paren #%"IVdf" to %d\n",
10061       (IV)parno, REG_NODE_NUM(ret)));
10062      RExC_open_parens[parno-1]= ret;
10063     }
10064    }
10065    Set_Node_Length(ret, 1); /* MJD */
10066    Set_Node_Offset(ret, RExC_parse); /* MJD */
10067    is_open = 1;
10068   }
10069  }
10070  else                        /* ! paren */
10071   ret = NULL;
10072
10073    parse_rest:
10074  /* Pick up the branches, linking them together. */
10075  parse_start = RExC_parse;   /* MJD */
10076  br = regbranch(pRExC_state, &flags, 1,depth+1);
10077
10078  /*     branch_len = (paren != 0); */
10079
10080  if (br == NULL) {
10081   if (flags & RESTART_UTF8) {
10082    *flagp = RESTART_UTF8;
10083    return NULL;
10084   }
10085   FAIL2("panic: regbranch returned NULL, flags=%#"UVxf"", (UV) flags);
10086  }
10087  if (*RExC_parse == '|') {
10088   if (!SIZE_ONLY && RExC_extralen) {
10089    reginsert(pRExC_state, BRANCHJ, br, depth+1);
10090   }
10091   else {                  /* MJD */
10092    reginsert(pRExC_state, BRANCH, br, depth+1);
10093    Set_Node_Length(br, paren != 0);
10094    Set_Node_Offset_To_R(br-RExC_emit_start, parse_start-RExC_start);
10095   }
10096   have_branch = 1;
10097   if (SIZE_ONLY)
10098    RExC_extralen += 1;  /* For BRANCHJ-BRANCH. */
10099  }
10100  else if (paren == ':') {
10101   *flagp |= flags&SIMPLE;
10102  }
10103  if (is_open) {    /* Starts with OPEN. */
10104   REGTAIL(pRExC_state, ret, br);          /* OPEN -> first. */
10105  }
10106  else if (paren != '?')  /* Not Conditional */
10107   ret = br;
10108  *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
10109  lastbr = br;
10110  while (*RExC_parse == '|') {
10111   if (!SIZE_ONLY && RExC_extralen) {
10112    ender = reganode(pRExC_state, LONGJMP,0);
10113
10114    /* Append to the previous. */
10115    REGTAIL(pRExC_state, NEXTOPER(NEXTOPER(lastbr)), ender);
10116   }
10117   if (SIZE_ONLY)
10118    RExC_extralen += 2;  /* Account for LONGJMP. */
10119   nextchar(pRExC_state);
10120   if (freeze_paren) {
10121    if (RExC_npar > after_freeze)
10122     after_freeze = RExC_npar;
10123    RExC_npar = freeze_paren;
10124   }
10125   br = regbranch(pRExC_state, &flags, 0, depth+1);
10126
10127   if (br == NULL) {
10128    if (flags & RESTART_UTF8) {
10129     *flagp = RESTART_UTF8;
10130     return NULL;
10131    }
10132    FAIL2("panic: regbranch returned NULL, flags=%#"UVxf"", (UV) flags);
10133   }
10134   REGTAIL(pRExC_state, lastbr, br);               /* BRANCH -> BRANCH. */
10135   lastbr = br;
10136   *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
10137  }
10138
10139  if (have_branch || paren != ':') {
10140   /* Make a closing node, and hook it on the end. */
10141   switch (paren) {
10142   case ':':
10143    ender = reg_node(pRExC_state, TAIL);
10144    break;
10145   case 1: case 2:
10146    ender = reganode(pRExC_state, CLOSE, parno);
10147    if (!SIZE_ONLY && RExC_seen & REG_RECURSE_SEEN) {
10148     DEBUG_OPTIMISE_MORE_r(PerlIO_printf(Perl_debug_log,
10149       "Setting close paren #%"IVdf" to %d\n",
10150       (IV)parno, REG_NODE_NUM(ender)));
10151     RExC_close_parens[parno-1]= ender;
10152     if (RExC_nestroot == parno)
10153      RExC_nestroot = 0;
10154    }
10155    Set_Node_Offset(ender,RExC_parse+1); /* MJD */
10156    Set_Node_Length(ender,1); /* MJD */
10157    break;
10158   case '<':
10159   case ',':
10160   case '=':
10161   case '!':
10162    *flagp &= ~HASWIDTH;
10163    /* FALL THROUGH */
10164   case '>':
10165    ender = reg_node(pRExC_state, SUCCEED);
10166    break;
10167   case 0:
10168    ender = reg_node(pRExC_state, END);
10169    if (!SIZE_ONLY) {
10170     assert(!RExC_opend); /* there can only be one! */
10171     RExC_opend = ender;
10172    }
10173    break;
10174   }
10175   DEBUG_PARSE_r(if (!SIZE_ONLY) {
10176    SV * const mysv_val1=sv_newmortal();
10177    SV * const mysv_val2=sv_newmortal();
10178    DEBUG_PARSE_MSG("lsbr");
10179    regprop(RExC_rx, mysv_val1, lastbr, NULL);
10180    regprop(RExC_rx, mysv_val2, ender, NULL);
10181    PerlIO_printf(Perl_debug_log, "~ tying lastbr %s (%"IVdf") to ender %s (%"IVdf") offset %"IVdf"\n",
10182       SvPV_nolen_const(mysv_val1),
10183       (IV)REG_NODE_NUM(lastbr),
10184       SvPV_nolen_const(mysv_val2),
10185       (IV)REG_NODE_NUM(ender),
10186       (IV)(ender - lastbr)
10187    );
10188   });
10189   REGTAIL(pRExC_state, lastbr, ender);
10190
10191   if (have_branch && !SIZE_ONLY) {
10192    char is_nothing= 1;
10193    if (depth==1)
10194     RExC_seen |= REG_TOP_LEVEL_BRANCHES_SEEN;
10195
10196    /* Hook the tails of the branches to the closing node. */
10197    for (br = ret; br; br = regnext(br)) {
10198     const U8 op = PL_regkind[OP(br)];
10199     if (op == BRANCH) {
10200      REGTAIL_STUDY(pRExC_state, NEXTOPER(br), ender);
10201      if ( OP(NEXTOPER(br)) != NOTHING
10202       || regnext(NEXTOPER(br)) != ender)
10203       is_nothing= 0;
10204     }
10205     else if (op == BRANCHJ) {
10206      REGTAIL_STUDY(pRExC_state, NEXTOPER(NEXTOPER(br)), ender);
10207      /* for now we always disable this optimisation * /
10208      if ( OP(NEXTOPER(NEXTOPER(br))) != NOTHING
10209       || regnext(NEXTOPER(NEXTOPER(br))) != ender)
10210      */
10211       is_nothing= 0;
10212     }
10213    }
10214    if (is_nothing) {
10215     br= PL_regkind[OP(ret)] != BRANCH ? regnext(ret) : ret;
10216     DEBUG_PARSE_r(if (!SIZE_ONLY) {
10217      SV * const mysv_val1=sv_newmortal();
10218      SV * const mysv_val2=sv_newmortal();
10219      DEBUG_PARSE_MSG("NADA");
10220      regprop(RExC_rx, mysv_val1, ret, NULL);
10221      regprop(RExC_rx, mysv_val2, ender, NULL);
10222      PerlIO_printf(Perl_debug_log, "~ converting ret %s (%"IVdf") to ender %s (%"IVdf") offset %"IVdf"\n",
10223         SvPV_nolen_const(mysv_val1),
10224         (IV)REG_NODE_NUM(ret),
10225         SvPV_nolen_const(mysv_val2),
10226         (IV)REG_NODE_NUM(ender),
10227         (IV)(ender - ret)
10228      );
10229     });
10230     OP(br)= NOTHING;
10231     if (OP(ender) == TAIL) {
10232      NEXT_OFF(br)= 0;
10233      RExC_emit= br + 1;
10234     } else {
10235      regnode *opt;
10236      for ( opt= br + 1; opt < ender ; opt++ )
10237       OP(opt)= OPTIMIZED;
10238      NEXT_OFF(br)= ender - br;
10239     }
10240    }
10241   }
10242  }
10243
10244  {
10245   const char *p;
10246   static const char parens[] = "=!<,>";
10247
10248   if (paren && (p = strchr(parens, paren))) {
10249    U8 node = ((p - parens) % 2) ? UNLESSM : IFMATCH;
10250    int flag = (p - parens) > 1;
10251
10252    if (paren == '>')
10253     node = SUSPEND, flag = 0;
10254    reginsert(pRExC_state, node,ret, depth+1);
10255    Set_Node_Cur_Length(ret, parse_start);
10256    Set_Node_Offset(ret, parse_start + 1);
10257    ret->flags = flag;
10258    REGTAIL_STUDY(pRExC_state, ret, reg_node(pRExC_state, TAIL));
10259   }
10260  }
10261
10262  /* Check for proper termination. */
10263  if (paren) {
10264   /* restore original flags, but keep (?p) */
10265   RExC_flags = oregflags | (RExC_flags & RXf_PMf_KEEPCOPY);
10266   if (RExC_parse >= RExC_end || *nextchar(pRExC_state) != ')') {
10267    RExC_parse = oregcomp_parse;
10268    vFAIL("Unmatched (");
10269   }
10270  }
10271  else if (!paren && RExC_parse < RExC_end) {
10272   if (*RExC_parse == ')') {
10273    RExC_parse++;
10274    vFAIL("Unmatched )");
10275   }
10276   else
10277    FAIL("Junk on end of regexp"); /* "Can't happen". */
10278   assert(0); /* NOTREACHED */
10279  }
10280
10281  if (RExC_in_lookbehind) {
10282   RExC_in_lookbehind--;
10283  }
10284  if (after_freeze > RExC_npar)
10285   RExC_npar = after_freeze;
10286  return(ret);
10287 }
10288
10289 /*
10290  - regbranch - one alternative of an | operator
10291  *
10292  * Implements the concatenation operator.
10293  *
10294  * Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs to be
10295  * restarted.
10296  */
10297 STATIC regnode *
10298 S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
10299 {
10300  dVAR;
10301  regnode *ret;
10302  regnode *chain = NULL;
10303  regnode *latest;
10304  I32 flags = 0, c = 0;
10305  GET_RE_DEBUG_FLAGS_DECL;
10306
10307  PERL_ARGS_ASSERT_REGBRANCH;
10308
10309  DEBUG_PARSE("brnc");
10310
10311  if (first)
10312   ret = NULL;
10313  else {
10314   if (!SIZE_ONLY && RExC_extralen)
10315    ret = reganode(pRExC_state, BRANCHJ,0);
10316   else {
10317    ret = reg_node(pRExC_state, BRANCH);
10318    Set_Node_Length(ret, 1);
10319   }
10320  }
10321
10322  if (!first && SIZE_ONLY)
10323   RExC_extralen += 1;   /* BRANCHJ */
10324
10325  *flagp = WORST;   /* Tentatively. */
10326
10327  RExC_parse--;
10328  nextchar(pRExC_state);
10329  while (RExC_parse < RExC_end && *RExC_parse != '|' && *RExC_parse != ')') {
10330   flags &= ~TRYAGAIN;
10331   latest = regpiece(pRExC_state, &flags,depth+1);
10332   if (latest == NULL) {
10333    if (flags & TRYAGAIN)
10334     continue;
10335    if (flags & RESTART_UTF8) {
10336     *flagp = RESTART_UTF8;
10337     return NULL;
10338    }
10339    FAIL2("panic: regpiece returned NULL, flags=%#"UVxf"", (UV) flags);
10340   }
10341   else if (ret == NULL)
10342    ret = latest;
10343   *flagp |= flags&(HASWIDTH|POSTPONED);
10344   if (chain == NULL)  /* First piece. */
10345    *flagp |= flags&SPSTART;
10346   else {
10347    RExC_naughty++;
10348    REGTAIL(pRExC_state, chain, latest);
10349   }
10350   chain = latest;
10351   c++;
10352  }
10353  if (chain == NULL) { /* Loop ran zero times. */
10354   chain = reg_node(pRExC_state, NOTHING);
10355   if (ret == NULL)
10356    ret = chain;
10357  }
10358  if (c == 1) {
10359   *flagp |= flags&SIMPLE;
10360  }
10361
10362  return ret;
10363 }
10364
10365 /*
10366  - regpiece - something followed by possible [*+?]
10367  *
10368  * Note that the branching code sequences used for ? and the general cases
10369  * of * and + are somewhat optimized:  they use the same NOTHING node as
10370  * both the endmarker for their branch list and the body of the last branch.
10371  * It might seem that this node could be dispensed with entirely, but the
10372  * endmarker role is not redundant.
10373  *
10374  * Returns NULL, setting *flagp to TRYAGAIN if regatom() returns NULL with
10375  * TRYAGAIN.
10376  * Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs to be
10377  * restarted.
10378  */
10379 STATIC regnode *
10380 S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
10381 {
10382  dVAR;
10383  regnode *ret;
10384  char op;
10385  char *next;
10386  I32 flags;
10387  const char * const origparse = RExC_parse;
10388  I32 min;
10389  I32 max = REG_INFTY;
10390 #ifdef RE_TRACK_PATTERN_OFFSETS
10391  char *parse_start;
10392 #endif
10393  const char *maxpos = NULL;
10394
10395  /* Save the original in case we change the emitted regop to a FAIL. */
10396  regnode * const orig_emit = RExC_emit;
10397
10398  GET_RE_DEBUG_FLAGS_DECL;
10399
10400  PERL_ARGS_ASSERT_REGPIECE;
10401
10402  DEBUG_PARSE("piec");
10403
10404  ret = regatom(pRExC_state, &flags,depth+1);
10405  if (ret == NULL) {
10406   if (flags & (TRYAGAIN|RESTART_UTF8))
10407    *flagp |= flags & (TRYAGAIN|RESTART_UTF8);
10408   else
10409    FAIL2("panic: regatom returned NULL, flags=%#"UVxf"", (UV) flags);
10410   return(NULL);
10411  }
10412
10413  op = *RExC_parse;
10414
10415  if (op == '{' && regcurly(RExC_parse, FALSE)) {
10416   maxpos = NULL;
10417 #ifdef RE_TRACK_PATTERN_OFFSETS
10418   parse_start = RExC_parse; /* MJD */
10419 #endif
10420   next = RExC_parse + 1;
10421   while (isDIGIT(*next) || *next == ',') {
10422    if (*next == ',') {
10423     if (maxpos)
10424      break;
10425     else
10426      maxpos = next;
10427    }
10428    next++;
10429   }
10430   if (*next == '}') {  /* got one */
10431    if (!maxpos)
10432     maxpos = next;
10433    RExC_parse++;
10434    min = atoi(RExC_parse);
10435    if (*maxpos == ',')
10436     maxpos++;
10437    else
10438     maxpos = RExC_parse;
10439    max = atoi(maxpos);
10440    if (!max && *maxpos != '0')
10441     max = REG_INFTY;  /* meaning "infinity" */
10442    else if (max >= REG_INFTY)
10443     vFAIL2("Quantifier in {,} bigger than %d", REG_INFTY - 1);
10444    RExC_parse = next;
10445    nextchar(pRExC_state);
10446    if (max < min) {    /* If can't match, warn and optimize to fail
10447         unconditionally */
10448     if (SIZE_ONLY) {
10449      ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match");
10450
10451      /* We can't back off the size because we have to reserve
10452      * enough space for all the things we are about to throw
10453      * away, but we can shrink it by the ammount we are about
10454      * to re-use here */
10455      RExC_size = PREVOPER(RExC_size) - regarglen[(U8)OPFAIL];
10456     }
10457     else {
10458      RExC_emit = orig_emit;
10459     }
10460     ret = reg_node(pRExC_state, OPFAIL);
10461     return ret;
10462    }
10463    else if (min == max
10464      && RExC_parse < RExC_end
10465      && (*RExC_parse == '?' || *RExC_parse == '+'))
10466    {
10467     if (SIZE_ONLY) {
10468      ckWARN2reg(RExC_parse + 1,
10469        "Useless use of greediness modifier '%c'",
10470        *RExC_parse);
10471     }
10472     /* Absorb the modifier, so later code doesn't see nor use
10473      * it */
10474     nextchar(pRExC_state);
10475    }
10476
10477   do_curly:
10478    if ((flags&SIMPLE)) {
10479     RExC_naughty += 2 + RExC_naughty / 2;
10480     reginsert(pRExC_state, CURLY, ret, depth+1);
10481     Set_Node_Offset(ret, parse_start+1); /* MJD */
10482     Set_Node_Cur_Length(ret, parse_start);
10483    }
10484    else {
10485     regnode * const w = reg_node(pRExC_state, WHILEM);
10486
10487     w->flags = 0;
10488     REGTAIL(pRExC_state, ret, w);
10489     if (!SIZE_ONLY && RExC_extralen) {
10490      reginsert(pRExC_state, LONGJMP,ret, depth+1);
10491      reginsert(pRExC_state, NOTHING,ret, depth+1);
10492      NEXT_OFF(ret) = 3; /* Go over LONGJMP. */
10493     }
10494     reginsert(pRExC_state, CURLYX,ret, depth+1);
10495         /* MJD hk */
10496     Set_Node_Offset(ret, parse_start+1);
10497     Set_Node_Length(ret,
10498         op == '{' ? (RExC_parse - parse_start) : 1);
10499
10500     if (!SIZE_ONLY && RExC_extralen)
10501      NEXT_OFF(ret) = 3; /* Go over NOTHING to LONGJMP. */
10502     REGTAIL(pRExC_state, ret, reg_node(pRExC_state, NOTHING));
10503     if (SIZE_ONLY)
10504      RExC_whilem_seen++, RExC_extralen += 3;
10505     RExC_naughty += 4 + RExC_naughty; /* compound interest */
10506    }
10507    ret->flags = 0;
10508
10509    if (min > 0)
10510     *flagp = WORST;
10511    if (max > 0)
10512     *flagp |= HASWIDTH;
10513    if (!SIZE_ONLY) {
10514     ARG1_SET(ret, (U16)min);
10515     ARG2_SET(ret, (U16)max);
10516    }
10517    if (max == REG_INFTY)
10518     RExC_seen |= REG_UNBOUNDED_QUANTIFIER_SEEN;
10519
10520    goto nest_check;
10521   }
10522  }
10523
10524  if (!ISMULT1(op)) {
10525   *flagp = flags;
10526   return(ret);
10527  }
10528
10529 #if 0    /* Now runtime fix should be reliable. */
10530
10531  /* if this is reinstated, don't forget to put this back into perldiag:
10532
10533    =item Regexp *+ operand could be empty at {#} in regex m/%s/
10534
10535   (F) The part of the regexp subject to either the * or + quantifier
10536   could match an empty string. The {#} shows in the regular
10537   expression about where the problem was discovered.
10538
10539  */
10540
10541  if (!(flags&HASWIDTH) && op != '?')
10542  vFAIL("Regexp *+ operand could be empty");
10543 #endif
10544
10545 #ifdef RE_TRACK_PATTERN_OFFSETS
10546  parse_start = RExC_parse;
10547 #endif
10548  nextchar(pRExC_state);
10549
10550  *flagp = (op != '+') ? (WORST|SPSTART|HASWIDTH) : (WORST|HASWIDTH);
10551
10552  if (op == '*' && (flags&SIMPLE)) {
10553   reginsert(pRExC_state, STAR, ret, depth+1);
10554   ret->flags = 0;
10555   RExC_naughty += 4;
10556   RExC_seen |= REG_UNBOUNDED_QUANTIFIER_SEEN;
10557  }
10558  else if (op == '*') {
10559   min = 0;
10560   goto do_curly;
10561  }
10562  else if (op == '+' && (flags&SIMPLE)) {
10563   reginsert(pRExC_state, PLUS, ret, depth+1);
10564   ret->flags = 0;
10565   RExC_naughty += 3;
10566   RExC_seen |= REG_UNBOUNDED_QUANTIFIER_SEEN;
10567  }
10568  else if (op == '+') {
10569   min = 1;
10570   goto do_curly;
10571  }
10572  else if (op == '?') {
10573   min = 0; max = 1;
10574   goto do_curly;
10575  }
10576   nest_check:
10577  if (!SIZE_ONLY && !(flags&(HASWIDTH|POSTPONED)) && max > REG_INFTY/3) {
10578   SAVEFREESV(RExC_rx_sv); /* in case of fatal warnings */
10579   ckWARN2reg(RExC_parse,
10580     "%"UTF8f" matches null string many times",
10581     UTF8fARG(UTF, (RExC_parse >= origparse
10582         ? RExC_parse - origparse
10583         : 0),
10584     origparse));
10585   (void)ReREFCNT_inc(RExC_rx_sv);
10586  }
10587
10588  if (RExC_parse < RExC_end && *RExC_parse == '?') {
10589   nextchar(pRExC_state);
10590   reginsert(pRExC_state, MINMOD, ret, depth+1);
10591   REGTAIL(pRExC_state, ret, ret + NODE_STEP_REGNODE);
10592  }
10593  else
10594  if (RExC_parse < RExC_end && *RExC_parse == '+') {
10595   regnode *ender;
10596   nextchar(pRExC_state);
10597   ender = reg_node(pRExC_state, SUCCEED);
10598   REGTAIL(pRExC_state, ret, ender);
10599   reginsert(pRExC_state, SUSPEND, ret, depth+1);
10600   ret->flags = 0;
10601   ender = reg_node(pRExC_state, TAIL);
10602   REGTAIL(pRExC_state, ret, ender);
10603  }
10604
10605  if (RExC_parse < RExC_end && ISMULT2(RExC_parse)) {
10606   RExC_parse++;
10607   vFAIL("Nested quantifiers");
10608  }
10609
10610  return(ret);
10611 }
10612
10613 STATIC bool
10614 S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state, regnode** node_p,
10615      UV *valuep, I32 *flagp, U32 depth, bool in_char_class,
10616      const bool strict   /* Apply stricter parsing rules? */
10617  )
10618 {
10619
10620  /* This is expected to be called by a parser routine that has recognized '\N'
10621    and needs to handle the rest. RExC_parse is expected to point at the first
10622    char following the N at the time of the call.  On successful return,
10623    RExC_parse has been updated to point to just after the sequence identified
10624    by this routine, and <*flagp> has been updated.
10625
10626    The \N may be inside (indicated by the boolean <in_char_class>) or outside a
10627    character class.
10628
10629    \N may begin either a named sequence, or if outside a character class, mean
10630    to match a non-newline.  For non single-quoted regexes, the tokenizer has
10631    attempted to decide which, and in the case of a named sequence, converted it
10632    into one of the forms: \N{} (if the sequence is null), or \N{U+c1.c2...},
10633    where c1... are the characters in the sequence.  For single-quoted regexes,
10634    the tokenizer passes the \N sequence through unchanged; this code will not
10635    attempt to determine this nor expand those, instead raising a syntax error.
10636    The net effect is that if the beginning of the passed-in pattern isn't '{U+'
10637    or there is no '}', it signals that this \N occurrence means to match a
10638    non-newline.
10639
10640    Only the \N{U+...} form should occur in a character class, for the same
10641    reason that '.' inside a character class means to just match a period: it
10642    just doesn't make sense.
10643
10644    The function raises an error (via vFAIL), and doesn't return for various
10645    syntax errors.  Otherwise it returns TRUE and sets <node_p> or <valuep> on
10646    success; it returns FALSE otherwise. Returns FALSE, setting *flagp to
10647    RESTART_UTF8 if the sizing scan needs to be restarted. Such a restart is
10648    only possible if node_p is non-NULL.
10649
10650
10651    If <valuep> is non-null, it means the caller can accept an input sequence
10652    consisting of a just a single code point; <*valuep> is set to that value
10653    if the input is such.
10654
10655    If <node_p> is non-null it signifies that the caller can accept any other
10656    legal sequence (i.e., one that isn't just a single code point).  <*node_p>
10657    is set as follows:
10658  1) \N means not-a-NL: points to a newly created REG_ANY node;
10659  2) \N{}:              points to a new NOTHING node;
10660  3) otherwise:         points to a new EXACT node containing the resolved
10661       string.
10662    Note that FALSE is returned for single code point sequences if <valuep> is
10663    null.
10664  */
10665
10666  char * endbrace;    /* '}' following the name */
10667  char* p;
10668  char *endchar; /* Points to '.' or '}' ending cur char in the input
10669       stream */
10670  bool has_multiple_chars; /* true if the input stream contains a sequence of
10671         more than one character */
10672
10673  GET_RE_DEBUG_FLAGS_DECL;
10674
10675  PERL_ARGS_ASSERT_GROK_BSLASH_N;
10676
10677  GET_RE_DEBUG_FLAGS;
10678
10679  assert(cBOOL(node_p) ^ cBOOL(valuep));  /* Exactly one should be set */
10680
10681  /* The [^\n] meaning of \N ignores spaces and comments under the /x
10682  * modifier.  The other meaning does not, so use a temporary until we find
10683  * out which we are being called with */
10684  p = (RExC_flags & RXf_PMf_EXTENDED)
10685   ? regwhite( pRExC_state, RExC_parse )
10686   : RExC_parse;
10687
10688  /* Disambiguate between \N meaning a named character versus \N meaning
10689  * [^\n].  The former is assumed when it can't be the latter. */
10690  if (*p != '{' || regcurly(p, FALSE)) {
10691   RExC_parse = p;
10692   if (! node_p) {
10693    /* no bare \N allowed in a charclass */
10694    if (in_char_class) {
10695     vFAIL("\\N in a character class must be a named character: \\N{...}");
10696    }
10697    return FALSE;
10698   }
10699   RExC_parse--;   /* Need to back off so nextchar() doesn't skip the
10700       current char */
10701   nextchar(pRExC_state);
10702   *node_p = reg_node(pRExC_state, REG_ANY);
10703   *flagp |= HASWIDTH|SIMPLE;
10704   RExC_naughty++;
10705   Set_Node_Length(*node_p, 1); /* MJD */
10706   return TRUE;
10707  }
10708
10709  /* Here, we have decided it should be a named character or sequence */
10710
10711  /* The test above made sure that the next real character is a '{', but
10712  * under the /x modifier, it could be separated by space (or a comment and
10713  * \n) and this is not allowed (for consistency with \x{...} and the
10714  * tokenizer handling of \N{NAME}). */
10715  if (*RExC_parse != '{') {
10716   vFAIL("Missing braces on \\N{}");
10717  }
10718
10719  RExC_parse++; /* Skip past the '{' */
10720
10721  if (! (endbrace = strchr(RExC_parse, '}')) /* no trailing brace */
10722   || ! (endbrace == RExC_parse  /* nothing between the {} */
10723    || (endbrace - RExC_parse >= 2 /* U+ (bad hex is checked below
10724             */
10725     && strnEQ(RExC_parse, "U+", 2)))) /* for a better error msg)
10726              */
10727  {
10728   if (endbrace) RExC_parse = endbrace; /* position msg's '<--HERE' */
10729   vFAIL("\\N{NAME} must be resolved by the lexer");
10730  }
10731
10732  if (endbrace == RExC_parse) {   /* empty: \N{} */
10733   bool ret = TRUE;
10734   if (node_p) {
10735    *node_p = reg_node(pRExC_state,NOTHING);
10736   }
10737   else if (in_char_class) {
10738    if (SIZE_ONLY && in_char_class) {
10739     if (strict) {
10740      RExC_parse++;   /* Position after the "}" */
10741      vFAIL("Zero length \\N{}");
10742     }
10743     else {
10744      ckWARNreg(RExC_parse,
10745        "Ignoring zero length \\N{} in character class");
10746     }
10747    }
10748    ret = FALSE;
10749   }
10750   else {
10751    return FALSE;
10752   }
10753   nextchar(pRExC_state);
10754   return ret;
10755  }
10756
10757  RExC_uni_semantics = 1; /* Unicode named chars imply Unicode semantics */
10758  RExC_parse += 2; /* Skip past the 'U+' */
10759
10760  endchar = RExC_parse + strcspn(RExC_parse, ".}");
10761
10762  /* Code points are separated by dots.  If none, there is only one code
10763  * point, and is terminated by the brace */
10764  has_multiple_chars = (endchar < endbrace);
10765
10766  if (valuep && (! has_multiple_chars || in_char_class)) {
10767   /* We only pay attention to the first char of
10768   multichar strings being returned in char classes. I kinda wonder
10769   if this makes sense as it does change the behaviour
10770   from earlier versions, OTOH that behaviour was broken
10771   as well. XXX Solution is to recharacterize as
10772   [rest-of-class]|multi1|multi2... */
10773
10774   STRLEN length_of_hex = (STRLEN)(endchar - RExC_parse);
10775   I32 grok_hex_flags = PERL_SCAN_ALLOW_UNDERSCORES
10776    | PERL_SCAN_DISALLOW_PREFIX
10777    | (SIZE_ONLY ? PERL_SCAN_SILENT_ILLDIGIT : 0);
10778
10779   *valuep = grok_hex(RExC_parse, &length_of_hex, &grok_hex_flags, NULL);
10780
10781   /* The tokenizer should have guaranteed validity, but it's possible to
10782   * bypass it by using single quoting, so check */
10783   if (length_of_hex == 0
10784    || length_of_hex != (STRLEN)(endchar - RExC_parse) )
10785   {
10786    RExC_parse += length_of_hex; /* Includes all the valid */
10787    RExC_parse += (RExC_orig_utf8) /* point to after 1st invalid */
10788        ? UTF8SKIP(RExC_parse)
10789        : 1;
10790    /* Guard against malformed utf8 */
10791    if (RExC_parse >= endchar) {
10792     RExC_parse = endchar;
10793    }
10794    vFAIL("Invalid hexadecimal number in \\N{U+...}");
10795   }
10796
10797   if (in_char_class && has_multiple_chars) {
10798    if (strict) {
10799     RExC_parse = endbrace;
10800     vFAIL("\\N{} in character class restricted to one character");
10801    }
10802    else {
10803     ckWARNreg(endchar, "Using just the first character returned by \\N{} in character class");
10804    }
10805   }
10806
10807   RExC_parse = endbrace + 1;
10808  }
10809  else if (! node_p || ! has_multiple_chars) {
10810
10811   /* Here, the input is legal, but not according to the caller's
10812   * options.  We fail without advancing the parse, so that the
10813   * caller can try again */
10814   RExC_parse = p;
10815   return FALSE;
10816  }
10817  else {
10818
10819   /* What is done here is to convert this to a sub-pattern of the form
10820   * (?:\x{char1}\x{char2}...)
10821   * and then call reg recursively.  That way, it retains its atomicness,
10822   * while not having to worry about special handling that some code
10823   * points may have.  toke.c has converted the original Unicode values
10824   * to native, so that we can just pass on the hex values unchanged.  We
10825   * do have to set a flag to keep recoding from happening in the
10826   * recursion */
10827
10828   SV * substitute_parse = newSVpvn_flags("?:", 2, SVf_UTF8|SVs_TEMP);
10829   STRLEN len;
10830   char *orig_end = RExC_end;
10831   I32 flags;
10832
10833   while (RExC_parse < endbrace) {
10834
10835    /* Convert to notation the rest of the code understands */
10836    sv_catpv(substitute_parse, "\\x{");
10837    sv_catpvn(substitute_parse, RExC_parse, endchar - RExC_parse);
10838    sv_catpv(substitute_parse, "}");
10839
10840    /* Point to the beginning of the next character in the sequence. */
10841    RExC_parse = endchar + 1;
10842    endchar = RExC_parse + strcspn(RExC_parse, ".}");
10843   }
10844   sv_catpv(substitute_parse, ")");
10845
10846   RExC_parse = SvPV(substitute_parse, len);
10847
10848   /* Don't allow empty number */
10849   if (len < 8) {
10850    vFAIL("Invalid hexadecimal number in \\N{U+...}");
10851   }
10852   RExC_end = RExC_parse + len;
10853
10854   /* The values are Unicode, and therefore not subject to recoding */
10855   RExC_override_recoding = 1;
10856
10857   if (!(*node_p = reg(pRExC_state, 1, &flags, depth+1))) {
10858    if (flags & RESTART_UTF8) {
10859     *flagp = RESTART_UTF8;
10860     return FALSE;
10861    }
10862    FAIL2("panic: reg returned NULL to grok_bslash_N, flags=%#"UVxf"",
10863     (UV) flags);
10864   }
10865   *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE|POSTPONED);
10866
10867   RExC_parse = endbrace;
10868   RExC_end = orig_end;
10869   RExC_override_recoding = 0;
10870
10871   nextchar(pRExC_state);
10872  }
10873
10874  return TRUE;
10875 }
10876
10877
10878 /*
10879  * reg_recode
10880  *
10881  * It returns the code point in utf8 for the value in *encp.
10882  *    value: a code value in the source encoding
10883  *    encp:  a pointer to an Encode object
10884  *
10885  * If the result from Encode is not a single character,
10886  * it returns U+FFFD (Replacement character) and sets *encp to NULL.
10887  */
10888 STATIC UV
10889 S_reg_recode(pTHX_ const char value, SV **encp)
10890 {
10891  STRLEN numlen = 1;
10892  SV * const sv = newSVpvn_flags(&value, numlen, SVs_TEMP);
10893  const char * const s = *encp ? sv_recode_to_utf8(sv, *encp) : SvPVX(sv);
10894  const STRLEN newlen = SvCUR(sv);
10895  UV uv = UNICODE_REPLACEMENT;
10896
10897  PERL_ARGS_ASSERT_REG_RECODE;
10898
10899  if (newlen)
10900   uv = SvUTF8(sv)
10901    ? utf8n_to_uvchr((U8*)s, newlen, &numlen, UTF8_ALLOW_DEFAULT)
10902    : *(U8*)s;
10903
10904  if (!newlen || numlen != newlen) {
10905   uv = UNICODE_REPLACEMENT;
10906   *encp = NULL;
10907  }
10908  return uv;
10909 }
10910
10911 PERL_STATIC_INLINE U8
10912 S_compute_EXACTish(pTHX_ RExC_state_t *pRExC_state)
10913 {
10914  U8 op;
10915
10916  PERL_ARGS_ASSERT_COMPUTE_EXACTISH;
10917
10918  if (! FOLD) {
10919   return EXACT;
10920  }
10921
10922  op = get_regex_charset(RExC_flags);
10923  if (op >= REGEX_ASCII_RESTRICTED_CHARSET) {
10924   op--; /* /a is same as /u, and map /aa's offset to what /a's would have
10925     been, so there is no hole */
10926  }
10927
10928  return op + EXACTF;
10929 }
10930
10931 PERL_STATIC_INLINE void
10932 S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state,
10933       regnode *node, I32* flagp, STRLEN len, UV code_point,
10934       bool downgradable)
10935 {
10936  /* This knows the details about sizing an EXACTish node, setting flags for
10937  * it (by setting <*flagp>, and potentially populating it with a single
10938  * character.
10939  *
10940  * If <len> (the length in bytes) is non-zero, this function assumes that
10941  * the node has already been populated, and just does the sizing.  In this
10942  * case <code_point> should be the final code point that has already been
10943  * placed into the node.  This value will be ignored except that under some
10944  * circumstances <*flagp> is set based on it.
10945  *
10946  * If <len> is zero, the function assumes that the node is to contain only
10947  * the single character given by <code_point> and calculates what <len>
10948  * should be.  In pass 1, it sizes the node appropriately.  In pass 2, it
10949  * additionally will populate the node's STRING with <code_point> or its
10950  * fold if folding.
10951  *
10952  * In both cases <*flagp> is appropriately set
10953  *
10954  * It knows that under FOLD, the Latin Sharp S and UTF characters above
10955  * 255, must be folded (the former only when the rules indicate it can
10956  * match 'ss')
10957  *
10958  * When it does the populating, it looks at the flag 'downgradable'.  If
10959  * true with a node that folds, it checks if the single code point
10960  * participates in a fold, and if not downgrades the node to an EXACT.
10961  * This helps the optimizer */
10962
10963  bool len_passed_in = cBOOL(len != 0);
10964  U8 character[UTF8_MAXBYTES_CASE+1];
10965
10966  PERL_ARGS_ASSERT_ALLOC_MAYBE_POPULATE_EXACT;
10967
10968  /* Don't bother to check for downgrading in PASS1, as it doesn't make any
10969  * sizing difference, and is extra work that is thrown away */
10970  if (downgradable && ! PASS2) {
10971   downgradable = FALSE;
10972  }
10973
10974  if (! len_passed_in) {
10975   if (UTF) {
10976    if (UNI_IS_INVARIANT(code_point)) {
10977     if (LOC || ! FOLD) {    /* /l defers folding until runtime */
10978      *character = (U8) code_point;
10979     }
10980     else { /* Here is /i and not /l (toFOLD() is defined on just
10981       ASCII, which isn't the same thing as INVARIANT on
10982       EBCDIC, but it works there, as the extra invariants
10983       fold to themselves) */
10984      *character = toFOLD((U8) code_point);
10985
10986      /* We can downgrade to an EXACT node if this character
10987      * isn't a folding one.  Note that this assumes that
10988      * nothing above Latin1 folds to some other invariant than
10989      * one of these alphabetics; otherwise we would also have
10990      * to check:
10991      *  && (! HAS_NONLATIN1_FOLD_CLOSURE(code_point)
10992      *      || ASCII_FOLD_RESTRICTED))
10993      */
10994      if (downgradable && PL_fold[code_point] == code_point) {
10995       OP(node) = EXACT;
10996      }
10997     }
10998     len = 1;
10999    }
11000    else if (FOLD && (! LOC
11001        || ! is_PROBLEMATIC_LOCALE_FOLD_cp(code_point)))
11002    {   /* Folding, and ok to do so now */
11003     UV folded = _to_uni_fold_flags(
11004         code_point,
11005         character,
11006         &len,
11007         FOLD_FLAGS_FULL | ((ASCII_FOLD_RESTRICTED)
11008              ? FOLD_FLAGS_NOMIX_ASCII
11009              : 0));
11010     if (downgradable
11011      && folded == code_point
11012      && ! _invlist_contains_cp(PL_utf8_foldable, code_point))
11013     {
11014      OP(node) = EXACT;
11015     }
11016    }
11017    else if (code_point <= MAX_UTF8_TWO_BYTE) {
11018
11019     /* Not folding this cp, and can output it directly */
11020     *character = UTF8_TWO_BYTE_HI(code_point);
11021     *(character + 1) = UTF8_TWO_BYTE_LO(code_point);
11022     len = 2;
11023    }
11024    else {
11025     uvchr_to_utf8( character, code_point);
11026     len = UTF8SKIP(character);
11027    }
11028   } /* Else pattern isn't UTF8.  */
11029   else if (! FOLD) {
11030    *character = (U8) code_point;
11031    len = 1;
11032   } /* Else is folded non-UTF8 */
11033   else if (LIKELY(code_point != LATIN_SMALL_LETTER_SHARP_S)) {
11034
11035    /* We don't fold any non-UTF8 except possibly the Sharp s  (see
11036    * comments at join_exact()); */
11037    *character = (U8) code_point;
11038    len = 1;
11039
11040    /* Can turn into an EXACT node if we know the fold at compile time,
11041    * and it folds to itself and doesn't particpate in other folds */
11042    if (downgradable
11043     && ! LOC
11044     && PL_fold_latin1[code_point] == code_point
11045     && (! HAS_NONLATIN1_FOLD_CLOSURE(code_point)
11046      || (isASCII(code_point) && ASCII_FOLD_RESTRICTED)))
11047    {
11048     OP(node) = EXACT;
11049    }
11050   } /* else is Sharp s.  May need to fold it */
11051   else if (AT_LEAST_UNI_SEMANTICS && ! ASCII_FOLD_RESTRICTED) {
11052    *character = 's';
11053    *(character + 1) = 's';
11054    len = 2;
11055   }
11056   else {
11057    *character = LATIN_SMALL_LETTER_SHARP_S;
11058    len = 1;
11059   }
11060  }
11061
11062  if (SIZE_ONLY) {
11063   RExC_size += STR_SZ(len);
11064  }
11065  else {
11066   RExC_emit += STR_SZ(len);
11067   STR_LEN(node) = len;
11068   if (! len_passed_in) {
11069    Copy((char *) character, STRING(node), len, char);
11070   }
11071  }
11072
11073  *flagp |= HASWIDTH;
11074
11075  /* A single character node is SIMPLE, except for the special-cased SHARP S
11076  * under /di. */
11077  if ((len == 1 || (UTF && len == UNISKIP(code_point)))
11078   && (code_point != LATIN_SMALL_LETTER_SHARP_S
11079    || ! FOLD || ! DEPENDS_SEMANTICS))
11080  {
11081   *flagp |= SIMPLE;
11082  }
11083
11084  /* The OP may not be well defined in PASS1 */
11085  if (PASS2 && OP(node) == EXACTFL) {
11086   RExC_contains_locale = 1;
11087  }
11088 }
11089
11090
11091 /* return atoi(p), unless it's too big to sensibly be a backref,
11092  * in which case return I32_MAX (rather than possibly 32-bit wrapping) */
11093
11094 static I32
11095 S_backref_value(char *p)
11096 {
11097  char *q = p;
11098
11099  for (;isDIGIT(*q); q++); /* calculate length of num */
11100  if (q - p == 0 || q - p > 9)
11101   return I32_MAX;
11102  return atoi(p);
11103 }
11104
11105
11106 /*
11107  - regatom - the lowest level
11108
11109    Try to identify anything special at the start of the pattern. If there
11110    is, then handle it as required. This may involve generating a single regop,
11111    such as for an assertion; or it may involve recursing, such as to
11112    handle a () structure.
11113
11114    If the string doesn't start with something special then we gobble up
11115    as much literal text as we can.
11116
11117    Once we have been able to handle whatever type of thing started the
11118    sequence, we return.
11119
11120    Note: we have to be careful with escapes, as they can be both literal
11121    and special, and in the case of \10 and friends, context determines which.
11122
11123    A summary of the code structure is:
11124
11125    switch (first_byte) {
11126   cases for each special:
11127    handle this special;
11128    break;
11129   case '\\':
11130    switch (2nd byte) {
11131     cases for each unambiguous special:
11132      handle this special;
11133      break;
11134     cases for each ambigous special/literal:
11135      disambiguate;
11136      if (special)  handle here
11137      else goto defchar;
11138     default: // unambiguously literal:
11139      goto defchar;
11140    }
11141   default:  // is a literal char
11142    // FALL THROUGH
11143   defchar:
11144    create EXACTish node for literal;
11145    while (more input and node isn't full) {
11146     switch (input_byte) {
11147     cases for each special;
11148      make sure parse pointer is set so that the next call to
11149       regatom will see this special first
11150      goto loopdone; // EXACTish node terminated by prev. char
11151     default:
11152      append char to EXACTISH node;
11153     }
11154     get next input byte;
11155    }
11156   loopdone:
11157    }
11158    return the generated node;
11159
11160    Specifically there are two separate switches for handling
11161    escape sequences, with the one for handling literal escapes requiring
11162    a dummy entry for all of the special escapes that are actually handled
11163    by the other.
11164
11165    Returns NULL, setting *flagp to TRYAGAIN if reg() returns NULL with
11166    TRYAGAIN.
11167    Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs to be
11168    restarted.
11169    Otherwise does not return NULL.
11170 */
11171
11172 STATIC regnode *
11173 S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
11174 {
11175  dVAR;
11176  regnode *ret = NULL;
11177  I32 flags = 0;
11178  char *parse_start = RExC_parse;
11179  U8 op;
11180  int invert = 0;
11181
11182  GET_RE_DEBUG_FLAGS_DECL;
11183
11184  *flagp = WORST;  /* Tentatively. */
11185
11186  DEBUG_PARSE("atom");
11187
11188  PERL_ARGS_ASSERT_REGATOM;
11189
11190 tryagain:
11191  switch ((U8)*RExC_parse) {
11192  case '^':
11193   RExC_seen_zerolen++;
11194   nextchar(pRExC_state);
11195   if (RExC_flags & RXf_PMf_MULTILINE)
11196    ret = reg_node(pRExC_state, MBOL);
11197   else if (RExC_flags & RXf_PMf_SINGLELINE)
11198    ret = reg_node(pRExC_state, SBOL);
11199   else
11200    ret = reg_node(pRExC_state, BOL);
11201   Set_Node_Length(ret, 1); /* MJD */
11202   break;
11203  case '$':
11204   nextchar(pRExC_state);
11205   if (*RExC_parse)
11206    RExC_seen_zerolen++;
11207   if (RExC_flags & RXf_PMf_MULTILINE)
11208    ret = reg_node(pRExC_state, MEOL);
11209   else if (RExC_flags & RXf_PMf_SINGLELINE)
11210    ret = reg_node(pRExC_state, SEOL);
11211   else
11212    ret = reg_node(pRExC_state, EOL);
11213   Set_Node_Length(ret, 1); /* MJD */
11214   break;
11215  case '.':
11216   nextchar(pRExC_state);
11217   if (RExC_flags & RXf_PMf_SINGLELINE)
11218    ret = reg_node(pRExC_state, SANY);
11219   else
11220    ret = reg_node(pRExC_state, REG_ANY);
11221   *flagp |= HASWIDTH|SIMPLE;
11222   RExC_naughty++;
11223   Set_Node_Length(ret, 1); /* MJD */
11224   break;
11225  case '[':
11226  {
11227   char * const oregcomp_parse = ++RExC_parse;
11228   ret = regclass(pRExC_state, flagp,depth+1,
11229      FALSE, /* means parse the whole char class */
11230      TRUE, /* allow multi-char folds */
11231      FALSE, /* don't silence non-portable warnings. */
11232      NULL);
11233   if (*RExC_parse != ']') {
11234    RExC_parse = oregcomp_parse;
11235    vFAIL("Unmatched [");
11236   }
11237   if (ret == NULL) {
11238    if (*flagp & RESTART_UTF8)
11239     return NULL;
11240    FAIL2("panic: regclass returned NULL to regatom, flags=%#"UVxf"",
11241     (UV) *flagp);
11242   }
11243   nextchar(pRExC_state);
11244   Set_Node_Length(ret, RExC_parse - oregcomp_parse + 1); /* MJD */
11245   break;
11246  }
11247  case '(':
11248   nextchar(pRExC_state);
11249   ret = reg(pRExC_state, 2, &flags,depth+1);
11250   if (ret == NULL) {
11251     if (flags & TRYAGAIN) {
11252      if (RExC_parse == RExC_end) {
11253       /* Make parent create an empty node if needed. */
11254       *flagp |= TRYAGAIN;
11255       return(NULL);
11256      }
11257      goto tryagain;
11258     }
11259     if (flags & RESTART_UTF8) {
11260      *flagp = RESTART_UTF8;
11261      return NULL;
11262     }
11263     FAIL2("panic: reg returned NULL to regatom, flags=%#"UVxf"",
11264                 (UV) flags);
11265   }
11266   *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE|POSTPONED);
11267   break;
11268  case '|':
11269  case ')':
11270   if (flags & TRYAGAIN) {
11271    *flagp |= TRYAGAIN;
11272    return NULL;
11273   }
11274   vFAIL("Internal urp");
11275         /* Supposed to be caught earlier. */
11276   break;
11277  case '{':
11278   if (!regcurly(RExC_parse, FALSE)) {
11279    RExC_parse++;
11280    goto defchar;
11281   }
11282   /* FALL THROUGH */
11283  case '?':
11284  case '+':
11285  case '*':
11286   RExC_parse++;
11287   vFAIL("Quantifier follows nothing");
11288   break;
11289  case '\\':
11290   /* Special Escapes
11291
11292   This switch handles escape sequences that resolve to some kind
11293   of special regop and not to literal text. Escape sequnces that
11294   resolve to literal text are handled below in the switch marked
11295   "Literal Escapes".
11296
11297   Every entry in this switch *must* have a corresponding entry
11298   in the literal escape switch. However, the opposite is not
11299   required, as the default for this switch is to jump to the
11300   literal text handling code.
11301   */
11302   switch ((U8)*++RExC_parse) {
11303    U8 arg;
11304   /* Special Escapes */
11305   case 'A':
11306    RExC_seen_zerolen++;
11307    ret = reg_node(pRExC_state, SBOL);
11308    *flagp |= SIMPLE;
11309    goto finish_meta_pat;
11310   case 'G':
11311    ret = reg_node(pRExC_state, GPOS);
11312    RExC_seen |= REG_GPOS_SEEN;
11313    *flagp |= SIMPLE;
11314    goto finish_meta_pat;
11315   case 'K':
11316    RExC_seen_zerolen++;
11317    ret = reg_node(pRExC_state, KEEPS);
11318    *flagp |= SIMPLE;
11319    /* XXX:dmq : disabling in-place substitution seems to
11320    * be necessary here to avoid cases of memory corruption, as
11321    * with: C<$_="x" x 80; s/x\K/y/> -- rgs
11322    */
11323    RExC_seen |= REG_LOOKBEHIND_SEEN;
11324    goto finish_meta_pat;
11325   case 'Z':
11326    ret = reg_node(pRExC_state, SEOL);
11327    *flagp |= SIMPLE;
11328    RExC_seen_zerolen++;  /* Do not optimize RE away */
11329    goto finish_meta_pat;
11330   case 'z':
11331    ret = reg_node(pRExC_state, EOS);
11332    *flagp |= SIMPLE;
11333    RExC_seen_zerolen++;  /* Do not optimize RE away */
11334    goto finish_meta_pat;
11335   case 'C':
11336    ret = reg_node(pRExC_state, CANY);
11337    RExC_seen |= REG_CANY_SEEN;
11338    *flagp |= HASWIDTH|SIMPLE;
11339    goto finish_meta_pat;
11340   case 'X':
11341    ret = reg_node(pRExC_state, CLUMP);
11342    *flagp |= HASWIDTH;
11343    goto finish_meta_pat;
11344
11345   case 'W':
11346    invert = 1;
11347    /* FALLTHROUGH */
11348   case 'w':
11349    arg = ANYOF_WORDCHAR;
11350    goto join_posix;
11351
11352   case 'b':
11353    RExC_seen_zerolen++;
11354    RExC_seen |= REG_LOOKBEHIND_SEEN;
11355    op = BOUND + get_regex_charset(RExC_flags);
11356    if (op > BOUNDA) {  /* /aa is same as /a */
11357     op = BOUNDA;
11358    }
11359    else if (op == BOUNDL) {
11360     RExC_contains_locale = 1;
11361    }
11362    ret = reg_node(pRExC_state, op);
11363    FLAGS(ret) = get_regex_charset(RExC_flags);
11364    *flagp |= SIMPLE;
11365    if (! SIZE_ONLY && (U8) *(RExC_parse + 1) == '{') {
11366     /* diag_listed_as: Use "%s" instead of "%s" */
11367     vFAIL("Use \"\\b\\{\" instead of \"\\b{\"");
11368    }
11369    goto finish_meta_pat;
11370   case 'B':
11371    RExC_seen_zerolen++;
11372    RExC_seen |= REG_LOOKBEHIND_SEEN;
11373    op = NBOUND + get_regex_charset(RExC_flags);
11374    if (op > NBOUNDA) { /* /aa is same as /a */
11375     op = NBOUNDA;
11376    }
11377    else if (op == NBOUNDL) {
11378     RExC_contains_locale = 1;
11379    }
11380    ret = reg_node(pRExC_state, op);
11381    FLAGS(ret) = get_regex_charset(RExC_flags);
11382    *flagp |= SIMPLE;
11383    if (! SIZE_ONLY && (U8) *(RExC_parse + 1) == '{') {
11384     /* diag_listed_as: Use "%s" instead of "%s" */
11385     vFAIL("Use \"\\B\\{\" instead of \"\\B{\"");
11386    }
11387    goto finish_meta_pat;
11388
11389   case 'D':
11390    invert = 1;
11391    /* FALLTHROUGH */
11392   case 'd':
11393    arg = ANYOF_DIGIT;
11394    goto join_posix;
11395
11396   case 'R':
11397    ret = reg_node(pRExC_state, LNBREAK);
11398    *flagp |= HASWIDTH|SIMPLE;
11399    goto finish_meta_pat;
11400
11401   case 'H':
11402    invert = 1;
11403    /* FALLTHROUGH */
11404   case 'h':
11405    arg = ANYOF_BLANK;
11406    op = POSIXU;
11407    goto join_posix_op_known;
11408
11409   case 'V':
11410    invert = 1;
11411    /* FALLTHROUGH */
11412   case 'v':
11413    arg = ANYOF_VERTWS;
11414    op = POSIXU;
11415    goto join_posix_op_known;
11416
11417   case 'S':
11418    invert = 1;
11419    /* FALLTHROUGH */
11420   case 's':
11421    arg = ANYOF_SPACE;
11422
11423   join_posix:
11424
11425    op = POSIXD + get_regex_charset(RExC_flags);
11426    if (op > POSIXA) {  /* /aa is same as /a */
11427     op = POSIXA;
11428    }
11429    else if (op == POSIXL) {
11430     RExC_contains_locale = 1;
11431    }
11432
11433   join_posix_op_known:
11434
11435    if (invert) {
11436     op += NPOSIXD - POSIXD;
11437    }
11438
11439    ret = reg_node(pRExC_state, op);
11440    if (! SIZE_ONLY) {
11441     FLAGS(ret) = namedclass_to_classnum(arg);
11442    }
11443
11444    *flagp |= HASWIDTH|SIMPLE;
11445    /* FALL THROUGH */
11446
11447   finish_meta_pat:
11448    nextchar(pRExC_state);
11449    Set_Node_Length(ret, 2); /* MJD */
11450    break;
11451   case 'p':
11452   case 'P':
11453    {
11454 #ifdef DEBUGGING
11455     char* parse_start = RExC_parse - 2;
11456 #endif
11457
11458     RExC_parse--;
11459
11460     ret = regclass(pRExC_state, flagp,depth+1,
11461        TRUE, /* means just parse this element */
11462        FALSE, /* don't allow multi-char folds */
11463        FALSE, /* don't silence non-portable warnings.
11464           It would be a bug if these returned
11465           non-portables */
11466        NULL);
11467     /* regclass() can only return RESTART_UTF8 if multi-char folds
11468     are allowed.  */
11469     if (!ret)
11470      FAIL2("panic: regclass returned NULL to regatom, flags=%#"UVxf"",
11471       (UV) *flagp);
11472
11473     RExC_parse--;
11474
11475     Set_Node_Offset(ret, parse_start + 2);
11476     Set_Node_Cur_Length(ret, parse_start);
11477     nextchar(pRExC_state);
11478    }
11479    break;
11480   case 'N':
11481    /* Handle \N and \N{NAME} with multiple code points here and not
11482    * below because it can be multicharacter. join_exact() will join
11483    * them up later on.  Also this makes sure that things like
11484    * /\N{BLAH}+/ and \N{BLAH} being multi char Just Happen. dmq.
11485    * The options to the grok function call causes it to fail if the
11486    * sequence is just a single code point.  We then go treat it as
11487    * just another character in the current EXACT node, and hence it
11488    * gets uniform treatment with all the other characters.  The
11489    * special treatment for quantifiers is not needed for such single
11490    * character sequences */
11491    ++RExC_parse;
11492    if (! grok_bslash_N(pRExC_state, &ret, NULL, flagp, depth, FALSE,
11493         FALSE /* not strict */ )) {
11494     if (*flagp & RESTART_UTF8)
11495      return NULL;
11496     RExC_parse--;
11497     goto defchar;
11498    }
11499    break;
11500   case 'k':    /* Handle \k<NAME> and \k'NAME' */
11501   parse_named_seq:
11502   {
11503    char ch= RExC_parse[1];
11504    if (ch != '<' && ch != '\'' && ch != '{') {
11505     RExC_parse++;
11506     /* diag_listed_as: Sequence \%s... not terminated in regex; marked by <-- HERE in m/%s/ */
11507     vFAIL2("Sequence %.2s... not terminated",parse_start);
11508    } else {
11509     /* this pretty much dupes the code for (?P=...) in reg(), if
11510     you change this make sure you change that */
11511     char* name_start = (RExC_parse += 2);
11512     U32 num = 0;
11513     SV *sv_dat = reg_scan_name(pRExC_state,
11514      SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
11515     ch= (ch == '<') ? '>' : (ch == '{') ? '}' : '\'';
11516     if (RExC_parse == name_start || *RExC_parse != ch)
11517      /* diag_listed_as: Sequence \%s... not terminated in regex; marked by <-- HERE in m/%s/ */
11518      vFAIL2("Sequence %.3s... not terminated",parse_start);
11519
11520     if (!SIZE_ONLY) {
11521      num = add_data( pRExC_state, STR_WITH_LEN("S"));
11522      RExC_rxi->data->data[num]=(void*)sv_dat;
11523      SvREFCNT_inc_simple_void(sv_dat);
11524     }
11525
11526     RExC_sawback = 1;
11527     ret = reganode(pRExC_state,
11528        ((! FOLD)
11529         ? NREF
11530         : (ASCII_FOLD_RESTRICTED)
11531         ? NREFFA
11532         : (AT_LEAST_UNI_SEMANTICS)
11533          ? NREFFU
11534          : (LOC)
11535          ? NREFFL
11536          : NREFF),
11537         num);
11538     *flagp |= HASWIDTH;
11539
11540     /* override incorrect value set in reganode MJD */
11541     Set_Node_Offset(ret, parse_start+1);
11542     Set_Node_Cur_Length(ret, parse_start);
11543     nextchar(pRExC_state);
11544
11545    }
11546    break;
11547   }
11548   case 'g':
11549   case '1': case '2': case '3': case '4':
11550   case '5': case '6': case '7': case '8': case '9':
11551    {
11552     I32 num;
11553     bool hasbrace = 0;
11554
11555     if (*RExC_parse == 'g') {
11556      bool isrel = 0;
11557
11558      RExC_parse++;
11559      if (*RExC_parse == '{') {
11560       RExC_parse++;
11561       hasbrace = 1;
11562      }
11563      if (*RExC_parse == '-') {
11564       RExC_parse++;
11565       isrel = 1;
11566      }
11567      if (hasbrace && !isDIGIT(*RExC_parse)) {
11568       if (isrel) RExC_parse--;
11569       RExC_parse -= 2;
11570       goto parse_named_seq;
11571      }
11572
11573      num = S_backref_value(RExC_parse);
11574      if (num == 0)
11575       vFAIL("Reference to invalid group 0");
11576      else if (num == I32_MAX) {
11577       if (isDIGIT(*RExC_parse))
11578        vFAIL("Reference to nonexistent group");
11579       else
11580        vFAIL("Unterminated \\g... pattern");
11581      }
11582
11583      if (isrel) {
11584       num = RExC_npar - num;
11585       if (num < 1)
11586        vFAIL("Reference to nonexistent or unclosed group");
11587      }
11588     }
11589     else {
11590      num = S_backref_value(RExC_parse);
11591      /* bare \NNN might be backref or octal - if it is larger than or equal
11592      * RExC_npar then it is assumed to be and octal escape.
11593      * Note RExC_npar is +1 from the actual number of parens*/
11594      if (num == I32_MAX || (num > 9 && num >= RExC_npar
11595        && *RExC_parse != '8' && *RExC_parse != '9'))
11596      {
11597       /* Probably a character specified in octal, e.g. \35 */
11598       goto defchar;
11599      }
11600     }
11601
11602     /* at this point RExC_parse definitely points to a backref
11603     * number */
11604     {
11605 #ifdef RE_TRACK_PATTERN_OFFSETS
11606      char * const parse_start = RExC_parse - 1; /* MJD */
11607 #endif
11608      while (isDIGIT(*RExC_parse))
11609       RExC_parse++;
11610      if (hasbrace) {
11611       if (*RExC_parse != '}')
11612        vFAIL("Unterminated \\g{...} pattern");
11613       RExC_parse++;
11614      }
11615      if (!SIZE_ONLY) {
11616       if (num > (I32)RExC_rx->nparens)
11617        vFAIL("Reference to nonexistent group");
11618      }
11619      RExC_sawback = 1;
11620      ret = reganode(pRExC_state,
11621         ((! FOLD)
11622          ? REF
11623          : (ASCII_FOLD_RESTRICTED)
11624          ? REFFA
11625          : (AT_LEAST_UNI_SEMANTICS)
11626           ? REFFU
11627           : (LOC)
11628           ? REFFL
11629           : REFF),
11630          num);
11631      *flagp |= HASWIDTH;
11632
11633      /* override incorrect value set in reganode MJD */
11634      Set_Node_Offset(ret, parse_start+1);
11635      Set_Node_Cur_Length(ret, parse_start);
11636      RExC_parse--;
11637      nextchar(pRExC_state);
11638     }
11639    }
11640    break;
11641   case '\0':
11642    if (RExC_parse >= RExC_end)
11643     FAIL("Trailing \\");
11644    /* FALL THROUGH */
11645   default:
11646    /* Do not generate "unrecognized" warnings here, we fall
11647    back into the quick-grab loop below */
11648    parse_start--;
11649    goto defchar;
11650   }
11651   break;
11652
11653  case '#':
11654   if (RExC_flags & RXf_PMf_EXTENDED) {
11655    if ( reg_skipcomment( pRExC_state ) )
11656     goto tryagain;
11657   }
11658   /* FALL THROUGH */
11659
11660  default:
11661
11662    parse_start = RExC_parse - 1;
11663
11664    RExC_parse++;
11665
11666   defchar: {
11667    STRLEN len = 0;
11668    UV ender = 0;
11669    char *p;
11670    char *s;
11671 #define MAX_NODE_STRING_SIZE 127
11672    char foldbuf[MAX_NODE_STRING_SIZE+UTF8_MAXBYTES_CASE];
11673    char *s0;
11674    U8 upper_parse = MAX_NODE_STRING_SIZE;
11675    U8 node_type = compute_EXACTish(pRExC_state);
11676    bool next_is_quantifier;
11677    char * oldp = NULL;
11678
11679    /* We can convert EXACTF nodes to EXACTFU if they contain only
11680    * characters that match identically regardless of the target
11681    * string's UTF8ness.  The reason to do this is that EXACTF is not
11682    * trie-able, EXACTFU is.
11683    *
11684    * Similarly, we can convert EXACTFL nodes to EXACTFU if they
11685    * contain only above-Latin1 characters (hence must be in UTF8),
11686    * which don't participate in folds with Latin1-range characters,
11687    * as the latter's folds aren't known until runtime.  (We don't
11688    * need to figure this out until pass 2) */
11689    bool maybe_exactfu = PASS2
11690        && (node_type == EXACTF || node_type == EXACTFL);
11691
11692    /* If a folding node contains only code points that don't
11693    * participate in folds, it can be changed into an EXACT node,
11694    * which allows the optimizer more things to look for */
11695    bool maybe_exact;
11696
11697    ret = reg_node(pRExC_state, node_type);
11698
11699    /* In pass1, folded, we use a temporary buffer instead of the
11700    * actual node, as the node doesn't exist yet */
11701    s = (SIZE_ONLY && FOLD) ? foldbuf : STRING(ret);
11702
11703    s0 = s;
11704
11705   reparse:
11706
11707    /* We do the EXACTFish to EXACT node only if folding.  (And we
11708    * don't need to figure this out until pass 2) */
11709    maybe_exact = FOLD && PASS2;
11710
11711    /* XXX The node can hold up to 255 bytes, yet this only goes to
11712    * 127.  I (khw) do not know why.  Keeping it somewhat less than
11713    * 255 allows us to not have to worry about overflow due to
11714    * converting to utf8 and fold expansion, but that value is
11715    * 255-UTF8_MAXBYTES_CASE.  join_exact() may join adjacent nodes
11716    * split up by this limit into a single one using the real max of
11717    * 255.  Even at 127, this breaks under rare circumstances.  If
11718    * folding, we do not want to split a node at a character that is a
11719    * non-final in a multi-char fold, as an input string could just
11720    * happen to want to match across the node boundary.  The join
11721    * would solve that problem if the join actually happens.  But a
11722    * series of more than two nodes in a row each of 127 would cause
11723    * the first join to succeed to get to 254, but then there wouldn't
11724    * be room for the next one, which could at be one of those split
11725    * multi-char folds.  I don't know of any fool-proof solution.  One
11726    * could back off to end with only a code point that isn't such a
11727    * non-final, but it is possible for there not to be any in the
11728    * entire node. */
11729    for (p = RExC_parse - 1;
11730     len < upper_parse && p < RExC_end;
11731     len++)
11732    {
11733     oldp = p;
11734
11735     if (RExC_flags & RXf_PMf_EXTENDED)
11736      p = regwhite( pRExC_state, p );
11737     switch ((U8)*p) {
11738     case '^':
11739     case '$':
11740     case '.':
11741     case '[':
11742     case '(':
11743     case ')':
11744     case '|':
11745      goto loopdone;
11746     case '\\':
11747      /* Literal Escapes Switch
11748
11749      This switch is meant to handle escape sequences that
11750      resolve to a literal character.
11751
11752      Every escape sequence that represents something
11753      else, like an assertion or a char class, is handled
11754      in the switch marked 'Special Escapes' above in this
11755      routine, but also has an entry here as anything that
11756      isn't explicitly mentioned here will be treated as
11757      an unescaped equivalent literal.
11758      */
11759
11760      switch ((U8)*++p) {
11761      /* These are all the special escapes. */
11762      case 'A':             /* Start assertion */
11763      case 'b': case 'B':   /* Word-boundary assertion*/
11764      case 'C':             /* Single char !DANGEROUS! */
11765      case 'd': case 'D':   /* digit class */
11766      case 'g': case 'G':   /* generic-backref, pos assertion */
11767      case 'h': case 'H':   /* HORIZWS */
11768      case 'k': case 'K':   /* named backref, keep marker */
11769      case 'p': case 'P':   /* Unicode property */
11770        case 'R':   /* LNBREAK */
11771      case 's': case 'S':   /* space class */
11772      case 'v': case 'V':   /* VERTWS */
11773      case 'w': case 'W':   /* word class */
11774      case 'X':             /* eXtended Unicode "combining
11775            character sequence" */
11776      case 'z': case 'Z':   /* End of line/string assertion */
11777       --p;
11778       goto loopdone;
11779
11780      /* Anything after here is an escape that resolves to a
11781      literal. (Except digits, which may or may not)
11782      */
11783      case 'n':
11784       ender = '\n';
11785       p++;
11786       break;
11787      case 'N': /* Handle a single-code point named character. */
11788       /* The options cause it to fail if a multiple code
11789       * point sequence.  Handle those in the switch() above
11790       * */
11791       RExC_parse = p + 1;
11792       if (! grok_bslash_N(pRExC_state, NULL, &ender,
11793            flagp, depth, FALSE,
11794            FALSE /* not strict */ ))
11795       {
11796        if (*flagp & RESTART_UTF8)
11797         FAIL("panic: grok_bslash_N set RESTART_UTF8");
11798        RExC_parse = p = oldp;
11799        goto loopdone;
11800       }
11801       p = RExC_parse;
11802       if (ender > 0xff) {
11803        REQUIRE_UTF8;
11804       }
11805       break;
11806      case 'r':
11807       ender = '\r';
11808       p++;
11809       break;
11810      case 't':
11811       ender = '\t';
11812       p++;
11813       break;
11814      case 'f':
11815       ender = '\f';
11816       p++;
11817       break;
11818      case 'e':
11819       ender = ASCII_TO_NATIVE('\033');
11820       p++;
11821       break;
11822      case 'a':
11823       ender = '\a';
11824       p++;
11825       break;
11826      case 'o':
11827       {
11828        UV result;
11829        const char* error_msg;
11830
11831        bool valid = grok_bslash_o(&p,
11832              &result,
11833              &error_msg,
11834              TRUE, /* out warnings */
11835              FALSE, /* not strict */
11836              TRUE, /* Output warnings
11837                 for non-
11838                 portables */
11839              UTF);
11840        if (! valid) {
11841         RExC_parse = p; /* going to die anyway; point
11842             to exact spot of failure */
11843         vFAIL(error_msg);
11844        }
11845        ender = result;
11846        if (PL_encoding && ender < 0x100) {
11847         goto recode_encoding;
11848        }
11849        if (ender > 0xff) {
11850         REQUIRE_UTF8;
11851        }
11852        break;
11853       }
11854      case 'x':
11855       {
11856        UV result = UV_MAX; /* initialize to erroneous
11857             value */
11858        const char* error_msg;
11859
11860        bool valid = grok_bslash_x(&p,
11861              &result,
11862              &error_msg,
11863              TRUE, /* out warnings */
11864              FALSE, /* not strict */
11865              TRUE, /* Output warnings
11866                 for non-
11867                 portables */
11868              UTF);
11869        if (! valid) {
11870         RExC_parse = p; /* going to die anyway; point
11871             to exact spot of failure */
11872         vFAIL(error_msg);
11873        }
11874        ender = result;
11875
11876        if (PL_encoding && ender < 0x100) {
11877         goto recode_encoding;
11878        }
11879        if (ender > 0xff) {
11880         REQUIRE_UTF8;
11881        }
11882        break;
11883       }
11884      case 'c':
11885       p++;
11886       ender = grok_bslash_c(*p++, SIZE_ONLY);
11887       break;
11888      case '8': case '9': /* must be a backreference */
11889       --p;
11890       goto loopdone;
11891      case '1': case '2': case '3':case '4':
11892      case '5': case '6': case '7':
11893       /* When we parse backslash escapes there is ambiguity
11894       * between backreferences and octal escapes. Any escape
11895       * from \1 - \9 is a backreference, any multi-digit
11896       * escape which does not start with 0 and which when
11897       * evaluated as decimal could refer to an already
11898       * parsed capture buffer is a backslash. Anything else
11899       * is octal.
11900       *
11901       * Note this implies that \118 could be interpreted as
11902       * 118 OR as "\11" . "8" depending on whether there
11903       * were 118 capture buffers defined already in the
11904       * pattern.  */
11905
11906       /* NOTE, RExC_npar is 1 more than the actual number of
11907       * parens we have seen so far, hence the < RExC_npar below. */
11908
11909       if ( !isDIGIT(p[1]) || S_backref_value(p) < RExC_npar)
11910       {  /* Not to be treated as an octal constant, go
11911         find backref */
11912        --p;
11913        goto loopdone;
11914       }
11915      case '0':
11916       {
11917        I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
11918        STRLEN numlen = 3;
11919        ender = grok_oct(p, &numlen, &flags, NULL);
11920        if (ender > 0xff) {
11921         REQUIRE_UTF8;
11922        }
11923        p += numlen;
11924        if (SIZE_ONLY   /* like \08, \178 */
11925         && numlen < 3
11926         && p < RExC_end
11927         && isDIGIT(*p) && ckWARN(WARN_REGEXP))
11928        {
11929         reg_warn_non_literal_string(
11930           p + 1,
11931           form_short_octal_warning(p, numlen));
11932        }
11933       }
11934       if (PL_encoding && ender < 0x100)
11935        goto recode_encoding;
11936       break;
11937      recode_encoding:
11938       if (! RExC_override_recoding) {
11939        SV* enc = PL_encoding;
11940        ender = reg_recode((const char)(U8)ender, &enc);
11941        if (!enc && SIZE_ONLY)
11942         ckWARNreg(p, "Invalid escape in the specified encoding");
11943        REQUIRE_UTF8;
11944       }
11945       break;
11946      case '\0':
11947       if (p >= RExC_end)
11948        FAIL("Trailing \\");
11949       /* FALL THROUGH */
11950      default:
11951       if (!SIZE_ONLY&& isALPHANUMERIC(*p)) {
11952        /* Include any { following the alpha to emphasize
11953        * that it could be part of an escape at some point
11954        * in the future */
11955        int len = (isALPHA(*p) && *(p + 1) == '{') ? 2 : 1;
11956        ckWARN3reg(p + len, "Unrecognized escape \\%.*s passed through", len, p);
11957       }
11958       goto normal_default;
11959      } /* End of switch on '\' */
11960      break;
11961     default:    /* A literal character */
11962
11963      if (! SIZE_ONLY
11964       && RExC_flags & RXf_PMf_EXTENDED
11965       && ckWARN_d(WARN_DEPRECATED)
11966       && is_PATWS_non_low_safe(p, RExC_end, UTF))
11967      {
11968       vWARN_dep(p + ((UTF) ? UTF8SKIP(p) : 1),
11969         "Escape literal pattern white space under /x");
11970      }
11971
11972     normal_default:
11973      if (UTF8_IS_START(*p) && UTF) {
11974       STRLEN numlen;
11975       ender = utf8n_to_uvchr((U8*)p, RExC_end - p,
11976            &numlen, UTF8_ALLOW_DEFAULT);
11977       p += numlen;
11978      }
11979      else
11980       ender = (U8) *p++;
11981      break;
11982     } /* End of switch on the literal */
11983
11984     /* Here, have looked at the literal character and <ender>
11985     * contains its ordinal, <p> points to the character after it
11986     */
11987
11988     if ( RExC_flags & RXf_PMf_EXTENDED)
11989      p = regwhite( pRExC_state, p );
11990
11991     /* If the next thing is a quantifier, it applies to this
11992     * character only, which means that this character has to be in
11993     * its own node and can't just be appended to the string in an
11994     * existing node, so if there are already other characters in
11995     * the node, close the node with just them, and set up to do
11996     * this character again next time through, when it will be the
11997     * only thing in its new node */
11998     if ((next_is_quantifier = (p < RExC_end && ISMULT2(p))) && len)
11999     {
12000      p = oldp;
12001      goto loopdone;
12002     }
12003
12004     if (! FOLD   /* The simple case, just append the literal */
12005      || (LOC  /* Also don't fold for tricky chars under /l */
12006       && is_PROBLEMATIC_LOCALE_FOLD_cp(ender)))
12007     {
12008      if (UTF) {
12009
12010       /* Normally, we don't need the representation of the
12011       * character in the sizing pass--just its size, but if
12012       * folding, we have to actually put the character out
12013       * even in the sizing pass, because the size could
12014       * change as we juggle things at the end of this loop
12015       * to avoid splitting a too-full node in the middle of
12016       * a potential multi-char fold [perl #123539] */
12017       const STRLEN unilen = (SIZE_ONLY && ! FOLD)
12018            ? UNISKIP(ender)
12019            : (uvchr_to_utf8((U8*)s, ender) - (U8*)s);
12020       if (unilen > 0) {
12021       s   += unilen;
12022       len += unilen;
12023       }
12024
12025       /* The loop increments <len> each time, as all but this
12026       * path (and one other) through it add a single byte to
12027       * the EXACTish node.  But this one has changed len to
12028       * be the correct final value, so subtract one to
12029       * cancel out the increment that follows */
12030       len--;
12031      }
12032      else if (FOLD) {
12033       /* See comment above for [perl #123539] */
12034       *(s++) = (char) ender;
12035      }
12036      else {
12037       REGC((char)ender, s++);
12038      }
12039
12040      /* Can get here if folding only if is one of the /l
12041      * characters whose fold depends on the locale.  The
12042      * occurrence of any of these indicate that we can't
12043      * simplify things */
12044      if (FOLD) {
12045       maybe_exact = FALSE;
12046       maybe_exactfu = FALSE;
12047      }
12048     }
12049     else             /* FOLD */
12050      if (! ( UTF
12051       /* See comments for join_exact() as to why we fold this
12052       * non-UTF at compile time */
12053       || (node_type == EXACTFU
12054        && ender == LATIN_SMALL_LETTER_SHARP_S)))
12055     {
12056      /* Here, are folding and are not UTF-8 encoded; therefore
12057      * the character must be in the range 0-255, and is not /l
12058      * (Not /l because we already handled these under /l in
12059      * is_PROBLEMATIC_LOCALE_FOLD_cp */
12060      if (IS_IN_SOME_FOLD_L1(ender)) {
12061       maybe_exact = FALSE;
12062
12063       /* See if the character's fold differs between /d and
12064       * /u.  This includes the multi-char fold SHARP S to
12065       * 'ss' */
12066       if (maybe_exactfu
12067        && (PL_fold[ender] != PL_fold_latin1[ender]
12068         || ender == LATIN_SMALL_LETTER_SHARP_S
12069         || (len > 0
12070         && isARG2_lower_or_UPPER_ARG1('s', ender)
12071         && isARG2_lower_or_UPPER_ARG1('s',
12072                 *(s-1)))))
12073       {
12074        maybe_exactfu = FALSE;
12075       }
12076      }
12077
12078      /* Even when folding, we store just the input character, as
12079      * we have an array that finds its fold quickly */
12080      *(s++) = (char) ender;
12081     }
12082     else {  /* FOLD and UTF */
12083      /* Unlike the non-fold case, we do actually have to
12084      * calculate the results here in pass 1.  This is for two
12085      * reasons, the folded length may be longer than the
12086      * unfolded, and we have to calculate how many EXACTish
12087      * nodes it will take; and we may run out of room in a node
12088      * in the middle of a potential multi-char fold, and have
12089      * to back off accordingly.  (Hence we can't use REGC for
12090      * the simple case just below.) */
12091
12092      UV folded;
12093      if (isASCII(ender)) {
12094       folded = toFOLD(ender);
12095       *(s)++ = (U8) folded;
12096      }
12097      else {
12098       STRLEN foldlen;
12099
12100       folded = _to_uni_fold_flags(
12101          ender,
12102          (U8 *) s,
12103          &foldlen,
12104          FOLD_FLAGS_FULL | ((ASCII_FOLD_RESTRICTED)
12105               ? FOLD_FLAGS_NOMIX_ASCII
12106               : 0));
12107       s += foldlen;
12108
12109       /* The loop increments <len> each time, as all but this
12110       * path (and one other) through it add a single byte to
12111       * the EXACTish node.  But this one has changed len to
12112       * be the correct final value, so subtract one to
12113       * cancel out the increment that follows */
12114       len += foldlen - 1;
12115      }
12116      /* If this node only contains non-folding code points so
12117      * far, see if this new one is also non-folding */
12118      if (maybe_exact) {
12119       if (folded != ender) {
12120        maybe_exact = FALSE;
12121       }
12122       else {
12123        /* Here the fold is the original; we have to check
12124        * further to see if anything folds to it */
12125        if (_invlist_contains_cp(PL_utf8_foldable,
12126               ender))
12127        {
12128         maybe_exact = FALSE;
12129        }
12130       }
12131      }
12132      ender = folded;
12133     }
12134
12135     if (next_is_quantifier) {
12136
12137      /* Here, the next input is a quantifier, and to get here,
12138      * the current character is the only one in the node.
12139      * Also, here <len> doesn't include the final byte for this
12140      * character */
12141      len++;
12142      goto loopdone;
12143     }
12144
12145    } /* End of loop through literal characters */
12146
12147    /* Here we have either exhausted the input or ran out of room in
12148    * the node.  (If we encountered a character that can't be in the
12149    * node, transfer is made directly to <loopdone>, and so we
12150    * wouldn't have fallen off the end of the loop.)  In the latter
12151    * case, we artificially have to split the node into two, because
12152    * we just don't have enough space to hold everything.  This
12153    * creates a problem if the final character participates in a
12154    * multi-character fold in the non-final position, as a match that
12155    * should have occurred won't, due to the way nodes are matched,
12156    * and our artificial boundary.  So back off until we find a non-
12157    * problematic character -- one that isn't at the beginning or
12158    * middle of such a fold.  (Either it doesn't participate in any
12159    * folds, or appears only in the final position of all the folds it
12160    * does participate in.)  A better solution with far fewer false
12161    * positives, and that would fill the nodes more completely, would
12162    * be to actually have available all the multi-character folds to
12163    * test against, and to back-off only far enough to be sure that
12164    * this node isn't ending with a partial one.  <upper_parse> is set
12165    * further below (if we need to reparse the node) to include just
12166    * up through that final non-problematic character that this code
12167    * identifies, so when it is set to less than the full node, we can
12168    * skip the rest of this */
12169    if (FOLD && p < RExC_end && upper_parse == MAX_NODE_STRING_SIZE) {
12170
12171     const STRLEN full_len = len;
12172
12173     assert(len >= MAX_NODE_STRING_SIZE);
12174
12175     /* Here, <s> points to the final byte of the final character.
12176     * Look backwards through the string until find a non-
12177     * problematic character */
12178
12179     if (! UTF) {
12180
12181      /* This has no multi-char folds to non-UTF characters */
12182      if (ASCII_FOLD_RESTRICTED) {
12183       goto loopdone;
12184      }
12185
12186      while (--s >= s0 && IS_NON_FINAL_FOLD(*s)) { }
12187      len = s - s0 + 1;
12188     }
12189     else {
12190      if (!  PL_NonL1NonFinalFold) {
12191       PL_NonL1NonFinalFold = _new_invlist_C_array(
12192           NonL1_Perl_Non_Final_Folds_invlist);
12193      }
12194
12195      /* Point to the first byte of the final character */
12196      s = (char *) utf8_hop((U8 *) s, -1);
12197
12198      while (s >= s0) {   /* Search backwards until find
12199           non-problematic char */
12200       if (UTF8_IS_INVARIANT(*s)) {
12201
12202        /* There are no ascii characters that participate
12203        * in multi-char folds under /aa.  In EBCDIC, the
12204        * non-ascii invariants are all control characters,
12205        * so don't ever participate in any folds. */
12206        if (ASCII_FOLD_RESTRICTED
12207         || ! IS_NON_FINAL_FOLD(*s))
12208        {
12209         break;
12210        }
12211       }
12212       else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
12213        if (! IS_NON_FINAL_FOLD(TWO_BYTE_UTF8_TO_NATIVE(
12214                 *s, *(s+1))))
12215        {
12216         break;
12217        }
12218       }
12219       else if (! _invlist_contains_cp(
12220           PL_NonL1NonFinalFold,
12221           valid_utf8_to_uvchr((U8 *) s, NULL)))
12222       {
12223        break;
12224       }
12225
12226       /* Here, the current character is problematic in that
12227       * it does occur in the non-final position of some
12228       * fold, so try the character before it, but have to
12229       * special case the very first byte in the string, so
12230       * we don't read outside the string */
12231       s = (s == s0) ? s -1 : (char *) utf8_hop((U8 *) s, -1);
12232      } /* End of loop backwards through the string */
12233
12234      /* If there were only problematic characters in the string,
12235      * <s> will point to before s0, in which case the length
12236      * should be 0, otherwise include the length of the
12237      * non-problematic character just found */
12238      len = (s < s0) ? 0 : s - s0 + UTF8SKIP(s);
12239     }
12240
12241     /* Here, have found the final character, if any, that is
12242     * non-problematic as far as ending the node without splitting
12243     * it across a potential multi-char fold.  <len> contains the
12244     * number of bytes in the node up-to and including that
12245     * character, or is 0 if there is no such character, meaning
12246     * the whole node contains only problematic characters.  In
12247     * this case, give up and just take the node as-is.  We can't
12248     * do any better */
12249     if (len == 0) {
12250      len = full_len;
12251
12252      /* If the node ends in an 's' we make sure it stays EXACTF,
12253      * as if it turns into an EXACTFU, it could later get
12254      * joined with another 's' that would then wrongly match
12255      * the sharp s */
12256      if (maybe_exactfu && isARG2_lower_or_UPPER_ARG1('s', ender))
12257      {
12258       maybe_exactfu = FALSE;
12259      }
12260     } else {
12261
12262      /* Here, the node does contain some characters that aren't
12263      * problematic.  If one such is the final character in the
12264      * node, we are done */
12265      if (len == full_len) {
12266       goto loopdone;
12267      }
12268      else if (len + ((UTF) ? UTF8SKIP(s) : 1) == full_len) {
12269
12270       /* If the final character is problematic, but the
12271       * penultimate is not, back-off that last character to
12272       * later start a new node with it */
12273       p = oldp;
12274       goto loopdone;
12275      }
12276
12277      /* Here, the final non-problematic character is earlier
12278      * in the input than the penultimate character.  What we do
12279      * is reparse from the beginning, going up only as far as
12280      * this final ok one, thus guaranteeing that the node ends
12281      * in an acceptable character.  The reason we reparse is
12282      * that we know how far in the character is, but we don't
12283      * know how to correlate its position with the input parse.
12284      * An alternate implementation would be to build that
12285      * correlation as we go along during the original parse,
12286      * but that would entail extra work for every node, whereas
12287      * this code gets executed only when the string is too
12288      * large for the node, and the final two characters are
12289      * problematic, an infrequent occurrence.  Yet another
12290      * possible strategy would be to save the tail of the
12291      * string, and the next time regatom is called, initialize
12292      * with that.  The problem with this is that unless you
12293      * back off one more character, you won't be guaranteed
12294      * regatom will get called again, unless regbranch,
12295      * regpiece ... are also changed.  If you do back off that
12296      * extra character, so that there is input guaranteed to
12297      * force calling regatom, you can't handle the case where
12298      * just the first character in the node is acceptable.  I
12299      * (khw) decided to try this method which doesn't have that
12300      * pitfall; if performance issues are found, we can do a
12301      * combination of the current approach plus that one */
12302      upper_parse = len;
12303      len = 0;
12304      s = s0;
12305      goto reparse;
12306     }
12307    }   /* End of verifying node ends with an appropriate char */
12308
12309   loopdone:   /* Jumped to when encounters something that shouldn't be in
12310      the node */
12311
12312    /* I (khw) don't know if you can get here with zero length, but the
12313    * old code handled this situation by creating a zero-length EXACT
12314    * node.  Might as well be NOTHING instead */
12315    if (len == 0) {
12316     OP(ret) = NOTHING;
12317    }
12318    else {
12319     if (FOLD) {
12320      /* If 'maybe_exact' is still set here, means there are no
12321      * code points in the node that participate in folds;
12322      * similarly for 'maybe_exactfu' and code points that match
12323      * differently depending on UTF8ness of the target string
12324      * (for /u), or depending on locale for /l */
12325      if (maybe_exact) {
12326       OP(ret) = EXACT;
12327      }
12328      else if (maybe_exactfu) {
12329       OP(ret) = EXACTFU;
12330      }
12331     }
12332     alloc_maybe_populate_EXACT(pRExC_state, ret, flagp, len, ender,
12333           FALSE /* Don't look to see if could
12334              be turned into an EXACT
12335              node, as we have already
12336              computed that */
12337           );
12338    }
12339
12340    RExC_parse = p - 1;
12341    Set_Node_Cur_Length(ret, parse_start);
12342    nextchar(pRExC_state);
12343    {
12344     /* len is STRLEN which is unsigned, need to copy to signed */
12345     IV iv = len;
12346     if (iv < 0)
12347      vFAIL("Internal disaster");
12348    }
12349
12350   } /* End of label 'defchar:' */
12351   break;
12352  } /* End of giant switch on input character */
12353
12354  return(ret);
12355 }
12356
12357 STATIC char *
12358 S_regwhite( RExC_state_t *pRExC_state, char *p )
12359 {
12360  const char *e = RExC_end;
12361
12362  PERL_ARGS_ASSERT_REGWHITE;
12363
12364  while (p < e) {
12365   if (isSPACE(*p))
12366    ++p;
12367   else if (*p == '#') {
12368    bool ended = 0;
12369    do {
12370     if (*p++ == '\n') {
12371      ended = 1;
12372      break;
12373     }
12374    } while (p < e);
12375    if (!ended)
12376     RExC_seen |= REG_RUN_ON_COMMENT_SEEN;
12377   }
12378   else
12379    break;
12380  }
12381  return p;
12382 }
12383
12384 STATIC char *
12385 S_regpatws( RExC_state_t *pRExC_state, char *p , const bool recognize_comment )
12386 {
12387  /* Returns the next non-pattern-white space, non-comment character (the
12388  * latter only if 'recognize_comment is true) in the string p, which is
12389  * ended by RExC_end.  If there is no line break ending a comment,
12390  * RExC_seen has added the REG_RUN_ON_COMMENT_SEEN flag; */
12391  const char *e = RExC_end;
12392
12393  PERL_ARGS_ASSERT_REGPATWS;
12394
12395  while (p < e) {
12396   STRLEN len;
12397   if ((len = is_PATWS_safe(p, e, UTF))) {
12398    p += len;
12399   }
12400   else if (recognize_comment && *p == '#') {
12401    bool ended = 0;
12402    do {
12403     p++;
12404     if (is_LNBREAK_safe(p, e, UTF)) {
12405      ended = 1;
12406      break;
12407     }
12408    } while (p < e);
12409    if (!ended)
12410     RExC_seen |= REG_RUN_ON_COMMENT_SEEN;
12411   }
12412   else
12413    break;
12414  }
12415  return p;
12416 }
12417
12418 STATIC void
12419 S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
12420 {
12421  /* Uses the inversion list '*invlist_ptr' to populate the ANYOF 'node'.  It
12422  * sets up the bitmap and any flags, removing those code points from the
12423  * inversion list, setting it to NULL should it become completely empty */
12424
12425  PERL_ARGS_ASSERT_POPULATE_ANYOF_FROM_INVLIST;
12426  assert(PL_regkind[OP(node)] == ANYOF);
12427
12428  ANYOF_BITMAP_ZERO(node);
12429  if (*invlist_ptr) {
12430
12431   /* This gets set if we actually need to modify things */
12432   bool change_invlist = FALSE;
12433
12434   UV start, end;
12435
12436   /* Start looking through *invlist_ptr */
12437   invlist_iterinit(*invlist_ptr);
12438   while (invlist_iternext(*invlist_ptr, &start, &end)) {
12439    UV high;
12440    int i;
12441
12442    if (end == UV_MAX && start <= 256) {
12443     ANYOF_FLAGS(node) |= ANYOF_ABOVE_LATIN1_ALL;
12444    }
12445    else if (end >= 256) {
12446     ANYOF_FLAGS(node) |= ANYOF_UTF8;
12447    }
12448
12449    /* Quit if are above what we should change */
12450    if (start > 255) {
12451     break;
12452    }
12453
12454    change_invlist = TRUE;
12455
12456    /* Set all the bits in the range, up to the max that we are doing */
12457    high = (end < 255) ? end : 255;
12458    for (i = start; i <= (int) high; i++) {
12459     if (! ANYOF_BITMAP_TEST(node, i)) {
12460      ANYOF_BITMAP_SET(node, i);
12461     }
12462    }
12463   }
12464   invlist_iterfinish(*invlist_ptr);
12465
12466   /* Done with loop; remove any code points that are in the bitmap from
12467   * *invlist_ptr; similarly for code points above latin1 if we have a
12468   * flag to match all of them anyways */
12469   if (change_invlist) {
12470    _invlist_subtract(*invlist_ptr, PL_Latin1, invlist_ptr);
12471   }
12472   if (ANYOF_FLAGS(node) & ANYOF_ABOVE_LATIN1_ALL) {
12473    _invlist_intersection(*invlist_ptr, PL_Latin1, invlist_ptr);
12474   }
12475
12476   /* If have completely emptied it, remove it completely */
12477   if (_invlist_len(*invlist_ptr) == 0) {
12478    SvREFCNT_dec_NN(*invlist_ptr);
12479    *invlist_ptr = NULL;
12480   }
12481  }
12482 }
12483
12484 /* Parse POSIX character classes: [[:foo:]], [[=foo=]], [[.foo.]].
12485    Character classes ([:foo:]) can also be negated ([:^foo:]).
12486    Returns a named class id (ANYOF_XXX) if successful, -1 otherwise.
12487    Equivalence classes ([=foo=]) and composites ([.foo.]) are parsed,
12488    but trigger failures because they are currently unimplemented. */
12489
12490 #define POSIXCC_DONE(c)   ((c) == ':')
12491 #define POSIXCC_NOTYET(c) ((c) == '=' || (c) == '.')
12492 #define POSIXCC(c) (POSIXCC_DONE(c) || POSIXCC_NOTYET(c))
12493
12494 PERL_STATIC_INLINE I32
12495 S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value, const bool strict)
12496 {
12497  dVAR;
12498  I32 namedclass = OOB_NAMEDCLASS;
12499
12500  PERL_ARGS_ASSERT_REGPPOSIXCC;
12501
12502  if (value == '[' && RExC_parse + 1 < RExC_end &&
12503   /* I smell either [: or [= or [. -- POSIX has been here, right? */
12504   POSIXCC(UCHARAT(RExC_parse)))
12505  {
12506   const char c = UCHARAT(RExC_parse);
12507   char* const s = RExC_parse++;
12508
12509   while (RExC_parse < RExC_end && UCHARAT(RExC_parse) != c)
12510    RExC_parse++;
12511   if (RExC_parse == RExC_end) {
12512    if (strict) {
12513
12514     /* Try to give a better location for the error (than the end of
12515     * the string) by looking for the matching ']' */
12516     RExC_parse = s;
12517     while (RExC_parse < RExC_end && UCHARAT(RExC_parse) != ']') {
12518      RExC_parse++;
12519     }
12520     vFAIL2("Unmatched '%c' in POSIX class", c);
12521    }
12522    /* Grandfather lone [:, [=, [. */
12523    RExC_parse = s;
12524   }
12525   else {
12526    const char* const t = RExC_parse++; /* skip over the c */
12527    assert(*t == c);
12528
12529    if (UCHARAT(RExC_parse) == ']') {
12530     const char *posixcc = s + 1;
12531     RExC_parse++; /* skip over the ending ] */
12532
12533     if (*s == ':') {
12534      const I32 complement = *posixcc == '^' ? *posixcc++ : 0;
12535      const I32 skip = t - posixcc;
12536
12537      /* Initially switch on the length of the name.  */
12538      switch (skip) {
12539      case 4:
12540       if (memEQ(posixcc, "word", 4)) /* this is not POSIX,
12541               this is the Perl \w
12542               */
12543        namedclass = ANYOF_WORDCHAR;
12544       break;
12545      case 5:
12546       /* Names all of length 5.  */
12547       /* alnum alpha ascii blank cntrl digit graph lower
12548       print punct space upper  */
12549       /* Offset 4 gives the best switch position.  */
12550       switch (posixcc[4]) {
12551       case 'a':
12552        if (memEQ(posixcc, "alph", 4)) /* alpha */
12553         namedclass = ANYOF_ALPHA;
12554        break;
12555       case 'e':
12556        if (memEQ(posixcc, "spac", 4)) /* space */
12557         namedclass = ANYOF_PSXSPC;
12558        break;
12559       case 'h':
12560        if (memEQ(posixcc, "grap", 4)) /* graph */
12561         namedclass = ANYOF_GRAPH;
12562        break;
12563       case 'i':
12564        if (memEQ(posixcc, "asci", 4)) /* ascii */
12565         namedclass = ANYOF_ASCII;
12566        break;
12567       case 'k':
12568        if (memEQ(posixcc, "blan", 4)) /* blank */
12569         namedclass = ANYOF_BLANK;
12570        break;
12571       case 'l':
12572        if (memEQ(posixcc, "cntr", 4)) /* cntrl */
12573         namedclass = ANYOF_CNTRL;
12574        break;
12575       case 'm':
12576        if (memEQ(posixcc, "alnu", 4)) /* alnum */
12577         namedclass = ANYOF_ALPHANUMERIC;
12578        break;
12579       case 'r':
12580        if (memEQ(posixcc, "lowe", 4)) /* lower */
12581         namedclass = (FOLD) ? ANYOF_CASED : ANYOF_LOWER;
12582        else if (memEQ(posixcc, "uppe", 4)) /* upper */
12583         namedclass = (FOLD) ? ANYOF_CASED : ANYOF_UPPER;
12584        break;
12585       case 't':
12586        if (memEQ(posixcc, "digi", 4)) /* digit */
12587         namedclass = ANYOF_DIGIT;
12588        else if (memEQ(posixcc, "prin", 4)) /* print */
12589         namedclass = ANYOF_PRINT;
12590        else if (memEQ(posixcc, "punc", 4)) /* punct */
12591         namedclass = ANYOF_PUNCT;
12592        break;
12593       }
12594       break;
12595      case 6:
12596       if (memEQ(posixcc, "xdigit", 6))
12597        namedclass = ANYOF_XDIGIT;
12598       break;
12599      }
12600
12601      if (namedclass == OOB_NAMEDCLASS)
12602       vFAIL2utf8f(
12603        "POSIX class [:%"UTF8f":] unknown",
12604        UTF8fARG(UTF, t - s - 1, s + 1));
12605
12606      /* The #defines are structured so each complement is +1 to
12607      * the normal one */
12608      if (complement) {
12609       namedclass++;
12610      }
12611      assert (posixcc[skip] == ':');
12612      assert (posixcc[skip+1] == ']');
12613     } else if (!SIZE_ONLY) {
12614      /* [[=foo=]] and [[.foo.]] are still future. */
12615
12616      /* adjust RExC_parse so the warning shows after
12617      the class closes */
12618      while (UCHARAT(RExC_parse) && UCHARAT(RExC_parse) != ']')
12619       RExC_parse++;
12620      vFAIL3("POSIX syntax [%c %c] is reserved for future extensions", c, c);
12621     }
12622    } else {
12623     /* Maternal grandfather:
12624     * "[:" ending in ":" but not in ":]" */
12625     if (strict) {
12626      vFAIL("Unmatched '[' in POSIX class");
12627     }
12628
12629     /* Grandfather lone [:, [=, [. */
12630     RExC_parse = s;
12631    }
12632   }
12633  }
12634
12635  return namedclass;
12636 }
12637
12638 STATIC bool
12639 S_could_it_be_a_POSIX_class(pTHX_ RExC_state_t *pRExC_state)
12640 {
12641  /* This applies some heuristics at the current parse position (which should
12642  * be at a '[') to see if what follows might be intended to be a [:posix:]
12643  * class.  It returns true if it really is a posix class, of course, but it
12644  * also can return true if it thinks that what was intended was a posix
12645  * class that didn't quite make it.
12646  *
12647  * It will return true for
12648  *      [:alphanumerics:
12649  *      [:alphanumerics]  (as long as the ] isn't followed immediately by a
12650  *                         ')' indicating the end of the (?[
12651  *      [:any garbage including %^&$ punctuation:]
12652  *
12653  * This is designed to be called only from S_handle_regex_sets; it could be
12654  * easily adapted to be called from the spot at the beginning of regclass()
12655  * that checks to see in a normal bracketed class if the surrounding []
12656  * have been omitted ([:word:] instead of [[:word:]]).  But doing so would
12657  * change long-standing behavior, so I (khw) didn't do that */
12658  char* p = RExC_parse + 1;
12659  char first_char = *p;
12660
12661  PERL_ARGS_ASSERT_COULD_IT_BE_A_POSIX_CLASS;
12662
12663  assert(*(p - 1) == '[');
12664
12665  if (! POSIXCC(first_char)) {
12666   return FALSE;
12667  }
12668
12669  p++;
12670  while (p < RExC_end && isWORDCHAR(*p)) p++;
12671
12672  if (p >= RExC_end) {
12673   return FALSE;
12674  }
12675
12676  if (p - RExC_parse > 2    /* Got at least 1 word character */
12677   && (*p == first_char
12678    || (*p == ']' && p + 1 < RExC_end && *(p + 1) != ')')))
12679  {
12680   return TRUE;
12681  }
12682
12683  p = (char *) memchr(RExC_parse, ']', RExC_end - RExC_parse);
12684
12685  return (p
12686    && p - RExC_parse > 2 /* [:] evaluates to colon;
12687          [::] is a bad posix class. */
12688    && first_char == *(p - 1));
12689 }
12690
12691 STATIC regnode *
12692 S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist,
12693      I32 *flagp, U32 depth,
12694      char * const oregcomp_parse)
12695 {
12696  /* Handle the (?[...]) construct to do set operations */
12697
12698  U8 curchar;
12699  UV start, end; /* End points of code point ranges */
12700  SV* result_string;
12701  char *save_end, *save_parse;
12702  SV* final;
12703  STRLEN len;
12704  regnode* node;
12705  AV* stack;
12706  const bool save_fold = FOLD;
12707
12708  GET_RE_DEBUG_FLAGS_DECL;
12709
12710  PERL_ARGS_ASSERT_HANDLE_REGEX_SETS;
12711
12712  if (LOC) {
12713   vFAIL("(?[...]) not valid in locale");
12714  }
12715  RExC_uni_semantics = 1;
12716
12717  /* This will return only an ANYOF regnode, or (unlikely) something smaller
12718  * (such as EXACT).  Thus we can skip most everything if just sizing.  We
12719  * call regclass to handle '[]' so as to not have to reinvent its parsing
12720  * rules here (throwing away the size it computes each time).  And, we exit
12721  * upon an unescaped ']' that isn't one ending a regclass.  To do both
12722  * these things, we need to realize that something preceded by a backslash
12723  * is escaped, so we have to keep track of backslashes */
12724  if (SIZE_ONLY) {
12725   UV depth = 0; /* how many nested (?[...]) constructs */
12726
12727   Perl_ck_warner_d(aTHX_
12728    packWARN(WARN_EXPERIMENTAL__REGEX_SETS),
12729    "The regex_sets feature is experimental" REPORT_LOCATION,
12730     UTF8fARG(UTF, (RExC_parse - RExC_precomp), RExC_precomp),
12731     UTF8fARG(UTF,
12732       RExC_end - RExC_start - (RExC_parse - RExC_precomp),
12733       RExC_precomp + (RExC_parse - RExC_precomp)));
12734
12735   while (RExC_parse < RExC_end) {
12736    SV* current = NULL;
12737    RExC_parse = regpatws(pRExC_state, RExC_parse,
12738         TRUE); /* means recognize comments */
12739    switch (*RExC_parse) {
12740     case '?':
12741      if (RExC_parse[1] == '[') depth++, RExC_parse++;
12742      /* FALL THROUGH */
12743     default:
12744      break;
12745     case '\\':
12746      /* Skip the next byte (which could cause us to end up in
12747      * the middle of a UTF-8 character, but since none of those
12748      * are confusable with anything we currently handle in this
12749      * switch (invariants all), it's safe.  We'll just hit the
12750      * default: case next time and keep on incrementing until
12751      * we find one of the invariants we do handle. */
12752      RExC_parse++;
12753      break;
12754     case '[':
12755     {
12756      /* If this looks like it is a [:posix:] class, leave the
12757      * parse pointer at the '[' to fool regclass() into
12758      * thinking it is part of a '[[:posix:]]'.  That function
12759      * will use strict checking to force a syntax error if it
12760      * doesn't work out to a legitimate class */
12761      bool is_posix_class
12762          = could_it_be_a_POSIX_class(pRExC_state);
12763      if (! is_posix_class) {
12764       RExC_parse++;
12765      }
12766
12767      /* regclass() can only return RESTART_UTF8 if multi-char
12768      folds are allowed.  */
12769      if (!regclass(pRExC_state, flagp,depth+1,
12770         is_posix_class, /* parse the whole char
12771              class only if not a
12772              posix class */
12773         FALSE, /* don't allow multi-char folds */
12774         TRUE, /* silence non-portable warnings. */
12775         &current))
12776       FAIL2("panic: regclass returned NULL to handle_sets, flags=%#"UVxf"",
12777        (UV) *flagp);
12778
12779      /* function call leaves parse pointing to the ']', except
12780      * if we faked it */
12781      if (is_posix_class) {
12782       RExC_parse--;
12783      }
12784
12785      SvREFCNT_dec(current);   /* In case it returned something */
12786      break;
12787     }
12788
12789     case ']':
12790      if (depth--) break;
12791      RExC_parse++;
12792      if (RExC_parse < RExC_end
12793       && *RExC_parse == ')')
12794      {
12795       node = reganode(pRExC_state, ANYOF, 0);
12796       RExC_size += ANYOF_SKIP;
12797       nextchar(pRExC_state);
12798       Set_Node_Length(node,
12799         RExC_parse - oregcomp_parse + 1); /* MJD */
12800       return node;
12801      }
12802      goto no_close;
12803    }
12804    RExC_parse++;
12805   }
12806
12807   no_close:
12808   FAIL("Syntax error in (?[...])");
12809  }
12810
12811  /* Pass 2 only after this.  Everything in this construct is a
12812  * metacharacter.  Operands begin with either a '\' (for an escape
12813  * sequence), or a '[' for a bracketed character class.  Any other
12814  * character should be an operator, or parenthesis for grouping.  Both
12815  * types of operands are handled by calling regclass() to parse them.  It
12816  * is called with a parameter to indicate to return the computed inversion
12817  * list.  The parsing here is implemented via a stack.  Each entry on the
12818  * stack is a single character representing one of the operators, or the
12819  * '('; or else a pointer to an operand inversion list. */
12820
12821 #define IS_OPERAND(a)  (! SvIOK(a))
12822
12823  /* The stack starts empty.  It is a syntax error if the first thing parsed
12824  * is a binary operator; everything else is pushed on the stack.  When an
12825  * operand is parsed, the top of the stack is examined.  If it is a binary
12826  * operator, the item before it should be an operand, and both are replaced
12827  * by the result of doing that operation on the new operand and the one on
12828  * the stack.   Thus a sequence of binary operands is reduced to a single
12829  * one before the next one is parsed.
12830  *
12831  * A unary operator may immediately follow a binary in the input, for
12832  * example
12833  *      [a] + ! [b]
12834  * When an operand is parsed and the top of the stack is a unary operator,
12835  * the operation is performed, and then the stack is rechecked to see if
12836  * this new operand is part of a binary operation; if so, it is handled as
12837  * above.
12838  *
12839  * A '(' is simply pushed on the stack; it is valid only if the stack is
12840  * empty, or the top element of the stack is an operator or another '('
12841  * (for which the parenthesized expression will become an operand).  By the
12842  * time the corresponding ')' is parsed everything in between should have
12843  * been parsed and evaluated to a single operand (or else is a syntax
12844  * error), and is handled as a regular operand */
12845
12846  sv_2mortal((SV *)(stack = newAV()));
12847
12848  while (RExC_parse < RExC_end) {
12849   I32 top_index = av_tindex(stack);
12850   SV** top_ptr;
12851   SV* current = NULL;
12852
12853   /* Skip white space */
12854   RExC_parse = regpatws(pRExC_state, RExC_parse,
12855         TRUE); /* means recognize comments */
12856   if (RExC_parse >= RExC_end) {
12857    Perl_croak(aTHX_ "panic: Read past end of '(?[ ])'");
12858   }
12859   if ((curchar = UCHARAT(RExC_parse)) == ']') {
12860    break;
12861   }
12862
12863   switch (curchar) {
12864
12865    case '?':
12866     if (av_tindex(stack) >= 0   /* This makes sure that we can
12867            safely subtract 1 from
12868            RExC_parse in the next clause.
12869            If we have something on the
12870            stack, we have parsed something
12871            */
12872      && UCHARAT(RExC_parse - 1) == '('
12873      && RExC_parse < RExC_end)
12874     {
12875      /* If is a '(?', could be an embedded '(?flags:(?[...])'.
12876      * This happens when we have some thing like
12877      *
12878      *   my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
12879      *   ...
12880      *   qr/(?[ \p{Digit} & $thai_or_lao ])/;
12881      *
12882      * Here we would be handling the interpolated
12883      * '$thai_or_lao'.  We handle this by a recursive call to
12884      * ourselves which returns the inversion list the
12885      * interpolated expression evaluates to.  We use the flags
12886      * from the interpolated pattern. */
12887      U32 save_flags = RExC_flags;
12888      const char * const save_parse = ++RExC_parse;
12889
12890      parse_lparen_question_flags(pRExC_state);
12891
12892      if (RExC_parse == save_parse  /* Makes sure there was at
12893              least one flag (or this
12894              embedding wasn't compiled)
12895             */
12896       || RExC_parse >= RExC_end - 4
12897       || UCHARAT(RExC_parse) != ':'
12898       || UCHARAT(++RExC_parse) != '('
12899       || UCHARAT(++RExC_parse) != '?'
12900       || UCHARAT(++RExC_parse) != '[')
12901      {
12902
12903       /* In combination with the above, this moves the
12904       * pointer to the point just after the first erroneous
12905       * character (or if there are no flags, to where they
12906       * should have been) */
12907       if (RExC_parse >= RExC_end - 4) {
12908        RExC_parse = RExC_end;
12909       }
12910       else if (RExC_parse != save_parse) {
12911        RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
12912       }
12913       vFAIL("Expecting '(?flags:(?[...'");
12914      }
12915      RExC_parse++;
12916      (void) handle_regex_sets(pRExC_state, &current, flagp,
12917              depth+1, oregcomp_parse);
12918
12919      /* Here, 'current' contains the embedded expression's
12920      * inversion list, and RExC_parse points to the trailing
12921      * ']'; the next character should be the ')' which will be
12922      * paired with the '(' that has been put on the stack, so
12923      * the whole embedded expression reduces to '(operand)' */
12924      RExC_parse++;
12925
12926      RExC_flags = save_flags;
12927      goto handle_operand;
12928     }
12929     /* FALL THROUGH */
12930
12931    default:
12932     RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
12933     vFAIL("Unexpected character");
12934
12935    case '\\':
12936     /* regclass() can only return RESTART_UTF8 if multi-char
12937     folds are allowed.  */
12938     if (!regclass(pRExC_state, flagp,depth+1,
12939        TRUE, /* means parse just the next thing */
12940        FALSE, /* don't allow multi-char folds */
12941        FALSE, /* don't silence non-portable warnings.  */
12942        &current))
12943      FAIL2("panic: regclass returned NULL to handle_sets, flags=%#"UVxf"",
12944       (UV) *flagp);
12945     /* regclass() will return with parsing just the \ sequence,
12946     * leaving the parse pointer at the next thing to parse */
12947     RExC_parse--;
12948     goto handle_operand;
12949
12950    case '[':   /* Is a bracketed character class */
12951    {
12952     bool is_posix_class = could_it_be_a_POSIX_class(pRExC_state);
12953
12954     if (! is_posix_class) {
12955      RExC_parse++;
12956     }
12957
12958     /* regclass() can only return RESTART_UTF8 if multi-char
12959     folds are allowed.  */
12960     if(!regclass(pRExC_state, flagp,depth+1,
12961        is_posix_class, /* parse the whole char class
12962             only if not a posix class */
12963        FALSE, /* don't allow multi-char folds */
12964        FALSE, /* don't silence non-portable warnings.  */
12965        &current))
12966      FAIL2("panic: regclass returned NULL to handle_sets, flags=%#"UVxf"",
12967       (UV) *flagp);
12968     /* function call leaves parse pointing to the ']', except if we
12969     * faked it */
12970     if (is_posix_class) {
12971      RExC_parse--;
12972     }
12973
12974     goto handle_operand;
12975    }
12976
12977    case '&':
12978    case '|':
12979    case '+':
12980    case '-':
12981    case '^':
12982     if (top_index < 0
12983      || ( ! (top_ptr = av_fetch(stack, top_index, FALSE)))
12984      || ! IS_OPERAND(*top_ptr))
12985     {
12986      RExC_parse++;
12987      vFAIL2("Unexpected binary operator '%c' with no preceding operand", curchar);
12988     }
12989     av_push(stack, newSVuv(curchar));
12990     break;
12991
12992    case '!':
12993     av_push(stack, newSVuv(curchar));
12994     break;
12995
12996    case '(':
12997     if (top_index >= 0) {
12998      top_ptr = av_fetch(stack, top_index, FALSE);
12999      assert(top_ptr);
13000      if (IS_OPERAND(*top_ptr)) {
13001       RExC_parse++;
13002       vFAIL("Unexpected '(' with no preceding operator");
13003      }
13004     }
13005     av_push(stack, newSVuv(curchar));
13006     break;
13007
13008    case ')':
13009    {
13010     SV* lparen;
13011     if (top_index < 1
13012      || ! (current = av_pop(stack))
13013      || ! IS_OPERAND(current)
13014      || ! (lparen = av_pop(stack))
13015      || IS_OPERAND(lparen)
13016      || SvUV(lparen) != '(')
13017     {
13018      SvREFCNT_dec(current);
13019      RExC_parse++;
13020      vFAIL("Unexpected ')'");
13021     }
13022     top_index -= 2;
13023     SvREFCNT_dec_NN(lparen);
13024
13025     /* FALL THROUGH */
13026    }
13027
13028    handle_operand:
13029
13030     /* Here, we have an operand to process, in 'current' */
13031
13032     if (top_index < 0) {    /* Just push if stack is empty */
13033      av_push(stack, current);
13034     }
13035     else {
13036      SV* top = av_pop(stack);
13037      SV *prev = NULL;
13038      char current_operator;
13039
13040      if (IS_OPERAND(top)) {
13041       SvREFCNT_dec_NN(top);
13042       SvREFCNT_dec_NN(current);
13043       vFAIL("Operand with no preceding operator");
13044      }
13045      current_operator = (char) SvUV(top);
13046      switch (current_operator) {
13047       case '(':   /* Push the '(' back on followed by the new
13048          operand */
13049        av_push(stack, top);
13050        av_push(stack, current);
13051        SvREFCNT_inc(top);  /* Counters the '_dec' done
13052             just after the 'break', so
13053             it doesn't get wrongly freed
13054             */
13055        break;
13056
13057       case '!':
13058        _invlist_invert(current);
13059
13060        /* Unlike binary operators, the top of the stack,
13061        * now that this unary one has been popped off, may
13062        * legally be an operator, and we now have operand
13063        * for it. */
13064        top_index--;
13065        SvREFCNT_dec_NN(top);
13066        goto handle_operand;
13067
13068       case '&':
13069        prev = av_pop(stack);
13070        _invlist_intersection(prev,
13071             current,
13072             &current);
13073        av_push(stack, current);
13074        break;
13075
13076       case '|':
13077       case '+':
13078        prev = av_pop(stack);
13079        _invlist_union(prev, current, &current);
13080        av_push(stack, current);
13081        break;
13082
13083       case '-':
13084        prev = av_pop(stack);;
13085        _invlist_subtract(prev, current, &current);
13086        av_push(stack, current);
13087        break;
13088
13089       case '^':   /* The union minus the intersection */
13090       {
13091        SV* i = NULL;
13092        SV* u = NULL;
13093        SV* element;
13094
13095        prev = av_pop(stack);
13096        _invlist_union(prev, current, &u);
13097        _invlist_intersection(prev, current, &i);
13098        /* _invlist_subtract will overwrite current
13099         without freeing what it already contains */
13100        element = current;
13101        _invlist_subtract(u, i, &current);
13102        av_push(stack, current);
13103        SvREFCNT_dec_NN(i);
13104        SvREFCNT_dec_NN(u);
13105        SvREFCNT_dec_NN(element);
13106        break;
13107       }
13108
13109       default:
13110        Perl_croak(aTHX_ "panic: Unexpected item on '(?[ ])' stack");
13111     }
13112     SvREFCNT_dec_NN(top);
13113     SvREFCNT_dec(prev);
13114    }
13115   }
13116
13117   RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
13118  }
13119
13120  if (av_tindex(stack) < 0   /* Was empty */
13121   || ((final = av_pop(stack)) == NULL)
13122   || ! IS_OPERAND(final)
13123   || av_tindex(stack) >= 0)  /* More left on stack */
13124  {
13125   vFAIL("Incomplete expression within '(?[ ])'");
13126  }
13127
13128  /* Here, 'final' is the resultant inversion list from evaluating the
13129  * expression.  Return it if so requested */
13130  if (return_invlist) {
13131   *return_invlist = final;
13132   return END;
13133  }
13134
13135  /* Otherwise generate a resultant node, based on 'final'.  regclass() is
13136  * expecting a string of ranges and individual code points */
13137  invlist_iterinit(final);
13138  result_string = newSVpvs("");
13139  while (invlist_iternext(final, &start, &end)) {
13140   if (start == end) {
13141    Perl_sv_catpvf(aTHX_ result_string, "\\x{%"UVXf"}", start);
13142   }
13143   else {
13144    Perl_sv_catpvf(aTHX_ result_string, "\\x{%"UVXf"}-\\x{%"UVXf"}",
13145              start,          end);
13146   }
13147  }
13148
13149  save_parse = RExC_parse;
13150  RExC_parse = SvPV(result_string, len);
13151  save_end = RExC_end;
13152  RExC_end = RExC_parse + len;
13153
13154  /* We turn off folding around the call, as the class we have constructed
13155  * already has all folding taken into consideration, and we don't want
13156  * regclass() to add to that */
13157  RExC_flags &= ~RXf_PMf_FOLD;
13158  /* regclass() can only return RESTART_UTF8 if multi-char folds are allowed.
13159  */
13160  node = regclass(pRExC_state, flagp,depth+1,
13161      FALSE, /* means parse the whole char class */
13162      FALSE, /* don't allow multi-char folds */
13163      TRUE, /* silence non-portable warnings.  The above may very
13164        well have generated non-portable code points, but
13165        they're valid on this machine */
13166      NULL);
13167  if (!node)
13168   FAIL2("panic: regclass returned NULL to handle_sets, flags=%#"UVxf,
13169      PTR2UV(flagp));
13170  if (save_fold) {
13171   RExC_flags |= RXf_PMf_FOLD;
13172  }
13173  RExC_parse = save_parse + 1;
13174  RExC_end = save_end;
13175  SvREFCNT_dec_NN(final);
13176  SvREFCNT_dec_NN(result_string);
13177
13178  nextchar(pRExC_state);
13179  Set_Node_Length(node, RExC_parse - oregcomp_parse + 1); /* MJD */
13180  return node;
13181 }
13182 #undef IS_OPERAND
13183
13184 /* The names of properties whose definitions are not known at compile time are
13185  * stored in this SV, after a constant heading.  So if the length has been
13186  * changed since initialization, then there is a run-time definition. */
13187 #define HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION                            \
13188           (SvCUR(listsv) != initial_listsv_len)
13189
13190 STATIC regnode *
13191 S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
13192     const bool stop_at_1,  /* Just parse the next thing, don't
13193           look for a full character class */
13194     bool allow_multi_folds,
13195     const bool silence_non_portable,   /* Don't output warnings
13196              about too large
13197              characters */
13198     SV** ret_invlist)  /* Return an inversion list, not a node */
13199 {
13200  /* parse a bracketed class specification.  Most of these will produce an
13201  * ANYOF node; but something like [a] will produce an EXACT node; [aA], an
13202  * EXACTFish node; [[:ascii:]], a POSIXA node; etc.  It is more complex
13203  * under /i with multi-character folds: it will be rewritten following the
13204  * paradigm of this example, where the <multi-fold>s are characters which
13205  * fold to multiple character sequences:
13206  *      /[abc\x{multi-fold1}def\x{multi-fold2}ghi]/i
13207  * gets effectively rewritten as:
13208  *      /(?:\x{multi-fold1}|\x{multi-fold2}|[abcdefghi]/i
13209  * reg() gets called (recursively) on the rewritten version, and this
13210  * function will return what it constructs.  (Actually the <multi-fold>s
13211  * aren't physically removed from the [abcdefghi], it's just that they are
13212  * ignored in the recursion by means of a flag:
13213  * <RExC_in_multi_char_class>.)
13214  *
13215  * ANYOF nodes contain a bit map for the first 256 characters, with the
13216  * corresponding bit set if that character is in the list.  For characters
13217  * above 255, a range list or swash is used.  There are extra bits for \w,
13218  * etc. in locale ANYOFs, as what these match is not determinable at
13219  * compile time
13220  *
13221  * Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs
13222  * to be restarted.  This can only happen if ret_invlist is non-NULL.
13223  */
13224
13225  dVAR;
13226  UV prevvalue = OOB_UNICODE, save_prevvalue = OOB_UNICODE;
13227  IV range = 0;
13228  UV value = OOB_UNICODE, save_value = OOB_UNICODE;
13229  regnode *ret;
13230  STRLEN numlen;
13231  IV namedclass = OOB_NAMEDCLASS;
13232  char *rangebegin = NULL;
13233  bool need_class = 0;
13234  SV *listsv = NULL;
13235  STRLEN initial_listsv_len = 0; /* Kind of a kludge to see if it is more
13236          than just initialized.  */
13237  SV* properties = NULL;    /* Code points that match \p{} \P{} */
13238  SV* posixes = NULL;     /* Code points that match classes like [:word:],
13239        extended beyond the Latin1 range.  These have to
13240        be kept separate from other code points for much
13241        of this function because their handling  is
13242        different under /i, and for most classes under
13243        /d as well */
13244  SV* nposixes = NULL;    /* Similarly for [:^word:].  These are kept
13245        separate for a while from the non-complemented
13246        versions because of complications with /d
13247        matching */
13248  UV element_count = 0;   /* Number of distinct elements in the class.
13249        Optimizations may be possible if this is tiny */
13250  AV * multi_char_matches = NULL; /* Code points that fold to more than one
13251          character; used under /i */
13252  UV n;
13253  char * stop_ptr = RExC_end;    /* where to stop parsing */
13254  const bool skip_white = cBOOL(ret_invlist); /* ignore unescaped white
13255             space? */
13256  const bool strict = cBOOL(ret_invlist); /* Apply strict parsing rules? */
13257
13258  /* Unicode properties are stored in a swash; this holds the current one
13259  * being parsed.  If this swash is the only above-latin1 component of the
13260  * character class, an optimization is to pass it directly on to the
13261  * execution engine.  Otherwise, it is set to NULL to indicate that there
13262  * are other things in the class that have to be dealt with at execution
13263  * time */
13264  SV* swash = NULL;  /* Code points that match \p{} \P{} */
13265
13266  /* Set if a component of this character class is user-defined; just passed
13267  * on to the engine */
13268  bool has_user_defined_property = FALSE;
13269
13270  /* inversion list of code points this node matches only when the target
13271  * string is in UTF-8.  (Because is under /d) */
13272  SV* depends_list = NULL;
13273
13274  /* Inversion list of code points this node matches regardless of things
13275  * like locale, folding, utf8ness of the target string */
13276  SV* cp_list = NULL;
13277
13278  /* Like cp_list, but code points on this list need to be checked for things
13279  * that fold to/from them under /i */
13280  SV* cp_foldable_list = NULL;
13281
13282  /* Like cp_list, but code points on this list are valid only when the
13283  * runtime locale is UTF-8 */
13284  SV* only_utf8_locale_list = NULL;
13285
13286 #ifdef EBCDIC
13287  /* In a range, counts how many 0-2 of the ends of it came from literals,
13288  * not escapes.  Thus we can tell if 'A' was input vs \x{C1} */
13289  UV literal_endpoint = 0;
13290 #endif
13291  bool invert = FALSE;    /* Is this class to be complemented */
13292
13293  bool warn_super = ALWAYS_WARN_SUPER;
13294
13295  regnode * const orig_emit = RExC_emit; /* Save the original RExC_emit in
13296   case we need to change the emitted regop to an EXACT. */
13297  const char * orig_parse = RExC_parse;
13298  const SSize_t orig_size = RExC_size;
13299  bool posixl_matches_all = FALSE; /* Does /l class have both e.g. \W,\w ? */
13300  GET_RE_DEBUG_FLAGS_DECL;
13301
13302  PERL_ARGS_ASSERT_REGCLASS;
13303 #ifndef DEBUGGING
13304  PERL_UNUSED_ARG(depth);
13305 #endif
13306
13307  DEBUG_PARSE("clas");
13308
13309  /* Assume we are going to generate an ANYOF node. */
13310  ret = reganode(pRExC_state, ANYOF, 0);
13311
13312  if (SIZE_ONLY) {
13313   RExC_size += ANYOF_SKIP;
13314   listsv = &PL_sv_undef; /* For code scanners: listsv always non-NULL. */
13315  }
13316  else {
13317   ANYOF_FLAGS(ret) = 0;
13318
13319   RExC_emit += ANYOF_SKIP;
13320   listsv = newSVpvs_flags("# comment\n", SVs_TEMP);
13321   initial_listsv_len = SvCUR(listsv);
13322   SvTEMP_off(listsv); /* Grr, TEMPs and mortals are conflated.  */
13323  }
13324
13325  if (skip_white) {
13326   RExC_parse = regpatws(pRExC_state, RExC_parse,
13327        FALSE /* means don't recognize comments */);
13328  }
13329
13330  if (UCHARAT(RExC_parse) == '^') { /* Complement of range. */
13331   RExC_parse++;
13332   invert = TRUE;
13333   allow_multi_folds = FALSE;
13334   RExC_naughty++;
13335   if (skip_white) {
13336    RExC_parse = regpatws(pRExC_state, RExC_parse,
13337         FALSE /* means don't recognize comments */);
13338   }
13339  }
13340
13341  /* Check that they didn't say [:posix:] instead of [[:posix:]] */
13342  if (!SIZE_ONLY && RExC_parse < RExC_end && POSIXCC(UCHARAT(RExC_parse))) {
13343   const char *s = RExC_parse;
13344   const char  c = *s++;
13345
13346   while (isWORDCHAR(*s))
13347    s++;
13348   if (*s && c == *s && s[1] == ']') {
13349    SAVEFREESV(RExC_rx_sv);
13350    ckWARN3reg(s+2,
13351      "POSIX syntax [%c %c] belongs inside character classes",
13352      c, c);
13353    (void)ReREFCNT_inc(RExC_rx_sv);
13354   }
13355  }
13356
13357  /* If the caller wants us to just parse a single element, accomplish this
13358  * by faking the loop ending condition */
13359  if (stop_at_1 && RExC_end > RExC_parse) {
13360   stop_ptr = RExC_parse + 1;
13361  }
13362
13363  /* allow 1st char to be ']' (allowing it to be '-' is dealt with later) */
13364  if (UCHARAT(RExC_parse) == ']')
13365   goto charclassloop;
13366
13367 parseit:
13368  while (1) {
13369   if  (RExC_parse >= stop_ptr) {
13370    break;
13371   }
13372
13373   if (skip_white) {
13374    RExC_parse = regpatws(pRExC_state, RExC_parse,
13375         FALSE /* means don't recognize comments */);
13376   }
13377
13378   if  (UCHARAT(RExC_parse) == ']') {
13379    break;
13380   }
13381
13382  charclassloop:
13383
13384   namedclass = OOB_NAMEDCLASS; /* initialize as illegal */
13385   save_value = value;
13386   save_prevvalue = prevvalue;
13387
13388   if (!range) {
13389    rangebegin = RExC_parse;
13390    element_count++;
13391   }
13392   if (UTF) {
13393    value = utf8n_to_uvchr((U8*)RExC_parse,
13394         RExC_end - RExC_parse,
13395         &numlen, UTF8_ALLOW_DEFAULT);
13396    RExC_parse += numlen;
13397   }
13398   else
13399    value = UCHARAT(RExC_parse++);
13400
13401   if (value == '['
13402    && RExC_parse < RExC_end
13403    && POSIXCC(UCHARAT(RExC_parse)))
13404   {
13405    namedclass = regpposixcc(pRExC_state, value, strict);
13406   }
13407   else if (value == '\\') {
13408    if (UTF) {
13409     value = utf8n_to_uvchr((U8*)RExC_parse,
13410         RExC_end - RExC_parse,
13411         &numlen, UTF8_ALLOW_DEFAULT);
13412     RExC_parse += numlen;
13413    }
13414    else
13415     value = UCHARAT(RExC_parse++);
13416
13417    /* Some compilers cannot handle switching on 64-bit integer
13418    * values, therefore value cannot be an UV.  Yes, this will
13419    * be a problem later if we want switch on Unicode.
13420    * A similar issue a little bit later when switching on
13421    * namedclass. --jhi */
13422
13423    /* If the \ is escaping white space when white space is being
13424    * skipped, it means that that white space is wanted literally, and
13425    * is already in 'value'.  Otherwise, need to translate the escape
13426    * into what it signifies. */
13427    if (! skip_white || ! is_PATWS_cp(value)) switch ((I32)value) {
13428
13429    case 'w': namedclass = ANYOF_WORDCHAR; break;
13430    case 'W': namedclass = ANYOF_NWORDCHAR; break;
13431    case 's': namedclass = ANYOF_SPACE; break;
13432    case 'S': namedclass = ANYOF_NSPACE; break;
13433    case 'd': namedclass = ANYOF_DIGIT; break;
13434    case 'D': namedclass = ANYOF_NDIGIT; break;
13435    case 'v': namedclass = ANYOF_VERTWS; break;
13436    case 'V': namedclass = ANYOF_NVERTWS; break;
13437    case 'h': namedclass = ANYOF_HORIZWS; break;
13438    case 'H': namedclass = ANYOF_NHORIZWS; break;
13439    case 'N':  /* Handle \N{NAME} in class */
13440     {
13441      /* We only pay attention to the first char of
13442      multichar strings being returned. I kinda wonder
13443      if this makes sense as it does change the behaviour
13444      from earlier versions, OTOH that behaviour was broken
13445      as well. */
13446      if (! grok_bslash_N(pRExC_state, NULL, &value, flagp, depth,
13447          TRUE, /* => charclass */
13448          strict))
13449      {
13450       if (*flagp & RESTART_UTF8)
13451        FAIL("panic: grok_bslash_N set RESTART_UTF8");
13452       goto parseit;
13453      }
13454     }
13455     break;
13456    case 'p':
13457    case 'P':
13458     {
13459     char *e;
13460
13461     /* We will handle any undefined properties ourselves */
13462     U8 swash_init_flags = _CORE_SWASH_INIT_RETURN_IF_UNDEF
13463          /* And we actually would prefer to get
13464           * the straight inversion list of the
13465           * swash, since we will be accessing it
13466           * anyway, to save a little time */
13467          |_CORE_SWASH_INIT_ACCEPT_INVLIST;
13468
13469     if (RExC_parse >= RExC_end)
13470      vFAIL2("Empty \\%c{}", (U8)value);
13471     if (*RExC_parse == '{') {
13472      const U8 c = (U8)value;
13473      e = strchr(RExC_parse++, '}');
13474      if (!e)
13475       vFAIL2("Missing right brace on \\%c{}", c);
13476      while (isSPACE(UCHARAT(RExC_parse)))
13477       RExC_parse++;
13478      if (e == RExC_parse)
13479       vFAIL2("Empty \\%c{}", c);
13480      n = e - RExC_parse;
13481      while (isSPACE(UCHARAT(RExC_parse + n - 1)))
13482       n--;
13483     }
13484     else {
13485      e = RExC_parse;
13486      n = 1;
13487     }
13488     if (!SIZE_ONLY) {
13489      SV* invlist;
13490      char* formatted;
13491      char* name;
13492
13493      if (UCHARAT(RExC_parse) == '^') {
13494       RExC_parse++;
13495       n--;
13496       /* toggle.  (The rhs xor gets the single bit that
13497       * differs between P and p; the other xor inverts just
13498       * that bit) */
13499       value ^= 'P' ^ 'p';
13500
13501       while (isSPACE(UCHARAT(RExC_parse))) {
13502        RExC_parse++;
13503        n--;
13504       }
13505      }
13506      /* Try to get the definition of the property into
13507      * <invlist>.  If /i is in effect, the effective property
13508      * will have its name be <__NAME_i>.  The design is
13509      * discussed in commit
13510      * 2f833f5208e26b208886e51e09e2c072b5eabb46 */
13511      formatted = Perl_form(aTHX_
13512           "%s%.*s%s\n",
13513           (FOLD) ? "__" : "",
13514           (int)n,
13515           RExC_parse,
13516           (FOLD) ? "_i" : ""
13517         );
13518      name = savepvn(formatted, strlen(formatted));
13519
13520      /* Look up the property name, and get its swash and
13521      * inversion list, if the property is found  */
13522      if (swash) {
13523       SvREFCNT_dec_NN(swash);
13524      }
13525      swash = _core_swash_init("utf8", name, &PL_sv_undef,
13526            1, /* binary */
13527            0, /* not tr/// */
13528            NULL, /* No inversion list */
13529            &swash_init_flags
13530            );
13531      if (! swash || ! (invlist = _get_swash_invlist(swash))) {
13532       if (swash) {
13533        SvREFCNT_dec_NN(swash);
13534        swash = NULL;
13535       }
13536
13537       /* Here didn't find it.  It could be a user-defined
13538       * property that will be available at run-time.  If we
13539       * accept only compile-time properties, is an error;
13540       * otherwise add it to the list for run-time look up */
13541       if (ret_invlist) {
13542        RExC_parse = e + 1;
13543        vFAIL2utf8f(
13544         "Property '%"UTF8f"' is unknown",
13545         UTF8fARG(UTF, n, name));
13546       }
13547       Perl_sv_catpvf(aTHX_ listsv, "%cutf8::%"UTF8f"\n",
13548           (value == 'p' ? '+' : '!'),
13549           UTF8fARG(UTF, n, name));
13550       has_user_defined_property = TRUE;
13551
13552       /* We don't know yet, so have to assume that the
13553       * property could match something in the Latin1 range,
13554       * hence something that isn't utf8.  Note that this
13555       * would cause things in <depends_list> to match
13556       * inappropriately, except that any \p{}, including
13557       * this one forces Unicode semantics, which means there
13558       * is no <depends_list> */
13559       ANYOF_FLAGS(ret) |= ANYOF_NONBITMAP_NON_UTF8;
13560      }
13561      else {
13562
13563       /* Here, did get the swash and its inversion list.  If
13564       * the swash is from a user-defined property, then this
13565       * whole character class should be regarded as such */
13566       if (swash_init_flags
13567        & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY)
13568       {
13569        has_user_defined_property = TRUE;
13570       }
13571       else if
13572        /* We warn on matching an above-Unicode code point
13573        * if the match would return true, except don't
13574        * warn for \p{All}, which has exactly one element
13575        * = 0 */
13576        (_invlist_contains_cp(invlist, 0x110000)
13577         && (! (_invlist_len(invlist) == 1
13578          && *invlist_array(invlist) == 0)))
13579       {
13580        warn_super = TRUE;
13581       }
13582
13583
13584       /* Invert if asking for the complement */
13585       if (value == 'P') {
13586        _invlist_union_complement_2nd(properties,
13587               invlist,
13588               &properties);
13589
13590        /* The swash can't be used as-is, because we've
13591        * inverted things; delay removing it to here after
13592        * have copied its invlist above */
13593        SvREFCNT_dec_NN(swash);
13594        swash = NULL;
13595       }
13596       else {
13597        _invlist_union(properties, invlist, &properties);
13598       }
13599      }
13600      Safefree(name);
13601     }
13602     RExC_parse = e + 1;
13603     namedclass = ANYOF_UNIPROP;  /* no official name, but it's
13604             named */
13605
13606     /* \p means they want Unicode semantics */
13607     RExC_uni_semantics = 1;
13608     }
13609     break;
13610    case 'n': value = '\n';   break;
13611    case 'r': value = '\r';   break;
13612    case 't': value = '\t';   break;
13613    case 'f': value = '\f';   break;
13614    case 'b': value = '\b';   break;
13615    case 'e': value = ASCII_TO_NATIVE('\033');break;
13616    case 'a': value = '\a';                   break;
13617    case 'o':
13618     RExC_parse--; /* function expects to be pointed at the 'o' */
13619     {
13620      const char* error_msg;
13621      bool valid = grok_bslash_o(&RExC_parse,
13622            &value,
13623            &error_msg,
13624            SIZE_ONLY,   /* warnings in pass
13625                1 only */
13626            strict,
13627            silence_non_portable,
13628            UTF);
13629      if (! valid) {
13630       vFAIL(error_msg);
13631      }
13632     }
13633     if (PL_encoding && value < 0x100) {
13634      goto recode_encoding;
13635     }
13636     break;
13637    case 'x':
13638     RExC_parse--; /* function expects to be pointed at the 'x' */
13639     {
13640      const char* error_msg;
13641      bool valid = grok_bslash_x(&RExC_parse,
13642            &value,
13643            &error_msg,
13644            TRUE, /* Output warnings */
13645            strict,
13646            silence_non_portable,
13647            UTF);
13648      if (! valid) {
13649       vFAIL(error_msg);
13650      }
13651     }
13652     if (PL_encoding && value < 0x100)
13653      goto recode_encoding;
13654     break;
13655    case 'c':
13656     value = grok_bslash_c(*RExC_parse++, SIZE_ONLY);
13657     break;
13658    case '0': case '1': case '2': case '3': case '4':
13659    case '5': case '6': case '7':
13660     {
13661      /* Take 1-3 octal digits */
13662      I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
13663      numlen = (strict) ? 4 : 3;
13664      value = grok_oct(--RExC_parse, &numlen, &flags, NULL);
13665      RExC_parse += numlen;
13666      if (numlen != 3) {
13667       if (strict) {
13668        RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
13669        vFAIL("Need exactly 3 octal digits");
13670       }
13671       else if (! SIZE_ONLY /* like \08, \178 */
13672         && numlen < 3
13673         && RExC_parse < RExC_end
13674         && isDIGIT(*RExC_parse)
13675         && ckWARN(WARN_REGEXP))
13676       {
13677        SAVEFREESV(RExC_rx_sv);
13678        reg_warn_non_literal_string(
13679         RExC_parse + 1,
13680         form_short_octal_warning(RExC_parse, numlen));
13681        (void)ReREFCNT_inc(RExC_rx_sv);
13682       }
13683      }
13684      if (PL_encoding && value < 0x100)
13685       goto recode_encoding;
13686      break;
13687     }
13688    recode_encoding:
13689     if (! RExC_override_recoding) {
13690      SV* enc = PL_encoding;
13691      value = reg_recode((const char)(U8)value, &enc);
13692      if (!enc) {
13693       if (strict) {
13694        vFAIL("Invalid escape in the specified encoding");
13695       }
13696       else if (SIZE_ONLY) {
13697        ckWARNreg(RExC_parse,
13698         "Invalid escape in the specified encoding");
13699       }
13700      }
13701      break;
13702     }
13703    default:
13704     /* Allow \_ to not give an error */
13705     if (!SIZE_ONLY && isWORDCHAR(value) && value != '_') {
13706      if (strict) {
13707       vFAIL2("Unrecognized escape \\%c in character class",
13708        (int)value);
13709      }
13710      else {
13711       SAVEFREESV(RExC_rx_sv);
13712       ckWARN2reg(RExC_parse,
13713        "Unrecognized escape \\%c in character class passed through",
13714        (int)value);
13715       (void)ReREFCNT_inc(RExC_rx_sv);
13716      }
13717     }
13718     break;
13719    }   /* End of switch on char following backslash */
13720   } /* end of handling backslash escape sequences */
13721 #ifdef EBCDIC
13722   else
13723    literal_endpoint++;
13724 #endif
13725
13726   /* Here, we have the current token in 'value' */
13727
13728   if (namedclass > OOB_NAMEDCLASS) { /* this is a named class \blah */
13729    U8 classnum;
13730
13731    /* a bad range like a-\d, a-[:digit:].  The '-' is taken as a
13732    * literal, as is the character that began the false range, i.e.
13733    * the 'a' in the examples */
13734    if (range) {
13735     if (!SIZE_ONLY) {
13736      const int w = (RExC_parse >= rangebegin)
13737         ? RExC_parse - rangebegin
13738         : 0;
13739      if (strict) {
13740       vFAIL2utf8f(
13741        "False [] range \"%"UTF8f"\"",
13742        UTF8fARG(UTF, w, rangebegin));
13743      }
13744      else {
13745       SAVEFREESV(RExC_rx_sv); /* in case of fatal warnings */
13746       ckWARN2reg(RExC_parse,
13747        "False [] range \"%"UTF8f"\"",
13748        UTF8fARG(UTF, w, rangebegin));
13749       (void)ReREFCNT_inc(RExC_rx_sv);
13750       cp_list = add_cp_to_invlist(cp_list, '-');
13751       cp_foldable_list = add_cp_to_invlist(cp_foldable_list,
13752                prevvalue);
13753      }
13754     }
13755
13756     range = 0; /* this was not a true range */
13757     element_count += 2; /* So counts for three values */
13758    }
13759
13760    classnum = namedclass_to_classnum(namedclass);
13761
13762    if (LOC && namedclass < ANYOF_POSIXL_MAX
13763 #ifndef HAS_ISASCII
13764     && classnum != _CC_ASCII
13765 #endif
13766    ) {
13767     /* What the Posix classes (like \w, [:space:]) match in locale
13768     * isn't knowable under locale until actual match time.  Room
13769     * must be reserved (one time per outer bracketed class) to
13770     * store such classes.  The space will contain a bit for each
13771     * named class that is to be matched against.  This isn't
13772     * needed for \p{} and pseudo-classes, as they are not affected
13773     * by locale, and hence are dealt with separately */
13774     if (! need_class) {
13775      need_class = 1;
13776      if (SIZE_ONLY) {
13777       RExC_size += ANYOF_POSIXL_SKIP - ANYOF_SKIP;
13778      }
13779      else {
13780       RExC_emit += ANYOF_POSIXL_SKIP - ANYOF_SKIP;
13781      }
13782      ANYOF_FLAGS(ret) |= ANYOF_POSIXL;
13783      ANYOF_POSIXL_ZERO(ret);
13784     }
13785
13786     /* See if it already matches the complement of this POSIX
13787     * class */
13788     if ((ANYOF_FLAGS(ret) & ANYOF_POSIXL)
13789      && ANYOF_POSIXL_TEST(ret, namedclass + ((namedclass % 2)
13790                ? -1
13791                : 1)))
13792     {
13793      posixl_matches_all = TRUE;
13794      break;  /* No need to continue.  Since it matches both
13795        e.g., \w and \W, it matches everything, and the
13796        bracketed class can be optimized into qr/./s */
13797     }
13798
13799     /* Add this class to those that should be checked at runtime */
13800     ANYOF_POSIXL_SET(ret, namedclass);
13801
13802     /* The above-Latin1 characters are not subject to locale rules.
13803     * Just add them, in the second pass, to the
13804     * unconditionally-matched list */
13805     if (! SIZE_ONLY) {
13806      SV* scratch_list = NULL;
13807
13808      /* Get the list of the above-Latin1 code points this
13809      * matches */
13810      _invlist_intersection_maybe_complement_2nd(PL_AboveLatin1,
13811           PL_XPosix_ptrs[classnum],
13812
13813           /* Odd numbers are complements, like
13814           * NDIGIT, NASCII, ... */
13815           namedclass % 2 != 0,
13816           &scratch_list);
13817      /* Checking if 'cp_list' is NULL first saves an extra
13818      * clone.  Its reference count will be decremented at the
13819      * next union, etc, or if this is the only instance, at the
13820      * end of the routine */
13821      if (! cp_list) {
13822       cp_list = scratch_list;
13823      }
13824      else {
13825       _invlist_union(cp_list, scratch_list, &cp_list);
13826       SvREFCNT_dec_NN(scratch_list);
13827      }
13828      continue;   /* Go get next character */
13829     }
13830    }
13831    else if (! SIZE_ONLY) {
13832
13833     /* Here, not in pass1 (in that pass we skip calculating the
13834     * contents of this class), and is /l, or is a POSIX class for
13835     * which /l doesn't matter (or is a Unicode property, which is
13836     * skipped here). */
13837     if (namedclass >= ANYOF_POSIXL_MAX) {  /* If a special class */
13838      if (namedclass != ANYOF_UNIPROP) { /* UNIPROP = \p and \P */
13839
13840       /* Here, should be \h, \H, \v, or \V.  None of /d, /i
13841       * nor /l make a difference in what these match,
13842       * therefore we just add what they match to cp_list. */
13843       if (classnum != _CC_VERTSPACE) {
13844        assert(   namedclass == ANYOF_HORIZWS
13845         || namedclass == ANYOF_NHORIZWS);
13846
13847        /* It turns out that \h is just a synonym for
13848        * XPosixBlank */
13849        classnum = _CC_BLANK;
13850       }
13851
13852       _invlist_union_maybe_complement_2nd(
13853         cp_list,
13854         PL_XPosix_ptrs[classnum],
13855         namedclass % 2 != 0,    /* Complement if odd
13856               (NHORIZWS, NVERTWS)
13857               */
13858         &cp_list);
13859      }
13860     }
13861     else {  /* Garden variety class.  If is NASCII, NDIGIT, ...
13862       complement and use nposixes */
13863      SV** posixes_ptr = namedclass % 2 == 0
13864          ? &posixes
13865          : &nposixes;
13866      SV** source_ptr = &PL_XPosix_ptrs[classnum];
13867      _invlist_union_maybe_complement_2nd(
13868              *posixes_ptr,
13869              *source_ptr,
13870              namedclass % 2 != 0,
13871              posixes_ptr);
13872     }
13873     continue;   /* Go get next character */
13874    }
13875   } /* end of namedclass \blah */
13876
13877   /* Here, we have a single value.  If 'range' is set, it is the ending
13878   * of a range--check its validity.  Later, we will handle each
13879   * individual code point in the range.  If 'range' isn't set, this
13880   * could be the beginning of a range, so check for that by looking
13881   * ahead to see if the next real character to be processed is the range
13882   * indicator--the minus sign */
13883
13884   if (skip_white) {
13885    RExC_parse = regpatws(pRExC_state, RExC_parse,
13886         FALSE /* means don't recognize comments */);
13887   }
13888
13889   if (range) {
13890    if (prevvalue > value) /* b-a */ {
13891     const int w = RExC_parse - rangebegin;
13892     vFAIL2utf8f(
13893      "Invalid [] range \"%"UTF8f"\"",
13894      UTF8fARG(UTF, w, rangebegin));
13895     range = 0; /* not a valid range */
13896    }
13897   }
13898   else {
13899    prevvalue = value; /* save the beginning of the potential range */
13900    if (! stop_at_1     /* Can't be a range if parsing just one thing */
13901     && *RExC_parse == '-')
13902    {
13903     char* next_char_ptr = RExC_parse + 1;
13904     if (skip_white) {   /* Get the next real char after the '-' */
13905      next_char_ptr = regpatws(pRExC_state,
13906            RExC_parse + 1,
13907            FALSE); /* means don't recognize
13908               comments */
13909     }
13910
13911     /* If the '-' is at the end of the class (just before the ']',
13912     * it is a literal minus; otherwise it is a range */
13913     if (next_char_ptr < RExC_end && *next_char_ptr != ']') {
13914      RExC_parse = next_char_ptr;
13915
13916      /* a bad range like \w-, [:word:]- ? */
13917      if (namedclass > OOB_NAMEDCLASS) {
13918       if (strict || ckWARN(WARN_REGEXP)) {
13919        const int w =
13920         RExC_parse >= rangebegin ?
13921         RExC_parse - rangebegin : 0;
13922        if (strict) {
13923         vFAIL4("False [] range \"%*.*s\"",
13924          w, w, rangebegin);
13925        }
13926        else {
13927         vWARN4(RExC_parse,
13928          "False [] range \"%*.*s\"",
13929          w, w, rangebegin);
13930        }
13931       }
13932       if (!SIZE_ONLY) {
13933        cp_list = add_cp_to_invlist(cp_list, '-');
13934       }
13935       element_count++;
13936      } else
13937       range = 1; /* yeah, it's a range! */
13938      continue; /* but do it the next time */
13939     }
13940    }
13941   }
13942
13943   /* Here, <prevvalue> is the beginning of the range, if any; or <value>
13944   * if not */
13945
13946   /* non-Latin1 code point implies unicode semantics.  Must be set in
13947   * pass1 so is there for the whole of pass 2 */
13948   if (value > 255) {
13949    RExC_uni_semantics = 1;
13950   }
13951
13952   /* Ready to process either the single value, or the completed range.
13953   * For single-valued non-inverted ranges, we consider the possibility
13954   * of multi-char folds.  (We made a conscious decision to not do this
13955   * for the other cases because it can often lead to non-intuitive
13956   * results.  For example, you have the peculiar case that:
13957   *  "s s" =~ /^[^\xDF]+$/i => Y
13958   *  "ss"  =~ /^[^\xDF]+$/i => N
13959   *
13960   * See [perl #89750] */
13961   if (FOLD && allow_multi_folds && value == prevvalue) {
13962    if (value == LATIN_SMALL_LETTER_SHARP_S
13963     || (value > 255 && _invlist_contains_cp(PL_HasMultiCharFold,
13964               value)))
13965    {
13966     /* Here <value> is indeed a multi-char fold.  Get what it is */
13967
13968     U8 foldbuf[UTF8_MAXBYTES_CASE];
13969     STRLEN foldlen;
13970
13971     UV folded = _to_uni_fold_flags(
13972         value,
13973         foldbuf,
13974         &foldlen,
13975         FOLD_FLAGS_FULL | (ASCII_FOLD_RESTRICTED
13976             ? FOLD_FLAGS_NOMIX_ASCII
13977             : 0)
13978         );
13979
13980     /* Here, <folded> should be the first character of the
13981     * multi-char fold of <value>, with <foldbuf> containing the
13982     * whole thing.  But, if this fold is not allowed (because of
13983     * the flags), <fold> will be the same as <value>, and should
13984     * be processed like any other character, so skip the special
13985     * handling */
13986     if (folded != value) {
13987
13988      /* Skip if we are recursed, currently parsing the class
13989      * again.  Otherwise add this character to the list of
13990      * multi-char folds. */
13991      if (! RExC_in_multi_char_class) {
13992       AV** this_array_ptr;
13993       AV* this_array;
13994       STRLEN cp_count = utf8_length(foldbuf,
13995              foldbuf + foldlen);
13996       SV* multi_fold = sv_2mortal(newSVpvn("", 0));
13997
13998       Perl_sv_catpvf(aTHX_ multi_fold, "\\x{%"UVXf"}", value);
13999
14000
14001       if (! multi_char_matches) {
14002        multi_char_matches = newAV();
14003       }
14004
14005       /* <multi_char_matches> is actually an array of arrays.
14006       * There will be one or two top-level elements: [2],
14007       * and/or [3].  The [2] element is an array, each
14008       * element thereof is a character which folds to TWO
14009       * characters; [3] is for folds to THREE characters.
14010       * (Unicode guarantees a maximum of 3 characters in any
14011       * fold.)  When we rewrite the character class below,
14012       * we will do so such that the longest folds are
14013       * written first, so that it prefers the longest
14014       * matching strings first.  This is done even if it
14015       * turns out that any quantifier is non-greedy, out of
14016       * programmer laziness.  Tom Christiansen has agreed
14017       * that this is ok.  This makes the test for the
14018       * ligature 'ffi' come before the test for 'ff' */
14019       if (av_exists(multi_char_matches, cp_count)) {
14020        this_array_ptr = (AV**) av_fetch(multi_char_matches,
14021                cp_count, FALSE);
14022        this_array = *this_array_ptr;
14023       }
14024       else {
14025        this_array = newAV();
14026        av_store(multi_char_matches, cp_count,
14027          (SV*) this_array);
14028       }
14029       av_push(this_array, multi_fold);
14030      }
14031
14032      /* This element should not be processed further in this
14033      * class */
14034      element_count--;
14035      value = save_value;
14036      prevvalue = save_prevvalue;
14037      continue;
14038     }
14039    }
14040   }
14041
14042   /* Deal with this element of the class */
14043   if (! SIZE_ONLY) {
14044 #ifndef EBCDIC
14045    cp_foldable_list = _add_range_to_invlist(cp_foldable_list,
14046              prevvalue, value);
14047 #else
14048    SV* this_range = _new_invlist(1);
14049    _append_range_to_invlist(this_range, prevvalue, value);
14050
14051    /* In EBCDIC, the ranges 'A-Z' and 'a-z' are each not contiguous.
14052    * If this range was specified using something like 'i-j', we want
14053    * to include only the 'i' and the 'j', and not anything in
14054    * between, so exclude non-ASCII, non-alphabetics from it.
14055    * However, if the range was specified with something like
14056    * [\x89-\x91] or [\x89-j], all code points within it should be
14057    * included.  literal_endpoint==2 means both ends of the range used
14058    * a literal character, not \x{foo} */
14059    if (literal_endpoint == 2
14060     && ((prevvalue >= 'a' && value <= 'z')
14061      || (prevvalue >= 'A' && value <= 'Z')))
14062    {
14063     _invlist_intersection(this_range, PL_ASCII,
14064          &this_range);
14065
14066     /* Since this above only contains ascii, the intersection of it
14067     * with anything will still yield only ascii */
14068     _invlist_intersection(this_range, PL_XPosix_ptrs[_CC_ALPHA],
14069          &this_range);
14070    }
14071    _invlist_union(cp_foldable_list, this_range, &cp_foldable_list);
14072    literal_endpoint = 0;
14073 #endif
14074   }
14075
14076   range = 0; /* this range (if it was one) is done now */
14077  } /* End of loop through all the text within the brackets */
14078
14079  /* If anything in the class expands to more than one character, we have to
14080  * deal with them by building up a substitute parse string, and recursively
14081  * calling reg() on it, instead of proceeding */
14082  if (multi_char_matches) {
14083   SV * substitute_parse = newSVpvn_flags("?:", 2, SVs_TEMP);
14084   I32 cp_count;
14085   STRLEN len;
14086   char *save_end = RExC_end;
14087   char *save_parse = RExC_parse;
14088   bool first_time = TRUE;     /* First multi-char occurrence doesn't get
14089          a "|" */
14090   I32 reg_flags;
14091
14092   assert(! invert);
14093 #if 0   /* Have decided not to deal with multi-char folds in inverted classes,
14094   because too confusing */
14095   if (invert) {
14096    sv_catpv(substitute_parse, "(?:");
14097   }
14098 #endif
14099
14100   /* Look at the longest folds first */
14101   for (cp_count = av_tindex(multi_char_matches); cp_count > 0; cp_count--) {
14102
14103    if (av_exists(multi_char_matches, cp_count)) {
14104     AV** this_array_ptr;
14105     SV* this_sequence;
14106
14107     this_array_ptr = (AV**) av_fetch(multi_char_matches,
14108             cp_count, FALSE);
14109     while ((this_sequence = av_pop(*this_array_ptr)) !=
14110                 &PL_sv_undef)
14111     {
14112      if (! first_time) {
14113       sv_catpv(substitute_parse, "|");
14114      }
14115      first_time = FALSE;
14116
14117      sv_catpv(substitute_parse, SvPVX(this_sequence));
14118     }
14119    }
14120   }
14121
14122   /* If the character class contains anything else besides these
14123   * multi-character folds, have to include it in recursive parsing */
14124   if (element_count) {
14125    sv_catpv(substitute_parse, "|[");
14126    sv_catpvn(substitute_parse, orig_parse, RExC_parse - orig_parse);
14127    sv_catpv(substitute_parse, "]");
14128   }
14129
14130   sv_catpv(substitute_parse, ")");
14131 #if 0
14132   if (invert) {
14133    /* This is a way to get the parse to skip forward a whole named
14134    * sequence instead of matching the 2nd character when it fails the
14135    * first */
14136    sv_catpv(substitute_parse, "(*THEN)(*SKIP)(*FAIL)|.)");
14137   }
14138 #endif
14139
14140   RExC_parse = SvPV(substitute_parse, len);
14141   RExC_end = RExC_parse + len;
14142   RExC_in_multi_char_class = 1;
14143   RExC_emit = (regnode *)orig_emit;
14144
14145   ret = reg(pRExC_state, 1, &reg_flags, depth+1);
14146
14147   *flagp |= reg_flags&(HASWIDTH|SIMPLE|SPSTART|POSTPONED|RESTART_UTF8);
14148
14149   RExC_parse = save_parse;
14150   RExC_end = save_end;
14151   RExC_in_multi_char_class = 0;
14152   SvREFCNT_dec_NN(multi_char_matches);
14153   return ret;
14154  }
14155
14156  /* Here, we've gone through the entire class and dealt with multi-char
14157  * folds.  We are now in a position that we can do some checks to see if we
14158  * can optimize this ANYOF node into a simpler one, even in Pass 1.
14159  * Currently we only do two checks:
14160  * 1) is in the unlikely event that the user has specified both, eg. \w and
14161  *    \W under /l, then the class matches everything.  (This optimization
14162  *    is done only to make the optimizer code run later work.)
14163  * 2) if the character class contains only a single element (including a
14164  *    single range), we see if there is an equivalent node for it.
14165  * Other checks are possible */
14166  if (! ret_invlist   /* Can't optimize if returning the constructed
14167       inversion list */
14168   && (UNLIKELY(posixl_matches_all) || element_count == 1))
14169  {
14170   U8 op = END;
14171   U8 arg = 0;
14172
14173   if (UNLIKELY(posixl_matches_all)) {
14174    op = SANY;
14175   }
14176   else if (namedclass > OOB_NAMEDCLASS) { /* this is a named class, like
14177             \w or [:digit:] or \p{foo}
14178             */
14179
14180    /* All named classes are mapped into POSIXish nodes, with its FLAG
14181    * argument giving which class it is */
14182    switch ((I32)namedclass) {
14183     case ANYOF_UNIPROP:
14184      break;
14185
14186     /* These don't depend on the charset modifiers.  They always
14187     * match under /u rules */
14188     case ANYOF_NHORIZWS:
14189     case ANYOF_HORIZWS:
14190      namedclass = ANYOF_BLANK + namedclass - ANYOF_HORIZWS;
14191      /* FALLTHROUGH */
14192
14193     case ANYOF_NVERTWS:
14194     case ANYOF_VERTWS:
14195      op = POSIXU;
14196      goto join_posix;
14197
14198     /* The actual POSIXish node for all the rest depends on the
14199     * charset modifier.  The ones in the first set depend only on
14200     * ASCII or, if available on this platform, locale */
14201     case ANYOF_ASCII:
14202     case ANYOF_NASCII:
14203 #ifdef HAS_ISASCII
14204      op = (LOC) ? POSIXL : POSIXA;
14205 #else
14206      op = POSIXA;
14207 #endif
14208      goto join_posix;
14209
14210     case ANYOF_NCASED:
14211     case ANYOF_LOWER:
14212     case ANYOF_NLOWER:
14213     case ANYOF_UPPER:
14214     case ANYOF_NUPPER:
14215      /* under /a could be alpha */
14216      if (FOLD) {
14217       if (ASCII_RESTRICTED) {
14218        namedclass = ANYOF_ALPHA + (namedclass % 2);
14219       }
14220       else if (! LOC) {
14221        break;
14222       }
14223      }
14224      /* FALLTHROUGH */
14225
14226     /* The rest have more possibilities depending on the charset.
14227     * We take advantage of the enum ordering of the charset
14228     * modifiers to get the exact node type, */
14229     default:
14230      op = POSIXD + get_regex_charset(RExC_flags);
14231      if (op > POSIXA) { /* /aa is same as /a */
14232       op = POSIXA;
14233      }
14234
14235     join_posix:
14236      /* The odd numbered ones are the complements of the
14237      * next-lower even number one */
14238      if (namedclass % 2 == 1) {
14239       invert = ! invert;
14240       namedclass--;
14241      }
14242      arg = namedclass_to_classnum(namedclass);
14243      break;
14244    }
14245   }
14246   else if (value == prevvalue) {
14247
14248    /* Here, the class consists of just a single code point */
14249
14250    if (invert) {
14251     if (! LOC && value == '\n') {
14252      op = REG_ANY; /* Optimize [^\n] */
14253      *flagp |= HASWIDTH|SIMPLE;
14254      RExC_naughty++;
14255     }
14256    }
14257    else if (value < 256 || UTF) {
14258
14259     /* Optimize a single value into an EXACTish node, but not if it
14260     * would require converting the pattern to UTF-8. */
14261     op = compute_EXACTish(pRExC_state);
14262    }
14263   } /* Otherwise is a range */
14264   else if (! LOC) {   /* locale could vary these */
14265    if (prevvalue == '0') {
14266     if (value == '9') {
14267      arg = _CC_DIGIT;
14268      op = POSIXA;
14269     }
14270    }
14271   }
14272
14273   /* Here, we have changed <op> away from its initial value iff we found
14274   * an optimization */
14275   if (op != END) {
14276
14277    /* Throw away this ANYOF regnode, and emit the calculated one,
14278    * which should correspond to the beginning, not current, state of
14279    * the parse */
14280    const char * cur_parse = RExC_parse;
14281    RExC_parse = (char *)orig_parse;
14282    if ( SIZE_ONLY) {
14283     if (! LOC) {
14284
14285      /* To get locale nodes to not use the full ANYOF size would
14286      * require moving the code above that writes the portions
14287      * of it that aren't in other nodes to after this point.
14288      * e.g.  ANYOF_POSIXL_SET */
14289      RExC_size = orig_size;
14290     }
14291    }
14292    else {
14293     RExC_emit = (regnode *)orig_emit;
14294     if (PL_regkind[op] == POSIXD) {
14295      if (op == POSIXL) {
14296       RExC_contains_locale = 1;
14297      }
14298      if (invert) {
14299       op += NPOSIXD - POSIXD;
14300      }
14301     }
14302    }
14303
14304    ret = reg_node(pRExC_state, op);
14305
14306    if (PL_regkind[op] == POSIXD || PL_regkind[op] == NPOSIXD) {
14307     if (! SIZE_ONLY) {
14308      FLAGS(ret) = arg;
14309     }
14310     *flagp |= HASWIDTH|SIMPLE;
14311    }
14312    else if (PL_regkind[op] == EXACT) {
14313     alloc_maybe_populate_EXACT(pRExC_state, ret, flagp, 0, value,
14314           TRUE /* downgradable to EXACT */
14315           );
14316    }
14317
14318    RExC_parse = (char *) cur_parse;
14319
14320    SvREFCNT_dec(posixes);
14321    SvREFCNT_dec(nposixes);
14322    SvREFCNT_dec(cp_list);
14323    SvREFCNT_dec(cp_foldable_list);
14324    return ret;
14325   }
14326  }
14327
14328  if (SIZE_ONLY)
14329   return ret;
14330  /****** !SIZE_ONLY (Pass 2) AFTER HERE *********/
14331
14332  /* If folding, we calculate all characters that could fold to or from the
14333  * ones already on the list */
14334  if (cp_foldable_list) {
14335   if (FOLD) {
14336    UV start, end; /* End points of code point ranges */
14337
14338    SV* fold_intersection = NULL;
14339    SV** use_list;
14340
14341    /* Our calculated list will be for Unicode rules.  For locale
14342    * matching, we have to keep a separate list that is consulted at
14343    * runtime only when the locale indicates Unicode rules.  For
14344    * non-locale, we just use to the general list */
14345    if (LOC) {
14346     use_list = &only_utf8_locale_list;
14347    }
14348    else {
14349     use_list = &cp_list;
14350    }
14351
14352    /* Only the characters in this class that participate in folds need
14353    * be checked.  Get the intersection of this class and all the
14354    * possible characters that are foldable.  This can quickly narrow
14355    * down a large class */
14356    _invlist_intersection(PL_utf8_foldable, cp_foldable_list,
14357         &fold_intersection);
14358
14359    /* The folds for all the Latin1 characters are hard-coded into this
14360    * program, but we have to go out to disk to get the others. */
14361    if (invlist_highest(cp_foldable_list) >= 256) {
14362
14363     /* This is a hash that for a particular fold gives all
14364     * characters that are involved in it */
14365     if (! PL_utf8_foldclosures) {
14366
14367      /* If the folds haven't been read in, call a fold function
14368      * to force that */
14369      if (! PL_utf8_tofold) {
14370       U8 dummy[UTF8_MAXBYTES_CASE+1];
14371
14372       /* This string is just a short named one above \xff */
14373       to_utf8_fold((U8*) HYPHEN_UTF8, dummy, NULL);
14374       assert(PL_utf8_tofold); /* Verify that worked */
14375      }
14376      PL_utf8_foldclosures
14377          = _swash_inversion_hash(PL_utf8_tofold);
14378     }
14379    }
14380
14381    /* Now look at the foldable characters in this class individually */
14382    invlist_iterinit(fold_intersection);
14383    while (invlist_iternext(fold_intersection, &start, &end)) {
14384     UV j;
14385
14386     /* Look at every character in the range */
14387     for (j = start; j <= end; j++) {
14388      U8 foldbuf[UTF8_MAXBYTES_CASE+1];
14389      STRLEN foldlen;
14390      SV** listp;
14391
14392      if (j < 256) {
14393
14394       /* We have the latin1 folding rules hard-coded here so
14395       * that an innocent-looking character class, like
14396       * /[ks]/i won't have to go out to disk to find the
14397       * possible matches.  XXX It would be better to
14398       * generate these via regen, in case a new version of
14399       * the Unicode standard adds new mappings, though that
14400       * is not really likely, and may be caught by the
14401       * default: case of the switch below. */
14402
14403       if (IS_IN_SOME_FOLD_L1(j)) {
14404
14405        /* ASCII is always matched; non-ASCII is matched
14406        * only under Unicode rules (which could happen
14407        * under /l if the locale is a UTF-8 one */
14408        if (isASCII(j) || ! DEPENDS_SEMANTICS) {
14409         *use_list = add_cp_to_invlist(*use_list,
14410                PL_fold_latin1[j]);
14411        }
14412        else {
14413         depends_list =
14414         add_cp_to_invlist(depends_list,
14415             PL_fold_latin1[j]);
14416        }
14417       }
14418
14419       if (HAS_NONLATIN1_FOLD_CLOSURE(j)
14420        && (! isASCII(j) || ! ASCII_FOLD_RESTRICTED))
14421       {
14422        /* Certain Latin1 characters have matches outside
14423        * Latin1.  To get here, <j> is one of those
14424        * characters.   None of these matches is valid for
14425        * ASCII characters under /aa, which is why the 'if'
14426        * just above excludes those.  These matches only
14427        * happen when the target string is utf8.  The code
14428        * below adds the single fold closures for <j> to the
14429        * inversion list. */
14430
14431        switch (j) {
14432         case 'k':
14433         case 'K':
14434         *use_list =
14435          add_cp_to_invlist(*use_list, KELVIN_SIGN);
14436          break;
14437         case 's':
14438         case 'S':
14439         *use_list = add_cp_to_invlist(*use_list,
14440              LATIN_SMALL_LETTER_LONG_S);
14441          break;
14442         case MICRO_SIGN:
14443         *use_list = add_cp_to_invlist(*use_list,
14444              GREEK_CAPITAL_LETTER_MU);
14445         *use_list = add_cp_to_invlist(*use_list,
14446               GREEK_SMALL_LETTER_MU);
14447          break;
14448         case LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE:
14449         case LATIN_SMALL_LETTER_A_WITH_RING_ABOVE:
14450         *use_list =
14451         add_cp_to_invlist(*use_list, ANGSTROM_SIGN);
14452          break;
14453         case LATIN_SMALL_LETTER_Y_WITH_DIAERESIS:
14454         *use_list = add_cp_to_invlist(*use_list,
14455           LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS);
14456          break;
14457         case LATIN_SMALL_LETTER_SHARP_S:
14458         *use_list = add_cp_to_invlist(*use_list,
14459             LATIN_CAPITAL_LETTER_SHARP_S);
14460          break;
14461         case 'F': case 'f':
14462         case 'I': case 'i':
14463         case 'L': case 'l':
14464         case 'T': case 't':
14465         case 'A': case 'a':
14466         case 'H': case 'h':
14467         case 'J': case 'j':
14468         case 'N': case 'n':
14469         case 'W': case 'w':
14470         case 'Y': case 'y':
14471          /* These all are targets of multi-character
14472          * folds from code points that require UTF8
14473          * to express, so they can't match unless
14474          * the target string is in UTF-8, so no
14475          * action here is necessary, as regexec.c
14476          * properly handles the general case for
14477          * UTF-8 matching and multi-char folds */
14478          break;
14479         default:
14480          /* Use deprecated warning to increase the
14481          * chances of this being output */
14482          ckWARN2reg_d(RExC_parse, "Perl folding rules are not up-to-date for 0x%"UVXf"; please use the perlbug utility to report;", j);
14483          break;
14484        }
14485       }
14486       continue;
14487      }
14488
14489      /* Here is an above Latin1 character.  We don't have the
14490      * rules hard-coded for it.  First, get its fold.  This is
14491      * the simple fold, as the multi-character folds have been
14492      * handled earlier and separated out */
14493      _to_uni_fold_flags(j, foldbuf, &foldlen,
14494               (ASCII_FOLD_RESTRICTED)
14495               ? FOLD_FLAGS_NOMIX_ASCII
14496               : 0);
14497
14498      /* Single character fold of above Latin1.  Add everything in
14499      * its fold closure to the list that this node should match.
14500      * The fold closures data structure is a hash with the keys
14501      * being the UTF-8 of every character that is folded to, like
14502      * 'k', and the values each an array of all code points that
14503      * fold to its key.  e.g. [ 'k', 'K', KELVIN_SIGN ].
14504      * Multi-character folds are not included */
14505      if ((listp = hv_fetch(PL_utf8_foldclosures,
14506           (char *) foldbuf, foldlen, FALSE)))
14507      {
14508       AV* list = (AV*) *listp;
14509       IV k;
14510       for (k = 0; k <= av_tindex(list); k++) {
14511        SV** c_p = av_fetch(list, k, FALSE);
14512        UV c;
14513        if (c_p == NULL) {
14514         Perl_croak(aTHX_ "panic: invalid PL_utf8_foldclosures structure");
14515        }
14516        c = SvUV(*c_p);
14517
14518        /* /aa doesn't allow folds between ASCII and non- */
14519        if ((ASCII_FOLD_RESTRICTED
14520         && (isASCII(c) != isASCII(j))))
14521        {
14522         continue;
14523        }
14524
14525        /* Folds under /l which cross the 255/256 boundary
14526        * are added to a separate list.  (These are valid
14527        * only when the locale is UTF-8.) */
14528        if (c < 256 && LOC) {
14529         *use_list = add_cp_to_invlist(*use_list, c);
14530         continue;
14531        }
14532
14533        if (isASCII(c) || c > 255 || AT_LEAST_UNI_SEMANTICS)
14534        {
14535         cp_list = add_cp_to_invlist(cp_list, c);
14536        }
14537        else {
14538         /* Similarly folds involving non-ascii Latin1
14539         * characters under /d are added to their list */
14540         depends_list = add_cp_to_invlist(depends_list,
14541                 c);
14542        }
14543       }
14544      }
14545     }
14546    }
14547    SvREFCNT_dec_NN(fold_intersection);
14548   }
14549
14550   /* Now that we have finished adding all the folds, there is no reason
14551   * to keep the foldable list separate */
14552   _invlist_union(cp_list, cp_foldable_list, &cp_list);
14553   SvREFCNT_dec_NN(cp_foldable_list);
14554  }
14555
14556  /* And combine the result (if any) with any inversion list from posix
14557  * classes.  The lists are kept separate up to now because we don't want to
14558  * fold the classes (folding of those is automatically handled by the swash
14559  * fetching code) */
14560  if (posixes || nposixes) {
14561   if (posixes && AT_LEAST_ASCII_RESTRICTED) {
14562    /* Under /a and /aa, nothing above ASCII matches these */
14563    _invlist_intersection(posixes,
14564         PL_XPosix_ptrs[_CC_ASCII],
14565         &posixes);
14566   }
14567   if (nposixes) {
14568    if (DEPENDS_SEMANTICS) {
14569     /* Under /d, everything in the upper half of the Latin1 range
14570     * matches these complements */
14571     ANYOF_FLAGS(ret) |= ANYOF_NON_UTF8_NON_ASCII_ALL;
14572    }
14573    else if (AT_LEAST_ASCII_RESTRICTED) {
14574     /* Under /a and /aa, everything above ASCII matches these
14575     * complements */
14576     _invlist_union_complement_2nd(nposixes,
14577            PL_XPosix_ptrs[_CC_ASCII],
14578            &nposixes);
14579    }
14580    if (posixes) {
14581     _invlist_union(posixes, nposixes, &posixes);
14582     SvREFCNT_dec_NN(nposixes);
14583    }
14584    else {
14585     posixes = nposixes;
14586    }
14587   }
14588   if (! DEPENDS_SEMANTICS) {
14589    if (cp_list) {
14590     _invlist_union(cp_list, posixes, &cp_list);
14591     SvREFCNT_dec_NN(posixes);
14592    }
14593    else {
14594     cp_list = posixes;
14595    }
14596   }
14597   else {
14598    /* Under /d, we put into a separate list the Latin1 things that
14599    * match only when the target string is utf8 */
14600    SV* nonascii_but_latin1_properties = NULL;
14601    _invlist_intersection(posixes, PL_UpperLatin1,
14602         &nonascii_but_latin1_properties);
14603    _invlist_subtract(posixes, nonascii_but_latin1_properties,
14604        &posixes);
14605    if (cp_list) {
14606     _invlist_union(cp_list, posixes, &cp_list);
14607     SvREFCNT_dec_NN(posixes);
14608    }
14609    else {
14610     cp_list = posixes;
14611    }
14612
14613    if (depends_list) {
14614     _invlist_union(depends_list, nonascii_but_latin1_properties,
14615        &depends_list);
14616     SvREFCNT_dec_NN(nonascii_but_latin1_properties);
14617    }
14618    else {
14619     depends_list = nonascii_but_latin1_properties;
14620    }
14621   }
14622  }
14623
14624  /* And combine the result (if any) with any inversion list from properties.
14625  * The lists are kept separate up to now so that we can distinguish the two
14626  * in regards to matching above-Unicode.  A run-time warning is generated
14627  * if a Unicode property is matched against a non-Unicode code point. But,
14628  * we allow user-defined properties to match anything, without any warning,
14629  * and we also suppress the warning if there is a portion of the character
14630  * class that isn't a Unicode property, and which matches above Unicode, \W
14631  * or [\x{110000}] for example.
14632  * (Note that in this case, unlike the Posix one above, there is no
14633  * <depends_list>, because having a Unicode property forces Unicode
14634  * semantics */
14635  if (properties) {
14636   if (cp_list) {
14637
14638    /* If it matters to the final outcome, see if a non-property
14639    * component of the class matches above Unicode.  If so, the
14640    * warning gets suppressed.  This is true even if just a single
14641    * such code point is specified, as though not strictly correct if
14642    * another such code point is matched against, the fact that they
14643    * are using above-Unicode code points indicates they should know
14644    * the issues involved */
14645    if (warn_super) {
14646     warn_super = ! (invert
14647        ^ (invlist_highest(cp_list) > PERL_UNICODE_MAX));
14648    }
14649
14650    _invlist_union(properties, cp_list, &cp_list);
14651    SvREFCNT_dec_NN(properties);
14652   }
14653   else {
14654    cp_list = properties;
14655   }
14656
14657   if (warn_super) {
14658    ANYOF_FLAGS(ret) |= ANYOF_WARN_SUPER;
14659   }
14660  }
14661
14662  /* Here, we have calculated what code points should be in the character
14663  * class.
14664  *
14665  * Now we can see about various optimizations.  Fold calculation (which we
14666  * did above) needs to take place before inversion.  Otherwise /[^k]/i
14667  * would invert to include K, which under /i would match k, which it
14668  * shouldn't.  Therefore we can't invert folded locale now, as it won't be
14669  * folded until runtime */
14670
14671  /* If we didn't do folding, it's because some information isn't available
14672  * until runtime; set the run-time fold flag for these.  (We don't have to
14673  * worry about properties folding, as that is taken care of by the swash
14674  * fetching).  We know to set the flag if we have a non-NULL list for UTF-8
14675  * locales, or the class matches at least one 0-255 range code point */
14676  if (LOC && FOLD) {
14677   if (only_utf8_locale_list) {
14678    ANYOF_FLAGS(ret) |= ANYOF_LOC_FOLD;
14679   }
14680   else if (cp_list) { /* Look to see if there a 0-255 code point is in
14681        the list */
14682    UV start, end;
14683    invlist_iterinit(cp_list);
14684    if (invlist_iternext(cp_list, &start, &end) && start < 256) {
14685     ANYOF_FLAGS(ret) |= ANYOF_LOC_FOLD;
14686    }
14687    invlist_iterfinish(cp_list);
14688   }
14689  }
14690
14691  /* Optimize inverted simple patterns (e.g. [^a-z]) when everything is known
14692  * at compile time.  Besides not inverting folded locale now, we can't
14693  * invert if there are things such as \w, which aren't known until runtime
14694  * */
14695  if (cp_list
14696   && invert
14697   && ! (ANYOF_FLAGS(ret) & (ANYOF_LOCALE_FLAGS))
14698   && ! depends_list
14699   && ! HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
14700  {
14701   _invlist_invert(cp_list);
14702
14703   /* Any swash can't be used as-is, because we've inverted things */
14704   if (swash) {
14705    SvREFCNT_dec_NN(swash);
14706    swash = NULL;
14707   }
14708
14709   /* Clear the invert flag since have just done it here */
14710   invert = FALSE;
14711  }
14712
14713  if (ret_invlist) {
14714   *ret_invlist = cp_list;
14715   SvREFCNT_dec(swash);
14716
14717   /* Discard the generated node */
14718   if (SIZE_ONLY) {
14719    RExC_size = orig_size;
14720   }
14721   else {
14722    RExC_emit = orig_emit;
14723   }
14724   return orig_emit;
14725  }
14726
14727  /* Some character classes are equivalent to other nodes.  Such nodes take
14728  * up less room and generally fewer operations to execute than ANYOF nodes.
14729  * Above, we checked for and optimized into some such equivalents for
14730  * certain common classes that are easy to test.  Getting to this point in
14731  * the code means that the class didn't get optimized there.  Since this
14732  * code is only executed in Pass 2, it is too late to save space--it has
14733  * been allocated in Pass 1, and currently isn't given back.  But turning
14734  * things into an EXACTish node can allow the optimizer to join it to any
14735  * adjacent such nodes.  And if the class is equivalent to things like /./,
14736  * expensive run-time swashes can be avoided.  Now that we have more
14737  * complete information, we can find things necessarily missed by the
14738  * earlier code.  I (khw) am not sure how much to look for here.  It would
14739  * be easy, but perhaps too slow, to check any candidates against all the
14740  * node types they could possibly match using _invlistEQ(). */
14741
14742  if (cp_list
14743   && ! invert
14744   && ! depends_list
14745   && ! (ANYOF_FLAGS(ret) & (ANYOF_LOCALE_FLAGS))
14746   && ! HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION
14747
14748   /* We don't optimize if we are supposed to make sure all non-Unicode
14749    * code points raise a warning, as only ANYOF nodes have this check.
14750    * */
14751   && ! ((ANYOF_FLAGS(ret) | ANYOF_WARN_SUPER) && ALWAYS_WARN_SUPER))
14752  {
14753   UV start, end;
14754   U8 op = END;  /* The optimzation node-type */
14755   const char * cur_parse= RExC_parse;
14756
14757   invlist_iterinit(cp_list);
14758   if (! invlist_iternext(cp_list, &start, &end)) {
14759
14760    /* Here, the list is empty.  This happens, for example, when a
14761    * Unicode property is the only thing in the character class, and
14762    * it doesn't match anything.  (perluniprops.pod notes such
14763    * properties) */
14764    op = OPFAIL;
14765    *flagp |= HASWIDTH|SIMPLE;
14766   }
14767   else if (start == end) {    /* The range is a single code point */
14768    if (! invlist_iternext(cp_list, &start, &end)
14769
14770      /* Don't do this optimization if it would require changing
14771      * the pattern to UTF-8 */
14772     && (start < 256 || UTF))
14773    {
14774     /* Here, the list contains a single code point.  Can optimize
14775     * into an EXACTish node */
14776
14777     value = start;
14778
14779     if (! FOLD) {
14780      op = EXACT;
14781     }
14782     else if (LOC) {
14783
14784      /* A locale node under folding with one code point can be
14785      * an EXACTFL, as its fold won't be calculated until
14786      * runtime */
14787      op = EXACTFL;
14788     }
14789     else {
14790
14791      /* Here, we are generally folding, but there is only one
14792      * code point to match.  If we have to, we use an EXACT
14793      * node, but it would be better for joining with adjacent
14794      * nodes in the optimization pass if we used the same
14795      * EXACTFish node that any such are likely to be.  We can
14796      * do this iff the code point doesn't participate in any
14797      * folds.  For example, an EXACTF of a colon is the same as
14798      * an EXACT one, since nothing folds to or from a colon. */
14799      if (value < 256) {
14800       if (IS_IN_SOME_FOLD_L1(value)) {
14801        op = EXACT;
14802       }
14803      }
14804      else {
14805       if (_invlist_contains_cp(PL_utf8_foldable, value)) {
14806        op = EXACT;
14807       }
14808      }
14809
14810      /* If we haven't found the node type, above, it means we
14811      * can use the prevailing one */
14812      if (op == END) {
14813       op = compute_EXACTish(pRExC_state);
14814      }
14815     }
14816    }
14817   }
14818   else if (start == 0) {
14819    if (end == UV_MAX) {
14820     op = SANY;
14821     *flagp |= HASWIDTH|SIMPLE;
14822     RExC_naughty++;
14823    }
14824    else if (end == '\n' - 1
14825      && invlist_iternext(cp_list, &start, &end)
14826      && start == '\n' + 1 && end == UV_MAX)
14827    {
14828     op = REG_ANY;
14829     *flagp |= HASWIDTH|SIMPLE;
14830     RExC_naughty++;
14831    }
14832   }
14833   invlist_iterfinish(cp_list);
14834
14835   if (op != END) {
14836    RExC_parse = (char *)orig_parse;
14837    RExC_emit = (regnode *)orig_emit;
14838
14839    ret = reg_node(pRExC_state, op);
14840
14841    RExC_parse = (char *)cur_parse;
14842
14843    if (PL_regkind[op] == EXACT) {
14844     alloc_maybe_populate_EXACT(pRExC_state, ret, flagp, 0, value,
14845           TRUE /* downgradable to EXACT */
14846           );
14847    }
14848
14849    SvREFCNT_dec_NN(cp_list);
14850    return ret;
14851   }
14852  }
14853
14854  /* Here, <cp_list> contains all the code points we can determine at
14855  * compile time that match under all conditions.  Go through it, and
14856  * for things that belong in the bitmap, put them there, and delete from
14857  * <cp_list>.  While we are at it, see if everything above 255 is in the
14858  * list, and if so, set a flag to speed up execution */
14859
14860  populate_ANYOF_from_invlist(ret, &cp_list);
14861
14862  if (invert) {
14863   ANYOF_FLAGS(ret) |= ANYOF_INVERT;
14864  }
14865
14866  /* Here, the bitmap has been populated with all the Latin1 code points that
14867  * always match.  Can now add to the overall list those that match only
14868  * when the target string is UTF-8 (<depends_list>). */
14869  if (depends_list) {
14870   if (cp_list) {
14871    _invlist_union(cp_list, depends_list, &cp_list);
14872    SvREFCNT_dec_NN(depends_list);
14873   }
14874   else {
14875    cp_list = depends_list;
14876   }
14877   ANYOF_FLAGS(ret) |= ANYOF_UTF8;
14878  }
14879
14880  /* If there is a swash and more than one element, we can't use the swash in
14881  * the optimization below. */
14882  if (swash && element_count > 1) {
14883   SvREFCNT_dec_NN(swash);
14884   swash = NULL;
14885  }
14886
14887  set_ANYOF_arg(pRExC_state, ret, cp_list,
14888     (HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
14889     ? listsv : NULL,
14890     only_utf8_locale_list,
14891     swash, has_user_defined_property);
14892
14893  *flagp |= HASWIDTH|SIMPLE;
14894
14895  if (ANYOF_FLAGS(ret) & ANYOF_LOCALE_FLAGS) {
14896   RExC_contains_locale = 1;
14897  }
14898
14899  return ret;
14900 }
14901
14902 #undef HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION
14903
14904 STATIC void
14905 S_set_ANYOF_arg(pTHX_ RExC_state_t* const pRExC_state,
14906     regnode* const node,
14907     SV* const cp_list,
14908     SV* const runtime_defns,
14909     SV* const only_utf8_locale_list,
14910     SV* const swash,
14911     const bool has_user_defined_property)
14912 {
14913  /* Sets the arg field of an ANYOF-type node 'node', using information about
14914  * the node passed-in.  If there is nothing outside the node's bitmap, the
14915  * arg is set to ANYOF_NONBITMAP_EMPTY.  Otherwise, it sets the argument to
14916  * the count returned by add_data(), having allocated and stored an array,
14917  * av, that that count references, as follows:
14918  *  av[0] stores the character class description in its textual form.
14919  *        This is used later (regexec.c:Perl_regclass_swash()) to
14920  *        initialize the appropriate swash, and is also useful for dumping
14921  *        the regnode.  This is set to &PL_sv_undef if the textual
14922  *        description is not needed at run-time (as happens if the other
14923  *        elements completely define the class)
14924  *  av[1] if &PL_sv_undef, is a placeholder to later contain the swash
14925  *        computed from av[0].  But if no further computation need be done,
14926  *        the swash is stored here now (and av[0] is &PL_sv_undef).
14927  *  av[2] stores the inversion list of code points that match only if the
14928  *        current locale is UTF-8
14929  *  av[3] stores the cp_list inversion list for use in addition or instead
14930  *        of av[0]; used only if cp_list exists and av[1] is &PL_sv_undef.
14931  *        (Otherwise everything needed is already in av[0] and av[1])
14932  *  av[4] is set if any component of the class is from a user-defined
14933  *        property; used only if av[3] exists */
14934
14935  UV n;
14936
14937  PERL_ARGS_ASSERT_SET_ANYOF_ARG;
14938
14939  if (! cp_list && ! runtime_defns && ! only_utf8_locale_list) {
14940   assert(! (ANYOF_FLAGS(node)
14941      & (ANYOF_UTF8|ANYOF_NONBITMAP_NON_UTF8)));
14942   ARG_SET(node, ANYOF_NONBITMAP_EMPTY);
14943  }
14944  else {
14945   AV * const av = newAV();
14946   SV *rv;
14947
14948   assert(ANYOF_FLAGS(node)
14949      & (ANYOF_UTF8|ANYOF_NONBITMAP_NON_UTF8|ANYOF_LOC_FOLD));
14950
14951   av_store(av, 0, (runtime_defns)
14952       ? SvREFCNT_inc(runtime_defns) : &PL_sv_undef);
14953   if (swash) {
14954    av_store(av, 1, swash);
14955    SvREFCNT_dec_NN(cp_list);
14956   }
14957   else {
14958    av_store(av, 1, &PL_sv_undef);
14959    if (cp_list) {
14960     av_store(av, 3, cp_list);
14961     av_store(av, 4, newSVuv(has_user_defined_property));
14962    }
14963   }
14964
14965   if (only_utf8_locale_list) {
14966    av_store(av, 2, only_utf8_locale_list);
14967   }
14968   else {
14969    av_store(av, 2, &PL_sv_undef);
14970   }
14971
14972   rv = newRV_noinc(MUTABLE_SV(av));
14973   n = add_data(pRExC_state, STR_WITH_LEN("s"));
14974   RExC_rxi->data->data[n] = (void*)rv;
14975   ARG_SET(node, n);
14976  }
14977 }
14978
14979
14980 /* reg_skipcomment()
14981
14982    Absorbs an /x style # comments from the input stream.
14983    Returns true if there is more text remaining in the stream.
14984    Will set the REG_RUN_ON_COMMENT_SEEN flag if the comment
14985    terminates the pattern without including a newline.
14986
14987    Note its the callers responsibility to ensure that we are
14988    actually in /x mode
14989
14990 */
14991
14992 STATIC bool
14993 S_reg_skipcomment(pTHX_ RExC_state_t *pRExC_state)
14994 {
14995  bool ended = 0;
14996
14997  PERL_ARGS_ASSERT_REG_SKIPCOMMENT;
14998
14999  while (RExC_parse < RExC_end)
15000   if (*RExC_parse++ == '\n') {
15001    ended = 1;
15002    break;
15003   }
15004  if (!ended) {
15005   /* we ran off the end of the pattern without ending
15006   the comment, so we have to add an \n when wrapping */
15007   RExC_seen |= REG_RUN_ON_COMMENT_SEEN;
15008   return 0;
15009  } else
15010   return 1;
15011 }
15012
15013 /* nextchar()
15014
15015    Advances the parse position, and optionally absorbs
15016    "whitespace" from the inputstream.
15017
15018    Without /x "whitespace" means (?#...) style comments only,
15019    with /x this means (?#...) and # comments and whitespace proper.
15020
15021    Returns the RExC_parse point from BEFORE the scan occurs.
15022
15023    This is the /x friendly way of saying RExC_parse++.
15024 */
15025
15026 STATIC char*
15027 S_nextchar(pTHX_ RExC_state_t *pRExC_state)
15028 {
15029  char* const retval = RExC_parse++;
15030
15031  PERL_ARGS_ASSERT_NEXTCHAR;
15032
15033  for (;;) {
15034   if (RExC_end - RExC_parse >= 3
15035    && *RExC_parse == '('
15036    && RExC_parse[1] == '?'
15037    && RExC_parse[2] == '#')
15038   {
15039    while (*RExC_parse != ')') {
15040     if (RExC_parse == RExC_end)
15041      FAIL("Sequence (?#... not terminated");
15042     RExC_parse++;
15043    }
15044    RExC_parse++;
15045    continue;
15046   }
15047   if (RExC_flags & RXf_PMf_EXTENDED) {
15048    if (isSPACE(*RExC_parse)) {
15049     RExC_parse++;
15050     continue;
15051    }
15052    else if (*RExC_parse == '#') {
15053     if ( reg_skipcomment( pRExC_state ) )
15054      continue;
15055    }
15056   }
15057   return retval;
15058  }
15059 }
15060
15061 /*
15062 - reg_node - emit a node
15063 */
15064 STATIC regnode *   /* Location. */
15065 S_reg_node(pTHX_ RExC_state_t *pRExC_state, U8 op)
15066 {
15067  dVAR;
15068  regnode *ptr;
15069  regnode * const ret = RExC_emit;
15070  GET_RE_DEBUG_FLAGS_DECL;
15071
15072  PERL_ARGS_ASSERT_REG_NODE;
15073
15074  if (SIZE_ONLY) {
15075   SIZE_ALIGN(RExC_size);
15076   RExC_size += 1;
15077   return(ret);
15078  }
15079  if (RExC_emit >= RExC_emit_bound)
15080   Perl_croak(aTHX_ "panic: reg_node overrun trying to emit %d, %p>=%p",
15081     op, RExC_emit, RExC_emit_bound);
15082
15083  NODE_ALIGN_FILL(ret);
15084  ptr = ret;
15085  FILL_ADVANCE_NODE(ptr, op);
15086  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, (ptr) - 1);
15087 #ifdef RE_TRACK_PATTERN_OFFSETS
15088  if (RExC_offsets) {         /* MJD */
15089   MJD_OFFSET_DEBUG(
15090    ("%s:%d: (op %s) %s %"UVuf" (len %"UVuf") (max %"UVuf").\n",
15091    "reg_node", __LINE__,
15092    PL_reg_name[op],
15093    (UV)(RExC_emit - RExC_emit_start) > RExC_offsets[0]
15094     ? "Overwriting end of array!\n" : "OK",
15095    (UV)(RExC_emit - RExC_emit_start),
15096    (UV)(RExC_parse - RExC_start),
15097    (UV)RExC_offsets[0]));
15098   Set_Node_Offset(RExC_emit, RExC_parse + (op == END));
15099  }
15100 #endif
15101  RExC_emit = ptr;
15102  return(ret);
15103 }
15104
15105 /*
15106 - reganode - emit a node with an argument
15107 */
15108 STATIC regnode *   /* Location. */
15109 S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg)
15110 {
15111  dVAR;
15112  regnode *ptr;
15113  regnode * const ret = RExC_emit;
15114  GET_RE_DEBUG_FLAGS_DECL;
15115
15116  PERL_ARGS_ASSERT_REGANODE;
15117
15118  if (SIZE_ONLY) {
15119   SIZE_ALIGN(RExC_size);
15120   RExC_size += 2;
15121   /*
15122   We can't do this:
15123
15124   assert(2==regarglen[op]+1);
15125
15126   Anything larger than this has to allocate the extra amount.
15127   If we changed this to be:
15128
15129   RExC_size += (1 + regarglen[op]);
15130
15131   then it wouldn't matter. Its not clear what side effect
15132   might come from that so its not done so far.
15133   -- dmq
15134   */
15135   return(ret);
15136  }
15137  if (RExC_emit >= RExC_emit_bound)
15138   Perl_croak(aTHX_ "panic: reg_node overrun trying to emit %d, %p>=%p",
15139     op, RExC_emit, RExC_emit_bound);
15140
15141  NODE_ALIGN_FILL(ret);
15142  ptr = ret;
15143  FILL_ADVANCE_NODE_ARG(ptr, op, arg);
15144  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, (ptr) - 2);
15145 #ifdef RE_TRACK_PATTERN_OFFSETS
15146  if (RExC_offsets) {         /* MJD */
15147   MJD_OFFSET_DEBUG(
15148    ("%s(%d): (op %s) %s %"UVuf" <- %"UVuf" (max %"UVuf").\n",
15149    "reganode",
15150    __LINE__,
15151    PL_reg_name[op],
15152    (UV)(RExC_emit - RExC_emit_start) > RExC_offsets[0] ?
15153    "Overwriting end of array!\n" : "OK",
15154    (UV)(RExC_emit - RExC_emit_start),
15155    (UV)(RExC_parse - RExC_start),
15156    (UV)RExC_offsets[0]));
15157   Set_Cur_Node_Offset;
15158  }
15159 #endif
15160  RExC_emit = ptr;
15161  return(ret);
15162 }
15163
15164 /*
15165 - reguni - emit (if appropriate) a Unicode character
15166 */
15167 PERL_STATIC_INLINE STRLEN
15168 S_reguni(pTHX_ const RExC_state_t *pRExC_state, UV uv, char* s)
15169 {
15170  dVAR;
15171
15172  PERL_ARGS_ASSERT_REGUNI;
15173
15174  return SIZE_ONLY ? UNISKIP(uv) : (uvchr_to_utf8((U8*)s, uv) - (U8*)s);
15175 }
15176
15177 /*
15178 - reginsert - insert an operator in front of already-emitted operand
15179 *
15180 * Means relocating the operand.
15181 */
15182 STATIC void
15183 S_reginsert(pTHX_ RExC_state_t *pRExC_state, U8 op, regnode *opnd, U32 depth)
15184 {
15185  dVAR;
15186  regnode *src;
15187  regnode *dst;
15188  regnode *place;
15189  const int offset = regarglen[(U8)op];
15190  const int size = NODE_STEP_REGNODE + offset;
15191  GET_RE_DEBUG_FLAGS_DECL;
15192
15193  PERL_ARGS_ASSERT_REGINSERT;
15194  PERL_UNUSED_ARG(depth);
15195 /* (PL_regkind[(U8)op] == CURLY ? EXTRA_STEP_2ARGS : 0); */
15196  DEBUG_PARSE_FMT("inst"," - %s",PL_reg_name[op]);
15197  if (SIZE_ONLY) {
15198   RExC_size += size;
15199   return;
15200  }
15201
15202  src = RExC_emit;
15203  RExC_emit += size;
15204  dst = RExC_emit;
15205  if (RExC_open_parens) {
15206   int paren;
15207   /*DEBUG_PARSE_FMT("inst"," - %"IVdf, (IV)RExC_npar);*/
15208   for ( paren=0 ; paren < RExC_npar ; paren++ ) {
15209    if ( RExC_open_parens[paren] >= opnd ) {
15210     /*DEBUG_PARSE_FMT("open"," - %d",size);*/
15211     RExC_open_parens[paren] += size;
15212    } else {
15213     /*DEBUG_PARSE_FMT("open"," - %s","ok");*/
15214    }
15215    if ( RExC_close_parens[paren] >= opnd ) {
15216     /*DEBUG_PARSE_FMT("close"," - %d",size);*/
15217     RExC_close_parens[paren] += size;
15218    } else {
15219     /*DEBUG_PARSE_FMT("close"," - %s","ok");*/
15220    }
15221   }
15222  }
15223
15224  while (src > opnd) {
15225   StructCopy(--src, --dst, regnode);
15226 #ifdef RE_TRACK_PATTERN_OFFSETS
15227   if (RExC_offsets) {     /* MJD 20010112 */
15228    MJD_OFFSET_DEBUG(
15229     ("%s(%d): (op %s) %s copy %"UVuf" -> %"UVuf" (max %"UVuf").\n",
15230     "reg_insert",
15231     __LINE__,
15232     PL_reg_name[op],
15233     (UV)(dst - RExC_emit_start) > RExC_offsets[0]
15234      ? "Overwriting end of array!\n" : "OK",
15235     (UV)(src - RExC_emit_start),
15236     (UV)(dst - RExC_emit_start),
15237     (UV)RExC_offsets[0]));
15238    Set_Node_Offset_To_R(dst-RExC_emit_start, Node_Offset(src));
15239    Set_Node_Length_To_R(dst-RExC_emit_start, Node_Length(src));
15240   }
15241 #endif
15242  }
15243
15244
15245  place = opnd;  /* Op node, where operand used to be. */
15246 #ifdef RE_TRACK_PATTERN_OFFSETS
15247  if (RExC_offsets) {         /* MJD */
15248   MJD_OFFSET_DEBUG(
15249    ("%s(%d): (op %s) %s %"UVuf" <- %"UVuf" (max %"UVuf").\n",
15250    "reginsert",
15251    __LINE__,
15252    PL_reg_name[op],
15253    (UV)(place - RExC_emit_start) > RExC_offsets[0]
15254    ? "Overwriting end of array!\n" : "OK",
15255    (UV)(place - RExC_emit_start),
15256    (UV)(RExC_parse - RExC_start),
15257    (UV)RExC_offsets[0]));
15258   Set_Node_Offset(place, RExC_parse);
15259   Set_Node_Length(place, 1);
15260  }
15261 #endif
15262  src = NEXTOPER(place);
15263  FILL_ADVANCE_NODE(place, op);
15264  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, (place) - 1);
15265  Zero(src, offset, regnode);
15266 }
15267
15268 /*
15269 - regtail - set the next-pointer at the end of a node chain of p to val.
15270 - SEE ALSO: regtail_study
15271 */
15272 /* TODO: All three parms should be const */
15273 STATIC void
15274 S_regtail(pTHX_ RExC_state_t *pRExC_state, regnode *p,
15275     const regnode *val,U32 depth)
15276 {
15277  dVAR;
15278  regnode *scan;
15279  GET_RE_DEBUG_FLAGS_DECL;
15280
15281  PERL_ARGS_ASSERT_REGTAIL;
15282 #ifndef DEBUGGING
15283  PERL_UNUSED_ARG(depth);
15284 #endif
15285
15286  if (SIZE_ONLY)
15287   return;
15288
15289  /* Find last node. */
15290  scan = p;
15291  for (;;) {
15292   regnode * const temp = regnext(scan);
15293   DEBUG_PARSE_r({
15294    SV * const mysv=sv_newmortal();
15295    DEBUG_PARSE_MSG((scan==p ? "tail" : ""));
15296    regprop(RExC_rx, mysv, scan, NULL);
15297    PerlIO_printf(Perl_debug_log, "~ %s (%d) %s %s\n",
15298     SvPV_nolen_const(mysv), REG_NODE_NUM(scan),
15299      (temp == NULL ? "->" : ""),
15300      (temp == NULL ? PL_reg_name[OP(val)] : "")
15301    );
15302   });
15303   if (temp == NULL)
15304    break;
15305   scan = temp;
15306  }
15307
15308  if (reg_off_by_arg[OP(scan)]) {
15309   ARG_SET(scan, val - scan);
15310  }
15311  else {
15312   NEXT_OFF(scan) = val - scan;
15313  }
15314 }
15315
15316 #ifdef DEBUGGING
15317 /*
15318 - regtail_study - set the next-pointer at the end of a node chain of p to val.
15319 - Look for optimizable sequences at the same time.
15320 - currently only looks for EXACT chains.
15321
15322 This is experimental code. The idea is to use this routine to perform
15323 in place optimizations on branches and groups as they are constructed,
15324 with the long term intention of removing optimization from study_chunk so
15325 that it is purely analytical.
15326
15327 Currently only used when in DEBUG mode. The macro REGTAIL_STUDY() is used
15328 to control which is which.
15329
15330 */
15331 /* TODO: All four parms should be const */
15332
15333 STATIC U8
15334 S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode *p,
15335      const regnode *val,U32 depth)
15336 {
15337  dVAR;
15338  regnode *scan;
15339  U8 exact = PSEUDO;
15340 #ifdef EXPERIMENTAL_INPLACESCAN
15341  I32 min = 0;
15342 #endif
15343  GET_RE_DEBUG_FLAGS_DECL;
15344
15345  PERL_ARGS_ASSERT_REGTAIL_STUDY;
15346
15347
15348  if (SIZE_ONLY)
15349   return exact;
15350
15351  /* Find last node. */
15352
15353  scan = p;
15354  for (;;) {
15355   regnode * const temp = regnext(scan);
15356 #ifdef EXPERIMENTAL_INPLACESCAN
15357   if (PL_regkind[OP(scan)] == EXACT) {
15358    bool unfolded_multi_char; /* Unexamined in this routine */
15359    if (join_exact(pRExC_state, scan, &min,
15360       &unfolded_multi_char, 1, val, depth+1))
15361     return EXACT;
15362   }
15363 #endif
15364   if ( exact ) {
15365    switch (OP(scan)) {
15366     case EXACT:
15367     case EXACTF:
15368     case EXACTFA_NO_TRIE:
15369     case EXACTFA:
15370     case EXACTFU:
15371     case EXACTFU_SS:
15372     case EXACTFL:
15373       if( exact == PSEUDO )
15374        exact= OP(scan);
15375       else if ( exact != OP(scan) )
15376        exact= 0;
15377     case NOTHING:
15378      break;
15379     default:
15380      exact= 0;
15381    }
15382   }
15383   DEBUG_PARSE_r({
15384    SV * const mysv=sv_newmortal();
15385    DEBUG_PARSE_MSG((scan==p ? "tsdy" : ""));
15386    regprop(RExC_rx, mysv, scan, NULL);
15387    PerlIO_printf(Perl_debug_log, "~ %s (%d) -> %s\n",
15388     SvPV_nolen_const(mysv),
15389     REG_NODE_NUM(scan),
15390     PL_reg_name[exact]);
15391   });
15392   if (temp == NULL)
15393    break;
15394   scan = temp;
15395  }
15396  DEBUG_PARSE_r({
15397   SV * const mysv_val=sv_newmortal();
15398   DEBUG_PARSE_MSG("");
15399   regprop(RExC_rx, mysv_val, val, NULL);
15400   PerlIO_printf(Perl_debug_log,
15401      "~ attach to %s (%"IVdf") offset to %"IVdf"\n",
15402      SvPV_nolen_const(mysv_val),
15403      (IV)REG_NODE_NUM(val),
15404      (IV)(val - scan)
15405   );
15406  });
15407  if (reg_off_by_arg[OP(scan)]) {
15408   ARG_SET(scan, val - scan);
15409  }
15410  else {
15411   NEXT_OFF(scan) = val - scan;
15412  }
15413
15414  return exact;
15415 }
15416 #endif
15417
15418 /*
15419  - regdump - dump a regexp onto Perl_debug_log in vaguely comprehensible form
15420  */
15421 #ifdef DEBUGGING
15422
15423 static void
15424 S_regdump_intflags(pTHX_ const char *lead, const U32 flags)
15425 {
15426  int bit;
15427  int set=0;
15428
15429  ASSUME(REG_INTFLAGS_NAME_SIZE <= sizeof(flags)*8);
15430
15431  for (bit=0; bit<REG_INTFLAGS_NAME_SIZE; bit++) {
15432   if (flags & (1<<bit)) {
15433    if (!set++ && lead)
15434     PerlIO_printf(Perl_debug_log, "%s",lead);
15435    PerlIO_printf(Perl_debug_log, "%s ",PL_reg_intflags_name[bit]);
15436   }
15437  }
15438  if (lead)  {
15439   if (set)
15440    PerlIO_printf(Perl_debug_log, "\n");
15441   else
15442    PerlIO_printf(Perl_debug_log, "%s[none-set]\n",lead);
15443  }
15444 }
15445
15446 static void
15447 S_regdump_extflags(pTHX_ const char *lead, const U32 flags)
15448 {
15449  int bit;
15450  int set=0;
15451  regex_charset cs;
15452
15453  ASSUME(REG_EXTFLAGS_NAME_SIZE <= sizeof(flags)*8);
15454
15455  for (bit=0; bit<REG_EXTFLAGS_NAME_SIZE; bit++) {
15456   if (flags & (1<<bit)) {
15457    if ((1<<bit) & RXf_PMf_CHARSET) { /* Output separately, below */
15458     continue;
15459    }
15460    if (!set++ && lead)
15461     PerlIO_printf(Perl_debug_log, "%s",lead);
15462    PerlIO_printf(Perl_debug_log, "%s ",PL_reg_extflags_name[bit]);
15463   }
15464  }
15465  if ((cs = get_regex_charset(flags)) != REGEX_DEPENDS_CHARSET) {
15466    if (!set++ && lead) {
15467     PerlIO_printf(Perl_debug_log, "%s",lead);
15468    }
15469    switch (cs) {
15470     case REGEX_UNICODE_CHARSET:
15471      PerlIO_printf(Perl_debug_log, "UNICODE");
15472      break;
15473     case REGEX_LOCALE_CHARSET:
15474      PerlIO_printf(Perl_debug_log, "LOCALE");
15475      break;
15476     case REGEX_ASCII_RESTRICTED_CHARSET:
15477      PerlIO_printf(Perl_debug_log, "ASCII-RESTRICTED");
15478      break;
15479     case REGEX_ASCII_MORE_RESTRICTED_CHARSET:
15480      PerlIO_printf(Perl_debug_log, "ASCII-MORE_RESTRICTED");
15481      break;
15482     default:
15483      PerlIO_printf(Perl_debug_log, "UNKNOWN CHARACTER SET");
15484      break;
15485    }
15486  }
15487  if (lead)  {
15488   if (set)
15489    PerlIO_printf(Perl_debug_log, "\n");
15490   else
15491    PerlIO_printf(Perl_debug_log, "%s[none-set]\n",lead);
15492  }
15493 }
15494 #endif
15495
15496 void
15497 Perl_regdump(pTHX_ const regexp *r)
15498 {
15499 #ifdef DEBUGGING
15500  dVAR;
15501  SV * const sv = sv_newmortal();
15502  SV *dsv= sv_newmortal();
15503  RXi_GET_DECL(r,ri);
15504  GET_RE_DEBUG_FLAGS_DECL;
15505
15506  PERL_ARGS_ASSERT_REGDUMP;
15507
15508  (void)dumpuntil(r, ri->program, ri->program + 1, NULL, NULL, sv, 0, 0);
15509
15510  /* Header fields of interest. */
15511  if (r->anchored_substr) {
15512   RE_PV_QUOTED_DECL(s, 0, dsv, SvPVX_const(r->anchored_substr),
15513    RE_SV_DUMPLEN(r->anchored_substr), 30);
15514   PerlIO_printf(Perl_debug_log,
15515      "anchored %s%s at %"IVdf" ",
15516      s, RE_SV_TAIL(r->anchored_substr),
15517      (IV)r->anchored_offset);
15518  } else if (r->anchored_utf8) {
15519   RE_PV_QUOTED_DECL(s, 1, dsv, SvPVX_const(r->anchored_utf8),
15520    RE_SV_DUMPLEN(r->anchored_utf8), 30);
15521   PerlIO_printf(Perl_debug_log,
15522      "anchored utf8 %s%s at %"IVdf" ",
15523      s, RE_SV_TAIL(r->anchored_utf8),
15524      (IV)r->anchored_offset);
15525  }
15526  if (r->float_substr) {
15527   RE_PV_QUOTED_DECL(s, 0, dsv, SvPVX_const(r->float_substr),
15528    RE_SV_DUMPLEN(r->float_substr), 30);
15529   PerlIO_printf(Perl_debug_log,
15530      "floating %s%s at %"IVdf"..%"UVuf" ",
15531      s, RE_SV_TAIL(r->float_substr),
15532      (IV)r->float_min_offset, (UV)r->float_max_offset);
15533  } else if (r->float_utf8) {
15534   RE_PV_QUOTED_DECL(s, 1, dsv, SvPVX_const(r->float_utf8),
15535    RE_SV_DUMPLEN(r->float_utf8), 30);
15536   PerlIO_printf(Perl_debug_log,
15537      "floating utf8 %s%s at %"IVdf"..%"UVuf" ",
15538      s, RE_SV_TAIL(r->float_utf8),
15539      (IV)r->float_min_offset, (UV)r->float_max_offset);
15540  }
15541  if (r->check_substr || r->check_utf8)
15542   PerlIO_printf(Perl_debug_log,
15543      (const char *)
15544      (r->check_substr == r->float_substr
15545      && r->check_utf8 == r->float_utf8
15546      ? "(checking floating" : "(checking anchored"));
15547  if (r->intflags & PREGf_NOSCAN)
15548   PerlIO_printf(Perl_debug_log, " noscan");
15549  if (r->extflags & RXf_CHECK_ALL)
15550   PerlIO_printf(Perl_debug_log, " isall");
15551  if (r->check_substr || r->check_utf8)
15552   PerlIO_printf(Perl_debug_log, ") ");
15553
15554  if (ri->regstclass) {
15555   regprop(r, sv, ri->regstclass, NULL);
15556   PerlIO_printf(Perl_debug_log, "stclass %s ", SvPVX_const(sv));
15557  }
15558  if (r->intflags & PREGf_ANCH) {
15559   PerlIO_printf(Perl_debug_log, "anchored");
15560   if (r->intflags & PREGf_ANCH_BOL)
15561    PerlIO_printf(Perl_debug_log, "(BOL)");
15562   if (r->intflags & PREGf_ANCH_MBOL)
15563    PerlIO_printf(Perl_debug_log, "(MBOL)");
15564   if (r->intflags & PREGf_ANCH_SBOL)
15565    PerlIO_printf(Perl_debug_log, "(SBOL)");
15566   if (r->intflags & PREGf_ANCH_GPOS)
15567    PerlIO_printf(Perl_debug_log, "(GPOS)");
15568   PerlIO_putc(Perl_debug_log, ' ');
15569  }
15570  if (r->intflags & PREGf_GPOS_SEEN)
15571   PerlIO_printf(Perl_debug_log, "GPOS:%"UVuf" ", (UV)r->gofs);
15572  if (r->intflags & PREGf_SKIP)
15573   PerlIO_printf(Perl_debug_log, "plus ");
15574  if (r->intflags & PREGf_IMPLICIT)
15575   PerlIO_printf(Perl_debug_log, "implicit ");
15576  PerlIO_printf(Perl_debug_log, "minlen %"IVdf" ", (IV)r->minlen);
15577  if (r->extflags & RXf_EVAL_SEEN)
15578   PerlIO_printf(Perl_debug_log, "with eval ");
15579  PerlIO_printf(Perl_debug_log, "\n");
15580  DEBUG_FLAGS_r({
15581   regdump_extflags("r->extflags: ",r->extflags);
15582   regdump_intflags("r->intflags: ",r->intflags);
15583  });
15584 #else
15585  PERL_ARGS_ASSERT_REGDUMP;
15586  PERL_UNUSED_CONTEXT;
15587  PERL_UNUSED_ARG(r);
15588 #endif /* DEBUGGING */
15589 }
15590
15591 /*
15592 - regprop - printable representation of opcode, with run time support
15593 */
15594
15595 void
15596 Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_info *reginfo)
15597 {
15598 #ifdef DEBUGGING
15599  dVAR;
15600  int k;
15601
15602  /* Should be synchronized with * ANYOF_ #xdefines in regcomp.h */
15603  static const char * const anyofs[] = {
15604 #if _CC_WORDCHAR != 0 || _CC_DIGIT != 1 || _CC_ALPHA != 2 || _CC_LOWER != 3 \
15605  || _CC_UPPER != 4 || _CC_PUNCT != 5 || _CC_PRINT != 6                   \
15606  || _CC_ALPHANUMERIC != 7 || _CC_GRAPH != 8 || _CC_CASED != 9            \
15607  || _CC_SPACE != 10 || _CC_BLANK != 11 || _CC_XDIGIT != 12               \
15608  || _CC_PSXSPC != 13 || _CC_CNTRL != 14 || _CC_ASCII != 15               \
15609  || _CC_VERTSPACE != 16
15610   #error Need to adjust order of anyofs[]
15611 #endif
15612   "\\w",
15613   "\\W",
15614   "\\d",
15615   "\\D",
15616   "[:alpha:]",
15617   "[:^alpha:]",
15618   "[:lower:]",
15619   "[:^lower:]",
15620   "[:upper:]",
15621   "[:^upper:]",
15622   "[:punct:]",
15623   "[:^punct:]",
15624   "[:print:]",
15625   "[:^print:]",
15626   "[:alnum:]",
15627   "[:^alnum:]",
15628   "[:graph:]",
15629   "[:^graph:]",
15630   "[:cased:]",
15631   "[:^cased:]",
15632   "\\s",
15633   "\\S",
15634   "[:blank:]",
15635   "[:^blank:]",
15636   "[:xdigit:]",
15637   "[:^xdigit:]",
15638   "[:space:]",
15639   "[:^space:]",
15640   "[:cntrl:]",
15641   "[:^cntrl:]",
15642   "[:ascii:]",
15643   "[:^ascii:]",
15644   "\\v",
15645   "\\V"
15646  };
15647  RXi_GET_DECL(prog,progi);
15648  GET_RE_DEBUG_FLAGS_DECL;
15649
15650  PERL_ARGS_ASSERT_REGPROP;
15651
15652  sv_setpvs(sv, "");
15653
15654  if (OP(o) > REGNODE_MAX)  /* regnode.type is unsigned */
15655   /* It would be nice to FAIL() here, but this may be called from
15656   regexec.c, and it would be hard to supply pRExC_state. */
15657   Perl_croak(aTHX_ "Corrupted regexp opcode %d > %d",
15658            (int)OP(o), (int)REGNODE_MAX);
15659  sv_catpv(sv, PL_reg_name[OP(o)]); /* Take off const! */
15660
15661  k = PL_regkind[OP(o)];
15662
15663  if (k == EXACT) {
15664   sv_catpvs(sv, " ");
15665   /* Using is_utf8_string() (via PERL_PV_UNI_DETECT)
15666   * is a crude hack but it may be the best for now since
15667   * we have no flag "this EXACTish node was UTF-8"
15668   * --jhi */
15669   pv_pretty(sv, STRING(o), STR_LEN(o), 60, PL_colors[0], PL_colors[1],
15670     PERL_PV_ESCAPE_UNI_DETECT |
15671     PERL_PV_ESCAPE_NONASCII   |
15672     PERL_PV_PRETTY_ELLIPSES   |
15673     PERL_PV_PRETTY_LTGT       |
15674     PERL_PV_PRETTY_NOCLEAR
15675     );
15676  } else if (k == TRIE) {
15677   /* print the details of the trie in dumpuntil instead, as
15678   * progi->data isn't available here */
15679   const char op = OP(o);
15680   const U32 n = ARG(o);
15681   const reg_ac_data * const ac = IS_TRIE_AC(op) ?
15682    (reg_ac_data *)progi->data->data[n] :
15683    NULL;
15684   const reg_trie_data * const trie
15685    = (reg_trie_data*)progi->data->data[!IS_TRIE_AC(op) ? n : ac->trie];
15686
15687   Perl_sv_catpvf(aTHX_ sv, "-%s",PL_reg_name[o->flags]);
15688   DEBUG_TRIE_COMPILE_r(
15689   Perl_sv_catpvf(aTHX_ sv,
15690    "<S:%"UVuf"/%"IVdf" W:%"UVuf" L:%"UVuf"/%"UVuf" C:%"UVuf"/%"UVuf">",
15691    (UV)trie->startstate,
15692    (IV)trie->statecount-1, /* -1 because of the unused 0 element */
15693    (UV)trie->wordcount,
15694    (UV)trie->minlen,
15695    (UV)trie->maxlen,
15696    (UV)TRIE_CHARCOUNT(trie),
15697    (UV)trie->uniquecharcount
15698   );
15699   );
15700   if ( IS_ANYOF_TRIE(op) || trie->bitmap ) {
15701    sv_catpvs(sv, "[");
15702    (void) put_latin1_charclass_innards(sv, IS_ANYOF_TRIE(op)
15703             ? ANYOF_BITMAP(o)
15704             : TRIE_BITMAP(trie));
15705    sv_catpvs(sv, "]");
15706   }
15707
15708  } else if (k == CURLY) {
15709   if (OP(o) == CURLYM || OP(o) == CURLYN || OP(o) == CURLYX)
15710    Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags); /* Parenth number */
15711   Perl_sv_catpvf(aTHX_ sv, " {%d,%d}", ARG1(o), ARG2(o));
15712  }
15713  else if (k == WHILEM && o->flags)   /* Ordinal/of */
15714   Perl_sv_catpvf(aTHX_ sv, "[%d/%d]", o->flags & 0xf, o->flags>>4);
15715  else if (k == REF || k == OPEN || k == CLOSE
15716    || k == GROUPP || OP(o)==ACCEPT)
15717  {
15718   Perl_sv_catpvf(aTHX_ sv, "%d", (int)ARG(o)); /* Parenth number */
15719   if ( RXp_PAREN_NAMES(prog) ) {
15720    if ( k != REF || (OP(o) < NREF)) {
15721     AV *list= MUTABLE_AV(progi->data->data[progi->name_list_idx]);
15722     SV **name= av_fetch(list, ARG(o), 0 );
15723     if (name)
15724      Perl_sv_catpvf(aTHX_ sv, " '%"SVf"'", SVfARG(*name));
15725    }
15726    else {
15727     AV *list= MUTABLE_AV(progi->data->data[ progi->name_list_idx ]);
15728     SV *sv_dat= MUTABLE_SV(progi->data->data[ ARG( o ) ]);
15729     I32 *nums=(I32*)SvPVX(sv_dat);
15730     SV **name= av_fetch(list, nums[0], 0 );
15731     I32 n;
15732     if (name) {
15733      for ( n=0; n<SvIVX(sv_dat); n++ ) {
15734       Perl_sv_catpvf(aTHX_ sv, "%s%"IVdf,
15735          (n ? "," : ""), (IV)nums[n]);
15736      }
15737      Perl_sv_catpvf(aTHX_ sv, " '%"SVf"'", SVfARG(*name));
15738     }
15739    }
15740   }
15741   if ( k == REF && reginfo) {
15742    U32 n = ARG(o);  /* which paren pair */
15743    I32 ln = prog->offs[n].start;
15744    if (prog->lastparen < n || ln == -1)
15745     Perl_sv_catpvf(aTHX_ sv, ": FAIL");
15746    else if (ln == prog->offs[n].end)
15747     Perl_sv_catpvf(aTHX_ sv, ": ACCEPT - EMPTY STRING");
15748    else {
15749     const char *s = reginfo->strbeg + ln;
15750     Perl_sv_catpvf(aTHX_ sv, ": ");
15751     Perl_pv_pretty( aTHX_ sv, s, prog->offs[n].end - prog->offs[n].start, 32, 0, 0,
15752      PERL_PV_ESCAPE_UNI_DETECT|PERL_PV_PRETTY_NOCLEAR|PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE );
15753    }
15754   }
15755  } else if (k == GOSUB)
15756   /* Paren and offset */
15757   Perl_sv_catpvf(aTHX_ sv, "%d[%+d]", (int)ARG(o),(int)ARG2L(o));
15758  else if (k == VERB) {
15759   if (!o->flags)
15760    Perl_sv_catpvf(aTHX_ sv, ":%"SVf,
15761       SVfARG((MUTABLE_SV(progi->data->data[ ARG( o ) ]))));
15762  } else if (k == LOGICAL)
15763   /* 2: embedded, otherwise 1 */
15764   Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags);
15765  else if (k == ANYOF) {
15766   const U8 flags = ANYOF_FLAGS(o);
15767   int do_sep = 0;
15768
15769
15770   if (flags & ANYOF_LOCALE_FLAGS)
15771    sv_catpvs(sv, "{loc}");
15772   if (flags & ANYOF_LOC_FOLD)
15773    sv_catpvs(sv, "{i}");
15774   Perl_sv_catpvf(aTHX_ sv, "[%s", PL_colors[0]);
15775   if (flags & ANYOF_INVERT)
15776    sv_catpvs(sv, "^");
15777
15778   /* output what the standard cp 0-255 bitmap matches */
15779   do_sep = put_latin1_charclass_innards(sv, ANYOF_BITMAP(o));
15780
15781   /* output any special charclass tests (used entirely under use
15782   * locale) * */
15783   if (ANYOF_POSIXL_TEST_ANY_SET(o)) {
15784    int i;
15785    for (i = 0; i < ANYOF_POSIXL_MAX; i++) {
15786     if (ANYOF_POSIXL_TEST(o,i)) {
15787      sv_catpv(sv, anyofs[i]);
15788      do_sep = 1;
15789     }
15790    }
15791   }
15792
15793   if ((flags & (ANYOF_ABOVE_LATIN1_ALL
15794      |ANYOF_UTF8
15795      |ANYOF_NONBITMAP_NON_UTF8
15796      |ANYOF_LOC_FOLD)))
15797   {
15798    if (do_sep) {
15799     Perl_sv_catpvf(aTHX_ sv,"%s][%s",PL_colors[1],PL_colors[0]);
15800     if (flags & ANYOF_INVERT)
15801      /*make sure the invert info is in each */
15802      sv_catpvs(sv, "^");
15803    }
15804
15805    if (flags & ANYOF_NON_UTF8_NON_ASCII_ALL) {
15806     sv_catpvs(sv, "{non-utf8-latin1-all}");
15807    }
15808
15809    /* output information about the unicode matching */
15810    if (flags & ANYOF_ABOVE_LATIN1_ALL)
15811     sv_catpvs(sv, "{unicode_all}");
15812    else if (ARG(o) != ANYOF_NONBITMAP_EMPTY) {
15813     SV *lv; /* Set if there is something outside the bit map. */
15814     bool byte_output = FALSE;   /* If something in the bitmap has
15815            been output */
15816     SV *only_utf8_locale;
15817
15818     /* Get the stuff that wasn't in the bitmap */
15819     (void) _get_regclass_nonbitmap_data(prog, o, FALSE,
15820              &lv, &only_utf8_locale);
15821     if (lv && lv != &PL_sv_undef) {
15822      char *s = savesvpv(lv);
15823      char * const origs = s;
15824
15825      while (*s && *s != '\n')
15826       s++;
15827
15828      if (*s == '\n') {
15829       const char * const t = ++s;
15830
15831       if (flags & ANYOF_NONBITMAP_NON_UTF8) {
15832        sv_catpvs(sv, "{outside bitmap}");
15833       }
15834       else {
15835        sv_catpvs(sv, "{utf8}");
15836       }
15837
15838       if (byte_output) {
15839        sv_catpvs(sv, " ");
15840       }
15841
15842       while (*s) {
15843        if (*s == '\n') {
15844
15845         /* Truncate very long output */
15846         if (s - origs > 256) {
15847          Perl_sv_catpvf(aTHX_ sv,
15848             "%.*s...",
15849             (int) (s - origs - 1),
15850             t);
15851          goto out_dump;
15852         }
15853         *s = ' ';
15854        }
15855        else if (*s == '\t') {
15856         *s = '-';
15857        }
15858        s++;
15859       }
15860       if (s[-1] == ' ')
15861        s[-1] = 0;
15862
15863       sv_catpv(sv, t);
15864      }
15865
15866     out_dump:
15867
15868      Safefree(origs);
15869      SvREFCNT_dec_NN(lv);
15870     }
15871
15872     if ((flags & ANYOF_LOC_FOLD)
15873      && only_utf8_locale
15874      && only_utf8_locale != &PL_sv_undef)
15875     {
15876      UV start, end;
15877      int max_entries = 256;
15878
15879      sv_catpvs(sv, "{utf8 locale}");
15880      invlist_iterinit(only_utf8_locale);
15881      while (invlist_iternext(only_utf8_locale,
15882            &start, &end)) {
15883       put_range(sv, start, end);
15884       max_entries --;
15885       if (max_entries < 0) {
15886        sv_catpvs(sv, "...");
15887        break;
15888       }
15889      }
15890      invlist_iterfinish(only_utf8_locale);
15891     }
15892    }
15893   }
15894
15895   Perl_sv_catpvf(aTHX_ sv, "%s]", PL_colors[1]);
15896  }
15897  else if (k == POSIXD || k == NPOSIXD) {
15898   U8 index = FLAGS(o) * 2;
15899   if (index < C_ARRAY_LENGTH(anyofs)) {
15900    if (*anyofs[index] != '[')  {
15901     sv_catpv(sv, "[");
15902    }
15903    sv_catpv(sv, anyofs[index]);
15904    if (*anyofs[index] != '[')  {
15905     sv_catpv(sv, "]");
15906    }
15907   }
15908   else {
15909    Perl_sv_catpvf(aTHX_ sv, "[illegal type=%d])", index);
15910   }
15911  }
15912  else if (k == BRANCHJ && (OP(o) == UNLESSM || OP(o) == IFMATCH))
15913   Perl_sv_catpvf(aTHX_ sv, "[%d]", -(o->flags));
15914 #else
15915  PERL_UNUSED_CONTEXT;
15916  PERL_UNUSED_ARG(sv);
15917  PERL_UNUSED_ARG(o);
15918  PERL_UNUSED_ARG(prog);
15919  PERL_UNUSED_ARG(reginfo);
15920 #endif /* DEBUGGING */
15921 }
15922
15923
15924
15925 SV *
15926 Perl_re_intuit_string(pTHX_ REGEXP * const r)
15927 {    /* Assume that RE_INTUIT is set */
15928  dVAR;
15929  struct regexp *const prog = ReANY(r);
15930  GET_RE_DEBUG_FLAGS_DECL;
15931
15932  PERL_ARGS_ASSERT_RE_INTUIT_STRING;
15933  PERL_UNUSED_CONTEXT;
15934
15935  DEBUG_COMPILE_r(
15936   {
15937    const char * const s = SvPV_nolen_const(prog->check_substr
15938      ? prog->check_substr : prog->check_utf8);
15939
15940    if (!PL_colorset) reginitcolors();
15941    PerlIO_printf(Perl_debug_log,
15942      "%sUsing REx %ssubstr:%s \"%s%.60s%s%s\"\n",
15943      PL_colors[4],
15944      prog->check_substr ? "" : "utf8 ",
15945      PL_colors[5],PL_colors[0],
15946      s,
15947      PL_colors[1],
15948      (strlen(s) > 60 ? "..." : ""));
15949   } );
15950
15951  return prog->check_substr ? prog->check_substr : prog->check_utf8;
15952 }
15953
15954 /*
15955    pregfree()
15956
15957    handles refcounting and freeing the perl core regexp structure. When
15958    it is necessary to actually free the structure the first thing it
15959    does is call the 'free' method of the regexp_engine associated to
15960    the regexp, allowing the handling of the void *pprivate; member
15961    first. (This routine is not overridable by extensions, which is why
15962    the extensions free is called first.)
15963
15964    See regdupe and regdupe_internal if you change anything here.
15965 */
15966 #ifndef PERL_IN_XSUB_RE
15967 void
15968 Perl_pregfree(pTHX_ REGEXP *r)
15969 {
15970  SvREFCNT_dec(r);
15971 }
15972
15973 void
15974 Perl_pregfree2(pTHX_ REGEXP *rx)
15975 {
15976  dVAR;
15977  struct regexp *const r = ReANY(rx);
15978  GET_RE_DEBUG_FLAGS_DECL;
15979
15980  PERL_ARGS_ASSERT_PREGFREE2;
15981
15982  if (r->mother_re) {
15983   ReREFCNT_dec(r->mother_re);
15984  } else {
15985   CALLREGFREE_PVT(rx); /* free the private data */
15986   SvREFCNT_dec(RXp_PAREN_NAMES(r));
15987   Safefree(r->xpv_len_u.xpvlenu_pv);
15988  }
15989  if (r->substrs) {
15990   SvREFCNT_dec(r->anchored_substr);
15991   SvREFCNT_dec(r->anchored_utf8);
15992   SvREFCNT_dec(r->float_substr);
15993   SvREFCNT_dec(r->float_utf8);
15994   Safefree(r->substrs);
15995  }
15996  RX_MATCH_COPY_FREE(rx);
15997 #ifdef PERL_ANY_COW
15998  SvREFCNT_dec(r->saved_copy);
15999 #endif
16000  Safefree(r->offs);
16001  SvREFCNT_dec(r->qr_anoncv);
16002  rx->sv_u.svu_rx = 0;
16003 }
16004
16005 /*  reg_temp_copy()
16006
16007  This is a hacky workaround to the structural issue of match results
16008  being stored in the regexp structure which is in turn stored in
16009  PL_curpm/PL_reg_curpm. The problem is that due to qr// the pattern
16010  could be PL_curpm in multiple contexts, and could require multiple
16011  result sets being associated with the pattern simultaneously, such
16012  as when doing a recursive match with (??{$qr})
16013
16014  The solution is to make a lightweight copy of the regexp structure
16015  when a qr// is returned from the code executed by (??{$qr}) this
16016  lightweight copy doesn't actually own any of its data except for
16017  the starp/end and the actual regexp structure itself.
16018
16019 */
16020
16021
16022 REGEXP *
16023 Perl_reg_temp_copy (pTHX_ REGEXP *ret_x, REGEXP *rx)
16024 {
16025  struct regexp *ret;
16026  struct regexp *const r = ReANY(rx);
16027  const bool islv = ret_x && SvTYPE(ret_x) == SVt_PVLV;
16028
16029  PERL_ARGS_ASSERT_REG_TEMP_COPY;
16030
16031  if (!ret_x)
16032   ret_x = (REGEXP*) newSV_type(SVt_REGEXP);
16033  else {
16034   SvOK_off((SV *)ret_x);
16035   if (islv) {
16036    /* For PVLVs, SvANY points to the xpvlv body while sv_u points
16037    to the regexp.  (For SVt_REGEXPs, sv_upgrade has already
16038    made both spots point to the same regexp body.) */
16039    REGEXP *temp = (REGEXP *)newSV_type(SVt_REGEXP);
16040    assert(!SvPVX(ret_x));
16041    ret_x->sv_u.svu_rx = temp->sv_any;
16042    temp->sv_any = NULL;
16043    SvFLAGS(temp) = (SvFLAGS(temp) & ~SVTYPEMASK) | SVt_NULL;
16044    SvREFCNT_dec_NN(temp);
16045    /* SvCUR still resides in the xpvlv struct, so the regexp copy-
16046    ing below will not set it. */
16047    SvCUR_set(ret_x, SvCUR(rx));
16048   }
16049  }
16050  /* This ensures that SvTHINKFIRST(sv) is true, and hence that
16051  sv_force_normal(sv) is called.  */
16052  SvFAKE_on(ret_x);
16053  ret = ReANY(ret_x);
16054
16055  SvFLAGS(ret_x) |= SvUTF8(rx);
16056  /* We share the same string buffer as the original regexp, on which we
16057  hold a reference count, incremented when mother_re is set below.
16058  The string pointer is copied here, being part of the regexp struct.
16059  */
16060  memcpy(&(ret->xpv_cur), &(r->xpv_cur),
16061   sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur));
16062  if (r->offs) {
16063   const I32 npar = r->nparens+1;
16064   Newx(ret->offs, npar, regexp_paren_pair);
16065   Copy(r->offs, ret->offs, npar, regexp_paren_pair);
16066  }
16067  if (r->substrs) {
16068   Newx(ret->substrs, 1, struct reg_substr_data);
16069   StructCopy(r->substrs, ret->substrs, struct reg_substr_data);
16070
16071   SvREFCNT_inc_void(ret->anchored_substr);
16072   SvREFCNT_inc_void(ret->anchored_utf8);
16073   SvREFCNT_inc_void(ret->float_substr);
16074   SvREFCNT_inc_void(ret->float_utf8);
16075
16076   /* check_substr and check_utf8, if non-NULL, point to either their
16077   anchored or float namesakes, and don't hold a second reference.  */
16078  }
16079  RX_MATCH_COPIED_off(ret_x);
16080 #ifdef PERL_ANY_COW
16081  ret->saved_copy = NULL;
16082 #endif
16083  ret->mother_re = ReREFCNT_inc(r->mother_re ? r->mother_re : rx);
16084  SvREFCNT_inc_void(ret->qr_anoncv);
16085
16086  return ret_x;
16087 }
16088 #endif
16089
16090 /* regfree_internal()
16091
16092    Free the private data in a regexp. This is overloadable by
16093    extensions. Perl takes care of the regexp structure in pregfree(),
16094    this covers the *pprivate pointer which technically perl doesn't
16095    know about, however of course we have to handle the
16096    regexp_internal structure when no extension is in use.
16097
16098    Note this is called before freeing anything in the regexp
16099    structure.
16100  */
16101
16102 void
16103 Perl_regfree_internal(pTHX_ REGEXP * const rx)
16104 {
16105  dVAR;
16106  struct regexp *const r = ReANY(rx);
16107  RXi_GET_DECL(r,ri);
16108  GET_RE_DEBUG_FLAGS_DECL;
16109
16110  PERL_ARGS_ASSERT_REGFREE_INTERNAL;
16111
16112  DEBUG_COMPILE_r({
16113   if (!PL_colorset)
16114    reginitcolors();
16115   {
16116    SV *dsv= sv_newmortal();
16117    RE_PV_QUOTED_DECL(s, RX_UTF8(rx),
16118     dsv, RX_PRECOMP(rx), RX_PRELEN(rx), 60);
16119    PerlIO_printf(Perl_debug_log,"%sFreeing REx:%s %s\n",
16120     PL_colors[4],PL_colors[5],s);
16121   }
16122  });
16123 #ifdef RE_TRACK_PATTERN_OFFSETS
16124  if (ri->u.offsets)
16125   Safefree(ri->u.offsets);             /* 20010421 MJD */
16126 #endif
16127  if (ri->code_blocks) {
16128   int n;
16129   for (n = 0; n < ri->num_code_blocks; n++)
16130    SvREFCNT_dec(ri->code_blocks[n].src_regex);
16131   Safefree(ri->code_blocks);
16132  }
16133
16134  if (ri->data) {
16135   int n = ri->data->count;
16136
16137   while (--n >= 0) {
16138   /* If you add a ->what type here, update the comment in regcomp.h */
16139    switch (ri->data->what[n]) {
16140    case 'a':
16141    case 'r':
16142    case 's':
16143    case 'S':
16144    case 'u':
16145     SvREFCNT_dec(MUTABLE_SV(ri->data->data[n]));
16146     break;
16147    case 'f':
16148     Safefree(ri->data->data[n]);
16149     break;
16150    case 'l':
16151    case 'L':
16152     break;
16153    case 'T':
16154     { /* Aho Corasick add-on structure for a trie node.
16155      Used in stclass optimization only */
16156      U32 refcount;
16157      reg_ac_data *aho=(reg_ac_data*)ri->data->data[n];
16158      OP_REFCNT_LOCK;
16159      refcount = --aho->refcount;
16160      OP_REFCNT_UNLOCK;
16161      if ( !refcount ) {
16162       PerlMemShared_free(aho->states);
16163       PerlMemShared_free(aho->fail);
16164       /* do this last!!!! */
16165       PerlMemShared_free(ri->data->data[n]);
16166       PerlMemShared_free(ri->regstclass);
16167      }
16168     }
16169     break;
16170    case 't':
16171     {
16172      /* trie structure. */
16173      U32 refcount;
16174      reg_trie_data *trie=(reg_trie_data*)ri->data->data[n];
16175      OP_REFCNT_LOCK;
16176      refcount = --trie->refcount;
16177      OP_REFCNT_UNLOCK;
16178      if ( !refcount ) {
16179       PerlMemShared_free(trie->charmap);
16180       PerlMemShared_free(trie->states);
16181       PerlMemShared_free(trie->trans);
16182       if (trie->bitmap)
16183        PerlMemShared_free(trie->bitmap);
16184       if (trie->jump)
16185        PerlMemShared_free(trie->jump);
16186       PerlMemShared_free(trie->wordinfo);
16187       /* do this last!!!! */
16188       PerlMemShared_free(ri->data->data[n]);
16189      }
16190     }
16191     break;
16192    default:
16193     Perl_croak(aTHX_ "panic: regfree data code '%c'",
16194              ri->data->what[n]);
16195    }
16196   }
16197   Safefree(ri->data->what);
16198   Safefree(ri->data);
16199  }
16200
16201  Safefree(ri);
16202 }
16203
16204 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
16205 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
16206 #define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
16207
16208 /*
16209    re_dup - duplicate a regexp.
16210
16211    This routine is expected to clone a given regexp structure. It is only
16212    compiled under USE_ITHREADS.
16213
16214    After all of the core data stored in struct regexp is duplicated
16215    the regexp_engine.dupe method is used to copy any private data
16216    stored in the *pprivate pointer. This allows extensions to handle
16217    any duplication it needs to do.
16218
16219    See pregfree() and regfree_internal() if you change anything here.
16220 */
16221 #if defined(USE_ITHREADS)
16222 #ifndef PERL_IN_XSUB_RE
16223 void
16224 Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS *param)
16225 {
16226  dVAR;
16227  I32 npar;
16228  const struct regexp *r = ReANY(sstr);
16229  struct regexp *ret = ReANY(dstr);
16230
16231  PERL_ARGS_ASSERT_RE_DUP_GUTS;
16232
16233  npar = r->nparens+1;
16234  Newx(ret->offs, npar, regexp_paren_pair);
16235  Copy(r->offs, ret->offs, npar, regexp_paren_pair);
16236
16237  if (ret->substrs) {
16238   /* Do it this way to avoid reading from *r after the StructCopy().
16239   That way, if any of the sv_dup_inc()s dislodge *r from the L1
16240   cache, it doesn't matter.  */
16241   const bool anchored = r->check_substr
16242    ? r->check_substr == r->anchored_substr
16243    : r->check_utf8 == r->anchored_utf8;
16244   Newx(ret->substrs, 1, struct reg_substr_data);
16245   StructCopy(r->substrs, ret->substrs, struct reg_substr_data);
16246
16247   ret->anchored_substr = sv_dup_inc(ret->anchored_substr, param);
16248   ret->anchored_utf8 = sv_dup_inc(ret->anchored_utf8, param);
16249   ret->float_substr = sv_dup_inc(ret->float_substr, param);
16250   ret->float_utf8 = sv_dup_inc(ret->float_utf8, param);
16251
16252   /* check_substr and check_utf8, if non-NULL, point to either their
16253   anchored or float namesakes, and don't hold a second reference.  */
16254
16255   if (ret->check_substr) {
16256    if (anchored) {
16257     assert(r->check_utf8 == r->anchored_utf8);
16258     ret->check_substr = ret->anchored_substr;
16259     ret->check_utf8 = ret->anchored_utf8;
16260    } else {
16261     assert(r->check_substr == r->float_substr);
16262     assert(r->check_utf8 == r->float_utf8);
16263     ret->check_substr = ret->float_substr;
16264     ret->check_utf8 = ret->float_utf8;
16265    }
16266   } else if (ret->check_utf8) {
16267    if (anchored) {
16268     ret->check_utf8 = ret->anchored_utf8;
16269    } else {
16270     ret->check_utf8 = ret->float_utf8;
16271    }
16272   }
16273  }
16274
16275  RXp_PAREN_NAMES(ret) = hv_dup_inc(RXp_PAREN_NAMES(ret), param);
16276  ret->qr_anoncv = MUTABLE_CV(sv_dup_inc((const SV *)ret->qr_anoncv, param));
16277
16278  if (ret->pprivate)
16279   RXi_SET(ret,CALLREGDUPE_PVT(dstr,param));
16280
16281  if (RX_MATCH_COPIED(dstr))
16282   ret->subbeg  = SAVEPVN(ret->subbeg, ret->sublen);
16283  else
16284   ret->subbeg = NULL;
16285 #ifdef PERL_ANY_COW
16286  ret->saved_copy = NULL;
16287 #endif
16288
16289  /* Whether mother_re be set or no, we need to copy the string.  We
16290  cannot refrain from copying it when the storage points directly to
16291  our mother regexp, because that's
16292    1: a buffer in a different thread
16293    2: something we no longer hold a reference on
16294    so we need to copy it locally.  */
16295  RX_WRAPPED(dstr) = SAVEPVN(RX_WRAPPED(sstr), SvCUR(sstr)+1);
16296  ret->mother_re   = NULL;
16297 }
16298 #endif /* PERL_IN_XSUB_RE */
16299
16300 /*
16301    regdupe_internal()
16302
16303    This is the internal complement to regdupe() which is used to copy
16304    the structure pointed to by the *pprivate pointer in the regexp.
16305    This is the core version of the extension overridable cloning hook.
16306    The regexp structure being duplicated will be copied by perl prior
16307    to this and will be provided as the regexp *r argument, however
16308    with the /old/ structures pprivate pointer value. Thus this routine
16309    may override any copying normally done by perl.
16310
16311    It returns a pointer to the new regexp_internal structure.
16312 */
16313
16314 void *
16315 Perl_regdupe_internal(pTHX_ REGEXP * const rx, CLONE_PARAMS *param)
16316 {
16317  dVAR;
16318  struct regexp *const r = ReANY(rx);
16319  regexp_internal *reti;
16320  int len;
16321  RXi_GET_DECL(r,ri);
16322
16323  PERL_ARGS_ASSERT_REGDUPE_INTERNAL;
16324
16325  len = ProgLen(ri);
16326
16327  Newxc(reti, sizeof(regexp_internal) + len*sizeof(regnode),
16328   char, regexp_internal);
16329  Copy(ri->program, reti->program, len+1, regnode);
16330
16331  reti->num_code_blocks = ri->num_code_blocks;
16332  if (ri->code_blocks) {
16333   int n;
16334   Newxc(reti->code_blocks, ri->num_code_blocks, struct reg_code_block,
16335     struct reg_code_block);
16336   Copy(ri->code_blocks, reti->code_blocks, ri->num_code_blocks,
16337     struct reg_code_block);
16338   for (n = 0; n < ri->num_code_blocks; n++)
16339    reti->code_blocks[n].src_regex = (REGEXP*)
16340      sv_dup_inc((SV*)(ri->code_blocks[n].src_regex), param);
16341  }
16342  else
16343   reti->code_blocks = NULL;
16344
16345  reti->regstclass = NULL;
16346
16347  if (ri->data) {
16348   struct reg_data *d;
16349   const int count = ri->data->count;
16350   int i;
16351
16352   Newxc(d, sizeof(struct reg_data) + count*sizeof(void *),
16353     char, struct reg_data);
16354   Newx(d->what, count, U8);
16355
16356   d->count = count;
16357   for (i = 0; i < count; i++) {
16358    d->what[i] = ri->data->what[i];
16359    switch (d->what[i]) {
16360     /* see also regcomp.h and regfree_internal() */
16361    case 'a': /* actually an AV, but the dup function is identical.  */
16362    case 'r':
16363    case 's':
16364    case 'S':
16365    case 'u': /* actually an HV, but the dup function is identical.  */
16366     d->data[i] = sv_dup_inc((const SV *)ri->data->data[i], param);
16367     break;
16368    case 'f':
16369     /* This is cheating. */
16370     Newx(d->data[i], 1, regnode_ssc);
16371     StructCopy(ri->data->data[i], d->data[i], regnode_ssc);
16372     reti->regstclass = (regnode*)d->data[i];
16373     break;
16374    case 'T':
16375     /* Trie stclasses are readonly and can thus be shared
16376     * without duplication. We free the stclass in pregfree
16377     * when the corresponding reg_ac_data struct is freed.
16378     */
16379     reti->regstclass= ri->regstclass;
16380     /* Fall through */
16381    case 't':
16382     OP_REFCNT_LOCK;
16383     ((reg_trie_data*)ri->data->data[i])->refcount++;
16384     OP_REFCNT_UNLOCK;
16385     /* Fall through */
16386    case 'l':
16387    case 'L':
16388     d->data[i] = ri->data->data[i];
16389     break;
16390    default:
16391     Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'",
16392               ri->data->what[i]);
16393    }
16394   }
16395
16396   reti->data = d;
16397  }
16398  else
16399   reti->data = NULL;
16400
16401  reti->name_list_idx = ri->name_list_idx;
16402
16403 #ifdef RE_TRACK_PATTERN_OFFSETS
16404  if (ri->u.offsets) {
16405   Newx(reti->u.offsets, 2*len+1, U32);
16406   Copy(ri->u.offsets, reti->u.offsets, 2*len+1, U32);
16407  }
16408 #else
16409  SetProgLen(reti,len);
16410 #endif
16411
16412  return (void*)reti;
16413 }
16414
16415 #endif    /* USE_ITHREADS */
16416
16417 #ifndef PERL_IN_XSUB_RE
16418
16419 /*
16420  - regnext - dig the "next" pointer out of a node
16421  */
16422 regnode *
16423 Perl_regnext(pTHX_ regnode *p)
16424 {
16425  dVAR;
16426  I32 offset;
16427
16428  if (!p)
16429   return(NULL);
16430
16431  if (OP(p) > REGNODE_MAX) {  /* regnode.type is unsigned */
16432   Perl_croak(aTHX_ "Corrupted regexp opcode %d > %d",
16433             (int)OP(p), (int)REGNODE_MAX);
16434  }
16435
16436  offset = (reg_off_by_arg[OP(p)] ? ARG(p) : NEXT_OFF(p));
16437  if (offset == 0)
16438   return(NULL);
16439
16440  return(p+offset);
16441 }
16442 #endif
16443
16444 STATIC void
16445 S_re_croak2(pTHX_ bool utf8, const char* pat1,const char* pat2,...)
16446 {
16447  va_list args;
16448  STRLEN l1 = strlen(pat1);
16449  STRLEN l2 = strlen(pat2);
16450  char buf[512];
16451  SV *msv;
16452  const char *message;
16453
16454  PERL_ARGS_ASSERT_RE_CROAK2;
16455
16456  if (l1 > 510)
16457   l1 = 510;
16458  if (l1 + l2 > 510)
16459   l2 = 510 - l1;
16460  Copy(pat1, buf, l1 , char);
16461  Copy(pat2, buf + l1, l2 , char);
16462  buf[l1 + l2] = '\n';
16463  buf[l1 + l2 + 1] = '\0';
16464  va_start(args, pat2);
16465  msv = vmess(buf, &args);
16466  va_end(args);
16467  message = SvPV_const(msv,l1);
16468  if (l1 > 512)
16469   l1 = 512;
16470  Copy(message, buf, l1 , char);
16471  /* l1-1 to avoid \n */
16472  Perl_croak(aTHX_ "%"UTF8f, UTF8fARG(utf8, l1-1, buf));
16473 }
16474
16475 /* XXX Here's a total kludge.  But we need to re-enter for swash routines. */
16476
16477 #ifndef PERL_IN_XSUB_RE
16478 void
16479 Perl_save_re_context(pTHX)
16480 {
16481  dVAR;
16482
16483  /* Save $1..$n (#18107: UTF-8 s/(\w+)/uc($1)/e); AMS 20021106. */
16484  if (PL_curpm) {
16485   const REGEXP * const rx = PM_GETRE(PL_curpm);
16486   if (rx) {
16487    U32 i;
16488    for (i = 1; i <= RX_NPARENS(rx); i++) {
16489     char digits[TYPE_CHARS(long)];
16490     const STRLEN len = my_snprintf(digits, sizeof(digits),
16491            "%lu", (long)i);
16492     GV *const *const gvp
16493      = (GV**)hv_fetch(PL_defstash, digits, len, 0);
16494
16495     if (gvp) {
16496      GV * const gv = *gvp;
16497      if (SvTYPE(gv) == SVt_PVGV && GvSV(gv))
16498       save_scalar(gv);
16499     }
16500    }
16501   }
16502  }
16503 }
16504 #endif
16505
16506 #ifdef DEBUGGING
16507
16508 STATIC void
16509 S_put_byte(pTHX_ SV *sv, int c)
16510 {
16511  PERL_ARGS_ASSERT_PUT_BYTE;
16512
16513  if (!isPRINT(c)) {
16514   switch (c) {
16515    case '\r': Perl_sv_catpvf(aTHX_ sv, "\\r"); break;
16516    case '\n': Perl_sv_catpvf(aTHX_ sv, "\\n"); break;
16517    case '\t': Perl_sv_catpvf(aTHX_ sv, "\\t"); break;
16518    case '\f': Perl_sv_catpvf(aTHX_ sv, "\\f"); break;
16519    case '\a': Perl_sv_catpvf(aTHX_ sv, "\\a"); break;
16520
16521    default:
16522     Perl_sv_catpvf(aTHX_ sv, "\\x{%x}", c);
16523     break;
16524   }
16525  }
16526  else {
16527   const char string = c;
16528   if (c == '-' || c == ']' || c == '\\' || c == '^')
16529    sv_catpvs(sv, "\\");
16530   sv_catpvn(sv, &string, 1);
16531  }
16532 }
16533
16534 STATIC void
16535 S_put_range(pTHX_ SV *sv, UV start, UV end)
16536 {
16537
16538  /* Appends to 'sv' a displayable version of the range of code points from
16539  * 'start' to 'end' */
16540
16541  assert(start <= end);
16542
16543  PERL_ARGS_ASSERT_PUT_RANGE;
16544
16545  if (end - start < 3) {  /* Individual chars in short ranges */
16546   for (; start <= end; start++)
16547    put_byte(sv, start);
16548  }
16549  else if (   end > 255
16550    || ! isALPHANUMERIC(start)
16551    || ! isALPHANUMERIC(end)
16552    || isDIGIT(start) != isDIGIT(end)
16553    || isUPPER(start) != isUPPER(end)
16554    || isLOWER(start) != isLOWER(end)
16555
16556     /* This final test should get optimized out except on EBCDIC
16557     * platforms, where it causes ranges that cross discontinuities
16558     * like i/j to be shown as hex instead of the misleading,
16559     * e.g. H-K (since that range includes more than H, I, J, K).
16560     * */
16561    || (end - start) != NATIVE_TO_ASCII(end) - NATIVE_TO_ASCII(start))
16562  {
16563   Perl_sv_catpvf(aTHX_ sv, "\\x{%02" UVXf "}-\\x{%02" UVXf "}",
16564      start,
16565      (end < 256) ? end : 255);
16566  }
16567  else { /* Here, the ends of the range are both digits, or both uppercase,
16568    or both lowercase; and there's no discontinuity in the range
16569    (which could happen on EBCDIC platforms) */
16570   put_byte(sv, start);
16571   sv_catpvs(sv, "-");
16572   put_byte(sv, end);
16573  }
16574 }
16575
16576 STATIC bool
16577 S_put_latin1_charclass_innards(pTHX_ SV *sv, char *bitmap)
16578 {
16579  /* Appends to 'sv' a displayable version of the innards of the bracketed
16580  * character class whose bitmap is 'bitmap';  Returns 'TRUE' if it actually
16581  * output anything */
16582
16583  int i;
16584  bool has_output_anything = FALSE;
16585
16586  PERL_ARGS_ASSERT_PUT_LATIN1_CHARCLASS_INNARDS;
16587
16588  for (i = 0; i < 256; i++) {
16589   if (BITMAP_TEST((U8 *) bitmap,i)) {
16590
16591    /* The character at index i should be output.  Find the next
16592    * character that should NOT be output */
16593    int j;
16594    for (j = i + 1; j < 256; j++) {
16595     if (! BITMAP_TEST((U8 *) bitmap, j)) {
16596      break;
16597     }
16598    }
16599
16600    /* Everything between them is a single range that should be output
16601    * */
16602    put_range(sv, i, j - 1);
16603    has_output_anything = TRUE;
16604    i = j;
16605   }
16606  }
16607
16608  return has_output_anything;
16609 }
16610
16611 #define CLEAR_OPTSTART \
16612  if (optstart) STMT_START {                                               \
16613   DEBUG_OPTIMISE_r(PerlIO_printf(Perl_debug_log,                       \
16614        " (%"IVdf" nodes)\n", (IV)(node - optstart))); \
16615   optstart=NULL;                                                       \
16616  } STMT_END
16617
16618 #define DUMPUNTIL(b,e)                                                       \
16619      CLEAR_OPTSTART;                                          \
16620      node=dumpuntil(r,start,(b),(e),last,sv,indent+1,depth+1);
16621
16622 STATIC const regnode *
16623 S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node,
16624    const regnode *last, const regnode *plast,
16625    SV* sv, I32 indent, U32 depth)
16626 {
16627  dVAR;
16628  U8 op = PSEUDO; /* Arbitrary non-END op. */
16629  const regnode *next;
16630  const regnode *optstart= NULL;
16631
16632  RXi_GET_DECL(r,ri);
16633  GET_RE_DEBUG_FLAGS_DECL;
16634
16635  PERL_ARGS_ASSERT_DUMPUNTIL;
16636
16637 #ifdef DEBUG_DUMPUNTIL
16638  PerlIO_printf(Perl_debug_log, "--- %d : %d - %d - %d\n",indent,node-start,
16639   last ? last-start : 0,plast ? plast-start : 0);
16640 #endif
16641
16642  if (plast && plast < last)
16643   last= plast;
16644
16645  while (PL_regkind[op] != END && (!last || node < last)) {
16646   /* While that wasn't END last time... */
16647   NODE_ALIGN(node);
16648   op = OP(node);
16649   if (op == CLOSE || op == WHILEM)
16650    indent--;
16651   next = regnext((regnode *)node);
16652
16653   /* Where, what. */
16654   if (OP(node) == OPTIMIZED) {
16655    if (!optstart && RE_DEBUG_FLAG(RE_DEBUG_COMPILE_OPTIMISE))
16656     optstart = node;
16657    else
16658     goto after_print;
16659   } else
16660    CLEAR_OPTSTART;
16661
16662   regprop(r, sv, node, NULL);
16663   PerlIO_printf(Perl_debug_log, "%4"IVdf":%*s%s", (IV)(node - start),
16664      (int)(2*indent + 1), "", SvPVX_const(sv));
16665
16666   if (OP(node) != OPTIMIZED) {
16667    if (next == NULL)  /* Next ptr. */
16668     PerlIO_printf(Perl_debug_log, " (0)");
16669    else if (PL_regkind[(U8)op] == BRANCH
16670      && PL_regkind[OP(next)] != BRANCH )
16671     PerlIO_printf(Perl_debug_log, " (FAIL)");
16672    else
16673     PerlIO_printf(Perl_debug_log, " (%"IVdf")", (IV)(next - start));
16674    (void)PerlIO_putc(Perl_debug_log, '\n');
16675   }
16676
16677  after_print:
16678   if (PL_regkind[(U8)op] == BRANCHJ) {
16679    assert(next);
16680    {
16681     const regnode *nnode = (OP(next) == LONGJMP
16682          ? regnext((regnode *)next)
16683          : next);
16684     if (last && nnode > last)
16685      nnode = last;
16686     DUMPUNTIL(NEXTOPER(NEXTOPER(node)), nnode);
16687    }
16688   }
16689   else if (PL_regkind[(U8)op] == BRANCH) {
16690    assert(next);
16691    DUMPUNTIL(NEXTOPER(node), next);
16692   }
16693   else if ( PL_regkind[(U8)op]  == TRIE ) {
16694    const regnode *this_trie = node;
16695    const char op = OP(node);
16696    const U32 n = ARG(node);
16697    const reg_ac_data * const ac = op>=AHOCORASICK ?
16698    (reg_ac_data *)ri->data->data[n] :
16699    NULL;
16700    const reg_trie_data * const trie =
16701     (reg_trie_data*)ri->data->data[op<AHOCORASICK ? n : ac->trie];
16702 #ifdef DEBUGGING
16703    AV *const trie_words
16704       = MUTABLE_AV(ri->data->data[n + TRIE_WORDS_OFFSET]);
16705 #endif
16706    const regnode *nextbranch= NULL;
16707    I32 word_idx;
16708    sv_setpvs(sv, "");
16709    for (word_idx= 0; word_idx < (I32)trie->wordcount; word_idx++) {
16710     SV ** const elem_ptr = av_fetch(trie_words,word_idx,0);
16711
16712     PerlIO_printf(Perl_debug_log, "%*s%s ",
16713     (int)(2*(indent+3)), "",
16714      elem_ptr
16715      ? pv_pretty(sv, SvPV_nolen_const(*elem_ptr),
16716         SvCUR(*elem_ptr), 60,
16717         PL_colors[0], PL_colors[1],
16718         (SvUTF8(*elem_ptr)
16719         ? PERL_PV_ESCAPE_UNI
16720         : 0)
16721         | PERL_PV_PRETTY_ELLIPSES
16722         | PERL_PV_PRETTY_LTGT
16723        )
16724      : "???"
16725     );
16726     if (trie->jump) {
16727      U16 dist= trie->jump[word_idx+1];
16728      PerlIO_printf(Perl_debug_log, "(%"UVuf")\n",
16729        (UV)((dist ? this_trie + dist : next) - start));
16730      if (dist) {
16731       if (!nextbranch)
16732        nextbranch= this_trie + trie->jump[0];
16733       DUMPUNTIL(this_trie + dist, nextbranch);
16734      }
16735      if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH)
16736       nextbranch= regnext((regnode *)nextbranch);
16737     } else {
16738      PerlIO_printf(Perl_debug_log, "\n");
16739     }
16740    }
16741    if (last && next > last)
16742     node= last;
16743    else
16744     node= next;
16745   }
16746   else if ( op == CURLY ) {   /* "next" might be very big: optimizer */
16747    DUMPUNTIL(NEXTOPER(node) + EXTRA_STEP_2ARGS,
16748      NEXTOPER(node) + EXTRA_STEP_2ARGS + 1);
16749   }
16750   else if (PL_regkind[(U8)op] == CURLY && op != CURLYX) {
16751    assert(next);
16752    DUMPUNTIL(NEXTOPER(node) + EXTRA_STEP_2ARGS, next);
16753   }
16754   else if ( op == PLUS || op == STAR) {
16755    DUMPUNTIL(NEXTOPER(node), NEXTOPER(node) + 1);
16756   }
16757   else if (PL_regkind[(U8)op] == ANYOF) {
16758    /* arglen 1 + class block */
16759    node += 1 + ((ANYOF_FLAGS(node) & ANYOF_POSIXL)
16760       ? ANYOF_POSIXL_SKIP
16761       : ANYOF_SKIP);
16762    node = NEXTOPER(node);
16763   }
16764   else if (PL_regkind[(U8)op] == EXACT) {
16765    /* Literal string, where present. */
16766    node += NODE_SZ_STR(node) - 1;
16767    node = NEXTOPER(node);
16768   }
16769   else {
16770    node = NEXTOPER(node);
16771    node += regarglen[(U8)op];
16772   }
16773   if (op == CURLYX || op == OPEN)
16774    indent++;
16775  }
16776  CLEAR_OPTSTART;
16777 #ifdef DEBUG_DUMPUNTIL
16778  PerlIO_printf(Perl_debug_log, "--- %d\n", (int)indent);
16779 #endif
16780  return node;
16781 }
16782
16783 #endif /* DEBUGGING */
16784
16785 /*
16786  * Local variables:
16787  * c-indentation-style: bsd
16788  * c-basic-offset: 4
16789  * indent-tabs-mode: nil
16790  * End:
16791  *
16792  * ex: set ts=8 sts=4 sw=4 et:
16793  */