]> git.vpit.fr Git - perl/modules/re-engine-Hooks.git/blob - src/5018000/regcomp.c
Define PERL_IN_XSUB_RE when including perl.h
[perl/modules/re-engine-Hooks.git] / src / 5018000 / 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 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) _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(i)
98 #define IS_NON_FINAL_FOLD(c) _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)
99 #define IS_IN_SOME_FOLD_L1(c) _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)
100
101 #ifdef op
102 #undef op
103 #endif /* op */
104
105 #ifdef MSDOS
106 #  if defined(BUGGY_MSC6)
107  /* MSC 6.00A breaks on op/regexp.t test 85 unless we turn this off */
108 #    pragma optimize("a",off)
109  /* But MSC 6.00A is happy with 'w', for aliases only across function calls*/
110 #    pragma optimize("w",on )
111 #  endif /* BUGGY_MSC6 */
112 #endif /* MSDOS */
113
114 #ifndef STATIC
115 #define STATIC static
116 #endif
117
118
119 typedef struct RExC_state_t {
120  U32  flags;   /* RXf_* are we folding, multilining? */
121  U32  pm_flags;  /* PMf_* stuff from the calling PMOP */
122  char *precomp;  /* uncompiled string. */
123  REGEXP *rx_sv;   /* The SV that is the regexp. */
124  regexp *rx;                    /* perl core regexp structure */
125  regexp_internal *rxi;           /* internal data for regexp object pprivate field */
126  char *start;   /* Start of input for compile */
127  char *end;   /* End of input for compile */
128  char *parse;   /* Input-scan pointer. */
129  I32  whilem_seen;  /* number of WHILEM in this expr */
130  regnode *emit_start;  /* Start of emitted-code area */
131  regnode *emit_bound;  /* First regnode outside of the allocated space */
132  regnode *emit;   /* Code-emit pointer; &regdummy = don't = compiling */
133  I32  naughty;  /* How bad is this pattern? */
134  I32  sawback;  /* Did we see \1, ...? */
135  U32  seen;
136  I32  size;   /* Code size. */
137  I32  npar;   /* Capture buffer count, (OPEN). */
138  I32  cpar;   /* Capture buffer count, (CLOSE). */
139  I32  nestroot;  /* root parens we are in - used by accept */
140  I32  extralen;
141  I32  seen_zerolen;
142  regnode **open_parens;  /* pointers to open parens */
143  regnode **close_parens;  /* pointers to close parens */
144  regnode *opend;   /* END node in program */
145  I32  utf8;  /* whether the pattern is utf8 or not */
146  I32  orig_utf8; /* whether the pattern was originally in utf8 */
147         /* XXX use this for future optimisation of case
148         * where pattern must be upgraded to utf8. */
149  I32  uni_semantics; /* If a d charset modifier should use unicode
150         rules, even if the pattern is not in
151         utf8 */
152  HV  *paren_names;  /* Paren names */
153
154  regnode **recurse;  /* Recurse regops */
155  I32  recurse_count;  /* Number of recurse regops */
156  I32  in_lookbehind;
157  I32  contains_locale;
158  I32  override_recoding;
159  I32  in_multi_char_class;
160  struct reg_code_block *code_blocks; /* positions of literal (?{})
161            within pattern */
162  int  num_code_blocks; /* size of code_blocks[] */
163  int  code_index;  /* next code_blocks[] slot */
164 #if ADD_TO_REGEXEC
165  char  *starttry;  /* -Dr: where regtry was called. */
166 #define RExC_starttry (pRExC_state->starttry)
167 #endif
168  SV  *runtime_code_qr; /* qr with the runtime code blocks */
169 #ifdef DEBUGGING
170  const char  *lastparse;
171  I32         lastnum;
172  AV          *paren_name_list;       /* idx -> name */
173 #define RExC_lastparse (pRExC_state->lastparse)
174 #define RExC_lastnum (pRExC_state->lastnum)
175 #define RExC_paren_name_list    (pRExC_state->paren_name_list)
176 #endif
177 } RExC_state_t;
178
179 #define RExC_flags (pRExC_state->flags)
180 #define RExC_pm_flags (pRExC_state->pm_flags)
181 #define RExC_precomp (pRExC_state->precomp)
182 #define RExC_rx_sv (pRExC_state->rx_sv)
183 #define RExC_rx  (pRExC_state->rx)
184 #define RExC_rxi (pRExC_state->rxi)
185 #define RExC_start (pRExC_state->start)
186 #define RExC_end (pRExC_state->end)
187 #define RExC_parse (pRExC_state->parse)
188 #define RExC_whilem_seen (pRExC_state->whilem_seen)
189 #ifdef RE_TRACK_PATTERN_OFFSETS
190 #define RExC_offsets (pRExC_state->rxi->u.offsets) /* I am not like the others */
191 #endif
192 #define RExC_emit (pRExC_state->emit)
193 #define RExC_emit_start (pRExC_state->emit_start)
194 #define RExC_emit_bound (pRExC_state->emit_bound)
195 #define RExC_naughty (pRExC_state->naughty)
196 #define RExC_sawback (pRExC_state->sawback)
197 #define RExC_seen (pRExC_state->seen)
198 #define RExC_size (pRExC_state->size)
199 #define RExC_npar (pRExC_state->npar)
200 #define RExC_nestroot   (pRExC_state->nestroot)
201 #define RExC_extralen (pRExC_state->extralen)
202 #define RExC_seen_zerolen (pRExC_state->seen_zerolen)
203 #define RExC_utf8 (pRExC_state->utf8)
204 #define RExC_uni_semantics (pRExC_state->uni_semantics)
205 #define RExC_orig_utf8 (pRExC_state->orig_utf8)
206 #define RExC_open_parens (pRExC_state->open_parens)
207 #define RExC_close_parens (pRExC_state->close_parens)
208 #define RExC_opend (pRExC_state->opend)
209 #define RExC_paren_names (pRExC_state->paren_names)
210 #define RExC_recurse (pRExC_state->recurse)
211 #define RExC_recurse_count (pRExC_state->recurse_count)
212 #define RExC_in_lookbehind (pRExC_state->in_lookbehind)
213 #define RExC_contains_locale (pRExC_state->contains_locale)
214 #define RExC_override_recoding (pRExC_state->override_recoding)
215 #define RExC_in_multi_char_class (pRExC_state->in_multi_char_class)
216
217
218 #define ISMULT1(c) ((c) == '*' || (c) == '+' || (c) == '?')
219 #define ISMULT2(s) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
220   ((*s) == '{' && regcurly(s, FALSE)))
221
222 #ifdef SPSTART
223 #undef SPSTART  /* dratted cpp namespace... */
224 #endif
225 /*
226  * Flags to be passed up and down.
227  */
228 #define WORST  0 /* Worst case. */
229 #define HASWIDTH 0x01 /* Known to match non-null strings. */
230
231 /* Simple enough to be STAR/PLUS operand; in an EXACTish node must be a single
232  * character.  (There needs to be a case: in the switch statement in regexec.c
233  * for any node marked SIMPLE.)  Note that this is not the same thing as
234  * REGNODE_SIMPLE */
235 #define SIMPLE  0x02
236 #define SPSTART  0x04 /* Starts with * or + */
237 #define POSTPONED 0x08    /* (?1),(?&name), (??{...}) or similar */
238 #define TRYAGAIN 0x10 /* Weeded out a declaration. */
239 #define RESTART_UTF8    0x20    /* Restart, need to calcuate sizes as UTF-8 */
240
241 #define REG_NODE_NUM(x) ((x) ? (int)((x)-RExC_emit_start) : -1)
242
243 /* whether trie related optimizations are enabled */
244 #if PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION
245 #define TRIE_STUDY_OPT
246 #define FULL_TRIE_STUDY
247 #define TRIE_STCLASS
248 #endif
249
250
251
252 #define PBYTE(u8str,paren) ((U8*)(u8str))[(paren) >> 3]
253 #define PBITVAL(paren) (1 << ((paren) & 7))
254 #define PAREN_TEST(u8str,paren) ( PBYTE(u8str,paren) & PBITVAL(paren))
255 #define PAREN_SET(u8str,paren) PBYTE(u8str,paren) |= PBITVAL(paren)
256 #define PAREN_UNSET(u8str,paren) PBYTE(u8str,paren) &= (~PBITVAL(paren))
257
258 #define REQUIRE_UTF8 STMT_START {                                       \
259          if (!UTF) {                           \
260           *flagp = RESTART_UTF8;            \
261           return NULL;                      \
262          }                                     \
263       } STMT_END
264
265 /* This converts the named class defined in regcomp.h to its equivalent class
266  * number defined in handy.h. */
267 #define namedclass_to_classnum(class)  ((int) ((class) / 2))
268 #define classnum_to_namedclass(classnum)  ((classnum) * 2)
269
270 /* About scan_data_t.
271
272   During optimisation we recurse through the regexp program performing
273   various inplace (keyhole style) optimisations. In addition study_chunk
274   and scan_commit populate this data structure with information about
275   what strings MUST appear in the pattern. We look for the longest
276   string that must appear at a fixed location, and we look for the
277   longest string that may appear at a floating location. So for instance
278   in the pattern:
279
280  /FOO[xX]A.*B[xX]BAR/
281
282   Both 'FOO' and 'A' are fixed strings. Both 'B' and 'BAR' are floating
283   strings (because they follow a .* construct). study_chunk will identify
284   both FOO and BAR as being the longest fixed and floating strings respectively.
285
286   The strings can be composites, for instance
287
288  /(f)(o)(o)/
289
290   will result in a composite fixed substring 'foo'.
291
292   For each string some basic information is maintained:
293
294   - offset or min_offset
295  This is the position the string must appear at, or not before.
296  It also implicitly (when combined with minlenp) tells us how many
297  characters must match before the string we are searching for.
298  Likewise when combined with minlenp and the length of the string it
299  tells us how many characters must appear after the string we have
300  found.
301
302   - max_offset
303  Only used for floating strings. This is the rightmost point that
304  the string can appear at. If set to I32 max it indicates that the
305  string can occur infinitely far to the right.
306
307   - minlenp
308  A pointer to the minimum number of characters of the pattern that the
309  string was found inside. This is important as in the case of positive
310  lookahead or positive lookbehind we can have multiple patterns
311  involved. Consider
312
313  /(?=FOO).*F/
314
315  The minimum length of the pattern overall is 3, the minimum length
316  of the lookahead part is 3, but the minimum length of the part that
317  will actually match is 1. So 'FOO's minimum length is 3, but the
318  minimum length for the F is 1. This is important as the minimum length
319  is used to determine offsets in front of and behind the string being
320  looked for.  Since strings can be composites this is the length of the
321  pattern at the time it was committed with a scan_commit. Note that
322  the length is calculated by study_chunk, so that the minimum lengths
323  are not known until the full pattern has been compiled, thus the
324  pointer to the value.
325
326   - lookbehind
327
328  In the case of lookbehind the string being searched for can be
329  offset past the start point of the final matching string.
330  If this value was just blithely removed from the min_offset it would
331  invalidate some of the calculations for how many chars must match
332  before or after (as they are derived from min_offset and minlen and
333  the length of the string being searched for).
334  When the final pattern is compiled and the data is moved from the
335  scan_data_t structure into the regexp structure the information
336  about lookbehind is factored in, with the information that would
337  have been lost precalculated in the end_shift field for the
338  associated string.
339
340   The fields pos_min and pos_delta are used to store the minimum offset
341   and the delta to the maximum offset at the current point in the pattern.
342
343 */
344
345 typedef struct scan_data_t {
346  /*I32 len_min;      unused */
347  /*I32 len_delta;    unused */
348  I32 pos_min;
349  I32 pos_delta;
350  SV *last_found;
351  I32 last_end;     /* min value, <0 unless valid. */
352  I32 last_start_min;
353  I32 last_start_max;
354  SV **longest;     /* Either &l_fixed, or &l_float. */
355  SV *longest_fixed;      /* longest fixed string found in pattern */
356  I32 offset_fixed;       /* offset where it starts */
357  I32 *minlen_fixed;      /* pointer to the minlen relevant to the string */
358  I32 lookbehind_fixed;   /* is the position of the string modfied by LB */
359  SV *longest_float;      /* longest floating string found in pattern */
360  I32 offset_float_min;   /* earliest point in string it can appear */
361  I32 offset_float_max;   /* latest point in string it can appear */
362  I32 *minlen_float;      /* pointer to the minlen relevant to the string */
363  I32 lookbehind_float;   /* is the position of the string modified by LB */
364  I32 flags;
365  I32 whilem_c;
366  I32 *last_closep;
367  struct regnode_charclass_class *start_class;
368 } scan_data_t;
369
370 /*
371  * Forward declarations for pregcomp()'s friends.
372  */
373
374 static const scan_data_t zero_scan_data =
375   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0};
376
377 #define SF_BEFORE_EOL  (SF_BEFORE_SEOL|SF_BEFORE_MEOL)
378 #define SF_BEFORE_SEOL  0x0001
379 #define SF_BEFORE_MEOL  0x0002
380 #define SF_FIX_BEFORE_EOL (SF_FIX_BEFORE_SEOL|SF_FIX_BEFORE_MEOL)
381 #define SF_FL_BEFORE_EOL (SF_FL_BEFORE_SEOL|SF_FL_BEFORE_MEOL)
382
383 #ifdef NO_UNARY_PLUS
384 #  define SF_FIX_SHIFT_EOL (0+2)
385 #  define SF_FL_SHIFT_EOL  (0+4)
386 #else
387 #  define SF_FIX_SHIFT_EOL (+2)
388 #  define SF_FL_SHIFT_EOL  (+4)
389 #endif
390
391 #define SF_FIX_BEFORE_SEOL (SF_BEFORE_SEOL << SF_FIX_SHIFT_EOL)
392 #define SF_FIX_BEFORE_MEOL (SF_BEFORE_MEOL << SF_FIX_SHIFT_EOL)
393
394 #define SF_FL_BEFORE_SEOL (SF_BEFORE_SEOL << SF_FL_SHIFT_EOL)
395 #define SF_FL_BEFORE_MEOL (SF_BEFORE_MEOL << SF_FL_SHIFT_EOL) /* 0x20 */
396 #define SF_IS_INF  0x0040
397 #define SF_HAS_PAR  0x0080
398 #define SF_IN_PAR  0x0100
399 #define SF_HAS_EVAL  0x0200
400 #define SCF_DO_SUBSTR  0x0400
401 #define SCF_DO_STCLASS_AND 0x0800
402 #define SCF_DO_STCLASS_OR 0x1000
403 #define SCF_DO_STCLASS  (SCF_DO_STCLASS_AND|SCF_DO_STCLASS_OR)
404 #define SCF_WHILEM_VISITED_POS 0x2000
405
406 #define SCF_TRIE_RESTUDY        0x4000 /* Do restudy? */
407 #define SCF_SEEN_ACCEPT         0x8000
408
409 #define UTF cBOOL(RExC_utf8)
410
411 /* The enums for all these are ordered so things work out correctly */
412 #define LOC (get_regex_charset(RExC_flags) == REGEX_LOCALE_CHARSET)
413 #define DEPENDS_SEMANTICS (get_regex_charset(RExC_flags) == REGEX_DEPENDS_CHARSET)
414 #define UNI_SEMANTICS (get_regex_charset(RExC_flags) == REGEX_UNICODE_CHARSET)
415 #define AT_LEAST_UNI_SEMANTICS (get_regex_charset(RExC_flags) >= REGEX_UNICODE_CHARSET)
416 #define ASCII_RESTRICTED (get_regex_charset(RExC_flags) == REGEX_ASCII_RESTRICTED_CHARSET)
417 #define AT_LEAST_ASCII_RESTRICTED (get_regex_charset(RExC_flags) >= REGEX_ASCII_RESTRICTED_CHARSET)
418 #define ASCII_FOLD_RESTRICTED (get_regex_charset(RExC_flags) == REGEX_ASCII_MORE_RESTRICTED_CHARSET)
419
420 #define FOLD cBOOL(RExC_flags & RXf_PMf_FOLD)
421
422 #define OOB_NAMEDCLASS  -1
423
424 /* There is no code point that is out-of-bounds, so this is problematic.  But
425  * its only current use is to initialize a variable that is always set before
426  * looked at. */
427 #define OOB_UNICODE  0xDEADBEEF
428
429 #define CHR_SVLEN(sv) (UTF ? sv_len_utf8(sv) : SvCUR(sv))
430 #define CHR_DIST(a,b) (UTF ? utf8_distance(a,b) : a - b)
431
432
433 /* length of regex to show in messages that don't mark a position within */
434 #define RegexLengthToShowInErrorMessages 127
435
436 /*
437  * If MARKER[12] are adjusted, be sure to adjust the constants at the top
438  * of t/op/regmesg.t, the tests in t/op/re_tests, and those in
439  * op/pragma/warn/regcomp.
440  */
441 #define MARKER1 "<-- HERE"    /* marker as it appears in the description */
442 #define MARKER2 " <-- HERE "  /* marker as it appears within the regex */
443
444 #define REPORT_LOCATION " in regex; marked by " MARKER1 " in m/%.*s" MARKER2 "%s/"
445
446 /*
447  * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given
448  * arg. Show regex, up to a maximum length. If it's too long, chop and add
449  * "...".
450  */
451 #define _FAIL(code) STMT_START {     \
452  const char *ellipses = "";      \
453  IV len = RExC_end - RExC_precomp;     \
454                   \
455  if (!SIZE_ONLY)       \
456   SAVEFREESV(RExC_rx_sv);      \
457  if (len > RegexLengthToShowInErrorMessages) {   \
458   /* chop 10 shorter than the max, to ensure meaning of "..." */ \
459   len = RegexLengthToShowInErrorMessages - 10;   \
460   ellipses = "...";      \
461  }         \
462  code;                                                               \
463 } STMT_END
464
465 #define FAIL(msg) _FAIL(       \
466  Perl_croak(aTHX_ "%s in regex m/%.*s%s/",     \
467    msg, (int)len, RExC_precomp, ellipses))
468
469 #define FAIL2(msg,arg) _FAIL(       \
470  Perl_croak(aTHX_ msg " in regex m/%.*s%s/",     \
471    arg, (int)len, RExC_precomp, ellipses))
472
473 /*
474  * Simple_vFAIL -- like FAIL, but marks the current location in the scan
475  */
476 #define Simple_vFAIL(m) STMT_START {     \
477  const IV offset = RExC_parse - RExC_precomp;   \
478  Perl_croak(aTHX_ "%s" REPORT_LOCATION,    \
479    m, (int)offset, RExC_precomp, RExC_precomp + offset); \
480 } STMT_END
481
482 /*
483  * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL()
484  */
485 #define vFAIL(m) STMT_START {    \
486  if (!SIZE_ONLY)     \
487   SAVEFREESV(RExC_rx_sv);    \
488  Simple_vFAIL(m);     \
489 } STMT_END
490
491 /*
492  * Like Simple_vFAIL(), but accepts two arguments.
493  */
494 #define Simple_vFAIL2(m,a1) STMT_START {   \
495  const IV offset = RExC_parse - RExC_precomp;   \
496  S_re_croak2(aTHX_ m, REPORT_LOCATION, a1,   \
497    (int)offset, RExC_precomp, RExC_precomp + offset); \
498 } STMT_END
499
500 /*
501  * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL2().
502  */
503 #define vFAIL2(m,a1) STMT_START {   \
504  if (!SIZE_ONLY)     \
505   SAVEFREESV(RExC_rx_sv);    \
506  Simple_vFAIL2(m, a1);    \
507 } STMT_END
508
509
510 /*
511  * Like Simple_vFAIL(), but accepts three arguments.
512  */
513 #define Simple_vFAIL3(m, a1, a2) STMT_START {   \
514  const IV offset = RExC_parse - RExC_precomp;  \
515  S_re_croak2(aTHX_ m, REPORT_LOCATION, a1, a2,  \
516    (int)offset, RExC_precomp, RExC_precomp + offset); \
517 } STMT_END
518
519 /*
520  * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL3().
521  */
522 #define vFAIL3(m,a1,a2) STMT_START {   \
523  if (!SIZE_ONLY)     \
524   SAVEFREESV(RExC_rx_sv);    \
525  Simple_vFAIL3(m, a1, a2);    \
526 } STMT_END
527
528 /*
529  * Like Simple_vFAIL(), but accepts four arguments.
530  */
531 #define Simple_vFAIL4(m, a1, a2, a3) STMT_START {  \
532  const IV offset = RExC_parse - RExC_precomp;  \
533  S_re_croak2(aTHX_ m, REPORT_LOCATION, a1, a2, a3,  \
534    (int)offset, RExC_precomp, RExC_precomp + offset); \
535 } STMT_END
536
537 #define vFAIL4(m,a1,a2,a3) STMT_START {   \
538  if (!SIZE_ONLY)     \
539   SAVEFREESV(RExC_rx_sv);    \
540  Simple_vFAIL4(m, a1, a2, a3);   \
541 } STMT_END
542
543 /* m is not necessarily a "literal string", in this macro */
544 #define reg_warn_non_literal_string(loc, m) STMT_START {                \
545  const IV offset = loc - RExC_precomp;                               \
546  Perl_warner(aTHX_ packWARN(WARN_REGEXP), "%s" REPORT_LOCATION,      \
547    m, (int)offset, RExC_precomp, RExC_precomp + offset);       \
548 } STMT_END
549
550 #define ckWARNreg(loc,m) STMT_START {     \
551  const IV offset = loc - RExC_precomp;    \
552  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
553    (int)offset, RExC_precomp, RExC_precomp + offset);  \
554 } STMT_END
555
556 #define vWARN_dep(loc, m) STMT_START {            \
557  const IV offset = loc - RExC_precomp;    \
558  Perl_warner(aTHX_ packWARN(WARN_DEPRECATED), m REPORT_LOCATION, \
559    (int)offset, RExC_precomp, RExC_precomp + offset);         \
560 } STMT_END
561
562 #define ckWARNdep(loc,m) STMT_START {            \
563  const IV offset = loc - RExC_precomp;    \
564  Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),                 \
565    m REPORT_LOCATION,      \
566    (int)offset, RExC_precomp, RExC_precomp + offset);  \
567 } STMT_END
568
569 #define ckWARNregdep(loc,m) STMT_START {    \
570  const IV offset = loc - RExC_precomp;    \
571  Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_REGEXP), \
572    m REPORT_LOCATION,      \
573    (int)offset, RExC_precomp, RExC_precomp + offset);  \
574 } STMT_END
575
576 #define ckWARN2regdep(loc,m, a1) STMT_START {    \
577  const IV offset = loc - RExC_precomp;    \
578  Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, WARN_REGEXP), \
579    m REPORT_LOCATION,      \
580    a1, (int)offset, RExC_precomp, RExC_precomp + offset); \
581 } STMT_END
582
583 #define ckWARN2reg(loc, m, a1) STMT_START {    \
584  const IV offset = loc - RExC_precomp;    \
585  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
586    a1, (int)offset, RExC_precomp, RExC_precomp + offset); \
587 } STMT_END
588
589 #define vWARN3(loc, m, a1, a2) STMT_START {    \
590  const IV offset = loc - RExC_precomp;    \
591  Perl_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION,  \
592    a1, a2, (int)offset, RExC_precomp, RExC_precomp + offset); \
593 } STMT_END
594
595 #define ckWARN3reg(loc, m, a1, a2) STMT_START {    \
596  const IV offset = loc - RExC_precomp;    \
597  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
598    a1, a2, (int)offset, RExC_precomp, RExC_precomp + offset); \
599 } STMT_END
600
601 #define vWARN4(loc, m, a1, a2, a3) STMT_START {    \
602  const IV offset = loc - RExC_precomp;    \
603  Perl_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION,  \
604    a1, a2, a3, (int)offset, RExC_precomp, RExC_precomp + offset); \
605 } STMT_END
606
607 #define ckWARN4reg(loc, m, a1, a2, a3) STMT_START {   \
608  const IV offset = loc - RExC_precomp;    \
609  Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION, \
610    a1, a2, a3, (int)offset, RExC_precomp, RExC_precomp + offset); \
611 } STMT_END
612
613 #define vWARN5(loc, m, a1, a2, a3, a4) STMT_START {   \
614  const IV offset = loc - RExC_precomp;    \
615  Perl_warner(aTHX_ packWARN(WARN_REGEXP), m REPORT_LOCATION,  \
616    a1, a2, a3, a4, (int)offset, RExC_precomp, RExC_precomp + offset); \
617 } STMT_END
618
619
620 /* Allow for side effects in s */
621 #define REGC(c,s) STMT_START {   \
622  if (!SIZE_ONLY) *(s) = (c); else (void)(s); \
623 } STMT_END
624
625 /* Macros for recording node offsets.   20001227 mjd@plover.com
626  * Nodes are numbered 1, 2, 3, 4.  Node #n's position is recorded in
627  * element 2*n-1 of the array.  Element #2n holds the byte length node #n.
628  * Element 0 holds the number n.
629  * Position is 1 indexed.
630  */
631 #ifndef RE_TRACK_PATTERN_OFFSETS
632 #define Set_Node_Offset_To_R(node,byte)
633 #define Set_Node_Offset(node,byte)
634 #define Set_Cur_Node_Offset
635 #define Set_Node_Length_To_R(node,len)
636 #define Set_Node_Length(node,len)
637 #define Set_Node_Cur_Length(node)
638 #define Node_Offset(n)
639 #define Node_Length(n)
640 #define Set_Node_Offset_Length(node,offset,len)
641 #define ProgLen(ri) ri->u.proglen
642 #define SetProgLen(ri,x) ri->u.proglen = x
643 #else
644 #define ProgLen(ri) ri->u.offsets[0]
645 #define SetProgLen(ri,x) ri->u.offsets[0] = x
646 #define Set_Node_Offset_To_R(node,byte) STMT_START {   \
647  if (! SIZE_ONLY) {       \
648   MJD_OFFSET_DEBUG(("** (%d) offset of node %d is %d.\n",  \
649      __LINE__, (int)(node), (int)(byte)));  \
650   if((node) < 0) {      \
651    Perl_croak(aTHX_ "value of node is %d in Offset macro", (int)(node)); \
652   } else {       \
653    RExC_offsets[2*(node)-1] = (byte);    \
654   }        \
655  }         \
656 } STMT_END
657
658 #define Set_Node_Offset(node,byte) \
659  Set_Node_Offset_To_R((node)-RExC_emit_start, (byte)-RExC_start)
660 #define Set_Cur_Node_Offset Set_Node_Offset(RExC_emit, RExC_parse)
661
662 #define Set_Node_Length_To_R(node,len) STMT_START {   \
663  if (! SIZE_ONLY) {       \
664   MJD_OFFSET_DEBUG(("** (%d) size of node %d is %d.\n",  \
665     __LINE__, (int)(node), (int)(len)));   \
666   if((node) < 0) {      \
667    Perl_croak(aTHX_ "value of node is %d in Length macro", (int)(node)); \
668   } else {       \
669    RExC_offsets[2*(node)] = (len);    \
670   }        \
671  }         \
672 } STMT_END
673
674 #define Set_Node_Length(node,len) \
675  Set_Node_Length_To_R((node)-RExC_emit_start, len)
676 #define Set_Cur_Node_Length(len) Set_Node_Length(RExC_emit, len)
677 #define Set_Node_Cur_Length(node) \
678  Set_Node_Length(node, RExC_parse - parse_start)
679
680 /* Get offsets and lengths */
681 #define Node_Offset(n) (RExC_offsets[2*((n)-RExC_emit_start)-1])
682 #define Node_Length(n) (RExC_offsets[2*((n)-RExC_emit_start)])
683
684 #define Set_Node_Offset_Length(node,offset,len) STMT_START { \
685  Set_Node_Offset_To_R((node)-RExC_emit_start, (offset)); \
686  Set_Node_Length_To_R((node)-RExC_emit_start, (len)); \
687 } STMT_END
688 #endif
689
690 #if PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS
691 #define EXPERIMENTAL_INPLACESCAN
692 #endif /*PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS*/
693
694 #define DEBUG_STUDYDATA(str,data,depth)                              \
695 DEBUG_OPTIMISE_MORE_r(if(data){                                      \
696  PerlIO_printf(Perl_debug_log,                                    \
697   "%*s" str "Pos:%"IVdf"/%"IVdf                                \
698   " Flags: 0x%"UVXf" Whilem_c: %"IVdf" Lcp: %"IVdf" %s",       \
699   (int)(depth)*2, "",                                          \
700   (IV)((data)->pos_min),                                       \
701   (IV)((data)->pos_delta),                                     \
702   (UV)((data)->flags),                                         \
703   (IV)((data)->whilem_c),                                      \
704   (IV)((data)->last_closep ? *((data)->last_closep) : -1),     \
705   is_inf ? "INF " : ""                                         \
706  );                                                               \
707  if ((data)->last_found)                                          \
708   PerlIO_printf(Perl_debug_log,                                \
709    "Last:'%s' %"IVdf":%"IVdf"/%"IVdf" %sFixed:'%s' @ %"IVdf \
710    " %sFloat: '%s' @ %"IVdf"/%"IVdf"",                      \
711    SvPVX_const((data)->last_found),                         \
712    (IV)((data)->last_end),                                  \
713    (IV)((data)->last_start_min),                            \
714    (IV)((data)->last_start_max),                            \
715    ((data)->longest &&                                      \
716    (data)->longest==&((data)->longest_fixed)) ? "*" : "",  \
717    SvPVX_const((data)->longest_fixed),                      \
718    (IV)((data)->offset_fixed),                              \
719    ((data)->longest &&                                      \
720    (data)->longest==&((data)->longest_float)) ? "*" : "",  \
721    SvPVX_const((data)->longest_float),                      \
722    (IV)((data)->offset_float_min),                          \
723    (IV)((data)->offset_float_max)                           \
724   );                                                           \
725  PerlIO_printf(Perl_debug_log,"\n");                              \
726 });
727
728 /* Mark that we cannot extend a found fixed substring at this point.
729    Update the longest found anchored substring and the longest found
730    floating substrings if needed. */
731
732 STATIC void
733 S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, scan_data_t *data, I32 *minlenp, int is_inf)
734 {
735  const STRLEN l = CHR_SVLEN(data->last_found);
736  const STRLEN old_l = CHR_SVLEN(*data->longest);
737  GET_RE_DEBUG_FLAGS_DECL;
738
739  PERL_ARGS_ASSERT_SCAN_COMMIT;
740
741  if ((l >= old_l) && ((l > old_l) || (data->flags & SF_BEFORE_EOL))) {
742   SvSetMagicSV(*data->longest, data->last_found);
743   if (*data->longest == data->longest_fixed) {
744    data->offset_fixed = l ? data->last_start_min : data->pos_min;
745    if (data->flags & SF_BEFORE_EOL)
746     data->flags
747      |= ((data->flags & SF_BEFORE_EOL) << SF_FIX_SHIFT_EOL);
748    else
749     data->flags &= ~SF_FIX_BEFORE_EOL;
750    data->minlen_fixed=minlenp;
751    data->lookbehind_fixed=0;
752   }
753   else { /* *data->longest == data->longest_float */
754    data->offset_float_min = l ? data->last_start_min : data->pos_min;
755    data->offset_float_max = (l
756          ? data->last_start_max
757          : (data->pos_delta == I32_MAX ? I32_MAX : data->pos_min + data->pos_delta));
758    if (is_inf || (U32)data->offset_float_max > (U32)I32_MAX)
759     data->offset_float_max = I32_MAX;
760    if (data->flags & SF_BEFORE_EOL)
761     data->flags
762      |= ((data->flags & SF_BEFORE_EOL) << SF_FL_SHIFT_EOL);
763    else
764     data->flags &= ~SF_FL_BEFORE_EOL;
765    data->minlen_float=minlenp;
766    data->lookbehind_float=0;
767   }
768  }
769  SvCUR_set(data->last_found, 0);
770  {
771   SV * const sv = data->last_found;
772   if (SvUTF8(sv) && SvMAGICAL(sv)) {
773    MAGIC * const mg = mg_find(sv, PERL_MAGIC_utf8);
774    if (mg)
775     mg->mg_len = 0;
776   }
777  }
778  data->last_end = -1;
779  data->flags &= ~SF_BEFORE_EOL;
780  DEBUG_STUDYDATA("commit: ",data,0);
781 }
782
783 /* These macros set, clear and test whether the synthetic start class ('ssc',
784  * given by the parameter) matches an empty string (EOS).  This uses the
785  * 'next_off' field in the node, to save a bit in the flags field.  The ssc
786  * stands alone, so there is never a next_off, so this field is otherwise
787  * unused.  The EOS information is used only for compilation, but theoretically
788  * it could be passed on to the execution code.  This could be used to store
789  * more than one bit of information, but only this one is currently used. */
790 #define SET_SSC_EOS(node)   STMT_START { (node)->next_off = TRUE; } STMT_END
791 #define CLEAR_SSC_EOS(node) STMT_START { (node)->next_off = FALSE; } STMT_END
792 #define TEST_SSC_EOS(node)  cBOOL((node)->next_off)
793
794 /* Can match anything (initialization) */
795 STATIC void
796 S_cl_anything(const RExC_state_t *pRExC_state, struct regnode_charclass_class *cl)
797 {
798  PERL_ARGS_ASSERT_CL_ANYTHING;
799
800  ANYOF_BITMAP_SETALL(cl);
801  cl->flags = ANYOF_UNICODE_ALL;
802  SET_SSC_EOS(cl);
803
804  /* If any portion of the regex is to operate under locale rules,
805  * initialization includes it.  The reason this isn't done for all regexes
806  * is that the optimizer was written under the assumption that locale was
807  * all-or-nothing.  Given the complexity and lack of documentation in the
808  * optimizer, and that there are inadequate test cases for locale, so many
809  * parts of it may not work properly, it is safest to avoid locale unless
810  * necessary. */
811  if (RExC_contains_locale) {
812   ANYOF_CLASS_SETALL(cl);     /* /l uses class */
813   cl->flags |= ANYOF_LOCALE|ANYOF_CLASS|ANYOF_LOC_FOLD;
814  }
815  else {
816   ANYOF_CLASS_ZERO(cl);     /* Only /l uses class now */
817  }
818 }
819
820 /* Can match anything (initialization) */
821 STATIC int
822 S_cl_is_anything(const struct regnode_charclass_class *cl)
823 {
824  int value;
825
826  PERL_ARGS_ASSERT_CL_IS_ANYTHING;
827
828  for (value = 0; value < ANYOF_MAX; value += 2)
829   if (ANYOF_CLASS_TEST(cl, value) && ANYOF_CLASS_TEST(cl, value + 1))
830    return 1;
831  if (!(cl->flags & ANYOF_UNICODE_ALL))
832   return 0;
833  if (!ANYOF_BITMAP_TESTALLSET((const void*)cl))
834   return 0;
835  return 1;
836 }
837
838 /* Can match anything (initialization) */
839 STATIC void
840 S_cl_init(const RExC_state_t *pRExC_state, struct regnode_charclass_class *cl)
841 {
842  PERL_ARGS_ASSERT_CL_INIT;
843
844  Zero(cl, 1, struct regnode_charclass_class);
845  cl->type = ANYOF;
846  cl_anything(pRExC_state, cl);
847  ARG_SET(cl, ANYOF_NONBITMAP_EMPTY);
848 }
849
850 /* These two functions currently do the exact same thing */
851 #define cl_init_zero  S_cl_init
852
853 /* 'AND' a given class with another one.  Can create false positives.  'cl'
854  * should not be inverted.  'and_with->flags & ANYOF_CLASS' should be 0 if
855  * 'and_with' is a regnode_charclass instead of a regnode_charclass_class. */
856 STATIC void
857 S_cl_and(struct regnode_charclass_class *cl,
858   const struct regnode_charclass_class *and_with)
859 {
860  PERL_ARGS_ASSERT_CL_AND;
861
862  assert(PL_regkind[and_with->type] == ANYOF);
863
864  /* I (khw) am not sure all these restrictions are necessary XXX */
865  if (!(ANYOF_CLASS_TEST_ANY_SET(and_with))
866   && !(ANYOF_CLASS_TEST_ANY_SET(cl))
867   && (and_with->flags & ANYOF_LOCALE) == (cl->flags & ANYOF_LOCALE)
868   && !(and_with->flags & ANYOF_LOC_FOLD)
869   && !(cl->flags & ANYOF_LOC_FOLD)) {
870   int i;
871
872   if (and_with->flags & ANYOF_INVERT)
873    for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
874     cl->bitmap[i] &= ~and_with->bitmap[i];
875   else
876    for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
877     cl->bitmap[i] &= and_with->bitmap[i];
878  } /* XXXX: logic is complicated otherwise, leave it along for a moment. */
879
880  if (and_with->flags & ANYOF_INVERT) {
881
882   /* Here, the and'ed node is inverted.  Get the AND of the flags that
883   * aren't affected by the inversion.  Those that are affected are
884   * handled individually below */
885   U8 affected_flags = cl->flags & ~INVERSION_UNAFFECTED_FLAGS;
886   cl->flags &= (and_with->flags & INVERSION_UNAFFECTED_FLAGS);
887   cl->flags |= affected_flags;
888
889   /* We currently don't know how to deal with things that aren't in the
890   * bitmap, but we know that the intersection is no greater than what
891   * is already in cl, so let there be false positives that get sorted
892   * out after the synthetic start class succeeds, and the node is
893   * matched for real. */
894
895   /* The inversion of these two flags indicate that the resulting
896   * intersection doesn't have them */
897   if (and_with->flags & ANYOF_UNICODE_ALL) {
898    cl->flags &= ~ANYOF_UNICODE_ALL;
899   }
900   if (and_with->flags & ANYOF_NON_UTF8_LATIN1_ALL) {
901    cl->flags &= ~ANYOF_NON_UTF8_LATIN1_ALL;
902   }
903  }
904  else {   /* and'd node is not inverted */
905   U8 outside_bitmap_but_not_utf8; /* Temp variable */
906
907   if (! ANYOF_NONBITMAP(and_with)) {
908
909    /* Here 'and_with' doesn't match anything outside the bitmap
910    * (except possibly ANYOF_UNICODE_ALL), which means the
911    * intersection can't either, except for ANYOF_UNICODE_ALL, in
912    * which case we don't know what the intersection is, but it's no
913    * greater than what cl already has, so can just leave it alone,
914    * with possible false positives */
915    if (! (and_with->flags & ANYOF_UNICODE_ALL)) {
916     ARG_SET(cl, ANYOF_NONBITMAP_EMPTY);
917     cl->flags &= ~ANYOF_NONBITMAP_NON_UTF8;
918    }
919   }
920   else if (! ANYOF_NONBITMAP(cl)) {
921
922    /* Here, 'and_with' does match something outside the bitmap, and cl
923    * doesn't have a list of things to match outside the bitmap.  If
924    * cl can match all code points above 255, the intersection will
925    * be those above-255 code points that 'and_with' matches.  If cl
926    * can't match all Unicode code points, it means that it can't
927    * match anything outside the bitmap (since the 'if' that got us
928    * into this block tested for that), so we leave the bitmap empty.
929    */
930    if (cl->flags & ANYOF_UNICODE_ALL) {
931     ARG_SET(cl, ARG(and_with));
932
933     /* and_with's ARG may match things that don't require UTF8.
934     * And now cl's will too, in spite of this being an 'and'.  See
935     * the comments below about the kludge */
936     cl->flags |= and_with->flags & ANYOF_NONBITMAP_NON_UTF8;
937    }
938   }
939   else {
940    /* Here, both 'and_with' and cl match something outside the
941    * bitmap.  Currently we do not do the intersection, so just match
942    * whatever cl had at the beginning.  */
943   }
944
945
946   /* Take the intersection of the two sets of flags.  However, the
947   * ANYOF_NONBITMAP_NON_UTF8 flag is treated as an 'or'.  This is a
948   * kludge around the fact that this flag is not treated like the others
949   * which are initialized in cl_anything().  The way the optimizer works
950   * is that the synthetic start class (SSC) is initialized to match
951   * anything, and then the first time a real node is encountered, its
952   * values are AND'd with the SSC's with the result being the values of
953   * the real node.  However, there are paths through the optimizer where
954   * the AND never gets called, so those initialized bits are set
955   * inappropriately, which is not usually a big deal, as they just cause
956   * false positives in the SSC, which will just mean a probably
957   * imperceptible slow down in execution.  However this bit has a
958   * higher false positive consequence in that it can cause utf8.pm,
959   * utf8_heavy.pl ... to be loaded when not necessary, which is a much
960   * bigger slowdown and also causes significant extra memory to be used.
961   * In order to prevent this, the code now takes a different tack.  The
962   * bit isn't set unless some part of the regular expression needs it,
963   * but once set it won't get cleared.  This means that these extra
964   * modules won't get loaded unless there was some path through the
965   * pattern that would have required them anyway, and  so any false
966   * positives that occur by not ANDing them out when they could be
967   * aren't as severe as they would be if we treated this bit like all
968   * the others */
969   outside_bitmap_but_not_utf8 = (cl->flags | and_with->flags)
970          & ANYOF_NONBITMAP_NON_UTF8;
971   cl->flags &= and_with->flags;
972   cl->flags |= outside_bitmap_but_not_utf8;
973  }
974 }
975
976 /* 'OR' a given class with another one.  Can create false positives.  'cl'
977  * should not be inverted.  'or_with->flags & ANYOF_CLASS' should be 0 if
978  * 'or_with' is a regnode_charclass instead of a regnode_charclass_class. */
979 STATIC void
980 S_cl_or(const RExC_state_t *pRExC_state, struct regnode_charclass_class *cl, const struct regnode_charclass_class *or_with)
981 {
982  PERL_ARGS_ASSERT_CL_OR;
983
984  if (or_with->flags & ANYOF_INVERT) {
985
986   /* Here, the or'd node is to be inverted.  This means we take the
987   * complement of everything not in the bitmap, but currently we don't
988   * know what that is, so give up and match anything */
989   if (ANYOF_NONBITMAP(or_with)) {
990    cl_anything(pRExC_state, cl);
991   }
992   /* We do not use
993   * (B1 | CL1) | (!B2 & !CL2) = (B1 | !B2 & !CL2) | (CL1 | (!B2 & !CL2))
994   *   <= (B1 | !B2) | (CL1 | !CL2)
995   * which is wasteful if CL2 is small, but we ignore CL2:
996   *   (B1 | CL1) | (!B2 & !CL2) <= (B1 | CL1) | !B2 = (B1 | !B2) | CL1
997   * XXXX Can we handle case-fold?  Unclear:
998   *   (OK1(i) | OK1(i')) | !(OK1(i) | OK1(i')) =
999   *   (OK1(i) | OK1(i')) | (!OK1(i) & !OK1(i'))
1000   */
1001   else if ( (or_with->flags & ANYOF_LOCALE) == (cl->flags & ANYOF_LOCALE)
1002    && !(or_with->flags & ANYOF_LOC_FOLD)
1003    && !(cl->flags & ANYOF_LOC_FOLD) ) {
1004    int i;
1005
1006    for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
1007     cl->bitmap[i] |= ~or_with->bitmap[i];
1008   } /* XXXX: logic is complicated otherwise */
1009   else {
1010    cl_anything(pRExC_state, cl);
1011   }
1012
1013   /* And, we can just take the union of the flags that aren't affected
1014   * by the inversion */
1015   cl->flags |= or_with->flags & INVERSION_UNAFFECTED_FLAGS;
1016
1017   /* For the remaining flags:
1018    ANYOF_UNICODE_ALL and inverted means to not match anything above
1019      255, which means that the union with cl should just be
1020      what cl has in it, so can ignore this flag
1021    ANYOF_NON_UTF8_LATIN1_ALL and inverted means if not utf8 and ord
1022      is 127-255 to match them, but then invert that, so the
1023      union with cl should just be what cl has in it, so can
1024      ignore this flag
1025   */
1026  } else {    /* 'or_with' is not inverted */
1027   /* (B1 | CL1) | (B2 | CL2) = (B1 | B2) | (CL1 | CL2)) */
1028   if ( (or_with->flags & ANYOF_LOCALE) == (cl->flags & ANYOF_LOCALE)
1029    && (!(or_with->flags & ANYOF_LOC_FOLD)
1030     || (cl->flags & ANYOF_LOC_FOLD)) ) {
1031    int i;
1032
1033    /* OR char bitmap and class bitmap separately */
1034    for (i = 0; i < ANYOF_BITMAP_SIZE; i++)
1035     cl->bitmap[i] |= or_with->bitmap[i];
1036    if (or_with->flags & ANYOF_CLASS) {
1037     ANYOF_CLASS_OR(or_with, cl);
1038    }
1039   }
1040   else { /* XXXX: logic is complicated, leave it along for a moment. */
1041    cl_anything(pRExC_state, cl);
1042   }
1043
1044   if (ANYOF_NONBITMAP(or_with)) {
1045
1046    /* Use the added node's outside-the-bit-map match if there isn't a
1047    * conflict.  If there is a conflict (both nodes match something
1048    * outside the bitmap, but what they match outside is not the same
1049    * pointer, and hence not easily compared until XXX we extend
1050    * inversion lists this far), give up and allow the start class to
1051    * match everything outside the bitmap.  If that stuff is all above
1052    * 255, can just set UNICODE_ALL, otherwise caould be anything. */
1053    if (! ANYOF_NONBITMAP(cl)) {
1054     ARG_SET(cl, ARG(or_with));
1055    }
1056    else if (ARG(cl) != ARG(or_with)) {
1057
1058     if ((or_with->flags & ANYOF_NONBITMAP_NON_UTF8)) {
1059      cl_anything(pRExC_state, cl);
1060     }
1061     else {
1062      cl->flags |= ANYOF_UNICODE_ALL;
1063     }
1064    }
1065   }
1066
1067   /* Take the union */
1068   cl->flags |= or_with->flags;
1069  }
1070 }
1071
1072 #define TRIE_LIST_ITEM(state,idx) (trie->states[state].trans.list)[ idx ]
1073 #define TRIE_LIST_CUR(state)  ( TRIE_LIST_ITEM( state, 0 ).forid )
1074 #define TRIE_LIST_LEN(state) ( TRIE_LIST_ITEM( state, 0 ).newstate )
1075 #define TRIE_LIST_USED(idx)  ( trie->states[state].trans.list ? (TRIE_LIST_CUR( idx ) - 1) : 0 )
1076
1077
1078 #ifdef DEBUGGING
1079 /*
1080    dump_trie(trie,widecharmap,revcharmap)
1081    dump_trie_interim_list(trie,widecharmap,revcharmap,next_alloc)
1082    dump_trie_interim_table(trie,widecharmap,revcharmap,next_alloc)
1083
1084    These routines dump out a trie in a somewhat readable format.
1085    The _interim_ variants are used for debugging the interim
1086    tables that are used to generate the final compressed
1087    representation which is what dump_trie expects.
1088
1089    Part of the reason for their existence is to provide a form
1090    of documentation as to how the different representations function.
1091
1092 */
1093
1094 /*
1095   Dumps the final compressed table form of the trie to Perl_debug_log.
1096   Used for debugging make_trie().
1097 */
1098
1099 STATIC void
1100 S_dump_trie(pTHX_ const struct _reg_trie_data *trie, HV *widecharmap,
1101    AV *revcharmap, U32 depth)
1102 {
1103  U32 state;
1104  SV *sv=sv_newmortal();
1105  int colwidth= widecharmap ? 6 : 4;
1106  U16 word;
1107  GET_RE_DEBUG_FLAGS_DECL;
1108
1109  PERL_ARGS_ASSERT_DUMP_TRIE;
1110
1111  PerlIO_printf( Perl_debug_log, "%*sChar : %-6s%-6s%-4s ",
1112   (int)depth * 2 + 2,"",
1113   "Match","Base","Ofs" );
1114
1115  for( state = 0 ; state < trie->uniquecharcount ; state++ ) {
1116   SV ** const tmp = av_fetch( revcharmap, state, 0);
1117   if ( tmp ) {
1118    PerlIO_printf( Perl_debug_log, "%*s",
1119     colwidth,
1120     pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,
1121        PL_colors[0], PL_colors[1],
1122        (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
1123        PERL_PV_ESCAPE_FIRSTCHAR
1124     )
1125    );
1126   }
1127  }
1128  PerlIO_printf( Perl_debug_log, "\n%*sState|-----------------------",
1129   (int)depth * 2 + 2,"");
1130
1131  for( state = 0 ; state < trie->uniquecharcount ; state++ )
1132   PerlIO_printf( Perl_debug_log, "%.*s", colwidth, "--------");
1133  PerlIO_printf( Perl_debug_log, "\n");
1134
1135  for( state = 1 ; state < trie->statecount ; state++ ) {
1136   const U32 base = trie->states[ state ].trans.base;
1137
1138   PerlIO_printf( Perl_debug_log, "%*s#%4"UVXf"|", (int)depth * 2 + 2,"", (UV)state);
1139
1140   if ( trie->states[ state ].wordnum ) {
1141    PerlIO_printf( Perl_debug_log, " W%4X", trie->states[ state ].wordnum );
1142   } else {
1143    PerlIO_printf( Perl_debug_log, "%6s", "" );
1144   }
1145
1146   PerlIO_printf( Perl_debug_log, " @%4"UVXf" ", (UV)base );
1147
1148   if ( base ) {
1149    U32 ofs = 0;
1150
1151    while( ( base + ofs  < trie->uniquecharcount ) ||
1152     ( base + ofs - trie->uniquecharcount < trie->lasttrans
1153      && trie->trans[ base + ofs - trie->uniquecharcount ].check != state))
1154      ofs++;
1155
1156    PerlIO_printf( Perl_debug_log, "+%2"UVXf"[ ", (UV)ofs);
1157
1158    for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
1159     if ( ( base + ofs >= trie->uniquecharcount ) &&
1160      ( base + ofs - trie->uniquecharcount < trie->lasttrans ) &&
1161      trie->trans[ base + ofs - trie->uniquecharcount ].check == state )
1162     {
1163     PerlIO_printf( Perl_debug_log, "%*"UVXf,
1164      colwidth,
1165      (UV)trie->trans[ base + ofs - trie->uniquecharcount ].next );
1166     } else {
1167      PerlIO_printf( Perl_debug_log, "%*s",colwidth,"   ." );
1168     }
1169    }
1170
1171    PerlIO_printf( Perl_debug_log, "]");
1172
1173   }
1174   PerlIO_printf( Perl_debug_log, "\n" );
1175  }
1176  PerlIO_printf(Perl_debug_log, "%*sword_info N:(prev,len)=", (int)depth*2, "");
1177  for (word=1; word <= trie->wordcount; word++) {
1178   PerlIO_printf(Perl_debug_log, " %d:(%d,%d)",
1179    (int)word, (int)(trie->wordinfo[word].prev),
1180    (int)(trie->wordinfo[word].len));
1181  }
1182  PerlIO_printf(Perl_debug_log, "\n" );
1183 }
1184 /*
1185   Dumps a fully constructed but uncompressed trie in list form.
1186   List tries normally only are used for construction when the number of
1187   possible chars (trie->uniquecharcount) is very high.
1188   Used for debugging make_trie().
1189 */
1190 STATIC void
1191 S_dump_trie_interim_list(pTHX_ const struct _reg_trie_data *trie,
1192       HV *widecharmap, AV *revcharmap, U32 next_alloc,
1193       U32 depth)
1194 {
1195  U32 state;
1196  SV *sv=sv_newmortal();
1197  int colwidth= widecharmap ? 6 : 4;
1198  GET_RE_DEBUG_FLAGS_DECL;
1199
1200  PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST;
1201
1202  /* print out the table precompression.  */
1203  PerlIO_printf( Perl_debug_log, "%*sState :Word | Transition Data\n%*s%s",
1204   (int)depth * 2 + 2,"", (int)depth * 2 + 2,"",
1205   "------:-----+-----------------\n" );
1206
1207  for( state=1 ; state < next_alloc ; state ++ ) {
1208   U16 charid;
1209
1210   PerlIO_printf( Perl_debug_log, "%*s %4"UVXf" :",
1211    (int)depth * 2 + 2,"", (UV)state  );
1212   if ( ! trie->states[ state ].wordnum ) {
1213    PerlIO_printf( Perl_debug_log, "%5s| ","");
1214   } else {
1215    PerlIO_printf( Perl_debug_log, "W%4x| ",
1216     trie->states[ state ].wordnum
1217    );
1218   }
1219   for( charid = 1 ; charid <= TRIE_LIST_USED( state ) ; charid++ ) {
1220    SV ** const tmp = av_fetch( revcharmap, TRIE_LIST_ITEM(state,charid).forid, 0);
1221    if ( tmp ) {
1222     PerlIO_printf( Perl_debug_log, "%*s:%3X=%4"UVXf" | ",
1223      colwidth,
1224      pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,
1225        PL_colors[0], PL_colors[1],
1226        (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
1227        PERL_PV_ESCAPE_FIRSTCHAR
1228      ) ,
1229      TRIE_LIST_ITEM(state,charid).forid,
1230      (UV)TRIE_LIST_ITEM(state,charid).newstate
1231     );
1232     if (!(charid % 10))
1233      PerlIO_printf(Perl_debug_log, "\n%*s| ",
1234       (int)((depth * 2) + 14), "");
1235    }
1236   }
1237   PerlIO_printf( Perl_debug_log, "\n");
1238  }
1239 }
1240
1241 /*
1242   Dumps a fully constructed but uncompressed trie in table form.
1243   This is the normal DFA style state transition table, with a few
1244   twists to facilitate compression later.
1245   Used for debugging make_trie().
1246 */
1247 STATIC void
1248 S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie,
1249       HV *widecharmap, AV *revcharmap, U32 next_alloc,
1250       U32 depth)
1251 {
1252  U32 state;
1253  U16 charid;
1254  SV *sv=sv_newmortal();
1255  int colwidth= widecharmap ? 6 : 4;
1256  GET_RE_DEBUG_FLAGS_DECL;
1257
1258  PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE;
1259
1260  /*
1261  print out the table precompression so that we can do a visual check
1262  that they are identical.
1263  */
1264
1265  PerlIO_printf( Perl_debug_log, "%*sChar : ",(int)depth * 2 + 2,"" );
1266
1267  for( charid = 0 ; charid < trie->uniquecharcount ; charid++ ) {
1268   SV ** const tmp = av_fetch( revcharmap, charid, 0);
1269   if ( tmp ) {
1270    PerlIO_printf( Perl_debug_log, "%*s",
1271     colwidth,
1272     pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,
1273        PL_colors[0], PL_colors[1],
1274        (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
1275        PERL_PV_ESCAPE_FIRSTCHAR
1276     )
1277    );
1278   }
1279  }
1280
1281  PerlIO_printf( Perl_debug_log, "\n%*sState+-",(int)depth * 2 + 2,"" );
1282
1283  for( charid=0 ; charid < trie->uniquecharcount ; charid++ ) {
1284   PerlIO_printf( Perl_debug_log, "%.*s", colwidth,"--------");
1285  }
1286
1287  PerlIO_printf( Perl_debug_log, "\n" );
1288
1289  for( state=1 ; state < next_alloc ; state += trie->uniquecharcount ) {
1290
1291   PerlIO_printf( Perl_debug_log, "%*s%4"UVXf" : ",
1292    (int)depth * 2 + 2,"",
1293    (UV)TRIE_NODENUM( state ) );
1294
1295   for( charid = 0 ; charid < trie->uniquecharcount ; charid++ ) {
1296    UV v=(UV)SAFE_TRIE_NODENUM( trie->trans[ state + charid ].next );
1297    if (v)
1298     PerlIO_printf( Perl_debug_log, "%*"UVXf, colwidth, v );
1299    else
1300     PerlIO_printf( Perl_debug_log, "%*s", colwidth, "." );
1301   }
1302   if ( ! trie->states[ TRIE_NODENUM( state ) ].wordnum ) {
1303    PerlIO_printf( Perl_debug_log, " (%4"UVXf")\n", (UV)trie->trans[ state ].check );
1304   } else {
1305    PerlIO_printf( Perl_debug_log, " (%4"UVXf") W%4X\n", (UV)trie->trans[ state ].check,
1306    trie->states[ TRIE_NODENUM( state ) ].wordnum );
1307   }
1308  }
1309 }
1310
1311 #endif
1312
1313
1314 /* make_trie(startbranch,first,last,tail,word_count,flags,depth)
1315   startbranch: the first branch in the whole branch sequence
1316   first      : start branch of sequence of branch-exact nodes.
1317    May be the same as startbranch
1318   last       : Thing following the last branch.
1319    May be the same as tail.
1320   tail       : item following the branch sequence
1321   count      : words in the sequence
1322   flags      : currently the OP() type we will be building one of /EXACT(|F|Fl)/
1323   depth      : indent depth
1324
1325 Inplace optimizes a sequence of 2 or more Branch-Exact nodes into a TRIE node.
1326
1327 A trie is an N'ary tree where the branches are determined by digital
1328 decomposition of the key. IE, at the root node you look up the 1st character and
1329 follow that branch repeat until you find the end of the branches. Nodes can be
1330 marked as "accepting" meaning they represent a complete word. Eg:
1331
1332   /he|she|his|hers/
1333
1334 would convert into the following structure. Numbers represent states, letters
1335 following numbers represent valid transitions on the letter from that state, if
1336 the number is in square brackets it represents an accepting state, otherwise it
1337 will be in parenthesis.
1338
1339  +-h->+-e->[3]-+-r->(8)-+-s->[9]
1340  |    |
1341  |   (2)
1342  |    |
1343  (1)   +-i->(6)-+-s->[7]
1344  |
1345  +-s->(3)-+-h->(4)-+-e->[5]
1346
1347  Accept Word Mapping: 3=>1 (he),5=>2 (she), 7=>3 (his), 9=>4 (hers)
1348
1349 This shows that when matching against the string 'hers' we will begin at state 1
1350 read 'h' and move to state 2, read 'e' and move to state 3 which is accepting,
1351 then read 'r' and go to state 8 followed by 's' which takes us to state 9 which
1352 is also accepting. Thus we know that we can match both 'he' and 'hers' with a
1353 single traverse. We store a mapping from accepting to state to which word was
1354 matched, and then when we have multiple possibilities we try to complete the
1355 rest of the regex in the order in which they occured in the alternation.
1356
1357 The only prior NFA like behaviour that would be changed by the TRIE support is
1358 the silent ignoring of duplicate alternations which are of the form:
1359
1360  / (DUPE|DUPE) X? (?{ ... }) Y /x
1361
1362 Thus EVAL blocks following a trie may be called a different number of times with
1363 and without the optimisation. With the optimisations dupes will be silently
1364 ignored. This inconsistent behaviour of EVAL type nodes is well established as
1365 the following demonstrates:
1366
1367  'words'=~/(word|word|word)(?{ print $1 })[xyz]/
1368
1369 which prints out 'word' three times, but
1370
1371  'words'=~/(word|word|word)(?{ print $1 })S/
1372
1373 which doesnt print it out at all. This is due to other optimisations kicking in.
1374
1375 Example of what happens on a structural level:
1376
1377 The regexp /(ac|ad|ab)+/ will produce the following debug output:
1378
1379    1: CURLYM[1] {1,32767}(18)
1380    5:   BRANCH(8)
1381    6:     EXACT <ac>(16)
1382    8:   BRANCH(11)
1383    9:     EXACT <ad>(16)
1384   11:   BRANCH(14)
1385   12:     EXACT <ab>(16)
1386   16:   SUCCEED(0)
1387   17:   NOTHING(18)
1388   18: END(0)
1389
1390 This would be optimizable with startbranch=5, first=5, last=16, tail=16
1391 and should turn into:
1392
1393    1: CURLYM[1] {1,32767}(18)
1394    5:   TRIE(16)
1395   [Words:3 Chars Stored:6 Unique Chars:4 States:5 NCP:1]
1396   <ac>
1397   <ad>
1398   <ab>
1399   16:   SUCCEED(0)
1400   17:   NOTHING(18)
1401   18: END(0)
1402
1403 Cases where tail != last would be like /(?foo|bar)baz/:
1404
1405    1: BRANCH(4)
1406    2:   EXACT <foo>(8)
1407    4: BRANCH(7)
1408    5:   EXACT <bar>(8)
1409    7: TAIL(8)
1410    8: EXACT <baz>(10)
1411   10: END(0)
1412
1413 which would be optimizable with startbranch=1, first=1, last=7, tail=8
1414 and would end up looking like:
1415
1416  1: TRIE(8)
1417  [Words:2 Chars Stored:6 Unique Chars:5 States:7 NCP:1]
1418   <foo>
1419   <bar>
1420    7: TAIL(8)
1421    8: EXACT <baz>(10)
1422   10: END(0)
1423
1424  d = uvuni_to_utf8_flags(d, uv, 0);
1425
1426 is the recommended Unicode-aware way of saying
1427
1428  *(d++) = uv;
1429 */
1430
1431 #define TRIE_STORE_REVCHAR(val)                                            \
1432  STMT_START {                                                           \
1433   if (UTF) {          \
1434    SV *zlopp = newSV(7); /* XXX: optimize me */                   \
1435    unsigned char *flrbbbbb = (unsigned char *) SvPVX(zlopp);    \
1436    unsigned const char *const kapow = uvuni_to_utf8(flrbbbbb, val); \
1437    SvCUR_set(zlopp, kapow - flrbbbbb);       \
1438    SvPOK_on(zlopp);         \
1439    SvUTF8_on(zlopp);         \
1440    av_push(revcharmap, zlopp);        \
1441   } else {          \
1442    char ooooff = (char)val;                                           \
1443    av_push(revcharmap, newSVpvn(&ooooff, 1));      \
1444   }           \
1445   } STMT_END
1446
1447 #define TRIE_READ_CHAR STMT_START {                                                     \
1448  wordlen++;                                                                          \
1449  if ( UTF ) {                                                                        \
1450   /* if it is UTF then it is either already folded, or does not need folding */   \
1451   uvc = utf8n_to_uvuni( (const U8*) uc, UTF8_MAXLEN, &len, uniflags);             \
1452  }                                                                                   \
1453  else if (folder == PL_fold_latin1) {                                                \
1454   /* if we use this folder we have to obey unicode rules on latin-1 data */       \
1455   if ( foldlen > 0 ) {                                                            \
1456   uvc = utf8n_to_uvuni( (const U8*) scan, UTF8_MAXLEN, &len, uniflags );       \
1457   foldlen -= len;                                                              \
1458   scan += len;                                                                 \
1459   len = 0;                                                                     \
1460   } else {                                                                        \
1461    len = 1;                                                                    \
1462    uvc = _to_fold_latin1( (U8) *uc, foldbuf, &foldlen, 1);                     \
1463    skiplen = UNISKIP(uvc);                                                     \
1464    foldlen -= skiplen;                                                         \
1465    scan = foldbuf + skiplen;                                                   \
1466   }                                                                               \
1467  } else {                                                                            \
1468   /* raw data, will be folded later if needed */                                  \
1469   uvc = (U32)*uc;                                                                 \
1470   len = 1;                                                                        \
1471  }                                                                                   \
1472 } STMT_END
1473
1474
1475
1476 #define TRIE_LIST_PUSH(state,fid,ns) STMT_START {               \
1477  if ( TRIE_LIST_CUR( state ) >=TRIE_LIST_LEN( state ) ) {    \
1478   U32 ging = TRIE_LIST_LEN( state ) *= 2;                 \
1479   Renew( trie->states[ state ].trans.list, ging, reg_trie_trans_le ); \
1480  }                                                           \
1481  TRIE_LIST_ITEM( state, TRIE_LIST_CUR( state ) ).forid = fid;     \
1482  TRIE_LIST_ITEM( state, TRIE_LIST_CUR( state ) ).newstate = ns;   \
1483  TRIE_LIST_CUR( state )++;                                   \
1484 } STMT_END
1485
1486 #define TRIE_LIST_NEW(state) STMT_START {                       \
1487  Newxz( trie->states[ state ].trans.list,               \
1488   4, reg_trie_trans_le );                                 \
1489  TRIE_LIST_CUR( state ) = 1;                                \
1490  TRIE_LIST_LEN( state ) = 4;                                \
1491 } STMT_END
1492
1493 #define TRIE_HANDLE_WORD(state) STMT_START {                    \
1494  U16 dupe= trie->states[ state ].wordnum;                    \
1495  regnode * const noper_next = regnext( noper );              \
1496                 \
1497  DEBUG_r({                                                   \
1498   /* store the word for dumping */                        \
1499   SV* tmp;                                                \
1500   if (OP(noper) != NOTHING)                               \
1501    tmp = newSVpvn_utf8(STRING(noper), STR_LEN(noper), UTF); \
1502   else                                                    \
1503    tmp = newSVpvn_utf8( "", 0, UTF );   \
1504   av_push( trie_words, tmp );                             \
1505  });                                                         \
1506                 \
1507  curword++;                                                  \
1508  trie->wordinfo[curword].prev   = 0;                         \
1509  trie->wordinfo[curword].len    = wordlen;                   \
1510  trie->wordinfo[curword].accept = state;                     \
1511                 \
1512  if ( noper_next < tail ) {                                  \
1513   if (!trie->jump)                                        \
1514    trie->jump = (U16 *) PerlMemShared_calloc( word_count + 1, sizeof(U16) ); \
1515   trie->jump[curword] = (U16)(noper_next - convert);      \
1516   if (!jumper)                                            \
1517    jumper = noper_next;                                \
1518   if (!nextbranch)                                        \
1519    nextbranch= regnext(cur);                           \
1520  }                                                           \
1521                 \
1522  if ( dupe ) {                                               \
1523   /* It's a dupe. Pre-insert into the wordinfo[].prev   */\
1524   /* chain, so that when the bits of chain are later    */\
1525   /* linked together, the dups appear in the chain      */\
1526   trie->wordinfo[curword].prev = trie->wordinfo[dupe].prev; \
1527   trie->wordinfo[dupe].prev = curword;                    \
1528  } else {                                                    \
1529   /* we haven't inserted this word yet.                */ \
1530   trie->states[ state ].wordnum = curword;                \
1531  }                                                           \
1532 } STMT_END
1533
1534
1535 #define TRIE_TRANS_STATE(state,base,ucharcount,charid,special)  \
1536  ( ( base + charid >=  ucharcount     \
1537   && base + charid < ubound     \
1538   && state == trie->trans[ base - ucharcount + charid ].check \
1539   && trie->trans[ base - ucharcount + charid ].next )  \
1540   ? trie->trans[ base - ucharcount + charid ].next  \
1541   : ( state==1 ? special : 0 )     \
1542  )
1543
1544 #define MADE_TRIE       1
1545 #define MADE_JUMP_TRIE  2
1546 #define MADE_EXACT_TRIE 4
1547
1548 STATIC I32
1549 S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch, regnode *first, regnode *last, regnode *tail, U32 word_count, U32 flags, U32 depth)
1550 {
1551  dVAR;
1552  /* first pass, loop through and scan words */
1553  reg_trie_data *trie;
1554  HV *widecharmap = NULL;
1555  AV *revcharmap = newAV();
1556  regnode *cur;
1557  const U32 uniflags = UTF8_ALLOW_DEFAULT;
1558  STRLEN len = 0;
1559  UV uvc = 0;
1560  U16 curword = 0;
1561  U32 next_alloc = 0;
1562  regnode *jumper = NULL;
1563  regnode *nextbranch = NULL;
1564  regnode *convert = NULL;
1565  U32 *prev_states; /* temp array mapping each state to previous one */
1566  /* we just use folder as a flag in utf8 */
1567  const U8 * folder = NULL;
1568
1569 #ifdef DEBUGGING
1570  const U32 data_slot = add_data( pRExC_state, 4, "tuuu" );
1571  AV *trie_words = NULL;
1572  /* along with revcharmap, this only used during construction but both are
1573  * useful during debugging so we store them in the struct when debugging.
1574  */
1575 #else
1576  const U32 data_slot = add_data( pRExC_state, 2, "tu" );
1577  STRLEN trie_charcount=0;
1578 #endif
1579  SV *re_trie_maxbuff;
1580  GET_RE_DEBUG_FLAGS_DECL;
1581
1582  PERL_ARGS_ASSERT_MAKE_TRIE;
1583 #ifndef DEBUGGING
1584  PERL_UNUSED_ARG(depth);
1585 #endif
1586
1587  switch (flags) {
1588   case EXACT: break;
1589   case EXACTFA:
1590   case EXACTFU_SS:
1591   case EXACTFU_TRICKYFOLD:
1592   case EXACTFU: folder = PL_fold_latin1; break;
1593   case EXACTF:  folder = PL_fold; break;
1594   case EXACTFL: folder = PL_fold_locale; break;
1595   default: Perl_croak( aTHX_ "panic! In trie construction, unknown node type %u %s", (unsigned) flags, PL_reg_name[flags] );
1596  }
1597
1598  trie = (reg_trie_data *) PerlMemShared_calloc( 1, sizeof(reg_trie_data) );
1599  trie->refcount = 1;
1600  trie->startstate = 1;
1601  trie->wordcount = word_count;
1602  RExC_rxi->data->data[ data_slot ] = (void*)trie;
1603  trie->charmap = (U16 *) PerlMemShared_calloc( 256, sizeof(U16) );
1604  if (flags == EXACT)
1605   trie->bitmap = (char *) PerlMemShared_calloc( ANYOF_BITMAP_SIZE, 1 );
1606  trie->wordinfo = (reg_trie_wordinfo *) PerlMemShared_calloc(
1607      trie->wordcount+1, sizeof(reg_trie_wordinfo));
1608
1609  DEBUG_r({
1610   trie_words = newAV();
1611  });
1612
1613  re_trie_maxbuff = get_sv(RE_TRIE_MAXBUF_NAME, 1);
1614  if (!SvIOK(re_trie_maxbuff)) {
1615   sv_setiv(re_trie_maxbuff, RE_TRIE_MAXBUF_INIT);
1616  }
1617  DEBUG_TRIE_COMPILE_r({
1618     PerlIO_printf( Perl_debug_log,
1619     "%*smake_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n",
1620     (int)depth * 2 + 2, "",
1621     REG_NODE_NUM(startbranch),REG_NODE_NUM(first),
1622     REG_NODE_NUM(last), REG_NODE_NUM(tail),
1623     (int)depth);
1624  });
1625
1626    /* Find the node we are going to overwrite */
1627  if ( first == startbranch && OP( last ) != BRANCH ) {
1628   /* whole branch chain */
1629   convert = first;
1630  } else {
1631   /* branch sub-chain */
1632   convert = NEXTOPER( first );
1633  }
1634
1635  /*  -- First loop and Setup --
1636
1637  We first traverse the branches and scan each word to determine if it
1638  contains widechars, and how many unique chars there are, this is
1639  important as we have to build a table with at least as many columns as we
1640  have unique chars.
1641
1642  We use an array of integers to represent the character codes 0..255
1643  (trie->charmap) and we use a an HV* to store Unicode characters. We use the
1644  native representation of the character value as the key and IV's for the
1645  coded index.
1646
1647  *TODO* If we keep track of how many times each character is used we can
1648  remap the columns so that the table compression later on is more
1649  efficient in terms of memory by ensuring the most common value is in the
1650  middle and the least common are on the outside.  IMO this would be better
1651  than a most to least common mapping as theres a decent chance the most
1652  common letter will share a node with the least common, meaning the node
1653  will not be compressible. With a middle is most common approach the worst
1654  case is when we have the least common nodes twice.
1655
1656  */
1657
1658  for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
1659   regnode *noper = NEXTOPER( cur );
1660   const U8 *uc = (U8*)STRING( noper );
1661   const U8 *e  = uc + STR_LEN( noper );
1662   STRLEN foldlen = 0;
1663   U8 foldbuf[ UTF8_MAXBYTES_CASE + 1 ];
1664   STRLEN skiplen = 0;
1665   const U8 *scan = (U8*)NULL;
1666   U32 wordlen      = 0;         /* required init */
1667   STRLEN chars = 0;
1668   bool set_bit = trie->bitmap ? 1 : 0; /*store the first char in the bitmap?*/
1669
1670   if (OP(noper) == NOTHING) {
1671    regnode *noper_next= regnext(noper);
1672    if (noper_next != tail && OP(noper_next) == flags) {
1673     noper = noper_next;
1674     uc= (U8*)STRING(noper);
1675     e= uc + STR_LEN(noper);
1676     trie->minlen= STR_LEN(noper);
1677    } else {
1678     trie->minlen= 0;
1679     continue;
1680    }
1681   }
1682
1683   if ( set_bit ) { /* bitmap only alloced when !(UTF&&Folding) */
1684    TRIE_BITMAP_SET(trie,*uc); /* store the raw first byte
1685           regardless of encoding */
1686    if (OP( noper ) == EXACTFU_SS) {
1687     /* false positives are ok, so just set this */
1688     TRIE_BITMAP_SET(trie,0xDF);
1689    }
1690   }
1691   for ( ; uc < e ; uc += len ) {
1692    TRIE_CHARCOUNT(trie)++;
1693    TRIE_READ_CHAR;
1694    chars++;
1695    if ( uvc < 256 ) {
1696     if ( folder ) {
1697      U8 folded= folder[ (U8) uvc ];
1698      if ( !trie->charmap[ folded ] ) {
1699       trie->charmap[ folded ]=( ++trie->uniquecharcount );
1700       TRIE_STORE_REVCHAR( folded );
1701      }
1702     }
1703     if ( !trie->charmap[ uvc ] ) {
1704      trie->charmap[ uvc ]=( ++trie->uniquecharcount );
1705      TRIE_STORE_REVCHAR( uvc );
1706     }
1707     if ( set_bit ) {
1708      /* store the codepoint in the bitmap, and its folded
1709      * equivalent. */
1710      TRIE_BITMAP_SET(trie, uvc);
1711
1712      /* store the folded codepoint */
1713      if ( folder ) TRIE_BITMAP_SET(trie, folder[(U8) uvc ]);
1714
1715      if ( !UTF ) {
1716       /* store first byte of utf8 representation of
1717       variant codepoints */
1718       if (! UNI_IS_INVARIANT(uvc)) {
1719        TRIE_BITMAP_SET(trie, UTF8_TWO_BYTE_HI(uvc));
1720       }
1721      }
1722      set_bit = 0; /* We've done our bit :-) */
1723     }
1724    } else {
1725     SV** svpp;
1726     if ( !widecharmap )
1727      widecharmap = newHV();
1728
1729     svpp = hv_fetch( widecharmap, (char*)&uvc, sizeof( UV ), 1 );
1730
1731     if ( !svpp )
1732      Perl_croak( aTHX_ "error creating/fetching widecharmap entry for 0x%"UVXf, uvc );
1733
1734     if ( !SvTRUE( *svpp ) ) {
1735      sv_setiv( *svpp, ++trie->uniquecharcount );
1736      TRIE_STORE_REVCHAR(uvc);
1737     }
1738    }
1739   }
1740   if( cur == first ) {
1741    trie->minlen = chars;
1742    trie->maxlen = chars;
1743   } else if (chars < trie->minlen) {
1744    trie->minlen = chars;
1745   } else if (chars > trie->maxlen) {
1746    trie->maxlen = chars;
1747   }
1748   if (OP( noper ) == EXACTFU_SS) {
1749    /* XXX: workaround - 'ss' could match "\x{DF}" so minlen could be 1 and not 2*/
1750    if (trie->minlen > 1)
1751     trie->minlen= 1;
1752   }
1753   if (OP( noper ) == EXACTFU_TRICKYFOLD) {
1754    /* XXX: workround - things like "\x{1FBE}\x{0308}\x{0301}" can match "\x{0390}"
1755    *        - We assume that any such sequence might match a 2 byte string */
1756    if (trie->minlen > 2 )
1757     trie->minlen= 2;
1758   }
1759
1760  } /* end first pass */
1761  DEBUG_TRIE_COMPILE_r(
1762   PerlIO_printf( Perl_debug_log, "%*sTRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n",
1763     (int)depth * 2 + 2,"",
1764     ( widecharmap ? "UTF8" : "NATIVE" ), (int)word_count,
1765     (int)TRIE_CHARCOUNT(trie), trie->uniquecharcount,
1766     (int)trie->minlen, (int)trie->maxlen )
1767  );
1768
1769  /*
1770   We now know what we are dealing with in terms of unique chars and
1771   string sizes so we can calculate how much memory a naive
1772   representation using a flat table  will take. If it's over a reasonable
1773   limit (as specified by ${^RE_TRIE_MAXBUF}) we use a more memory
1774   conservative but potentially much slower representation using an array
1775   of lists.
1776
1777   At the end we convert both representations into the same compressed
1778   form that will be used in regexec.c for matching with. The latter
1779   is a form that cannot be used to construct with but has memory
1780   properties similar to the list form and access properties similar
1781   to the table form making it both suitable for fast searches and
1782   small enough that its feasable to store for the duration of a program.
1783
1784   See the comment in the code where the compressed table is produced
1785   inplace from the flat tabe representation for an explanation of how
1786   the compression works.
1787
1788  */
1789
1790
1791  Newx(prev_states, TRIE_CHARCOUNT(trie) + 2, U32);
1792  prev_states[1] = 0;
1793
1794  if ( (IV)( ( TRIE_CHARCOUNT(trie) + 1 ) * trie->uniquecharcount + 1) > SvIV(re_trie_maxbuff) ) {
1795   /*
1796    Second Pass -- Array Of Lists Representation
1797
1798    Each state will be represented by a list of charid:state records
1799    (reg_trie_trans_le) the first such element holds the CUR and LEN
1800    points of the allocated array. (See defines above).
1801
1802    We build the initial structure using the lists, and then convert
1803    it into the compressed table form which allows faster lookups
1804    (but cant be modified once converted).
1805   */
1806
1807   STRLEN transcount = 1;
1808
1809   DEBUG_TRIE_COMPILE_MORE_r( PerlIO_printf( Perl_debug_log,
1810    "%*sCompiling trie using list compiler\n",
1811    (int)depth * 2 + 2, ""));
1812
1813   trie->states = (reg_trie_state *)
1814    PerlMemShared_calloc( TRIE_CHARCOUNT(trie) + 2,
1815         sizeof(reg_trie_state) );
1816   TRIE_LIST_NEW(1);
1817   next_alloc = 2;
1818
1819   for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
1820
1821    regnode *noper   = NEXTOPER( cur );
1822    U8 *uc           = (U8*)STRING( noper );
1823    const U8 *e      = uc + STR_LEN( noper );
1824    U32 state        = 1;         /* required init */
1825    U16 charid       = 0;         /* sanity init */
1826    U8 *scan         = (U8*)NULL; /* sanity init */
1827    STRLEN foldlen   = 0;         /* required init */
1828    U32 wordlen      = 0;         /* required init */
1829    U8 foldbuf[ UTF8_MAXBYTES_CASE + 1 ];
1830    STRLEN skiplen   = 0;
1831
1832    if (OP(noper) == NOTHING) {
1833     regnode *noper_next= regnext(noper);
1834     if (noper_next != tail && OP(noper_next) == flags) {
1835      noper = noper_next;
1836      uc= (U8*)STRING(noper);
1837      e= uc + STR_LEN(noper);
1838     }
1839    }
1840
1841    if (OP(noper) != NOTHING) {
1842     for ( ; uc < e ; uc += len ) {
1843
1844      TRIE_READ_CHAR;
1845
1846      if ( uvc < 256 ) {
1847       charid = trie->charmap[ uvc ];
1848      } else {
1849       SV** const svpp = hv_fetch( widecharmap, (char*)&uvc, sizeof( UV ), 0);
1850       if ( !svpp ) {
1851        charid = 0;
1852       } else {
1853        charid=(U16)SvIV( *svpp );
1854       }
1855      }
1856      /* charid is now 0 if we dont know the char read, or nonzero if we do */
1857      if ( charid ) {
1858
1859       U16 check;
1860       U32 newstate = 0;
1861
1862       charid--;
1863       if ( !trie->states[ state ].trans.list ) {
1864        TRIE_LIST_NEW( state );
1865       }
1866       for ( check = 1; check <= TRIE_LIST_USED( state ); check++ ) {
1867        if ( TRIE_LIST_ITEM( state, check ).forid == charid ) {
1868         newstate = TRIE_LIST_ITEM( state, check ).newstate;
1869         break;
1870        }
1871       }
1872       if ( ! newstate ) {
1873        newstate = next_alloc++;
1874        prev_states[newstate] = state;
1875        TRIE_LIST_PUSH( state, charid, newstate );
1876        transcount++;
1877       }
1878       state = newstate;
1879      } else {
1880       Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %"IVdf, uvc );
1881      }
1882     }
1883    }
1884    TRIE_HANDLE_WORD(state);
1885
1886   } /* end second pass */
1887
1888   /* next alloc is the NEXT state to be allocated */
1889   trie->statecount = next_alloc;
1890   trie->states = (reg_trie_state *)
1891    PerlMemShared_realloc( trie->states,
1892         next_alloc
1893         * sizeof(reg_trie_state) );
1894
1895   /* and now dump it out before we compress it */
1896   DEBUG_TRIE_COMPILE_MORE_r(dump_trie_interim_list(trie, widecharmap,
1897               revcharmap, next_alloc,
1898               depth+1)
1899   );
1900
1901   trie->trans = (reg_trie_trans *)
1902    PerlMemShared_calloc( transcount, sizeof(reg_trie_trans) );
1903   {
1904    U32 state;
1905    U32 tp = 0;
1906    U32 zp = 0;
1907
1908
1909    for( state=1 ; state < next_alloc ; state ++ ) {
1910     U32 base=0;
1911
1912     /*
1913     DEBUG_TRIE_COMPILE_MORE_r(
1914      PerlIO_printf( Perl_debug_log, "tp: %d zp: %d ",tp,zp)
1915     );
1916     */
1917
1918     if (trie->states[state].trans.list) {
1919      U16 minid=TRIE_LIST_ITEM( state, 1).forid;
1920      U16 maxid=minid;
1921      U16 idx;
1922
1923      for( idx = 2 ; idx <= TRIE_LIST_USED( state ) ; idx++ ) {
1924       const U16 forid = TRIE_LIST_ITEM( state, idx).forid;
1925       if ( forid < minid ) {
1926        minid=forid;
1927       } else if ( forid > maxid ) {
1928        maxid=forid;
1929       }
1930      }
1931      if ( transcount < tp + maxid - minid + 1) {
1932       transcount *= 2;
1933       trie->trans = (reg_trie_trans *)
1934        PerlMemShared_realloc( trie->trans,
1935              transcount
1936              * sizeof(reg_trie_trans) );
1937       Zero( trie->trans + (transcount / 2), transcount / 2 , reg_trie_trans );
1938      }
1939      base = trie->uniquecharcount + tp - minid;
1940      if ( maxid == minid ) {
1941       U32 set = 0;
1942       for ( ; zp < tp ; zp++ ) {
1943        if ( ! trie->trans[ zp ].next ) {
1944         base = trie->uniquecharcount + zp - minid;
1945         trie->trans[ zp ].next = TRIE_LIST_ITEM( state, 1).newstate;
1946         trie->trans[ zp ].check = state;
1947         set = 1;
1948         break;
1949        }
1950       }
1951       if ( !set ) {
1952        trie->trans[ tp ].next = TRIE_LIST_ITEM( state, 1).newstate;
1953        trie->trans[ tp ].check = state;
1954        tp++;
1955        zp = tp;
1956       }
1957      } else {
1958       for ( idx=1; idx <= TRIE_LIST_USED( state ) ; idx++ ) {
1959        const U32 tid = base -  trie->uniquecharcount + TRIE_LIST_ITEM( state, idx ).forid;
1960        trie->trans[ tid ].next = TRIE_LIST_ITEM( state, idx ).newstate;
1961        trie->trans[ tid ].check = state;
1962       }
1963       tp += ( maxid - minid + 1 );
1964      }
1965      Safefree(trie->states[ state ].trans.list);
1966     }
1967     /*
1968     DEBUG_TRIE_COMPILE_MORE_r(
1969      PerlIO_printf( Perl_debug_log, " base: %d\n",base);
1970     );
1971     */
1972     trie->states[ state ].trans.base=base;
1973    }
1974    trie->lasttrans = tp + 1;
1975   }
1976  } else {
1977   /*
1978   Second Pass -- Flat Table Representation.
1979
1980   we dont use the 0 slot of either trans[] or states[] so we add 1 to each.
1981   We know that we will need Charcount+1 trans at most to store the data
1982   (one row per char at worst case) So we preallocate both structures
1983   assuming worst case.
1984
1985   We then construct the trie using only the .next slots of the entry
1986   structs.
1987
1988   We use the .check field of the first entry of the node temporarily to
1989   make compression both faster and easier by keeping track of how many non
1990   zero fields are in the node.
1991
1992   Since trans are numbered from 1 any 0 pointer in the table is a FAIL
1993   transition.
1994
1995   There are two terms at use here: state as a TRIE_NODEIDX() which is a
1996   number representing the first entry of the node, and state as a
1997   TRIE_NODENUM() which is the trans number. state 1 is TRIE_NODEIDX(1) and
1998   TRIE_NODENUM(1), state 2 is TRIE_NODEIDX(2) and TRIE_NODENUM(3) if there
1999   are 2 entrys per node. eg:
2000
2001    A B       A B
2002   1. 2 4    1. 3 7
2003   2. 0 3    3. 0 5
2004   3. 0 0    5. 0 0
2005   4. 0 0    7. 0 0
2006
2007   The table is internally in the right hand, idx form. However as we also
2008   have to deal with the states array which is indexed by nodenum we have to
2009   use TRIE_NODENUM() to convert.
2010
2011   */
2012   DEBUG_TRIE_COMPILE_MORE_r( PerlIO_printf( Perl_debug_log,
2013    "%*sCompiling trie using table compiler\n",
2014    (int)depth * 2 + 2, ""));
2015
2016   trie->trans = (reg_trie_trans *)
2017    PerlMemShared_calloc( ( TRIE_CHARCOUNT(trie) + 1 )
2018         * trie->uniquecharcount + 1,
2019         sizeof(reg_trie_trans) );
2020   trie->states = (reg_trie_state *)
2021    PerlMemShared_calloc( TRIE_CHARCOUNT(trie) + 2,
2022         sizeof(reg_trie_state) );
2023   next_alloc = trie->uniquecharcount + 1;
2024
2025
2026   for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
2027
2028    regnode *noper   = NEXTOPER( cur );
2029    const U8 *uc     = (U8*)STRING( noper );
2030    const U8 *e      = uc + STR_LEN( noper );
2031
2032    U32 state        = 1;         /* required init */
2033
2034    U16 charid       = 0;         /* sanity init */
2035    U32 accept_state = 0;         /* sanity init */
2036    U8 *scan         = (U8*)NULL; /* sanity init */
2037
2038    STRLEN foldlen   = 0;         /* required init */
2039    U32 wordlen      = 0;         /* required init */
2040    STRLEN skiplen   = 0;
2041    U8 foldbuf[ UTF8_MAXBYTES_CASE + 1 ];
2042
2043    if (OP(noper) == NOTHING) {
2044     regnode *noper_next= regnext(noper);
2045     if (noper_next != tail && OP(noper_next) == flags) {
2046      noper = noper_next;
2047      uc= (U8*)STRING(noper);
2048      e= uc + STR_LEN(noper);
2049     }
2050    }
2051
2052    if ( OP(noper) != NOTHING ) {
2053     for ( ; uc < e ; uc += len ) {
2054
2055      TRIE_READ_CHAR;
2056
2057      if ( uvc < 256 ) {
2058       charid = trie->charmap[ uvc ];
2059      } else {
2060       SV* const * const svpp = hv_fetch( widecharmap, (char*)&uvc, sizeof( UV ), 0);
2061       charid = svpp ? (U16)SvIV(*svpp) : 0;
2062      }
2063      if ( charid ) {
2064       charid--;
2065       if ( !trie->trans[ state + charid ].next ) {
2066        trie->trans[ state + charid ].next = next_alloc;
2067        trie->trans[ state ].check++;
2068        prev_states[TRIE_NODENUM(next_alloc)]
2069          = TRIE_NODENUM(state);
2070        next_alloc += trie->uniquecharcount;
2071       }
2072       state = trie->trans[ state + charid ].next;
2073      } else {
2074       Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %"IVdf, uvc );
2075      }
2076      /* charid is now 0 if we dont know the char read, or nonzero if we do */
2077     }
2078    }
2079    accept_state = TRIE_NODENUM( state );
2080    TRIE_HANDLE_WORD(accept_state);
2081
2082   } /* end second pass */
2083
2084   /* and now dump it out before we compress it */
2085   DEBUG_TRIE_COMPILE_MORE_r(dump_trie_interim_table(trie, widecharmap,
2086               revcharmap,
2087               next_alloc, depth+1));
2088
2089   {
2090   /*
2091   * Inplace compress the table.*
2092
2093   For sparse data sets the table constructed by the trie algorithm will
2094   be mostly 0/FAIL transitions or to put it another way mostly empty.
2095   (Note that leaf nodes will not contain any transitions.)
2096
2097   This algorithm compresses the tables by eliminating most such
2098   transitions, at the cost of a modest bit of extra work during lookup:
2099
2100   - Each states[] entry contains a .base field which indicates the
2101   index in the state[] array wheres its transition data is stored.
2102
2103   - If .base is 0 there are no valid transitions from that node.
2104
2105   - If .base is nonzero then charid is added to it to find an entry in
2106   the trans array.
2107
2108   -If trans[states[state].base+charid].check!=state then the
2109   transition is taken to be a 0/Fail transition. Thus if there are fail
2110   transitions at the front of the node then the .base offset will point
2111   somewhere inside the previous nodes data (or maybe even into a node
2112   even earlier), but the .check field determines if the transition is
2113   valid.
2114
2115   XXX - wrong maybe?
2116   The following process inplace converts the table to the compressed
2117   table: We first do not compress the root node 1,and mark all its
2118   .check pointers as 1 and set its .base pointer as 1 as well. This
2119   allows us to do a DFA construction from the compressed table later,
2120   and ensures that any .base pointers we calculate later are greater
2121   than 0.
2122
2123   - We set 'pos' to indicate the first entry of the second node.
2124
2125   - We then iterate over the columns of the node, finding the first and
2126   last used entry at l and m. We then copy l..m into pos..(pos+m-l),
2127   and set the .check pointers accordingly, and advance pos
2128   appropriately and repreat for the next node. Note that when we copy
2129   the next pointers we have to convert them from the original
2130   NODEIDX form to NODENUM form as the former is not valid post
2131   compression.
2132
2133   - If a node has no transitions used we mark its base as 0 and do not
2134   advance the pos pointer.
2135
2136   - If a node only has one transition we use a second pointer into the
2137   structure to fill in allocated fail transitions from other states.
2138   This pointer is independent of the main pointer and scans forward
2139   looking for null transitions that are allocated to a state. When it
2140   finds one it writes the single transition into the "hole".  If the
2141   pointer doesnt find one the single transition is appended as normal.
2142
2143   - Once compressed we can Renew/realloc the structures to release the
2144   excess space.
2145
2146   See "Table-Compression Methods" in sec 3.9 of the Red Dragon,
2147   specifically Fig 3.47 and the associated pseudocode.
2148
2149   demq
2150   */
2151   const U32 laststate = TRIE_NODENUM( next_alloc );
2152   U32 state, charid;
2153   U32 pos = 0, zp=0;
2154   trie->statecount = laststate;
2155
2156   for ( state = 1 ; state < laststate ; state++ ) {
2157    U8 flag = 0;
2158    const U32 stateidx = TRIE_NODEIDX( state );
2159    const U32 o_used = trie->trans[ stateidx ].check;
2160    U32 used = trie->trans[ stateidx ].check;
2161    trie->trans[ stateidx ].check = 0;
2162
2163    for ( charid = 0 ; used && charid < trie->uniquecharcount ; charid++ ) {
2164     if ( flag || trie->trans[ stateidx + charid ].next ) {
2165      if ( trie->trans[ stateidx + charid ].next ) {
2166       if (o_used == 1) {
2167        for ( ; zp < pos ; zp++ ) {
2168         if ( ! trie->trans[ zp ].next ) {
2169          break;
2170         }
2171        }
2172        trie->states[ state ].trans.base = zp + trie->uniquecharcount - charid ;
2173        trie->trans[ zp ].next = SAFE_TRIE_NODENUM( trie->trans[ stateidx + charid ].next );
2174        trie->trans[ zp ].check = state;
2175        if ( ++zp > pos ) pos = zp;
2176        break;
2177       }
2178       used--;
2179      }
2180      if ( !flag ) {
2181       flag = 1;
2182       trie->states[ state ].trans.base = pos + trie->uniquecharcount - charid ;
2183      }
2184      trie->trans[ pos ].next = SAFE_TRIE_NODENUM( trie->trans[ stateidx + charid ].next );
2185      trie->trans[ pos ].check = state;
2186      pos++;
2187     }
2188    }
2189   }
2190   trie->lasttrans = pos + 1;
2191   trie->states = (reg_trie_state *)
2192    PerlMemShared_realloc( trie->states, laststate
2193         * sizeof(reg_trie_state) );
2194   DEBUG_TRIE_COMPILE_MORE_r(
2195     PerlIO_printf( Perl_debug_log,
2196      "%*sAlloc: %d Orig: %"IVdf" elements, Final:%"IVdf". Savings of %%%5.2f\n",
2197      (int)depth * 2 + 2,"",
2198      (int)( ( TRIE_CHARCOUNT(trie) + 1 ) * trie->uniquecharcount + 1 ),
2199      (IV)next_alloc,
2200      (IV)pos,
2201      ( ( next_alloc - pos ) * 100 ) / (double)next_alloc );
2202    );
2203
2204   } /* end table compress */
2205  }
2206  DEBUG_TRIE_COMPILE_MORE_r(
2207    PerlIO_printf(Perl_debug_log, "%*sStatecount:%"UVxf" Lasttrans:%"UVxf"\n",
2208     (int)depth * 2 + 2, "",
2209     (UV)trie->statecount,
2210     (UV)trie->lasttrans)
2211  );
2212  /* resize the trans array to remove unused space */
2213  trie->trans = (reg_trie_trans *)
2214   PerlMemShared_realloc( trie->trans, trie->lasttrans
2215        * sizeof(reg_trie_trans) );
2216
2217  {   /* Modify the program and insert the new TRIE node */
2218   U8 nodetype =(U8)(flags & 0xFF);
2219   char *str=NULL;
2220
2221 #ifdef DEBUGGING
2222   regnode *optimize = NULL;
2223 #ifdef RE_TRACK_PATTERN_OFFSETS
2224
2225   U32 mjd_offset = 0;
2226   U32 mjd_nodelen = 0;
2227 #endif /* RE_TRACK_PATTERN_OFFSETS */
2228 #endif /* DEBUGGING */
2229   /*
2230   This means we convert either the first branch or the first Exact,
2231   depending on whether the thing following (in 'last') is a branch
2232   or not and whther first is the startbranch (ie is it a sub part of
2233   the alternation or is it the whole thing.)
2234   Assuming its a sub part we convert the EXACT otherwise we convert
2235   the whole branch sequence, including the first.
2236   */
2237   /* Find the node we are going to overwrite */
2238   if ( first != startbranch || OP( last ) == BRANCH ) {
2239    /* branch sub-chain */
2240    NEXT_OFF( first ) = (U16)(last - first);
2241 #ifdef RE_TRACK_PATTERN_OFFSETS
2242    DEBUG_r({
2243     mjd_offset= Node_Offset((convert));
2244     mjd_nodelen= Node_Length((convert));
2245    });
2246 #endif
2247    /* whole branch chain */
2248   }
2249 #ifdef RE_TRACK_PATTERN_OFFSETS
2250   else {
2251    DEBUG_r({
2252     const  regnode *nop = NEXTOPER( convert );
2253     mjd_offset= Node_Offset((nop));
2254     mjd_nodelen= Node_Length((nop));
2255    });
2256   }
2257   DEBUG_OPTIMISE_r(
2258    PerlIO_printf(Perl_debug_log, "%*sMJD offset:%"UVuf" MJD length:%"UVuf"\n",
2259     (int)depth * 2 + 2, "",
2260     (UV)mjd_offset, (UV)mjd_nodelen)
2261   );
2262 #endif
2263   /* But first we check to see if there is a common prefix we can
2264   split out as an EXACT and put in front of the TRIE node.  */
2265   trie->startstate= 1;
2266   if ( trie->bitmap && !widecharmap && !trie->jump  ) {
2267    U32 state;
2268    for ( state = 1 ; state < trie->statecount-1 ; state++ ) {
2269     U32 ofs = 0;
2270     I32 idx = -1;
2271     U32 count = 0;
2272     const U32 base = trie->states[ state ].trans.base;
2273
2274     if ( trie->states[state].wordnum )
2275       count = 1;
2276
2277     for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
2278      if ( ( base + ofs >= trie->uniquecharcount ) &&
2279       ( base + ofs - trie->uniquecharcount < trie->lasttrans ) &&
2280       trie->trans[ base + ofs - trie->uniquecharcount ].check == state )
2281      {
2282       if ( ++count > 1 ) {
2283        SV **tmp = av_fetch( revcharmap, ofs, 0);
2284        const U8 *ch = (U8*)SvPV_nolen_const( *tmp );
2285        if ( state == 1 ) break;
2286        if ( count == 2 ) {
2287         Zero(trie->bitmap, ANYOF_BITMAP_SIZE, char);
2288         DEBUG_OPTIMISE_r(
2289          PerlIO_printf(Perl_debug_log,
2290           "%*sNew Start State=%"UVuf" Class: [",
2291           (int)depth * 2 + 2, "",
2292           (UV)state));
2293         if (idx >= 0) {
2294          SV ** const tmp = av_fetch( revcharmap, idx, 0);
2295          const U8 * const ch = (U8*)SvPV_nolen_const( *tmp );
2296
2297          TRIE_BITMAP_SET(trie,*ch);
2298          if ( folder )
2299           TRIE_BITMAP_SET(trie, folder[ *ch ]);
2300          DEBUG_OPTIMISE_r(
2301           PerlIO_printf(Perl_debug_log, "%s", (char*)ch)
2302          );
2303         }
2304        }
2305        TRIE_BITMAP_SET(trie,*ch);
2306        if ( folder )
2307         TRIE_BITMAP_SET(trie,folder[ *ch ]);
2308        DEBUG_OPTIMISE_r(PerlIO_printf( Perl_debug_log,"%s", ch));
2309       }
2310       idx = ofs;
2311      }
2312     }
2313     if ( count == 1 ) {
2314      SV **tmp = av_fetch( revcharmap, idx, 0);
2315      STRLEN len;
2316      char *ch = SvPV( *tmp, len );
2317      DEBUG_OPTIMISE_r({
2318       SV *sv=sv_newmortal();
2319       PerlIO_printf( Perl_debug_log,
2320        "%*sPrefix State: %"UVuf" Idx:%"UVuf" Char='%s'\n",
2321        (int)depth * 2 + 2, "",
2322        (UV)state, (UV)idx,
2323        pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), 6,
2324         PL_colors[0], PL_colors[1],
2325         (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |
2326         PERL_PV_ESCAPE_FIRSTCHAR
2327        )
2328       );
2329      });
2330      if ( state==1 ) {
2331       OP( convert ) = nodetype;
2332       str=STRING(convert);
2333       STR_LEN(convert)=0;
2334      }
2335      STR_LEN(convert) += len;
2336      while (len--)
2337       *str++ = *ch++;
2338     } else {
2339 #ifdef DEBUGGING
2340      if (state>1)
2341       DEBUG_OPTIMISE_r(PerlIO_printf( Perl_debug_log,"]\n"));
2342 #endif
2343      break;
2344     }
2345    }
2346    trie->prefixlen = (state-1);
2347    if (str) {
2348     regnode *n = convert+NODE_SZ_STR(convert);
2349     NEXT_OFF(convert) = NODE_SZ_STR(convert);
2350     trie->startstate = state;
2351     trie->minlen -= (state - 1);
2352     trie->maxlen -= (state - 1);
2353 #ifdef DEBUGGING
2354    /* At least the UNICOS C compiler choked on this
2355     * being argument to DEBUG_r(), so let's just have
2356     * it right here. */
2357    if (
2358 #ifdef PERL_EXT_RE_BUILD
2359     1
2360 #else
2361     DEBUG_r_TEST
2362 #endif
2363     ) {
2364     regnode *fix = convert;
2365     U32 word = trie->wordcount;
2366     mjd_nodelen++;
2367     Set_Node_Offset_Length(convert, mjd_offset, state - 1);
2368     while( ++fix < n ) {
2369      Set_Node_Offset_Length(fix, 0, 0);
2370     }
2371     while (word--) {
2372      SV ** const tmp = av_fetch( trie_words, word, 0 );
2373      if (tmp) {
2374       if ( STR_LEN(convert) <= SvCUR(*tmp) )
2375        sv_chop(*tmp, SvPV_nolen(*tmp) + STR_LEN(convert));
2376       else
2377        sv_chop(*tmp, SvPV_nolen(*tmp) + SvCUR(*tmp));
2378      }
2379     }
2380    }
2381 #endif
2382     if (trie->maxlen) {
2383      convert = n;
2384     } else {
2385      NEXT_OFF(convert) = (U16)(tail - convert);
2386      DEBUG_r(optimize= n);
2387     }
2388    }
2389   }
2390   if (!jumper)
2391    jumper = last;
2392   if ( trie->maxlen ) {
2393    NEXT_OFF( convert ) = (U16)(tail - convert);
2394    ARG_SET( convert, data_slot );
2395    /* Store the offset to the first unabsorbed branch in
2396    jump[0], which is otherwise unused by the jump logic.
2397    We use this when dumping a trie and during optimisation. */
2398    if (trie->jump)
2399     trie->jump[0] = (U16)(nextbranch - convert);
2400
2401    /* If the start state is not accepting (meaning there is no empty string/NOTHING)
2402    *   and there is a bitmap
2403    *   and the first "jump target" node we found leaves enough room
2404    * then convert the TRIE node into a TRIEC node, with the bitmap
2405    * embedded inline in the opcode - this is hypothetically faster.
2406    */
2407    if ( !trie->states[trie->startstate].wordnum
2408     && trie->bitmap
2409     && ( (char *)jumper - (char *)convert) >= (int)sizeof(struct regnode_charclass) )
2410    {
2411     OP( convert ) = TRIEC;
2412     Copy(trie->bitmap, ((struct regnode_charclass *)convert)->bitmap, ANYOF_BITMAP_SIZE, char);
2413     PerlMemShared_free(trie->bitmap);
2414     trie->bitmap= NULL;
2415    } else
2416     OP( convert ) = TRIE;
2417
2418    /* store the type in the flags */
2419    convert->flags = nodetype;
2420    DEBUG_r({
2421    optimize = convert
2422      + NODE_STEP_REGNODE
2423      + regarglen[ OP( convert ) ];
2424    });
2425    /* XXX We really should free up the resource in trie now,
2426     as we won't use them - (which resources?) dmq */
2427   }
2428   /* needed for dumping*/
2429   DEBUG_r(if (optimize) {
2430    regnode *opt = convert;
2431
2432    while ( ++opt < optimize) {
2433     Set_Node_Offset_Length(opt,0,0);
2434    }
2435    /*
2436     Try to clean up some of the debris left after the
2437     optimisation.
2438    */
2439    while( optimize < jumper ) {
2440     mjd_nodelen += Node_Length((optimize));
2441     OP( optimize ) = OPTIMIZED;
2442     Set_Node_Offset_Length(optimize,0,0);
2443     optimize++;
2444    }
2445    Set_Node_Offset_Length(convert,mjd_offset,mjd_nodelen);
2446   });
2447  } /* end node insert */
2448  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, convert);
2449
2450  /*  Finish populating the prev field of the wordinfo array.  Walk back
2451  *  from each accept state until we find another accept state, and if
2452  *  so, point the first word's .prev field at the second word. If the
2453  *  second already has a .prev field set, stop now. This will be the
2454  *  case either if we've already processed that word's accept state,
2455  *  or that state had multiple words, and the overspill words were
2456  *  already linked up earlier.
2457  */
2458  {
2459   U16 word;
2460   U32 state;
2461   U16 prev;
2462
2463   for (word=1; word <= trie->wordcount; word++) {
2464    prev = 0;
2465    if (trie->wordinfo[word].prev)
2466     continue;
2467    state = trie->wordinfo[word].accept;
2468    while (state) {
2469     state = prev_states[state];
2470     if (!state)
2471      break;
2472     prev = trie->states[state].wordnum;
2473     if (prev)
2474      break;
2475    }
2476    trie->wordinfo[word].prev = prev;
2477   }
2478   Safefree(prev_states);
2479  }
2480
2481
2482  /* and now dump out the compressed format */
2483  DEBUG_TRIE_COMPILE_r(dump_trie(trie, widecharmap, revcharmap, depth+1));
2484
2485  RExC_rxi->data->data[ data_slot + 1 ] = (void*)widecharmap;
2486 #ifdef DEBUGGING
2487  RExC_rxi->data->data[ data_slot + TRIE_WORDS_OFFSET ] = (void*)trie_words;
2488  RExC_rxi->data->data[ data_slot + 3 ] = (void*)revcharmap;
2489 #else
2490  SvREFCNT_dec_NN(revcharmap);
2491 #endif
2492  return trie->jump
2493   ? MADE_JUMP_TRIE
2494   : trie->startstate>1
2495    ? MADE_EXACT_TRIE
2496    : MADE_TRIE;
2497 }
2498
2499 STATIC void
2500 S_make_trie_failtable(pTHX_ RExC_state_t *pRExC_state, regnode *source,  regnode *stclass, U32 depth)
2501 {
2502 /* The Trie is constructed and compressed now so we can build a fail array if it's needed
2503
2504    This is basically the Aho-Corasick algorithm. Its from exercise 3.31 and 3.32 in the
2505    "Red Dragon" -- Compilers, principles, techniques, and tools. Aho, Sethi, Ullman 1985/88
2506    ISBN 0-201-10088-6
2507
2508    We find the fail state for each state in the trie, this state is the longest proper
2509    suffix of the current state's 'word' that is also a proper prefix of another word in our
2510    trie. State 1 represents the word '' and is thus the default fail state. This allows
2511    the DFA not to have to restart after its tried and failed a word at a given point, it
2512    simply continues as though it had been matching the other word in the first place.
2513    Consider
2514  'abcdgu'=~/abcdefg|cdgu/
2515    When we get to 'd' we are still matching the first word, we would encounter 'g' which would
2516    fail, which would bring us to the state representing 'd' in the second word where we would
2517    try 'g' and succeed, proceeding to match 'cdgu'.
2518  */
2519  /* add a fail transition */
2520  const U32 trie_offset = ARG(source);
2521  reg_trie_data *trie=(reg_trie_data *)RExC_rxi->data->data[trie_offset];
2522  U32 *q;
2523  const U32 ucharcount = trie->uniquecharcount;
2524  const U32 numstates = trie->statecount;
2525  const U32 ubound = trie->lasttrans + ucharcount;
2526  U32 q_read = 0;
2527  U32 q_write = 0;
2528  U32 charid;
2529  U32 base = trie->states[ 1 ].trans.base;
2530  U32 *fail;
2531  reg_ac_data *aho;
2532  const U32 data_slot = add_data( pRExC_state, 1, "T" );
2533  GET_RE_DEBUG_FLAGS_DECL;
2534
2535  PERL_ARGS_ASSERT_MAKE_TRIE_FAILTABLE;
2536 #ifndef DEBUGGING
2537  PERL_UNUSED_ARG(depth);
2538 #endif
2539
2540
2541  ARG_SET( stclass, data_slot );
2542  aho = (reg_ac_data *) PerlMemShared_calloc( 1, sizeof(reg_ac_data) );
2543  RExC_rxi->data->data[ data_slot ] = (void*)aho;
2544  aho->trie=trie_offset;
2545  aho->states=(reg_trie_state *)PerlMemShared_malloc( numstates * sizeof(reg_trie_state) );
2546  Copy( trie->states, aho->states, numstates, reg_trie_state );
2547  Newxz( q, numstates, U32);
2548  aho->fail = (U32 *) PerlMemShared_calloc( numstates, sizeof(U32) );
2549  aho->refcount = 1;
2550  fail = aho->fail;
2551  /* initialize fail[0..1] to be 1 so that we always have
2552  a valid final fail state */
2553  fail[ 0 ] = fail[ 1 ] = 1;
2554
2555  for ( charid = 0; charid < ucharcount ; charid++ ) {
2556   const U32 newstate = TRIE_TRANS_STATE( 1, base, ucharcount, charid, 0 );
2557   if ( newstate ) {
2558    q[ q_write ] = newstate;
2559    /* set to point at the root */
2560    fail[ q[ q_write++ ] ]=1;
2561   }
2562  }
2563  while ( q_read < q_write) {
2564   const U32 cur = q[ q_read++ % numstates ];
2565   base = trie->states[ cur ].trans.base;
2566
2567   for ( charid = 0 ; charid < ucharcount ; charid++ ) {
2568    const U32 ch_state = TRIE_TRANS_STATE( cur, base, ucharcount, charid, 1 );
2569    if (ch_state) {
2570     U32 fail_state = cur;
2571     U32 fail_base;
2572     do {
2573      fail_state = fail[ fail_state ];
2574      fail_base = aho->states[ fail_state ].trans.base;
2575     } while ( !TRIE_TRANS_STATE( fail_state, fail_base, ucharcount, charid, 1 ) );
2576
2577     fail_state = TRIE_TRANS_STATE( fail_state, fail_base, ucharcount, charid, 1 );
2578     fail[ ch_state ] = fail_state;
2579     if ( !aho->states[ ch_state ].wordnum && aho->states[ fail_state ].wordnum )
2580     {
2581       aho->states[ ch_state ].wordnum =  aho->states[ fail_state ].wordnum;
2582     }
2583     q[ q_write++ % numstates] = ch_state;
2584    }
2585   }
2586  }
2587  /* restore fail[0..1] to 0 so that we "fall out" of the AC loop
2588  when we fail in state 1, this allows us to use the
2589  charclass scan to find a valid start char. This is based on the principle
2590  that theres a good chance the string being searched contains lots of stuff
2591  that cant be a start char.
2592  */
2593  fail[ 0 ] = fail[ 1 ] = 0;
2594  DEBUG_TRIE_COMPILE_r({
2595   PerlIO_printf(Perl_debug_log,
2596      "%*sStclass Failtable (%"UVuf" states): 0",
2597      (int)(depth * 2), "", (UV)numstates
2598   );
2599   for( q_read=1; q_read<numstates; q_read++ ) {
2600    PerlIO_printf(Perl_debug_log, ", %"UVuf, (UV)fail[q_read]);
2601   }
2602   PerlIO_printf(Perl_debug_log, "\n");
2603  });
2604  Safefree(q);
2605  /*RExC_seen |= REG_SEEN_TRIEDFA;*/
2606 }
2607
2608
2609 /*
2610  * There are strange code-generation bugs caused on sparc64 by gcc-2.95.2.
2611  * These need to be revisited when a newer toolchain becomes available.
2612  */
2613 #if defined(__sparc64__) && defined(__GNUC__)
2614 #   if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
2615 #       undef  SPARC64_GCC_WORKAROUND
2616 #       define SPARC64_GCC_WORKAROUND 1
2617 #   endif
2618 #endif
2619
2620 #define DEBUG_PEEP(str,scan,depth) \
2621  DEBUG_OPTIMISE_r({if (scan){ \
2622  SV * const mysv=sv_newmortal(); \
2623  regnode *Next = regnext(scan); \
2624  regprop(RExC_rx, mysv, scan); \
2625  PerlIO_printf(Perl_debug_log, "%*s" str ">%3d: %s (%d)\n", \
2626  (int)depth*2, "", REG_NODE_NUM(scan), SvPV_nolen_const(mysv),\
2627  Next ? (REG_NODE_NUM(Next)) : 0 ); \
2628    }});
2629
2630
2631 /* The below joins as many adjacent EXACTish nodes as possible into a single
2632  * one.  The regop may be changed if the node(s) contain certain sequences that
2633  * require special handling.  The joining is only done if:
2634  * 1) there is room in the current conglomerated node to entirely contain the
2635  *    next one.
2636  * 2) they are the exact same node type
2637  *
2638  * The adjacent nodes actually may be separated by NOTHING-kind nodes, and
2639  * these get optimized out
2640  *
2641  * If a node is to match under /i (folded), the number of characters it matches
2642  * can be different than its character length if it contains a multi-character
2643  * fold.  *min_subtract is set to the total delta of the input nodes.
2644  *
2645  * And *has_exactf_sharp_s is set to indicate whether or not the node is EXACTF
2646  * and contains LATIN SMALL LETTER SHARP S
2647  *
2648  * This is as good a place as any to discuss the design of handling these
2649  * multi-character fold sequences.  It's been wrong in Perl for a very long
2650  * time.  There are three code points in Unicode whose multi-character folds
2651  * were long ago discovered to mess things up.  The previous designs for
2652  * dealing with these involved assigning a special node for them.  This
2653  * approach doesn't work, as evidenced by this example:
2654  *      "\xDFs" =~ /s\xDF/ui    # Used to fail before these patches
2655  * Both these fold to "sss", but if the pattern is parsed to create a node that
2656  * would match just the \xDF, it won't be able to handle the case where a
2657  * successful match would have to cross the node's boundary.  The new approach
2658  * that hopefully generally solves the problem generates an EXACTFU_SS node
2659  * that is "sss".
2660  *
2661  * It turns out that there are problems with all multi-character folds, and not
2662  * just these three.  Now the code is general, for all such cases, but the
2663  * three still have some special handling.  The approach taken is:
2664  * 1)   This routine examines each EXACTFish node that could contain multi-
2665  *      character fold sequences.  It returns in *min_subtract how much to
2666  *      subtract from the the actual length of the string to get a real minimum
2667  *      match length; it is 0 if there are no multi-char folds.  This delta is
2668  *      used by the caller to adjust the min length of the match, and the delta
2669  *      between min and max, so that the optimizer doesn't reject these
2670  *      possibilities based on size constraints.
2671  * 2)   Certain of these sequences require special handling by the trie code,
2672  *      so, if found, this code changes the joined node type to special ops:
2673  *      EXACTFU_TRICKYFOLD and EXACTFU_SS.
2674  * 3)   For the sequence involving the Sharp s (\xDF), the node type EXACTFU_SS
2675  *      is used for an EXACTFU node that contains at least one "ss" sequence in
2676  *      it.  For non-UTF-8 patterns and strings, this is the only case where
2677  *      there is a possible fold length change.  That means that a regular
2678  *      EXACTFU node without UTF-8 involvement doesn't have to concern itself
2679  *      with length changes, and so can be processed faster.  regexec.c takes
2680  *      advantage of this.  Generally, an EXACTFish node that is in UTF-8 is
2681  *      pre-folded by regcomp.c.  This saves effort in regex matching.
2682  *      However, the pre-folding isn't done for non-UTF8 patterns because the
2683  *      fold of the MICRO SIGN requires UTF-8, and we don't want to slow things
2684  *      down by forcing the pattern into UTF8 unless necessary.  Also what
2685  *      EXACTF and EXACTFL nodes fold to isn't known until runtime.  The fold
2686  *      possibilities for the non-UTF8 patterns are quite simple, except for
2687  *      the sharp s.  All the ones that don't involve a UTF-8 target string are
2688  *      members of a fold-pair, and arrays are set up for all of them so that
2689  *      the other member of the pair can be found quickly.  Code elsewhere in
2690  *      this file makes sure that in EXACTFU nodes, the sharp s gets folded to
2691  *      'ss', even if the pattern isn't UTF-8.  This avoids the issues
2692  *      described in the next item.
2693  * 4)   A problem remains for the sharp s in EXACTF nodes.  Whether it matches
2694  *      'ss' or not is not knowable at compile time.  It will match iff the
2695  *      target string is in UTF-8, unlike the EXACTFU nodes, where it always
2696  *      matches; and the EXACTFL and EXACTFA nodes where it never does.  Thus
2697  *      it can't be folded to "ss" at compile time, unlike EXACTFU does (as
2698  *      described in item 3).  An assumption that the optimizer part of
2699  *      regexec.c (probably unwittingly) makes is that a character in the
2700  *      pattern corresponds to at most a single character in the target string.
2701  *      (And I do mean character, and not byte here, unlike other parts of the
2702  *      documentation that have never been updated to account for multibyte
2703  *      Unicode.)  This assumption is wrong only in this case, as all other
2704  *      cases are either 1-1 folds when no UTF-8 is involved; or is true by
2705  *      virtue of having this file pre-fold UTF-8 patterns.   I'm
2706  *      reluctant to try to change this assumption, so instead the code punts.
2707  *      This routine examines EXACTF nodes for the sharp s, and returns a
2708  *      boolean indicating whether or not the node is an EXACTF node that
2709  *      contains a sharp s.  When it is true, the caller sets a flag that later
2710  *      causes the optimizer in this file to not set values for the floating
2711  *      and fixed string lengths, and thus avoids the optimizer code in
2712  *      regexec.c that makes the invalid assumption.  Thus, there is no
2713  *      optimization based on string lengths for EXACTF nodes that contain the
2714  *      sharp s.  This only happens for /id rules (which means the pattern
2715  *      isn't in UTF-8).
2716  */
2717
2718 #define JOIN_EXACT(scan,min_subtract,has_exactf_sharp_s, flags) \
2719  if (PL_regkind[OP(scan)] == EXACT) \
2720   join_exact(pRExC_state,(scan),(min_subtract),has_exactf_sharp_s, (flags),NULL,depth+1)
2721
2722 STATIC U32
2723 S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan, UV *min_subtract, bool *has_exactf_sharp_s, U32 flags,regnode *val, U32 depth) {
2724  /* Merge several consecutive EXACTish nodes into one. */
2725  regnode *n = regnext(scan);
2726  U32 stringok = 1;
2727  regnode *next = scan + NODE_SZ_STR(scan);
2728  U32 merged = 0;
2729  U32 stopnow = 0;
2730 #ifdef DEBUGGING
2731  regnode *stop = scan;
2732  GET_RE_DEBUG_FLAGS_DECL;
2733 #else
2734  PERL_UNUSED_ARG(depth);
2735 #endif
2736
2737  PERL_ARGS_ASSERT_JOIN_EXACT;
2738 #ifndef EXPERIMENTAL_INPLACESCAN
2739  PERL_UNUSED_ARG(flags);
2740  PERL_UNUSED_ARG(val);
2741 #endif
2742  DEBUG_PEEP("join",scan,depth);
2743
2744  /* Look through the subsequent nodes in the chain.  Skip NOTHING, merge
2745  * EXACT ones that are mergeable to the current one. */
2746  while (n
2747   && (PL_regkind[OP(n)] == NOTHING
2748    || (stringok && OP(n) == OP(scan)))
2749   && NEXT_OFF(n)
2750   && NEXT_OFF(scan) + NEXT_OFF(n) < I16_MAX)
2751  {
2752
2753   if (OP(n) == TAIL || n > next)
2754    stringok = 0;
2755   if (PL_regkind[OP(n)] == NOTHING) {
2756    DEBUG_PEEP("skip:",n,depth);
2757    NEXT_OFF(scan) += NEXT_OFF(n);
2758    next = n + NODE_STEP_REGNODE;
2759 #ifdef DEBUGGING
2760    if (stringok)
2761     stop = n;
2762 #endif
2763    n = regnext(n);
2764   }
2765   else if (stringok) {
2766    const unsigned int oldl = STR_LEN(scan);
2767    regnode * const nnext = regnext(n);
2768
2769    /* XXX I (khw) kind of doubt that this works on platforms where
2770    * U8_MAX is above 255 because of lots of other assumptions */
2771    /* Don't join if the sum can't fit into a single node */
2772    if (oldl + STR_LEN(n) > U8_MAX)
2773     break;
2774
2775    DEBUG_PEEP("merg",n,depth);
2776    merged++;
2777
2778    NEXT_OFF(scan) += NEXT_OFF(n);
2779    STR_LEN(scan) += STR_LEN(n);
2780    next = n + NODE_SZ_STR(n);
2781    /* Now we can overwrite *n : */
2782    Move(STRING(n), STRING(scan) + oldl, STR_LEN(n), char);
2783 #ifdef DEBUGGING
2784    stop = next - 1;
2785 #endif
2786    n = nnext;
2787    if (stopnow) break;
2788   }
2789
2790 #ifdef EXPERIMENTAL_INPLACESCAN
2791   if (flags && !NEXT_OFF(n)) {
2792    DEBUG_PEEP("atch", val, depth);
2793    if (reg_off_by_arg[OP(n)]) {
2794     ARG_SET(n, val - n);
2795    }
2796    else {
2797     NEXT_OFF(n) = val - n;
2798    }
2799    stopnow = 1;
2800   }
2801 #endif
2802  }
2803
2804  *min_subtract = 0;
2805  *has_exactf_sharp_s = FALSE;
2806
2807  /* Here, all the adjacent mergeable EXACTish nodes have been merged.  We
2808  * can now analyze for sequences of problematic code points.  (Prior to
2809  * this final joining, sequences could have been split over boundaries, and
2810  * hence missed).  The sequences only happen in folding, hence for any
2811  * non-EXACT EXACTish node */
2812  if (OP(scan) != EXACT) {
2813   const U8 * const s0 = (U8*) STRING(scan);
2814   const U8 * s = s0;
2815   const U8 * const s_end = s0 + STR_LEN(scan);
2816
2817   /* One pass is made over the node's string looking for all the
2818   * possibilities.  to avoid some tests in the loop, there are two main
2819   * cases, for UTF-8 patterns (which can't have EXACTF nodes) and
2820   * non-UTF-8 */
2821   if (UTF) {
2822
2823    /* Examine the string for a multi-character fold sequence.  UTF-8
2824    * patterns have all characters pre-folded by the time this code is
2825    * executed */
2826    while (s < s_end - 1) /* Can stop 1 before the end, as minimum
2827          length sequence we are looking for is 2 */
2828    {
2829     int count = 0;
2830     int len = is_MULTI_CHAR_FOLD_utf8_safe(s, s_end);
2831     if (! len) {    /* Not a multi-char fold: get next char */
2832      s += UTF8SKIP(s);
2833      continue;
2834     }
2835
2836     /* Nodes with 'ss' require special handling, except for EXACTFL
2837     * and EXACTFA for which there is no multi-char fold to this */
2838     if (len == 2 && *s == 's' && *(s+1) == 's'
2839      && OP(scan) != EXACTFL && OP(scan) != EXACTFA)
2840     {
2841      count = 2;
2842      OP(scan) = EXACTFU_SS;
2843      s += 2;
2844     }
2845     else if (len == 6   /* len is the same in both ASCII and EBCDIC for these */
2846       && (memEQ(s, GREEK_SMALL_LETTER_IOTA_UTF8
2847          COMBINING_DIAERESIS_UTF8
2848          COMBINING_ACUTE_ACCENT_UTF8,
2849         6)
2850        || memEQ(s, GREEK_SMALL_LETTER_UPSILON_UTF8
2851           COMBINING_DIAERESIS_UTF8
2852           COMBINING_ACUTE_ACCENT_UTF8,
2853          6)))
2854     {
2855      count = 3;
2856
2857      /* These two folds require special handling by trie's, so
2858      * change the node type to indicate this.  If EXACTFA and
2859      * EXACTFL were ever to be handled by trie's, this would
2860      * have to be changed.  If this node has already been
2861      * changed to EXACTFU_SS in this loop, leave it as is.  (I
2862      * (khw) think it doesn't matter in regexec.c for UTF
2863      * patterns, but no need to change it */
2864      if (OP(scan) == EXACTFU) {
2865       OP(scan) = EXACTFU_TRICKYFOLD;
2866      }
2867      s += 6;
2868     }
2869     else { /* Here is a generic multi-char fold. */
2870      const U8* multi_end  = s + len;
2871
2872      /* Count how many characters in it.  In the case of /l and
2873      * /aa, no folds which contain ASCII code points are
2874      * allowed, so check for those, and skip if found.  (In
2875      * EXACTFL, no folds are allowed to any Latin1 code point,
2876      * not just ASCII.  But there aren't any of these
2877      * currently, nor ever likely, so don't take the time to
2878      * test for them.  The code that generates the
2879      * is_MULTI_foo() macros croaks should one actually get put
2880      * into Unicode .) */
2881      if (OP(scan) != EXACTFL && OP(scan) != EXACTFA) {
2882       count = utf8_length(s, multi_end);
2883       s = multi_end;
2884      }
2885      else {
2886       while (s < multi_end) {
2887        if (isASCII(*s)) {
2888         s++;
2889         goto next_iteration;
2890        }
2891        else {
2892         s += UTF8SKIP(s);
2893        }
2894        count++;
2895       }
2896      }
2897     }
2898
2899     /* The delta is how long the sequence is minus 1 (1 is how long
2900     * the character that folds to the sequence is) */
2901     *min_subtract += count - 1;
2902    next_iteration: ;
2903    }
2904   }
2905   else if (OP(scan) != EXACTFL && OP(scan) != EXACTFA) {
2906
2907    /* Here, the pattern is not UTF-8.  Look for the multi-char folds
2908    * that are all ASCII.  As in the above case, EXACTFL and EXACTFA
2909    * nodes can't have multi-char folds to this range (and there are
2910    * no existing ones in the upper latin1 range).  In the EXACTF
2911    * case we look also for the sharp s, which can be in the final
2912    * position.  Otherwise we can stop looking 1 byte earlier because
2913    * have to find at least two characters for a multi-fold */
2914    const U8* upper = (OP(scan) == EXACTF) ? s_end : s_end -1;
2915
2916    /* The below is perhaps overboard, but this allows us to save a
2917    * test each time through the loop at the expense of a mask.  This
2918    * is because on both EBCDIC and ASCII machines, 'S' and 's' differ
2919    * by a single bit.  On ASCII they are 32 apart; on EBCDIC, they
2920    * are 64.  This uses an exclusive 'or' to find that bit and then
2921    * inverts it to form a mask, with just a single 0, in the bit
2922    * position where 'S' and 's' differ. */
2923    const U8 S_or_s_mask = (U8) ~ ('S' ^ 's');
2924    const U8 s_masked = 's' & S_or_s_mask;
2925
2926    while (s < upper) {
2927     int len = is_MULTI_CHAR_FOLD_latin1_safe(s, s_end);
2928     if (! len) {    /* Not a multi-char fold. */
2929      if (*s == LATIN_SMALL_LETTER_SHARP_S && OP(scan) == EXACTF)
2930      {
2931       *has_exactf_sharp_s = TRUE;
2932      }
2933      s++;
2934      continue;
2935     }
2936
2937     if (len == 2
2938      && ((*s & S_or_s_mask) == s_masked)
2939      && ((*(s+1) & S_or_s_mask) == s_masked))
2940     {
2941
2942      /* EXACTF nodes need to know that the minimum length
2943      * changed so that a sharp s in the string can match this
2944      * ss in the pattern, but they remain EXACTF nodes, as they
2945      * won't match this unless the target string is is UTF-8,
2946      * which we don't know until runtime */
2947      if (OP(scan) != EXACTF) {
2948       OP(scan) = EXACTFU_SS;
2949      }
2950     }
2951
2952     *min_subtract += len - 1;
2953     s += len;
2954    }
2955   }
2956  }
2957
2958 #ifdef DEBUGGING
2959  /* Allow dumping but overwriting the collection of skipped
2960  * ops and/or strings with fake optimized ops */
2961  n = scan + NODE_SZ_STR(scan);
2962  while (n <= stop) {
2963   OP(n) = OPTIMIZED;
2964   FLAGS(n) = 0;
2965   NEXT_OFF(n) = 0;
2966   n++;
2967  }
2968 #endif
2969  DEBUG_OPTIMISE_r(if (merged){DEBUG_PEEP("finl",scan,depth)});
2970  return stopnow;
2971 }
2972
2973 /* REx optimizer.  Converts nodes into quicker variants "in place".
2974    Finds fixed substrings.  */
2975
2976 /* Stops at toplevel WHILEM as well as at "last". At end *scanp is set
2977    to the position after last scanned or to NULL. */
2978
2979 #define INIT_AND_WITHP \
2980  assert(!and_withp); \
2981  Newx(and_withp,1,struct regnode_charclass_class); \
2982  SAVEFREEPV(and_withp)
2983
2984 /* this is a chain of data about sub patterns we are processing that
2985    need to be handled separately/specially in study_chunk. Its so
2986    we can simulate recursion without losing state.  */
2987 struct scan_frame;
2988 typedef struct scan_frame {
2989  regnode *last;  /* last node to process in this frame */
2990  regnode *next;  /* next node to process when last is reached */
2991  struct scan_frame *prev; /*previous frame*/
2992  I32 stop; /* what stopparen do we use */
2993 } scan_frame;
2994
2995
2996 #define SCAN_COMMIT(s, data, m) scan_commit(s, data, m, is_inf)
2997
2998 STATIC I32
2999 S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
3000       I32 *minlenp, I32 *deltap,
3001       regnode *last,
3002       scan_data_t *data,
3003       I32 stopparen,
3004       U8* recursed,
3005       struct regnode_charclass_class *and_withp,
3006       U32 flags, U32 depth)
3007       /* scanp: Start here (read-write). */
3008       /* deltap: Write maxlen-minlen here. */
3009       /* last: Stop before this one. */
3010       /* data: string data about the pattern */
3011       /* stopparen: treat close N as END */
3012       /* recursed: which subroutines have we recursed into */
3013       /* and_withp: Valid if flags & SCF_DO_STCLASS_OR */
3014 {
3015  dVAR;
3016  I32 min = 0;    /* There must be at least this number of characters to match */
3017  I32 pars = 0, code;
3018  regnode *scan = *scanp, *next;
3019  I32 delta = 0;
3020  int is_inf = (flags & SCF_DO_SUBSTR) && (data->flags & SF_IS_INF);
3021  int is_inf_internal = 0;  /* The studied chunk is infinite */
3022  I32 is_par = OP(scan) == OPEN ? ARG(scan) : 0;
3023  scan_data_t data_fake;
3024  SV *re_trie_maxbuff = NULL;
3025  regnode *first_non_open = scan;
3026  I32 stopmin = I32_MAX;
3027  scan_frame *frame = NULL;
3028  GET_RE_DEBUG_FLAGS_DECL;
3029
3030  PERL_ARGS_ASSERT_STUDY_CHUNK;
3031
3032 #ifdef DEBUGGING
3033  StructCopy(&zero_scan_data, &data_fake, scan_data_t);
3034 #endif
3035
3036  if ( depth == 0 ) {
3037   while (first_non_open && OP(first_non_open) == OPEN)
3038    first_non_open=regnext(first_non_open);
3039  }
3040
3041
3042   fake_study_recurse:
3043  while ( scan && OP(scan) != END && scan < last ){
3044   UV min_subtract = 0;    /* How mmany chars to subtract from the minimum
3045         node length to get a real minimum (because
3046         the folded version may be shorter) */
3047   bool has_exactf_sharp_s = FALSE;
3048   /* Peephole optimizer: */
3049   DEBUG_STUDYDATA("Peep:", data,depth);
3050   DEBUG_PEEP("Peep",scan,depth);
3051
3052   /* Its not clear to khw or hv why this is done here, and not in the
3053   * clauses that deal with EXACT nodes.  khw's guess is that it's
3054   * because of a previous design */
3055   JOIN_EXACT(scan,&min_subtract, &has_exactf_sharp_s, 0);
3056
3057   /* Follow the next-chain of the current node and optimize
3058   away all the NOTHINGs from it.  */
3059   if (OP(scan) != CURLYX) {
3060    const int max = (reg_off_by_arg[OP(scan)]
3061      ? I32_MAX
3062      /* I32 may be smaller than U16 on CRAYs! */
3063      : (I32_MAX < U16_MAX ? I32_MAX : U16_MAX));
3064    int off = (reg_off_by_arg[OP(scan)] ? ARG(scan) : NEXT_OFF(scan));
3065    int noff;
3066    regnode *n = scan;
3067
3068    /* Skip NOTHING and LONGJMP. */
3069    while ((n = regnext(n))
3070     && ((PL_regkind[OP(n)] == NOTHING && (noff = NEXT_OFF(n)))
3071      || ((OP(n) == LONGJMP) && (noff = ARG(n))))
3072     && off + noff < max)
3073     off += noff;
3074    if (reg_off_by_arg[OP(scan)])
3075     ARG(scan) = off;
3076    else
3077     NEXT_OFF(scan) = off;
3078   }
3079
3080
3081
3082   /* The principal pseudo-switch.  Cannot be a switch, since we
3083   look into several different things.  */
3084   if (OP(scan) == BRANCH || OP(scan) == BRANCHJ
3085     || OP(scan) == IFTHEN) {
3086    next = regnext(scan);
3087    code = OP(scan);
3088    /* demq: the op(next)==code check is to see if we have "branch-branch" AFAICT */
3089
3090    if (OP(next) == code || code == IFTHEN) {
3091     /* NOTE - There is similar code to this block below for handling
3092     TRIE nodes on a re-study.  If you change stuff here check there
3093     too. */
3094     I32 max1 = 0, min1 = I32_MAX, num = 0;
3095     struct regnode_charclass_class accum;
3096     regnode * const startbranch=scan;
3097
3098     if (flags & SCF_DO_SUBSTR)
3099      SCAN_COMMIT(pRExC_state, data, minlenp); /* Cannot merge strings after this. */
3100     if (flags & SCF_DO_STCLASS)
3101      cl_init_zero(pRExC_state, &accum);
3102
3103     while (OP(scan) == code) {
3104      I32 deltanext, minnext, f = 0, fake;
3105      struct regnode_charclass_class this_class;
3106
3107      num++;
3108      data_fake.flags = 0;
3109      if (data) {
3110       data_fake.whilem_c = data->whilem_c;
3111       data_fake.last_closep = data->last_closep;
3112      }
3113      else
3114       data_fake.last_closep = &fake;
3115
3116      data_fake.pos_delta = delta;
3117      next = regnext(scan);
3118      scan = NEXTOPER(scan);
3119      if (code != BRANCH)
3120       scan = NEXTOPER(scan);
3121      if (flags & SCF_DO_STCLASS) {
3122       cl_init(pRExC_state, &this_class);
3123       data_fake.start_class = &this_class;
3124       f = SCF_DO_STCLASS_AND;
3125      }
3126      if (flags & SCF_WHILEM_VISITED_POS)
3127       f |= SCF_WHILEM_VISITED_POS;
3128
3129      /* we suppose the run is continuous, last=next...*/
3130      minnext = study_chunk(pRExC_state, &scan, minlenp, &deltanext,
3131           next, &data_fake,
3132           stopparen, recursed, NULL, f,depth+1);
3133      if (min1 > minnext)
3134       min1 = minnext;
3135      if (deltanext == I32_MAX) {
3136       is_inf = is_inf_internal = 1;
3137       max1 = I32_MAX;
3138      } else if (max1 < minnext + deltanext)
3139       max1 = minnext + deltanext;
3140      scan = next;
3141      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
3142       pars++;
3143      if (data_fake.flags & SCF_SEEN_ACCEPT) {
3144       if ( stopmin > minnext)
3145        stopmin = min + min1;
3146       flags &= ~SCF_DO_SUBSTR;
3147       if (data)
3148        data->flags |= SCF_SEEN_ACCEPT;
3149      }
3150      if (data) {
3151       if (data_fake.flags & SF_HAS_EVAL)
3152        data->flags |= SF_HAS_EVAL;
3153       data->whilem_c = data_fake.whilem_c;
3154      }
3155      if (flags & SCF_DO_STCLASS)
3156       cl_or(pRExC_state, &accum, &this_class);
3157     }
3158     if (code == IFTHEN && num < 2) /* Empty ELSE branch */
3159      min1 = 0;
3160     if (flags & SCF_DO_SUBSTR) {
3161      data->pos_min += min1;
3162      if (data->pos_delta >= I32_MAX - (max1 - min1))
3163       data->pos_delta = I32_MAX;
3164      else
3165       data->pos_delta += max1 - min1;
3166      if (max1 != min1 || is_inf)
3167       data->longest = &(data->longest_float);
3168     }
3169     min += min1;
3170     if (delta == I32_MAX || I32_MAX - delta - (max1 - min1) < 0)
3171      delta = I32_MAX;
3172     else
3173      delta += max1 - min1;
3174     if (flags & SCF_DO_STCLASS_OR) {
3175      cl_or(pRExC_state, data->start_class, &accum);
3176      if (min1) {
3177       cl_and(data->start_class, and_withp);
3178       flags &= ~SCF_DO_STCLASS;
3179      }
3180     }
3181     else if (flags & SCF_DO_STCLASS_AND) {
3182      if (min1) {
3183       cl_and(data->start_class, &accum);
3184       flags &= ~SCF_DO_STCLASS;
3185      }
3186      else {
3187       /* Switch to OR mode: cache the old value of
3188       * data->start_class */
3189       INIT_AND_WITHP;
3190       StructCopy(data->start_class, and_withp,
3191         struct regnode_charclass_class);
3192       flags &= ~SCF_DO_STCLASS_AND;
3193       StructCopy(&accum, data->start_class,
3194         struct regnode_charclass_class);
3195       flags |= SCF_DO_STCLASS_OR;
3196       SET_SSC_EOS(data->start_class);
3197      }
3198     }
3199
3200     if (PERL_ENABLE_TRIE_OPTIMISATION && OP( startbranch ) == BRANCH ) {
3201     /* demq.
3202
3203     Assuming this was/is a branch we are dealing with: 'scan' now
3204     points at the item that follows the branch sequence, whatever
3205     it is. We now start at the beginning of the sequence and look
3206     for subsequences of
3207
3208     BRANCH->EXACT=>x1
3209     BRANCH->EXACT=>x2
3210     tail
3211
3212     which would be constructed from a pattern like /A|LIST|OF|WORDS/
3213
3214     If we can find such a subsequence we need to turn the first
3215     element into a trie and then add the subsequent branch exact
3216     strings to the trie.
3217
3218     We have two cases
3219
3220      1. patterns where the whole set of branches can be converted.
3221
3222      2. patterns where only a subset can be converted.
3223
3224     In case 1 we can replace the whole set with a single regop
3225     for the trie. In case 2 we need to keep the start and end
3226     branches so
3227
3228      'BRANCH EXACT; BRANCH EXACT; BRANCH X'
3229      becomes BRANCH TRIE; BRANCH X;
3230
3231     There is an additional case, that being where there is a
3232     common prefix, which gets split out into an EXACT like node
3233     preceding the TRIE node.
3234
3235     If x(1..n)==tail then we can do a simple trie, if not we make
3236     a "jump" trie, such that when we match the appropriate word
3237     we "jump" to the appropriate tail node. Essentially we turn
3238     a nested if into a case structure of sorts.
3239
3240     */
3241
3242      int made=0;
3243      if (!re_trie_maxbuff) {
3244       re_trie_maxbuff = get_sv(RE_TRIE_MAXBUF_NAME, 1);
3245       if (!SvIOK(re_trie_maxbuff))
3246        sv_setiv(re_trie_maxbuff, RE_TRIE_MAXBUF_INIT);
3247      }
3248      if ( SvIV(re_trie_maxbuff)>=0  ) {
3249       regnode *cur;
3250       regnode *first = (regnode *)NULL;
3251       regnode *last = (regnode *)NULL;
3252       regnode *tail = scan;
3253       U8 trietype = 0;
3254       U32 count=0;
3255
3256 #ifdef DEBUGGING
3257       SV * const mysv = sv_newmortal();       /* for dumping */
3258 #endif
3259       /* var tail is used because there may be a TAIL
3260       regop in the way. Ie, the exacts will point to the
3261       thing following the TAIL, but the last branch will
3262       point at the TAIL. So we advance tail. If we
3263       have nested (?:) we may have to move through several
3264       tails.
3265       */
3266
3267       while ( OP( tail ) == TAIL ) {
3268        /* this is the TAIL generated by (?:) */
3269        tail = regnext( tail );
3270       }
3271
3272
3273       DEBUG_TRIE_COMPILE_r({
3274        regprop(RExC_rx, mysv, tail );
3275        PerlIO_printf( Perl_debug_log, "%*s%s%s\n",
3276         (int)depth * 2 + 2, "",
3277         "Looking for TRIE'able sequences. Tail node is: ",
3278         SvPV_nolen_const( mysv )
3279        );
3280       });
3281
3282       /*
3283
3284        Step through the branches
3285         cur represents each branch,
3286         noper is the first thing to be matched as part of that branch
3287         noper_next is the regnext() of that node.
3288
3289        We normally handle a case like this /FOO[xyz]|BAR[pqr]/
3290        via a "jump trie" but we also support building with NOJUMPTRIE,
3291        which restricts the trie logic to structures like /FOO|BAR/.
3292
3293        If noper is a trieable nodetype then the branch is a possible optimization
3294        target. If we are building under NOJUMPTRIE then we require that noper_next
3295        is the same as scan (our current position in the regex program).
3296
3297        Once we have two or more consecutive such branches we can create a
3298        trie of the EXACT's contents and stitch it in place into the program.
3299
3300        If the sequence represents all of the branches in the alternation we
3301        replace the entire thing with a single TRIE node.
3302
3303        Otherwise when it is a subsequence we need to stitch it in place and
3304        replace only the relevant branches. This means the first branch has
3305        to remain as it is used by the alternation logic, and its next pointer,
3306        and needs to be repointed at the item on the branch chain following
3307        the last branch we have optimized away.
3308
3309        This could be either a BRANCH, in which case the subsequence is internal,
3310        or it could be the item following the branch sequence in which case the
3311        subsequence is at the end (which does not necessarily mean the first node
3312        is the start of the alternation).
3313
3314        TRIE_TYPE(X) is a define which maps the optype to a trietype.
3315
3316         optype          |  trietype
3317         ----------------+-----------
3318         NOTHING         | NOTHING
3319         EXACT           | EXACT
3320         EXACTFU         | EXACTFU
3321         EXACTFU_SS      | EXACTFU
3322         EXACTFU_TRICKYFOLD | EXACTFU
3323         EXACTFA         | 0
3324
3325
3326       */
3327 #define TRIE_TYPE(X) ( ( NOTHING == (X) ) ? NOTHING :   \
3328      ( EXACT == (X) )   ? EXACT :        \
3329      ( EXACTFU == (X) || EXACTFU_SS == (X) || EXACTFU_TRICKYFOLD == (X) ) ? EXACTFU :        \
3330      0 )
3331
3332       /* dont use tail as the end marker for this traverse */
3333       for ( cur = startbranch ; cur != scan ; cur = regnext( cur ) ) {
3334        regnode * const noper = NEXTOPER( cur );
3335        U8 noper_type = OP( noper );
3336        U8 noper_trietype = TRIE_TYPE( noper_type );
3337 #if defined(DEBUGGING) || defined(NOJUMPTRIE)
3338        regnode * const noper_next = regnext( noper );
3339        U8 noper_next_type = (noper_next && noper_next != tail) ? OP(noper_next) : 0;
3340        U8 noper_next_trietype = (noper_next && noper_next != tail) ? TRIE_TYPE( noper_next_type ) :0;
3341 #endif
3342
3343        DEBUG_TRIE_COMPILE_r({
3344         regprop(RExC_rx, mysv, cur);
3345         PerlIO_printf( Perl_debug_log, "%*s- %s (%d)",
3346         (int)depth * 2 + 2,"", SvPV_nolen_const( mysv ), REG_NODE_NUM(cur) );
3347
3348         regprop(RExC_rx, mysv, noper);
3349         PerlIO_printf( Perl_debug_log, " -> %s",
3350          SvPV_nolen_const(mysv));
3351
3352         if ( noper_next ) {
3353         regprop(RExC_rx, mysv, noper_next );
3354         PerlIO_printf( Perl_debug_log,"\t=> %s\t",
3355          SvPV_nolen_const(mysv));
3356         }
3357         PerlIO_printf( Perl_debug_log, "(First==%d,Last==%d,Cur==%d,tt==%s,nt==%s,nnt==%s)\n",
3358         REG_NODE_NUM(first), REG_NODE_NUM(last), REG_NODE_NUM(cur),
3359         PL_reg_name[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype]
3360         );
3361        });
3362
3363        /* Is noper a trieable nodetype that can be merged with the
3364        * current trie (if there is one)? */
3365        if ( noper_trietype
3366         &&
3367         (
3368           ( noper_trietype == NOTHING)
3369           || ( trietype == NOTHING )
3370           || ( trietype == noper_trietype )
3371         )
3372 #ifdef NOJUMPTRIE
3373         && noper_next == tail
3374 #endif
3375         && count < U16_MAX)
3376        {
3377         /* Handle mergable triable node
3378         * Either we are the first node in a new trieable sequence,
3379         * in which case we do some bookkeeping, otherwise we update
3380         * the end pointer. */
3381         if ( !first ) {
3382          first = cur;
3383          if ( noper_trietype == NOTHING ) {
3384 #if !defined(DEBUGGING) && !defined(NOJUMPTRIE)
3385           regnode * const noper_next = regnext( noper );
3386           U8 noper_next_type = (noper_next && noper_next!=tail) ? OP(noper_next) : 0;
3387           U8 noper_next_trietype = noper_next_type ? TRIE_TYPE( noper_next_type ) :0;
3388 #endif
3389
3390           if ( noper_next_trietype ) {
3391            trietype = noper_next_trietype;
3392           } else if (noper_next_type)  {
3393            /* a NOTHING regop is 1 regop wide. We need at least two
3394            * for a trie so we can't merge this in */
3395            first = NULL;
3396           }
3397          } else {
3398           trietype = noper_trietype;
3399          }
3400         } else {
3401          if ( trietype == NOTHING )
3402           trietype = noper_trietype;
3403          last = cur;
3404         }
3405         if (first)
3406          count++;
3407        } /* end handle mergable triable node */
3408        else {
3409         /* handle unmergable node -
3410         * noper may either be a triable node which can not be tried
3411         * together with the current trie, or a non triable node */
3412         if ( last ) {
3413          /* If last is set and trietype is not NOTHING then we have found
3414          * at least two triable branch sequences in a row of a similar
3415          * trietype so we can turn them into a trie. If/when we
3416          * allow NOTHING to start a trie sequence this condition will be
3417          * required, and it isn't expensive so we leave it in for now. */
3418          if ( trietype && trietype != NOTHING )
3419           make_trie( pRExC_state,
3420             startbranch, first, cur, tail, count,
3421             trietype, depth+1 );
3422          last = NULL; /* note: we clear/update first, trietype etc below, so we dont do it here */
3423         }
3424         if ( noper_trietype
3425 #ifdef NOJUMPTRIE
3426          && noper_next == tail
3427 #endif
3428         ){
3429          /* noper is triable, so we can start a new trie sequence */
3430          count = 1;
3431          first = cur;
3432          trietype = noper_trietype;
3433         } else if (first) {
3434          /* if we already saw a first but the current node is not triable then we have
3435          * to reset the first information. */
3436          count = 0;
3437          first = NULL;
3438          trietype = 0;
3439         }
3440        } /* end handle unmergable node */
3441       } /* loop over branches */
3442       DEBUG_TRIE_COMPILE_r({
3443        regprop(RExC_rx, mysv, cur);
3444        PerlIO_printf( Perl_debug_log,
3445        "%*s- %s (%d) <SCAN FINISHED>\n", (int)depth * 2 + 2,
3446        "", SvPV_nolen_const( mysv ),REG_NODE_NUM(cur));
3447
3448       });
3449       if ( last && trietype ) {
3450        if ( trietype != NOTHING ) {
3451         /* the last branch of the sequence was part of a trie,
3452         * so we have to construct it here outside of the loop
3453         */
3454         made= make_trie( pRExC_state, startbranch, first, scan, tail, count, trietype, depth+1 );
3455 #ifdef TRIE_STUDY_OPT
3456         if ( ((made == MADE_EXACT_TRIE &&
3457          startbranch == first)
3458          || ( first_non_open == first )) &&
3459          depth==0 ) {
3460          flags |= SCF_TRIE_RESTUDY;
3461          if ( startbranch == first
3462           && scan == tail )
3463          {
3464           RExC_seen &=~REG_TOP_LEVEL_BRANCHES;
3465          }
3466         }
3467 #endif
3468        } else {
3469         /* at this point we know whatever we have is a NOTHING sequence/branch
3470         * AND if 'startbranch' is 'first' then we can turn the whole thing into a NOTHING
3471         */
3472         if ( startbranch == first ) {
3473          regnode *opt;
3474          /* the entire thing is a NOTHING sequence, something like this:
3475          * (?:|) So we can turn it into a plain NOTHING op. */
3476          DEBUG_TRIE_COMPILE_r({
3477           regprop(RExC_rx, mysv, cur);
3478           PerlIO_printf( Perl_debug_log,
3479           "%*s- %s (%d) <NOTHING BRANCH SEQUENCE>\n", (int)depth * 2 + 2,
3480           "", SvPV_nolen_const( mysv ),REG_NODE_NUM(cur));
3481
3482          });
3483          OP(startbranch)= NOTHING;
3484          NEXT_OFF(startbranch)= tail - startbranch;
3485          for ( opt= startbranch + 1; opt < tail ; opt++ )
3486           OP(opt)= OPTIMIZED;
3487         }
3488        }
3489       } /* end if ( last) */
3490      } /* TRIE_MAXBUF is non zero */
3491
3492     } /* do trie */
3493
3494    }
3495    else if ( code == BRANCHJ ) {  /* single branch is optimized. */
3496     scan = NEXTOPER(NEXTOPER(scan));
3497    } else   /* single branch is optimized. */
3498     scan = NEXTOPER(scan);
3499    continue;
3500   } else if (OP(scan) == SUSPEND || OP(scan) == GOSUB || OP(scan) == GOSTART) {
3501    scan_frame *newframe = NULL;
3502    I32 paren;
3503    regnode *start;
3504    regnode *end;
3505
3506    if (OP(scan) != SUSPEND) {
3507    /* set the pointer */
3508     if (OP(scan) == GOSUB) {
3509      paren = ARG(scan);
3510      RExC_recurse[ARG2L(scan)] = scan;
3511      start = RExC_open_parens[paren-1];
3512      end   = RExC_close_parens[paren-1];
3513     } else {
3514      paren = 0;
3515      start = RExC_rxi->program + 1;
3516      end   = RExC_opend;
3517     }
3518     if (!recursed) {
3519      Newxz(recursed, (((RExC_npar)>>3) +1), U8);
3520      SAVEFREEPV(recursed);
3521     }
3522     if (!PAREN_TEST(recursed,paren+1)) {
3523      PAREN_SET(recursed,paren+1);
3524      Newx(newframe,1,scan_frame);
3525     } else {
3526      if (flags & SCF_DO_SUBSTR) {
3527       SCAN_COMMIT(pRExC_state,data,minlenp);
3528       data->longest = &(data->longest_float);
3529      }
3530      is_inf = is_inf_internal = 1;
3531      if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
3532       cl_anything(pRExC_state, data->start_class);
3533      flags &= ~SCF_DO_STCLASS;
3534     }
3535    } else {
3536     Newx(newframe,1,scan_frame);
3537     paren = stopparen;
3538     start = scan+2;
3539     end = regnext(scan);
3540    }
3541    if (newframe) {
3542     assert(start);
3543     assert(end);
3544     SAVEFREEPV(newframe);
3545     newframe->next = regnext(scan);
3546     newframe->last = last;
3547     newframe->stop = stopparen;
3548     newframe->prev = frame;
3549
3550     frame = newframe;
3551     scan =  start;
3552     stopparen = paren;
3553     last = end;
3554
3555     continue;
3556    }
3557   }
3558   else if (OP(scan) == EXACT) {
3559    I32 l = STR_LEN(scan);
3560    UV uc;
3561    if (UTF) {
3562     const U8 * const s = (U8*)STRING(scan);
3563     uc = utf8_to_uvchr_buf(s, s + l, NULL);
3564     l = utf8_length(s, s + l);
3565    } else {
3566     uc = *((U8*)STRING(scan));
3567    }
3568    min += l;
3569    if (flags & SCF_DO_SUBSTR) { /* Update longest substr. */
3570     /* The code below prefers earlier match for fixed
3571     offset, later match for variable offset.  */
3572     if (data->last_end == -1) { /* Update the start info. */
3573      data->last_start_min = data->pos_min;
3574      data->last_start_max = is_inf
3575       ? I32_MAX : data->pos_min + data->pos_delta;
3576     }
3577     sv_catpvn(data->last_found, STRING(scan), STR_LEN(scan));
3578     if (UTF)
3579      SvUTF8_on(data->last_found);
3580     {
3581      SV * const sv = data->last_found;
3582      MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ?
3583       mg_find(sv, PERL_MAGIC_utf8) : NULL;
3584      if (mg && mg->mg_len >= 0)
3585       mg->mg_len += utf8_length((U8*)STRING(scan),
3586             (U8*)STRING(scan)+STR_LEN(scan));
3587     }
3588     data->last_end = data->pos_min + l;
3589     data->pos_min += l; /* As in the first entry. */
3590     data->flags &= ~SF_BEFORE_EOL;
3591    }
3592    if (flags & SCF_DO_STCLASS_AND) {
3593     /* Check whether it is compatible with what we know already! */
3594     int compat = 1;
3595
3596
3597     /* If compatible, we or it in below.  It is compatible if is
3598     * in the bitmp and either 1) its bit or its fold is set, or 2)
3599     * it's for a locale.  Even if there isn't unicode semantics
3600     * here, at runtime there may be because of matching against a
3601     * utf8 string, so accept a possible false positive for
3602     * latin1-range folds */
3603     if (uc >= 0x100 ||
3604      (!(data->start_class->flags & ANYOF_LOCALE)
3605      && !ANYOF_BITMAP_TEST(data->start_class, uc)
3606      && (!(data->start_class->flags & ANYOF_LOC_FOLD)
3607       || !ANYOF_BITMAP_TEST(data->start_class, PL_fold_latin1[uc])))
3608      )
3609     {
3610      compat = 0;
3611     }
3612     ANYOF_CLASS_ZERO(data->start_class);
3613     ANYOF_BITMAP_ZERO(data->start_class);
3614     if (compat)
3615      ANYOF_BITMAP_SET(data->start_class, uc);
3616     else if (uc >= 0x100) {
3617      int i;
3618
3619      /* Some Unicode code points fold to the Latin1 range; as
3620      * XXX temporary code, instead of figuring out if this is
3621      * one, just assume it is and set all the start class bits
3622      * that could be some such above 255 code point's fold
3623      * which will generate fals positives.  As the code
3624      * elsewhere that does compute the fold settles down, it
3625      * can be extracted out and re-used here */
3626      for (i = 0; i < 256; i++){
3627       if (HAS_NONLATIN1_FOLD_CLOSURE(i)) {
3628        ANYOF_BITMAP_SET(data->start_class, i);
3629       }
3630      }
3631     }
3632     CLEAR_SSC_EOS(data->start_class);
3633     if (uc < 0x100)
3634     data->start_class->flags &= ~ANYOF_UNICODE_ALL;
3635    }
3636    else if (flags & SCF_DO_STCLASS_OR) {
3637     /* false positive possible if the class is case-folded */
3638     if (uc < 0x100)
3639      ANYOF_BITMAP_SET(data->start_class, uc);
3640     else
3641      data->start_class->flags |= ANYOF_UNICODE_ALL;
3642     CLEAR_SSC_EOS(data->start_class);
3643     cl_and(data->start_class, and_withp);
3644    }
3645    flags &= ~SCF_DO_STCLASS;
3646   }
3647   else if (PL_regkind[OP(scan)] == EXACT) { /* But OP != EXACT! */
3648    I32 l = STR_LEN(scan);
3649    UV uc = *((U8*)STRING(scan));
3650
3651    /* Search for fixed substrings supports EXACT only. */
3652    if (flags & SCF_DO_SUBSTR) {
3653     assert(data);
3654     SCAN_COMMIT(pRExC_state, data, minlenp);
3655    }
3656    if (UTF) {
3657     const U8 * const s = (U8 *)STRING(scan);
3658     uc = utf8_to_uvchr_buf(s, s + l, NULL);
3659     l = utf8_length(s, s + l);
3660    }
3661    if (has_exactf_sharp_s) {
3662     RExC_seen |= REG_SEEN_EXACTF_SHARP_S;
3663    }
3664    min += l - min_subtract;
3665    assert (min >= 0);
3666    delta += min_subtract;
3667    if (flags & SCF_DO_SUBSTR) {
3668     data->pos_min += l - min_subtract;
3669     if (data->pos_min < 0) {
3670      data->pos_min = 0;
3671     }
3672     data->pos_delta += min_subtract;
3673     if (min_subtract) {
3674      data->longest = &(data->longest_float);
3675     }
3676    }
3677    if (flags & SCF_DO_STCLASS_AND) {
3678     /* Check whether it is compatible with what we know already! */
3679     int compat = 1;
3680     if (uc >= 0x100 ||
3681     (!(data->start_class->flags & ANYOF_LOCALE)
3682     && !ANYOF_BITMAP_TEST(data->start_class, uc)
3683     && !ANYOF_BITMAP_TEST(data->start_class, PL_fold_latin1[uc])))
3684     {
3685      compat = 0;
3686     }
3687     ANYOF_CLASS_ZERO(data->start_class);
3688     ANYOF_BITMAP_ZERO(data->start_class);
3689     if (compat) {
3690      ANYOF_BITMAP_SET(data->start_class, uc);
3691      CLEAR_SSC_EOS(data->start_class);
3692      if (OP(scan) == EXACTFL) {
3693       /* XXX This set is probably no longer necessary, and
3694       * probably wrong as LOCALE now is on in the initial
3695       * state */
3696       data->start_class->flags |= ANYOF_LOCALE|ANYOF_LOC_FOLD;
3697      }
3698      else {
3699
3700       /* Also set the other member of the fold pair.  In case
3701       * that unicode semantics is called for at runtime, use
3702       * the full latin1 fold.  (Can't do this for locale,
3703       * because not known until runtime) */
3704       ANYOF_BITMAP_SET(data->start_class, PL_fold_latin1[uc]);
3705
3706       /* All other (EXACTFL handled above) folds except under
3707       * /iaa that include s, S, and sharp_s also may include
3708       * the others */
3709       if (OP(scan) != EXACTFA) {
3710        if (uc == 's' || uc == 'S') {
3711         ANYOF_BITMAP_SET(data->start_class,
3712             LATIN_SMALL_LETTER_SHARP_S);
3713        }
3714        else if (uc == LATIN_SMALL_LETTER_SHARP_S) {
3715         ANYOF_BITMAP_SET(data->start_class, 's');
3716         ANYOF_BITMAP_SET(data->start_class, 'S');
3717        }
3718       }
3719      }
3720     }
3721     else if (uc >= 0x100) {
3722      int i;
3723      for (i = 0; i < 256; i++){
3724       if (_HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(i)) {
3725        ANYOF_BITMAP_SET(data->start_class, i);
3726       }
3727      }
3728     }
3729    }
3730    else if (flags & SCF_DO_STCLASS_OR) {
3731     if (data->start_class->flags & ANYOF_LOC_FOLD) {
3732      /* false positive possible if the class is case-folded.
3733      Assume that the locale settings are the same... */
3734      if (uc < 0x100) {
3735       ANYOF_BITMAP_SET(data->start_class, uc);
3736       if (OP(scan) != EXACTFL) {
3737
3738        /* And set the other member of the fold pair, but
3739        * can't do that in locale because not known until
3740        * run-time */
3741        ANYOF_BITMAP_SET(data->start_class,
3742            PL_fold_latin1[uc]);
3743
3744        /* All folds except under /iaa that include s, S,
3745        * and sharp_s also may include the others */
3746        if (OP(scan) != EXACTFA) {
3747         if (uc == 's' || uc == 'S') {
3748          ANYOF_BITMAP_SET(data->start_class,
3749             LATIN_SMALL_LETTER_SHARP_S);
3750         }
3751         else if (uc == LATIN_SMALL_LETTER_SHARP_S) {
3752          ANYOF_BITMAP_SET(data->start_class, 's');
3753          ANYOF_BITMAP_SET(data->start_class, 'S');
3754         }
3755        }
3756       }
3757      }
3758      CLEAR_SSC_EOS(data->start_class);
3759     }
3760     cl_and(data->start_class, and_withp);
3761    }
3762    flags &= ~SCF_DO_STCLASS;
3763   }
3764   else if (REGNODE_VARIES(OP(scan))) {
3765    I32 mincount, maxcount, minnext, deltanext, fl = 0;
3766    I32 f = flags, pos_before = 0;
3767    regnode * const oscan = scan;
3768    struct regnode_charclass_class this_class;
3769    struct regnode_charclass_class *oclass = NULL;
3770    I32 next_is_eval = 0;
3771
3772    switch (PL_regkind[OP(scan)]) {
3773    case WHILEM:  /* End of (?:...)* . */
3774     scan = NEXTOPER(scan);
3775     goto finish;
3776    case PLUS:
3777     if (flags & (SCF_DO_SUBSTR | SCF_DO_STCLASS)) {
3778      next = NEXTOPER(scan);
3779      if (OP(next) == EXACT || (flags & SCF_DO_STCLASS)) {
3780       mincount = 1;
3781       maxcount = REG_INFTY;
3782       next = regnext(scan);
3783       scan = NEXTOPER(scan);
3784       goto do_curly;
3785      }
3786     }
3787     if (flags & SCF_DO_SUBSTR)
3788      data->pos_min++;
3789     min++;
3790     /* Fall through. */
3791    case STAR:
3792     if (flags & SCF_DO_STCLASS) {
3793      mincount = 0;
3794      maxcount = REG_INFTY;
3795      next = regnext(scan);
3796      scan = NEXTOPER(scan);
3797      goto do_curly;
3798     }
3799     is_inf = is_inf_internal = 1;
3800     scan = regnext(scan);
3801     if (flags & SCF_DO_SUBSTR) {
3802      SCAN_COMMIT(pRExC_state, data, minlenp); /* Cannot extend fixed substrings */
3803      data->longest = &(data->longest_float);
3804     }
3805     goto optimize_curly_tail;
3806    case CURLY:
3807     if (stopparen>0 && (OP(scan)==CURLYN || OP(scan)==CURLYM)
3808      && (scan->flags == stopparen))
3809     {
3810      mincount = 1;
3811      maxcount = 1;
3812     } else {
3813      mincount = ARG1(scan);
3814      maxcount = ARG2(scan);
3815     }
3816     next = regnext(scan);
3817     if (OP(scan) == CURLYX) {
3818      I32 lp = (data ? *(data->last_closep) : 0);
3819      scan->flags = ((lp <= (I32)U8_MAX) ? (U8)lp : U8_MAX);
3820     }
3821     scan = NEXTOPER(scan) + EXTRA_STEP_2ARGS;
3822     next_is_eval = (OP(scan) == EVAL);
3823    do_curly:
3824     if (flags & SCF_DO_SUBSTR) {
3825      if (mincount == 0) SCAN_COMMIT(pRExC_state,data,minlenp); /* Cannot extend fixed substrings */
3826      pos_before = data->pos_min;
3827     }
3828     if (data) {
3829      fl = data->flags;
3830      data->flags &= ~(SF_HAS_PAR|SF_IN_PAR|SF_HAS_EVAL);
3831      if (is_inf)
3832       data->flags |= SF_IS_INF;
3833     }
3834     if (flags & SCF_DO_STCLASS) {
3835      cl_init(pRExC_state, &this_class);
3836      oclass = data->start_class;
3837      data->start_class = &this_class;
3838      f |= SCF_DO_STCLASS_AND;
3839      f &= ~SCF_DO_STCLASS_OR;
3840     }
3841     /* Exclude from super-linear cache processing any {n,m}
3842     regops for which the combination of input pos and regex
3843     pos is not enough information to determine if a match
3844     will be possible.
3845
3846     For example, in the regex /foo(bar\s*){4,8}baz/ with the
3847     regex pos at the \s*, the prospects for a match depend not
3848     only on the input position but also on how many (bar\s*)
3849     repeats into the {4,8} we are. */
3850    if ((mincount > 1) || (maxcount > 1 && maxcount != REG_INFTY))
3851      f &= ~SCF_WHILEM_VISITED_POS;
3852
3853     /* This will finish on WHILEM, setting scan, or on NULL: */
3854     minnext = study_chunk(pRExC_state, &scan, minlenp, &deltanext,
3855          last, data, stopparen, recursed, NULL,
3856          (mincount == 0
3857           ? (f & ~SCF_DO_SUBSTR) : f),depth+1);
3858
3859     if (flags & SCF_DO_STCLASS)
3860      data->start_class = oclass;
3861     if (mincount == 0 || minnext == 0) {
3862      if (flags & SCF_DO_STCLASS_OR) {
3863       cl_or(pRExC_state, data->start_class, &this_class);
3864      }
3865      else if (flags & SCF_DO_STCLASS_AND) {
3866       /* Switch to OR mode: cache the old value of
3867       * data->start_class */
3868       INIT_AND_WITHP;
3869       StructCopy(data->start_class, and_withp,
3870         struct regnode_charclass_class);
3871       flags &= ~SCF_DO_STCLASS_AND;
3872       StructCopy(&this_class, data->start_class,
3873         struct regnode_charclass_class);
3874       flags |= SCF_DO_STCLASS_OR;
3875       SET_SSC_EOS(data->start_class);
3876      }
3877     } else {  /* Non-zero len */
3878      if (flags & SCF_DO_STCLASS_OR) {
3879       cl_or(pRExC_state, data->start_class, &this_class);
3880       cl_and(data->start_class, and_withp);
3881      }
3882      else if (flags & SCF_DO_STCLASS_AND)
3883       cl_and(data->start_class, &this_class);
3884      flags &= ~SCF_DO_STCLASS;
3885     }
3886     if (!scan)   /* It was not CURLYX, but CURLY. */
3887      scan = next;
3888     if ( /* ? quantifier ok, except for (?{ ... }) */
3889      (next_is_eval || !(mincount == 0 && maxcount == 1))
3890      && (minnext == 0) && (deltanext == 0)
3891      && data && !(data->flags & (SF_HAS_PAR|SF_IN_PAR))
3892      && maxcount <= REG_INFTY/3) /* Complement check for big count */
3893     {
3894      /* Fatal warnings may leak the regexp without this: */
3895      SAVEFREESV(RExC_rx_sv);
3896      ckWARNreg(RExC_parse,
3897        "Quantifier unexpected on zero-length expression");
3898      (void)ReREFCNT_inc(RExC_rx_sv);
3899     }
3900
3901     min += minnext * mincount;
3902     is_inf_internal |= deltanext == I32_MAX
3903          || (maxcount == REG_INFTY && minnext + deltanext > 0);
3904     is_inf |= is_inf_internal;
3905     if (is_inf)
3906      delta = I32_MAX;
3907     else
3908      delta += (minnext + deltanext) * maxcount - minnext * mincount;
3909
3910     /* Try powerful optimization CURLYX => CURLYN. */
3911     if (  OP(oscan) == CURLYX && data
3912      && data->flags & SF_IN_PAR
3913      && !(data->flags & SF_HAS_EVAL)
3914      && !deltanext && minnext == 1 ) {
3915      /* Try to optimize to CURLYN.  */
3916      regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS;
3917      regnode * const nxt1 = nxt;
3918 #ifdef DEBUGGING
3919      regnode *nxt2;
3920 #endif
3921
3922      /* Skip open. */
3923      nxt = regnext(nxt);
3924      if (!REGNODE_SIMPLE(OP(nxt))
3925       && !(PL_regkind[OP(nxt)] == EXACT
3926        && STR_LEN(nxt) == 1))
3927       goto nogo;
3928 #ifdef DEBUGGING
3929      nxt2 = nxt;
3930 #endif
3931      nxt = regnext(nxt);
3932      if (OP(nxt) != CLOSE)
3933       goto nogo;
3934      if (RExC_open_parens) {
3935       RExC_open_parens[ARG(nxt1)-1]=oscan; /*open->CURLYM*/
3936       RExC_close_parens[ARG(nxt1)-1]=nxt+2; /*close->while*/
3937      }
3938      /* Now we know that nxt2 is the only contents: */
3939      oscan->flags = (U8)ARG(nxt);
3940      OP(oscan) = CURLYN;
3941      OP(nxt1) = NOTHING; /* was OPEN. */
3942
3943 #ifdef DEBUGGING
3944      OP(nxt1 + 1) = OPTIMIZED; /* was count. */
3945      NEXT_OFF(nxt1+ 1) = 0; /* just for consistency. */
3946      NEXT_OFF(nxt2) = 0; /* just for consistency with CURLY. */
3947      OP(nxt) = OPTIMIZED; /* was CLOSE. */
3948      OP(nxt + 1) = OPTIMIZED; /* was count. */
3949      NEXT_OFF(nxt+ 1) = 0; /* just for consistency. */
3950 #endif
3951     }
3952    nogo:
3953
3954     /* Try optimization CURLYX => CURLYM. */
3955     if (  OP(oscan) == CURLYX && data
3956      && !(data->flags & SF_HAS_PAR)
3957      && !(data->flags & SF_HAS_EVAL)
3958      && !deltanext /* atom is fixed width */
3959      && minnext != 0 /* CURLYM can't handle zero width */
3960      && ! (RExC_seen & REG_SEEN_EXACTF_SHARP_S) /* Nor \xDF */
3961     ) {
3962      /* XXXX How to optimize if data == 0? */
3963      /* Optimize to a simpler form.  */
3964      regnode *nxt = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; /* OPEN */
3965      regnode *nxt2;
3966
3967      OP(oscan) = CURLYM;
3968      while ( (nxt2 = regnext(nxt)) /* skip over embedded stuff*/
3969        && (OP(nxt2) != WHILEM))
3970       nxt = nxt2;
3971      OP(nxt2)  = SUCCEED; /* Whas WHILEM */
3972      /* Need to optimize away parenths. */
3973      if ((data->flags & SF_IN_PAR) && OP(nxt) == CLOSE) {
3974       /* Set the parenth number.  */
3975       regnode *nxt1 = NEXTOPER(oscan) + EXTRA_STEP_2ARGS; /* OPEN*/
3976
3977       oscan->flags = (U8)ARG(nxt);
3978       if (RExC_open_parens) {
3979        RExC_open_parens[ARG(nxt1)-1]=oscan; /*open->CURLYM*/
3980        RExC_close_parens[ARG(nxt1)-1]=nxt2+1; /*close->NOTHING*/
3981       }
3982       OP(nxt1) = OPTIMIZED; /* was OPEN. */
3983       OP(nxt) = OPTIMIZED; /* was CLOSE. */
3984
3985 #ifdef DEBUGGING
3986       OP(nxt1 + 1) = OPTIMIZED; /* was count. */
3987       OP(nxt + 1) = OPTIMIZED; /* was count. */
3988       NEXT_OFF(nxt1 + 1) = 0; /* just for consistency. */
3989       NEXT_OFF(nxt + 1) = 0; /* just for consistency. */
3990 #endif
3991 #if 0
3992       while ( nxt1 && (OP(nxt1) != WHILEM)) {
3993        regnode *nnxt = regnext(nxt1);
3994        if (nnxt == nxt) {
3995         if (reg_off_by_arg[OP(nxt1)])
3996          ARG_SET(nxt1, nxt2 - nxt1);
3997         else if (nxt2 - nxt1 < U16_MAX)
3998          NEXT_OFF(nxt1) = nxt2 - nxt1;
3999         else
4000          OP(nxt) = NOTHING; /* Cannot beautify */
4001        }
4002        nxt1 = nnxt;
4003       }
4004 #endif
4005       /* Optimize again: */
4006       study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt,
4007          NULL, stopparen, recursed, NULL, 0,depth+1);
4008      }
4009      else
4010       oscan->flags = 0;
4011     }
4012     else if ((OP(oscan) == CURLYX)
4013       && (flags & SCF_WHILEM_VISITED_POS)
4014       /* See the comment on a similar expression above.
4015        However, this time it's not a subexpression
4016        we care about, but the expression itself. */
4017       && (maxcount == REG_INFTY)
4018       && data && ++data->whilem_c < 16) {
4019      /* This stays as CURLYX, we can put the count/of pair. */
4020      /* Find WHILEM (as in regexec.c) */
4021      regnode *nxt = oscan + NEXT_OFF(oscan);
4022
4023      if (OP(PREVOPER(nxt)) == NOTHING) /* LONGJMP */
4024       nxt += ARG(nxt);
4025      PREVOPER(nxt)->flags = (U8)(data->whilem_c
4026       | (RExC_whilem_seen << 4)); /* On WHILEM */
4027     }
4028     if (data && fl & (SF_HAS_PAR|SF_IN_PAR))
4029      pars++;
4030     if (flags & SCF_DO_SUBSTR) {
4031      SV *last_str = NULL;
4032      int counted = mincount != 0;
4033
4034      if (data->last_end > 0 && mincount != 0) { /* Ends with a string. */
4035 #if defined(SPARC64_GCC_WORKAROUND)
4036       I32 b = 0;
4037       STRLEN l = 0;
4038       const char *s = NULL;
4039       I32 old = 0;
4040
4041       if (pos_before >= data->last_start_min)
4042        b = pos_before;
4043       else
4044        b = data->last_start_min;
4045
4046       l = 0;
4047       s = SvPV_const(data->last_found, l);
4048       old = b - data->last_start_min;
4049
4050 #else
4051       I32 b = pos_before >= data->last_start_min
4052        ? pos_before : data->last_start_min;
4053       STRLEN l;
4054       const char * const s = SvPV_const(data->last_found, l);
4055       I32 old = b - data->last_start_min;
4056 #endif
4057
4058       if (UTF)
4059        old = utf8_hop((U8*)s, old) - (U8*)s;
4060       l -= old;
4061       /* Get the added string: */
4062       last_str = newSVpvn_utf8(s  + old, l, UTF);
4063       if (deltanext == 0 && pos_before == b) {
4064        /* What was added is a constant string */
4065        if (mincount > 1) {
4066         SvGROW(last_str, (mincount * l) + 1);
4067         repeatcpy(SvPVX(last_str) + l,
4068           SvPVX_const(last_str), l, mincount - 1);
4069         SvCUR_set(last_str, SvCUR(last_str) * mincount);
4070         /* Add additional parts. */
4071         SvCUR_set(data->last_found,
4072           SvCUR(data->last_found) - l);
4073         sv_catsv(data->last_found, last_str);
4074         {
4075          SV * sv = data->last_found;
4076          MAGIC *mg =
4077           SvUTF8(sv) && SvMAGICAL(sv) ?
4078           mg_find(sv, PERL_MAGIC_utf8) : NULL;
4079          if (mg && mg->mg_len >= 0)
4080           mg->mg_len += CHR_SVLEN(last_str) - l;
4081         }
4082         data->last_end += l * (mincount - 1);
4083        }
4084       } else {
4085        /* start offset must point into the last copy */
4086        data->last_start_min += minnext * (mincount - 1);
4087        data->last_start_max += is_inf ? I32_MAX
4088         : (maxcount - 1) * (minnext + data->pos_delta);
4089       }
4090      }
4091      /* It is counted once already... */
4092      data->pos_min += minnext * (mincount - counted);
4093 #if 0
4094 PerlIO_printf(Perl_debug_log, "counted=%d deltanext=%d I32_MAX=%d minnext=%d maxcount=%d mincount=%d\n",
4095  counted, deltanext, I32_MAX, minnext, maxcount, mincount);
4096 if (deltanext != I32_MAX)
4097 PerlIO_printf(Perl_debug_log, "LHS=%d RHS=%d\n", -counted * deltanext + (minnext + deltanext) * maxcount - minnext * mincount, I32_MAX - data->pos_delta);
4098 #endif
4099      if (deltanext == I32_MAX || -counted * deltanext + (minnext + deltanext) * maxcount - minnext * mincount >= I32_MAX - data->pos_delta)
4100       data->pos_delta = I32_MAX;
4101      else
4102       data->pos_delta += - counted * deltanext +
4103       (minnext + deltanext) * maxcount - minnext * mincount;
4104      if (mincount != maxcount) {
4105       /* Cannot extend fixed substrings found inside
4106        the group.  */
4107       SCAN_COMMIT(pRExC_state,data,minlenp);
4108       if (mincount && last_str) {
4109        SV * const sv = data->last_found;
4110        MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ?
4111         mg_find(sv, PERL_MAGIC_utf8) : NULL;
4112
4113        if (mg)
4114         mg->mg_len = -1;
4115        sv_setsv(sv, last_str);
4116        data->last_end = data->pos_min;
4117        data->last_start_min =
4118         data->pos_min - CHR_SVLEN(last_str);
4119        data->last_start_max = is_inf
4120         ? I32_MAX
4121         : data->pos_min + data->pos_delta
4122         - CHR_SVLEN(last_str);
4123       }
4124       data->longest = &(data->longest_float);
4125      }
4126      SvREFCNT_dec(last_str);
4127     }
4128     if (data && (fl & SF_HAS_EVAL))
4129      data->flags |= SF_HAS_EVAL;
4130    optimize_curly_tail:
4131     if (OP(oscan) != CURLYX) {
4132      while (PL_regkind[OP(next = regnext(oscan))] == NOTHING
4133       && NEXT_OFF(next))
4134       NEXT_OFF(oscan) += NEXT_OFF(next);
4135     }
4136     continue;
4137    default:   /* REF, and CLUMP only? */
4138     if (flags & SCF_DO_SUBSTR) {
4139      SCAN_COMMIT(pRExC_state,data,minlenp); /* Cannot expect anything... */
4140      data->longest = &(data->longest_float);
4141     }
4142     is_inf = is_inf_internal = 1;
4143     if (flags & SCF_DO_STCLASS_OR)
4144      cl_anything(pRExC_state, data->start_class);
4145     flags &= ~SCF_DO_STCLASS;
4146     break;
4147    }
4148   }
4149   else if (OP(scan) == LNBREAK) {
4150    if (flags & SCF_DO_STCLASS) {
4151     int value = 0;
4152     CLEAR_SSC_EOS(data->start_class); /* No match on empty */
4153      if (flags & SCF_DO_STCLASS_AND) {
4154      for (value = 0; value < 256; value++)
4155       if (!is_VERTWS_cp(value))
4156        ANYOF_BITMAP_CLEAR(data->start_class, value);
4157     }
4158     else {
4159      for (value = 0; value < 256; value++)
4160       if (is_VERTWS_cp(value))
4161        ANYOF_BITMAP_SET(data->start_class, value);
4162     }
4163     if (flags & SCF_DO_STCLASS_OR)
4164      cl_and(data->start_class, and_withp);
4165     flags &= ~SCF_DO_STCLASS;
4166    }
4167    min++;
4168    delta++;    /* Because of the 2 char string cr-lf */
4169    if (flags & SCF_DO_SUBSTR) {
4170      SCAN_COMMIT(pRExC_state,data,minlenp); /* Cannot expect anything... */
4171      data->pos_min += 1;
4172     data->pos_delta += 1;
4173     data->longest = &(data->longest_float);
4174     }
4175   }
4176   else if (REGNODE_SIMPLE(OP(scan))) {
4177    int value = 0;
4178
4179    if (flags & SCF_DO_SUBSTR) {
4180     SCAN_COMMIT(pRExC_state,data,minlenp);
4181     data->pos_min++;
4182    }
4183    min++;
4184    if (flags & SCF_DO_STCLASS) {
4185     int loop_max = 256;
4186     CLEAR_SSC_EOS(data->start_class); /* No match on empty */
4187
4188     /* Some of the logic below assumes that switching
4189     locale on will only add false positives. */
4190     switch (PL_regkind[OP(scan)]) {
4191      U8 classnum;
4192
4193     case SANY:
4194     default:
4195 #ifdef DEBUGGING
4196     Perl_croak(aTHX_ "panic: unexpected simple REx opcode %d", OP(scan));
4197 #endif
4198     do_default:
4199      if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
4200       cl_anything(pRExC_state, data->start_class);
4201      break;
4202     case REG_ANY:
4203      if (OP(scan) == SANY)
4204       goto do_default;
4205      if (flags & SCF_DO_STCLASS_OR) { /* Everything but \n */
4206       value = (ANYOF_BITMAP_TEST(data->start_class,'\n')
4207         || ANYOF_CLASS_TEST_ANY_SET(data->start_class));
4208       cl_anything(pRExC_state, data->start_class);
4209      }
4210      if (flags & SCF_DO_STCLASS_AND || !value)
4211       ANYOF_BITMAP_CLEAR(data->start_class,'\n');
4212      break;
4213     case ANYOF:
4214      if (flags & SCF_DO_STCLASS_AND)
4215       cl_and(data->start_class,
4216        (struct regnode_charclass_class*)scan);
4217      else
4218       cl_or(pRExC_state, data->start_class,
4219        (struct regnode_charclass_class*)scan);
4220      break;
4221     case POSIXA:
4222      loop_max = 128;
4223      /* FALL THROUGH */
4224     case POSIXL:
4225     case POSIXD:
4226     case POSIXU:
4227      classnum = FLAGS(scan);
4228      if (flags & SCF_DO_STCLASS_AND) {
4229       if (!(data->start_class->flags & ANYOF_LOCALE)) {
4230        ANYOF_CLASS_CLEAR(data->start_class, classnum_to_namedclass(classnum) + 1);
4231        for (value = 0; value < loop_max; value++) {
4232         if (! _generic_isCC(UNI_TO_NATIVE(value), classnum)) {
4233          ANYOF_BITMAP_CLEAR(data->start_class, UNI_TO_NATIVE(value));
4234         }
4235        }
4236       }
4237      }
4238      else {
4239       if (data->start_class->flags & ANYOF_LOCALE) {
4240        ANYOF_CLASS_SET(data->start_class, classnum_to_namedclass(classnum));
4241       }
4242       else {
4243
4244       /* Even if under locale, set the bits for non-locale
4245       * in case it isn't a true locale-node.  This will
4246       * create false positives if it truly is locale */
4247       for (value = 0; value < loop_max; value++) {
4248        if (_generic_isCC(UNI_TO_NATIVE(value), classnum)) {
4249         ANYOF_BITMAP_SET(data->start_class, UNI_TO_NATIVE(value));
4250        }
4251       }
4252       }
4253      }
4254      break;
4255     case NPOSIXA:
4256      loop_max = 128;
4257      /* FALL THROUGH */
4258     case NPOSIXL:
4259     case NPOSIXU:
4260     case NPOSIXD:
4261      classnum = FLAGS(scan);
4262      if (flags & SCF_DO_STCLASS_AND) {
4263       if (!(data->start_class->flags & ANYOF_LOCALE)) {
4264        ANYOF_CLASS_CLEAR(data->start_class, classnum_to_namedclass(classnum));
4265        for (value = 0; value < loop_max; value++) {
4266         if (_generic_isCC(UNI_TO_NATIVE(value), classnum)) {
4267          ANYOF_BITMAP_CLEAR(data->start_class, UNI_TO_NATIVE(value));
4268         }
4269        }
4270       }
4271      }
4272      else {
4273       if (data->start_class->flags & ANYOF_LOCALE) {
4274        ANYOF_CLASS_SET(data->start_class, classnum_to_namedclass(classnum) + 1);
4275       }
4276       else {
4277
4278       /* Even if under locale, set the bits for non-locale in
4279       * case it isn't a true locale-node.  This will create
4280       * false positives if it truly is locale */
4281       for (value = 0; value < loop_max; value++) {
4282        if (! _generic_isCC(UNI_TO_NATIVE(value), classnum)) {
4283         ANYOF_BITMAP_SET(data->start_class, UNI_TO_NATIVE(value));
4284        }
4285       }
4286       if (PL_regkind[OP(scan)] == NPOSIXD) {
4287        data->start_class->flags |= ANYOF_NON_UTF8_LATIN1_ALL;
4288       }
4289       }
4290      }
4291      break;
4292     }
4293     if (flags & SCF_DO_STCLASS_OR)
4294      cl_and(data->start_class, and_withp);
4295     flags &= ~SCF_DO_STCLASS;
4296    }
4297   }
4298   else if (PL_regkind[OP(scan)] == EOL && flags & SCF_DO_SUBSTR) {
4299    data->flags |= (OP(scan) == MEOL
4300        ? SF_BEFORE_MEOL
4301        : SF_BEFORE_SEOL);
4302    SCAN_COMMIT(pRExC_state, data, minlenp);
4303
4304   }
4305   else if (  PL_regkind[OP(scan)] == BRANCHJ
4306     /* Lookbehind, or need to calculate parens/evals/stclass: */
4307     && (scan->flags || data || (flags & SCF_DO_STCLASS))
4308     && (OP(scan) == IFMATCH || OP(scan) == UNLESSM)) {
4309    if ( OP(scan) == UNLESSM &&
4310     scan->flags == 0 &&
4311     OP(NEXTOPER(NEXTOPER(scan))) == NOTHING &&
4312     OP(regnext(NEXTOPER(NEXTOPER(scan)))) == SUCCEED
4313    ) {
4314     regnode *opt;
4315     regnode *upto= regnext(scan);
4316     DEBUG_PARSE_r({
4317      SV * const mysv_val=sv_newmortal();
4318      DEBUG_STUDYDATA("OPFAIL",data,depth);
4319
4320      /*DEBUG_PARSE_MSG("opfail");*/
4321      regprop(RExC_rx, mysv_val, upto);
4322      PerlIO_printf(Perl_debug_log, "~ replace with OPFAIL pointed at %s (%"IVdf") offset %"IVdf"\n",
4323         SvPV_nolen_const(mysv_val),
4324         (IV)REG_NODE_NUM(upto),
4325         (IV)(upto - scan)
4326      );
4327     });
4328     OP(scan) = OPFAIL;
4329     NEXT_OFF(scan) = upto - scan;
4330     for (opt= scan + 1; opt < upto ; opt++)
4331      OP(opt) = OPTIMIZED;
4332     scan= upto;
4333     continue;
4334    }
4335    if ( !PERL_ENABLE_POSITIVE_ASSERTION_STUDY
4336     || OP(scan) == UNLESSM )
4337    {
4338     /* Negative Lookahead/lookbehind
4339     In this case we can't do fixed string optimisation.
4340     */
4341
4342     I32 deltanext, minnext, fake = 0;
4343     regnode *nscan;
4344     struct regnode_charclass_class intrnl;
4345     int f = 0;
4346
4347     data_fake.flags = 0;
4348     if (data) {
4349      data_fake.whilem_c = data->whilem_c;
4350      data_fake.last_closep = data->last_closep;
4351     }
4352     else
4353      data_fake.last_closep = &fake;
4354     data_fake.pos_delta = delta;
4355     if ( flags & SCF_DO_STCLASS && !scan->flags
4356      && OP(scan) == IFMATCH ) { /* Lookahead */
4357      cl_init(pRExC_state, &intrnl);
4358      data_fake.start_class = &intrnl;
4359      f |= SCF_DO_STCLASS_AND;
4360     }
4361     if (flags & SCF_WHILEM_VISITED_POS)
4362      f |= SCF_WHILEM_VISITED_POS;
4363     next = regnext(scan);
4364     nscan = NEXTOPER(NEXTOPER(scan));
4365     minnext = study_chunk(pRExC_state, &nscan, minlenp, &deltanext,
4366      last, &data_fake, stopparen, recursed, NULL, f, depth+1);
4367     if (scan->flags) {
4368      if (deltanext) {
4369       FAIL("Variable length lookbehind not implemented");
4370      }
4371      else if (minnext > (I32)U8_MAX) {
4372       FAIL2("Lookbehind longer than %"UVuf" not implemented", (UV)U8_MAX);
4373      }
4374      scan->flags = (U8)minnext;
4375     }
4376     if (data) {
4377      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
4378       pars++;
4379      if (data_fake.flags & SF_HAS_EVAL)
4380       data->flags |= SF_HAS_EVAL;
4381      data->whilem_c = data_fake.whilem_c;
4382     }
4383     if (f & SCF_DO_STCLASS_AND) {
4384      if (flags & SCF_DO_STCLASS_OR) {
4385       /* OR before, AND after: ideally we would recurse with
4386       * data_fake to get the AND applied by study of the
4387       * remainder of the pattern, and then derecurse;
4388       * *** HACK *** for now just treat as "no information".
4389       * See [perl #56690].
4390       */
4391       cl_init(pRExC_state, data->start_class);
4392      }  else {
4393       /* AND before and after: combine and continue */
4394       const int was = TEST_SSC_EOS(data->start_class);
4395
4396       cl_and(data->start_class, &intrnl);
4397       if (was)
4398        SET_SSC_EOS(data->start_class);
4399      }
4400     }
4401    }
4402 #if PERL_ENABLE_POSITIVE_ASSERTION_STUDY
4403    else {
4404     /* Positive Lookahead/lookbehind
4405     In this case we can do fixed string optimisation,
4406     but we must be careful about it. Note in the case of
4407     lookbehind the positions will be offset by the minimum
4408     length of the pattern, something we won't know about
4409     until after the recurse.
4410     */
4411     I32 deltanext, fake = 0;
4412     regnode *nscan;
4413     struct regnode_charclass_class intrnl;
4414     int f = 0;
4415     /* We use SAVEFREEPV so that when the full compile
4416      is finished perl will clean up the allocated
4417      minlens when it's all done. This way we don't
4418      have to worry about freeing them when we know
4419      they wont be used, which would be a pain.
4420     */
4421     I32 *minnextp;
4422     Newx( minnextp, 1, I32 );
4423     SAVEFREEPV(minnextp);
4424
4425     if (data) {
4426      StructCopy(data, &data_fake, scan_data_t);
4427      if ((flags & SCF_DO_SUBSTR) && data->last_found) {
4428       f |= SCF_DO_SUBSTR;
4429       if (scan->flags)
4430        SCAN_COMMIT(pRExC_state, &data_fake,minlenp);
4431       data_fake.last_found=newSVsv(data->last_found);
4432      }
4433     }
4434     else
4435      data_fake.last_closep = &fake;
4436     data_fake.flags = 0;
4437     data_fake.pos_delta = delta;
4438     if (is_inf)
4439      data_fake.flags |= SF_IS_INF;
4440     if ( flags & SCF_DO_STCLASS && !scan->flags
4441      && OP(scan) == IFMATCH ) { /* Lookahead */
4442      cl_init(pRExC_state, &intrnl);
4443      data_fake.start_class = &intrnl;
4444      f |= SCF_DO_STCLASS_AND;
4445     }
4446     if (flags & SCF_WHILEM_VISITED_POS)
4447      f |= SCF_WHILEM_VISITED_POS;
4448     next = regnext(scan);
4449     nscan = NEXTOPER(NEXTOPER(scan));
4450
4451     *minnextp = study_chunk(pRExC_state, &nscan, minnextp, &deltanext,
4452      last, &data_fake, stopparen, recursed, NULL, f,depth+1);
4453     if (scan->flags) {
4454      if (deltanext) {
4455       FAIL("Variable length lookbehind not implemented");
4456      }
4457      else if (*minnextp > (I32)U8_MAX) {
4458       FAIL2("Lookbehind longer than %"UVuf" not implemented", (UV)U8_MAX);
4459      }
4460      scan->flags = (U8)*minnextp;
4461     }
4462
4463     *minnextp += min;
4464
4465     if (f & SCF_DO_STCLASS_AND) {
4466      const int was = TEST_SSC_EOS(data.start_class);
4467
4468      cl_and(data->start_class, &intrnl);
4469      if (was)
4470       SET_SSC_EOS(data->start_class);
4471     }
4472     if (data) {
4473      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
4474       pars++;
4475      if (data_fake.flags & SF_HAS_EVAL)
4476       data->flags |= SF_HAS_EVAL;
4477      data->whilem_c = data_fake.whilem_c;
4478      if ((flags & SCF_DO_SUBSTR) && data_fake.last_found) {
4479       if (RExC_rx->minlen<*minnextp)
4480        RExC_rx->minlen=*minnextp;
4481       SCAN_COMMIT(pRExC_state, &data_fake, minnextp);
4482       SvREFCNT_dec_NN(data_fake.last_found);
4483
4484       if ( data_fake.minlen_fixed != minlenp )
4485       {
4486        data->offset_fixed= data_fake.offset_fixed;
4487        data->minlen_fixed= data_fake.minlen_fixed;
4488        data->lookbehind_fixed+= scan->flags;
4489       }
4490       if ( data_fake.minlen_float != minlenp )
4491       {
4492        data->minlen_float= data_fake.minlen_float;
4493        data->offset_float_min=data_fake.offset_float_min;
4494        data->offset_float_max=data_fake.offset_float_max;
4495        data->lookbehind_float+= scan->flags;
4496       }
4497      }
4498     }
4499    }
4500 #endif
4501   }
4502   else if (OP(scan) == OPEN) {
4503    if (stopparen != (I32)ARG(scan))
4504     pars++;
4505   }
4506   else if (OP(scan) == CLOSE) {
4507    if (stopparen == (I32)ARG(scan)) {
4508     break;
4509    }
4510    if ((I32)ARG(scan) == is_par) {
4511     next = regnext(scan);
4512
4513     if ( next && (OP(next) != WHILEM) && next < last)
4514      is_par = 0;  /* Disable optimization */
4515    }
4516    if (data)
4517     *(data->last_closep) = ARG(scan);
4518   }
4519   else if (OP(scan) == EVAL) {
4520     if (data)
4521      data->flags |= SF_HAS_EVAL;
4522   }
4523   else if ( PL_regkind[OP(scan)] == ENDLIKE ) {
4524    if (flags & SCF_DO_SUBSTR) {
4525     SCAN_COMMIT(pRExC_state,data,minlenp);
4526     flags &= ~SCF_DO_SUBSTR;
4527    }
4528    if (data && OP(scan)==ACCEPT) {
4529     data->flags |= SCF_SEEN_ACCEPT;
4530     if (stopmin > min)
4531      stopmin = min;
4532    }
4533   }
4534   else if (OP(scan) == LOGICAL && scan->flags == 2) /* Embedded follows */
4535   {
4536     if (flags & SCF_DO_SUBSTR) {
4537      SCAN_COMMIT(pRExC_state,data,minlenp);
4538      data->longest = &(data->longest_float);
4539     }
4540     is_inf = is_inf_internal = 1;
4541     if (flags & SCF_DO_STCLASS_OR) /* Allow everything */
4542      cl_anything(pRExC_state, data->start_class);
4543     flags &= ~SCF_DO_STCLASS;
4544   }
4545   else if (OP(scan) == GPOS) {
4546    if (!(RExC_rx->extflags & RXf_GPOS_FLOAT) &&
4547     !(delta || is_inf || (data && data->pos_delta)))
4548    {
4549     if (!(RExC_rx->extflags & RXf_ANCH) && (flags & SCF_DO_SUBSTR))
4550      RExC_rx->extflags |= RXf_ANCH_GPOS;
4551     if (RExC_rx->gofs < (U32)min)
4552      RExC_rx->gofs = min;
4553    } else {
4554     RExC_rx->extflags |= RXf_GPOS_FLOAT;
4555     RExC_rx->gofs = 0;
4556    }
4557   }
4558 #ifdef TRIE_STUDY_OPT
4559 #ifdef FULL_TRIE_STUDY
4560   else if (PL_regkind[OP(scan)] == TRIE) {
4561    /* NOTE - There is similar code to this block above for handling
4562    BRANCH nodes on the initial study.  If you change stuff here
4563    check there too. */
4564    regnode *trie_node= scan;
4565    regnode *tail= regnext(scan);
4566    reg_trie_data *trie = (reg_trie_data*)RExC_rxi->data->data[ ARG(scan) ];
4567    I32 max1 = 0, min1 = I32_MAX;
4568    struct regnode_charclass_class accum;
4569
4570    if (flags & SCF_DO_SUBSTR) /* XXXX Add !SUSPEND? */
4571     SCAN_COMMIT(pRExC_state, data,minlenp); /* Cannot merge strings after this. */
4572    if (flags & SCF_DO_STCLASS)
4573     cl_init_zero(pRExC_state, &accum);
4574
4575    if (!trie->jump) {
4576     min1= trie->minlen;
4577     max1= trie->maxlen;
4578    } else {
4579     const regnode *nextbranch= NULL;
4580     U32 word;
4581
4582     for ( word=1 ; word <= trie->wordcount ; word++)
4583     {
4584      I32 deltanext=0, minnext=0, f = 0, fake;
4585      struct regnode_charclass_class this_class;
4586
4587      data_fake.flags = 0;
4588      if (data) {
4589       data_fake.whilem_c = data->whilem_c;
4590       data_fake.last_closep = data->last_closep;
4591      }
4592      else
4593       data_fake.last_closep = &fake;
4594      data_fake.pos_delta = delta;
4595      if (flags & SCF_DO_STCLASS) {
4596       cl_init(pRExC_state, &this_class);
4597       data_fake.start_class = &this_class;
4598       f = SCF_DO_STCLASS_AND;
4599      }
4600      if (flags & SCF_WHILEM_VISITED_POS)
4601       f |= SCF_WHILEM_VISITED_POS;
4602
4603      if (trie->jump[word]) {
4604       if (!nextbranch)
4605        nextbranch = trie_node + trie->jump[0];
4606       scan= trie_node + trie->jump[word];
4607       /* We go from the jump point to the branch that follows
4608       it. Note this means we need the vestigal unused branches
4609       even though they arent otherwise used.
4610       */
4611       minnext = study_chunk(pRExC_state, &scan, minlenp,
4612        &deltanext, (regnode *)nextbranch, &data_fake,
4613        stopparen, recursed, NULL, f,depth+1);
4614      }
4615      if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH)
4616       nextbranch= regnext((regnode*)nextbranch);
4617
4618      if (min1 > (I32)(minnext + trie->minlen))
4619       min1 = minnext + trie->minlen;
4620      if (deltanext == I32_MAX) {
4621       is_inf = is_inf_internal = 1;
4622       max1 = I32_MAX;
4623      } else if (max1 < (I32)(minnext + deltanext + trie->maxlen))
4624       max1 = minnext + deltanext + trie->maxlen;
4625
4626      if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
4627       pars++;
4628      if (data_fake.flags & SCF_SEEN_ACCEPT) {
4629       if ( stopmin > min + min1)
4630        stopmin = min + min1;
4631       flags &= ~SCF_DO_SUBSTR;
4632       if (data)
4633        data->flags |= SCF_SEEN_ACCEPT;
4634      }
4635      if (data) {
4636       if (data_fake.flags & SF_HAS_EVAL)
4637        data->flags |= SF_HAS_EVAL;
4638       data->whilem_c = data_fake.whilem_c;
4639      }
4640      if (flags & SCF_DO_STCLASS)
4641       cl_or(pRExC_state, &accum, &this_class);
4642     }
4643    }
4644    if (flags & SCF_DO_SUBSTR) {
4645     data->pos_min += min1;
4646     data->pos_delta += max1 - min1;
4647     if (max1 != min1 || is_inf)
4648      data->longest = &(data->longest_float);
4649    }
4650    min += min1;
4651    delta += max1 - min1;
4652    if (flags & SCF_DO_STCLASS_OR) {
4653     cl_or(pRExC_state, data->start_class, &accum);
4654     if (min1) {
4655      cl_and(data->start_class, and_withp);
4656      flags &= ~SCF_DO_STCLASS;
4657     }
4658    }
4659    else if (flags & SCF_DO_STCLASS_AND) {
4660     if (min1) {
4661      cl_and(data->start_class, &accum);
4662      flags &= ~SCF_DO_STCLASS;
4663     }
4664     else {
4665      /* Switch to OR mode: cache the old value of
4666      * data->start_class */
4667      INIT_AND_WITHP;
4668      StructCopy(data->start_class, and_withp,
4669        struct regnode_charclass_class);
4670      flags &= ~SCF_DO_STCLASS_AND;
4671      StructCopy(&accum, data->start_class,
4672        struct regnode_charclass_class);
4673      flags |= SCF_DO_STCLASS_OR;
4674      SET_SSC_EOS(data->start_class);
4675     }
4676    }
4677    scan= tail;
4678    continue;
4679   }
4680 #else
4681   else if (PL_regkind[OP(scan)] == TRIE) {
4682    reg_trie_data *trie = (reg_trie_data*)RExC_rxi->data->data[ ARG(scan) ];
4683    U8*bang=NULL;
4684
4685    min += trie->minlen;
4686    delta += (trie->maxlen - trie->minlen);
4687    flags &= ~SCF_DO_STCLASS; /* xxx */
4688    if (flags & SCF_DO_SUBSTR) {
4689      SCAN_COMMIT(pRExC_state,data,minlenp); /* Cannot expect anything... */
4690      data->pos_min += trie->minlen;
4691      data->pos_delta += (trie->maxlen - trie->minlen);
4692     if (trie->maxlen != trie->minlen)
4693      data->longest = &(data->longest_float);
4694     }
4695     if (trie->jump) /* no more substrings -- for now /grr*/
4696      flags &= ~SCF_DO_SUBSTR;
4697   }
4698 #endif /* old or new */
4699 #endif /* TRIE_STUDY_OPT */
4700
4701   /* Else: zero-length, ignore. */
4702   scan = regnext(scan);
4703  }
4704  if (frame) {
4705   last = frame->last;
4706   scan = frame->next;
4707   stopparen = frame->stop;
4708   frame = frame->prev;
4709   goto fake_study_recurse;
4710  }
4711
4712   finish:
4713  assert(!frame);
4714  DEBUG_STUDYDATA("pre-fin:",data,depth);
4715
4716  *scanp = scan;
4717  *deltap = is_inf_internal ? I32_MAX : delta;
4718  if (flags & SCF_DO_SUBSTR && is_inf)
4719   data->pos_delta = I32_MAX - data->pos_min;
4720  if (is_par > (I32)U8_MAX)
4721   is_par = 0;
4722  if (is_par && pars==1 && data) {
4723   data->flags |= SF_IN_PAR;
4724   data->flags &= ~SF_HAS_PAR;
4725  }
4726  else if (pars && data) {
4727   data->flags |= SF_HAS_PAR;
4728   data->flags &= ~SF_IN_PAR;
4729  }
4730  if (flags & SCF_DO_STCLASS_OR)
4731   cl_and(data->start_class, and_withp);
4732  if (flags & SCF_TRIE_RESTUDY)
4733   data->flags |=  SCF_TRIE_RESTUDY;
4734
4735  DEBUG_STUDYDATA("post-fin:",data,depth);
4736
4737  return min < stopmin ? min : stopmin;
4738 }
4739
4740 STATIC U32
4741 S_add_data(RExC_state_t *pRExC_state, U32 n, const char *s)
4742 {
4743  U32 count = RExC_rxi->data ? RExC_rxi->data->count : 0;
4744
4745  PERL_ARGS_ASSERT_ADD_DATA;
4746
4747  Renewc(RExC_rxi->data,
4748   sizeof(*RExC_rxi->data) + sizeof(void*) * (count + n - 1),
4749   char, struct reg_data);
4750  if(count)
4751   Renew(RExC_rxi->data->what, count + n, U8);
4752  else
4753   Newx(RExC_rxi->data->what, n, U8);
4754  RExC_rxi->data->count = count + n;
4755  Copy(s, RExC_rxi->data->what + count, n, U8);
4756  return count;
4757 }
4758
4759 /*XXX: todo make this not included in a non debugging perl */
4760 #ifndef PERL_IN_XSUB_RE
4761 void
4762 Perl_reginitcolors(pTHX)
4763 {
4764  dVAR;
4765  const char * const s = PerlEnv_getenv("PERL_RE_COLORS");
4766  if (s) {
4767   char *t = savepv(s);
4768   int i = 0;
4769   PL_colors[0] = t;
4770   while (++i < 6) {
4771    t = strchr(t, '\t');
4772    if (t) {
4773     *t = '\0';
4774     PL_colors[i] = ++t;
4775    }
4776    else
4777     PL_colors[i] = t = (char *)"";
4778   }
4779  } else {
4780   int i = 0;
4781   while (i < 6)
4782    PL_colors[i++] = (char *)"";
4783  }
4784  PL_colorset = 1;
4785 }
4786 #endif
4787
4788
4789 #ifdef TRIE_STUDY_OPT
4790 #define CHECK_RESTUDY_GOTO_butfirst(dOsomething)            \
4791  STMT_START {                                            \
4792   if (                                                \
4793    (data.flags & SCF_TRIE_RESTUDY)               \
4794    && ! restudied++                              \
4795   ) {                                                 \
4796    dOsomething;                                    \
4797    goto reStudy;                                   \
4798   }                                                   \
4799  } STMT_END
4800 #else
4801 #define CHECK_RESTUDY_GOTO_butfirst
4802 #endif
4803
4804 /*
4805  * pregcomp - compile a regular expression into internal code
4806  *
4807  * Decides which engine's compiler to call based on the hint currently in
4808  * scope
4809  */
4810
4811 #ifndef PERL_IN_XSUB_RE
4812
4813 /* return the currently in-scope regex engine (or the default if none)  */
4814
4815 regexp_engine const *
4816 Perl_current_re_engine(pTHX)
4817 {
4818  dVAR;
4819
4820  if (IN_PERL_COMPILETIME) {
4821   HV * const table = GvHV(PL_hintgv);
4822   SV **ptr;
4823
4824   if (!table)
4825    return &reh_regexp_engine;
4826   ptr = hv_fetchs(table, "regcomp", FALSE);
4827   if ( !(ptr && SvIOK(*ptr) && SvIV(*ptr)))
4828    return &reh_regexp_engine;
4829   return INT2PTR(regexp_engine*,SvIV(*ptr));
4830  }
4831  else {
4832   SV *ptr;
4833   if (!PL_curcop->cop_hints_hash)
4834    return &reh_regexp_engine;
4835   ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0);
4836   if ( !(ptr && SvIOK(ptr) && SvIV(ptr)))
4837    return &reh_regexp_engine;
4838   return INT2PTR(regexp_engine*,SvIV(ptr));
4839  }
4840 }
4841
4842
4843 REGEXP *
4844 Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags)
4845 {
4846  dVAR;
4847  regexp_engine const *eng = current_re_engine();
4848  GET_RE_DEBUG_FLAGS_DECL;
4849
4850  PERL_ARGS_ASSERT_PREGCOMP;
4851
4852  /* Dispatch a request to compile a regexp to correct regexp engine. */
4853  DEBUG_COMPILE_r({
4854   PerlIO_printf(Perl_debug_log, "Using engine %"UVxf"\n",
4855       PTR2UV(eng));
4856  });
4857  return CALLREGCOMP_ENG(eng, pattern, flags);
4858 }
4859 #endif
4860
4861 /* public(ish) entry point for the perl core's own regex compiling code.
4862  * It's actually a wrapper for Perl_re_op_compile that only takes an SV
4863  * pattern rather than a list of OPs, and uses the internal engine rather
4864  * than the current one */
4865
4866 REGEXP *
4867 Perl_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
4868 {
4869  SV *pat = pattern; /* defeat constness! */
4870  PERL_ARGS_ASSERT_RE_COMPILE;
4871  return Perl_re_op_compile(aTHX_ &pat, 1, NULL,
4872 #ifdef PERL_IN_XSUB_RE
4873         &my_reg_engine,
4874 #else
4875         &reh_regexp_engine,
4876 #endif
4877         NULL, NULL, rx_flags, 0);
4878 }
4879
4880
4881 /* upgrade pattern pat_p of length plen_p to UTF8, and if there are code
4882  * blocks, recalculate the indices. Update pat_p and plen_p in-place to
4883  * point to the realloced string and length.
4884  *
4885  * This is essentially a copy of Perl_bytes_to_utf8() with the code index
4886  * stuff added */
4887
4888 static void
4889 S_pat_upgrade_to_utf8(pTHX_ RExC_state_t * const pRExC_state,
4890      char **pat_p, STRLEN *plen_p, int num_code_blocks)
4891 {
4892  U8 *const src = (U8*)*pat_p;
4893  U8 *dst;
4894  int n=0;
4895  STRLEN s = 0, d = 0;
4896  bool do_end = 0;
4897  GET_RE_DEBUG_FLAGS_DECL;
4898
4899  DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log,
4900   "UTF8 mismatch! Converting to utf8 for resizing and compile\n"));
4901
4902  Newx(dst, *plen_p * 2 + 1, U8);
4903
4904  while (s < *plen_p) {
4905   const UV uv = NATIVE_TO_ASCII(src[s]);
4906   if (UNI_IS_INVARIANT(uv))
4907    dst[d]   = (U8)UTF_TO_NATIVE(uv);
4908   else {
4909    dst[d++] = (U8)UTF8_EIGHT_BIT_HI(uv);
4910    dst[d]   = (U8)UTF8_EIGHT_BIT_LO(uv);
4911   }
4912   if (n < num_code_blocks) {
4913    if (!do_end && pRExC_state->code_blocks[n].start == s) {
4914     pRExC_state->code_blocks[n].start = d;
4915     assert(dst[d] == '(');
4916     do_end = 1;
4917    }
4918    else if (do_end && pRExC_state->code_blocks[n].end == s) {
4919     pRExC_state->code_blocks[n].end = d;
4920     assert(dst[d] == ')');
4921     do_end = 0;
4922     n++;
4923    }
4924   }
4925   s++;
4926   d++;
4927  }
4928  dst[d] = '\0';
4929  *plen_p = d;
4930  *pat_p = (char*) dst;
4931  SAVEFREEPV(*pat_p);
4932  RExC_orig_utf8 = RExC_utf8 = 1;
4933 }
4934
4935
4936
4937 /* S_concat_pat(): concatenate a list of args to the pattern string pat,
4938  * while recording any code block indices, and handling overloading,
4939  * nested qr// objects etc.  If pat is null, it will allocate a new
4940  * string, or just return the first arg, if there's only one.
4941  *
4942  * Returns the malloced/updated pat.
4943  * patternp and pat_count is the array of SVs to be concatted;
4944  * oplist is the optional list of ops that generated the SVs;
4945  * recompile_p is a pointer to a boolean that will be set if
4946  *   the regex will need to be recompiled.
4947  * delim, if non-null is an SV that will be inserted between each element
4948  */
4949
4950 static SV*
4951 S_concat_pat(pTHX_ RExC_state_t * const pRExC_state,
4952     SV *pat, SV ** const patternp, int pat_count,
4953     OP *oplist, bool *recompile_p, SV *delim)
4954 {
4955  SV **svp;
4956  int n = 0;
4957  bool use_delim = FALSE;
4958  bool alloced = FALSE;
4959
4960  /* if we know we have at least two args, create an empty string,
4961  * then concatenate args to that. For no args, return an empty string */
4962  if (!pat && pat_count != 1) {
4963   pat = newSVpvn("", 0);
4964   SAVEFREESV(pat);
4965   alloced = TRUE;
4966  }
4967
4968  for (svp = patternp; svp < patternp + pat_count; svp++) {
4969   SV *sv;
4970   SV *rx  = NULL;
4971   STRLEN orig_patlen = 0;
4972   bool code = 0;
4973   SV *msv = use_delim ? delim : *svp;
4974
4975   /* if we've got a delimiter, we go round the loop twice for each
4976   * svp slot (except the last), using the delimiter the second
4977   * time round */
4978   if (use_delim) {
4979    svp--;
4980    use_delim = FALSE;
4981   }
4982   else if (delim)
4983    use_delim = TRUE;
4984
4985   if (SvTYPE(msv) == SVt_PVAV) {
4986    /* we've encountered an interpolated array within
4987    * the pattern, e.g. /...@a..../. Expand the list of elements,
4988    * then recursively append elements.
4989    * The code in this block is based on S_pushav() */
4990
4991    AV *const av = (AV*)msv;
4992    const I32 maxarg = AvFILL(av) + 1;
4993    SV **array;
4994
4995    if (oplist) {
4996     assert(oplist->op_type == OP_PADAV
4997      || oplist->op_type == OP_RV2AV);
4998     oplist = oplist->op_sibling;;
4999    }
5000
5001    if (SvRMAGICAL(av)) {
5002     U32 i;
5003
5004     Newx(array, maxarg, SV*);
5005     SAVEFREEPV(array);
5006     for (i=0; i < (U32)maxarg; i++) {
5007      SV ** const svp = av_fetch(av, i, FALSE);
5008      array[i] = svp ? *svp : &PL_sv_undef;
5009     }
5010    }
5011    else
5012     array = AvARRAY(av);
5013
5014    pat = S_concat_pat(aTHX_ pRExC_state, pat,
5015         array, maxarg, NULL, recompile_p,
5016         /* $" */
5017         GvSV((gv_fetchpvs("\"", GV_ADDMULTI, SVt_PV))));
5018
5019    continue;
5020   }
5021
5022
5023   /* we make the assumption here that each op in the list of
5024   * op_siblings maps to one SV pushed onto the stack,
5025   * except for code blocks, with have both an OP_NULL and
5026   * and OP_CONST.
5027   * This allows us to match up the list of SVs against the
5028   * list of OPs to find the next code block.
5029   *
5030   * Note that       PUSHMARK PADSV PADSV ..
5031   * is optimised to
5032   *                 PADRANGE PADSV  PADSV  ..
5033   * so the alignment still works. */
5034
5035   if (oplist) {
5036    if (oplist->op_type == OP_NULL
5037     && (oplist->op_flags & OPf_SPECIAL))
5038    {
5039     assert(n < pRExC_state->num_code_blocks);
5040     pRExC_state->code_blocks[n].start = pat ? SvCUR(pat) : 0;
5041     pRExC_state->code_blocks[n].block = oplist;
5042     pRExC_state->code_blocks[n].src_regex = NULL;
5043     n++;
5044     code = 1;
5045     oplist = oplist->op_sibling; /* skip CONST */
5046     assert(oplist);
5047    }
5048    oplist = oplist->op_sibling;;
5049   }
5050
5051   /* apply magic and QR overloading to arg */
5052
5053   SvGETMAGIC(msv);
5054   if (SvROK(msv) && SvAMAGIC(msv)) {
5055    SV *sv = AMG_CALLunary(msv, regexp_amg);
5056    if (sv) {
5057     if (SvROK(sv))
5058      sv = SvRV(sv);
5059     if (SvTYPE(sv) != SVt_REGEXP)
5060      Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP");
5061     msv = sv;
5062    }
5063   }
5064
5065   /* try concatenation overload ... */
5066   if (pat && (SvAMAGIC(pat) || SvAMAGIC(msv)) &&
5067     (sv = amagic_call(pat, msv, concat_amg, AMGf_assign)))
5068   {
5069    sv_setsv(pat, sv);
5070    /* overloading involved: all bets are off over literal
5071    * code. Pretend we haven't seen it */
5072    pRExC_state->num_code_blocks -= n;
5073    n = 0;
5074   }
5075   else  {
5076    /* ... or failing that, try "" overload */
5077    while (SvAMAGIC(msv)
5078      && (sv = AMG_CALLunary(msv, string_amg))
5079      && sv != msv
5080      &&  !(   SvROK(msv)
5081       && SvROK(sv)
5082       && SvRV(msv) == SvRV(sv))
5083    ) {
5084     msv = sv;
5085     SvGETMAGIC(msv);
5086    }
5087    if (SvROK(msv) && SvTYPE(SvRV(msv)) == SVt_REGEXP)
5088     msv = SvRV(msv);
5089
5090    if (pat) {
5091     /* this is a partially unrolled
5092     *     sv_catsv_nomg(pat, msv);
5093     * that allows us to adjust code block indices if
5094     * needed */
5095     STRLEN slen, dlen;
5096     char *dst = SvPV_force_nomg(pat, dlen);
5097     const char *src = SvPV_flags_const(msv, slen, 0);
5098     orig_patlen = dlen;
5099     if (SvUTF8(msv) && !SvUTF8(pat)) {
5100      S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &dst, &dlen, n);
5101      sv_setpvn(pat, dst, dlen);
5102      SvUTF8_on(pat);
5103     }
5104     sv_catpvn_nomg(pat, src, slen);
5105     rx = msv;
5106    }
5107    else
5108     pat = msv;
5109
5110    if (code)
5111     pRExC_state->code_blocks[n-1].end = SvCUR(pat)-1;
5112   }
5113
5114   /* extract any code blocks within any embedded qr//'s */
5115   if (rx && SvTYPE(rx) == SVt_REGEXP
5116    && RX_ENGINE((REGEXP*)rx)->op_comp)
5117   {
5118
5119    RXi_GET_DECL(ReANY((REGEXP *)rx), ri);
5120    if (ri->num_code_blocks) {
5121     int i;
5122     /* the presence of an embedded qr// with code means
5123     * we should always recompile: the text of the
5124     * qr// may not have changed, but it may be a
5125     * different closure than last time */
5126     *recompile_p = 1;
5127     Renew(pRExC_state->code_blocks,
5128      pRExC_state->num_code_blocks + ri->num_code_blocks,
5129      struct reg_code_block);
5130     pRExC_state->num_code_blocks += ri->num_code_blocks;
5131
5132     for (i=0; i < ri->num_code_blocks; i++) {
5133      struct reg_code_block *src, *dst;
5134      STRLEN offset =  orig_patlen
5135       + ReANY((REGEXP *)rx)->pre_prefix;
5136      assert(n < pRExC_state->num_code_blocks);
5137      src = &ri->code_blocks[i];
5138      dst = &pRExC_state->code_blocks[n];
5139      dst->start     = src->start + offset;
5140      dst->end     = src->end   + offset;
5141      dst->block     = src->block;
5142      dst->src_regex  = (REGEXP*) SvREFCNT_inc( (SV*)
5143            src->src_regex
5144             ? src->src_regex
5145             : (REGEXP*)rx);
5146      n++;
5147     }
5148    }
5149   }
5150  }
5151  /* avoid calling magic multiple times on a single element e.g. =~ $qr */
5152  if (alloced)
5153   SvSETMAGIC(pat);
5154
5155  return pat;
5156 }
5157
5158
5159
5160 /* see if there are any run-time code blocks in the pattern.
5161  * False positives are allowed */
5162
5163 static bool
5164 S_has_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
5165      char *pat, STRLEN plen)
5166 {
5167  int n = 0;
5168  STRLEN s;
5169
5170  for (s = 0; s < plen; s++) {
5171   if (n < pRExC_state->num_code_blocks
5172    && s == pRExC_state->code_blocks[n].start)
5173   {
5174    s = pRExC_state->code_blocks[n].end;
5175    n++;
5176    continue;
5177   }
5178   /* TODO ideally should handle [..], (#..), /#.../x to reduce false
5179   * positives here */
5180   if (pat[s] == '(' && s+2 <= plen && pat[s+1] == '?' &&
5181    (pat[s+2] == '{'
5182     || (s + 2 <= plen && pat[s+2] == '?' && pat[s+3] == '{'))
5183   )
5184    return 1;
5185  }
5186  return 0;
5187 }
5188
5189 /* Handle run-time code blocks. We will already have compiled any direct
5190  * or indirect literal code blocks. Now, take the pattern 'pat' and make a
5191  * copy of it, but with any literal code blocks blanked out and
5192  * appropriate chars escaped; then feed it into
5193  *
5194  *    eval "qr'modified_pattern'"
5195  *
5196  * For example,
5197  *
5198  *       a\bc(?{"this was literal"})def'ghi\\jkl(?{"this is runtime"})mno
5199  *
5200  * becomes
5201  *
5202  *    qr'a\\bc_______________________def\'ghi\\\\jkl(?{"this is runtime"})mno'
5203  *
5204  * After eval_sv()-ing that, grab any new code blocks from the returned qr
5205  * and merge them with any code blocks of the original regexp.
5206  *
5207  * If the pat is non-UTF8, while the evalled qr is UTF8, don't merge;
5208  * instead, just save the qr and return FALSE; this tells our caller that
5209  * the original pattern needs upgrading to utf8.
5210  */
5211
5212 static bool
5213 S_compile_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
5214  char *pat, STRLEN plen)
5215 {
5216  SV *qr;
5217
5218  GET_RE_DEBUG_FLAGS_DECL;
5219
5220  if (pRExC_state->runtime_code_qr) {
5221   /* this is the second time we've been called; this should
5222   * only happen if the main pattern got upgraded to utf8
5223   * during compilation; re-use the qr we compiled first time
5224   * round (which should be utf8 too)
5225   */
5226   qr = pRExC_state->runtime_code_qr;
5227   pRExC_state->runtime_code_qr = NULL;
5228   assert(RExC_utf8 && SvUTF8(qr));
5229  }
5230  else {
5231   int n = 0;
5232   STRLEN s;
5233   char *p, *newpat;
5234   int newlen = plen + 6; /* allow for "qr''x\0" extra chars */
5235   SV *sv, *qr_ref;
5236   dSP;
5237
5238   /* determine how many extra chars we need for ' and \ escaping */
5239   for (s = 0; s < plen; s++) {
5240    if (pat[s] == '\'' || pat[s] == '\\')
5241     newlen++;
5242   }
5243
5244   Newx(newpat, newlen, char);
5245   p = newpat;
5246   *p++ = 'q'; *p++ = 'r'; *p++ = '\'';
5247
5248   for (s = 0; s < plen; s++) {
5249    if (n < pRExC_state->num_code_blocks
5250     && s == pRExC_state->code_blocks[n].start)
5251    {
5252     /* blank out literal code block */
5253     assert(pat[s] == '(');
5254     while (s <= pRExC_state->code_blocks[n].end) {
5255      *p++ = '_';
5256      s++;
5257     }
5258     s--;
5259     n++;
5260     continue;
5261    }
5262    if (pat[s] == '\'' || pat[s] == '\\')
5263     *p++ = '\\';
5264    *p++ = pat[s];
5265   }
5266   *p++ = '\'';
5267   if (pRExC_state->pm_flags & RXf_PMf_EXTENDED)
5268    *p++ = 'x';
5269   *p++ = '\0';
5270   DEBUG_COMPILE_r({
5271    PerlIO_printf(Perl_debug_log,
5272     "%sre-parsing pattern for runtime code:%s %s\n",
5273     PL_colors[4],PL_colors[5],newpat);
5274   });
5275
5276   sv = newSVpvn_flags(newpat, p-newpat-1, RExC_utf8 ? SVf_UTF8 : 0);
5277   Safefree(newpat);
5278
5279   ENTER;
5280   SAVETMPS;
5281   save_re_context();
5282   PUSHSTACKi(PERLSI_REQUIRE);
5283   /* G_RE_REPARSING causes the toker to collapse \\ into \ when
5284   * parsing qr''; normally only q'' does this. It also alters
5285   * hints handling */
5286   eval_sv(sv, G_SCALAR|G_RE_REPARSING);
5287   SvREFCNT_dec_NN(sv);
5288   SPAGAIN;
5289   qr_ref = POPs;
5290   PUTBACK;
5291   {
5292    SV * const errsv = ERRSV;
5293    if (SvTRUE_NN(errsv))
5294    {
5295     Safefree(pRExC_state->code_blocks);
5296     /* use croak_sv ? */
5297     Perl_croak_nocontext("%s", SvPV_nolen_const(errsv));
5298    }
5299   }
5300   assert(SvROK(qr_ref));
5301   qr = SvRV(qr_ref);
5302   assert(SvTYPE(qr) == SVt_REGEXP && RX_ENGINE((REGEXP*)qr)->op_comp);
5303   /* the leaving below frees the tmp qr_ref.
5304   * Give qr a life of its own */
5305   SvREFCNT_inc(qr);
5306   POPSTACK;
5307   FREETMPS;
5308   LEAVE;
5309
5310  }
5311
5312  if (!RExC_utf8 && SvUTF8(qr)) {
5313   /* first time through; the pattern got upgraded; save the
5314   * qr for the next time through */
5315   assert(!pRExC_state->runtime_code_qr);
5316   pRExC_state->runtime_code_qr = qr;
5317   return 0;
5318  }
5319
5320
5321  /* extract any code blocks within the returned qr//  */
5322
5323
5324  /* merge the main (r1) and run-time (r2) code blocks into one */
5325  {
5326   RXi_GET_DECL(ReANY((REGEXP *)qr), r2);
5327   struct reg_code_block *new_block, *dst;
5328   RExC_state_t * const r1 = pRExC_state; /* convenient alias */
5329   int i1 = 0, i2 = 0;
5330
5331   if (!r2->num_code_blocks) /* we guessed wrong */
5332   {
5333    SvREFCNT_dec_NN(qr);
5334    return 1;
5335   }
5336
5337   Newx(new_block,
5338    r1->num_code_blocks + r2->num_code_blocks,
5339    struct reg_code_block);
5340   dst = new_block;
5341
5342   while (    i1 < r1->num_code_blocks
5343     || i2 < r2->num_code_blocks)
5344   {
5345    struct reg_code_block *src;
5346    bool is_qr = 0;
5347
5348    if (i1 == r1->num_code_blocks) {
5349     src = &r2->code_blocks[i2++];
5350     is_qr = 1;
5351    }
5352    else if (i2 == r2->num_code_blocks)
5353     src = &r1->code_blocks[i1++];
5354    else if (  r1->code_blocks[i1].start
5355      < r2->code_blocks[i2].start)
5356    {
5357     src = &r1->code_blocks[i1++];
5358     assert(src->end < r2->code_blocks[i2].start);
5359    }
5360    else {
5361     assert(  r1->code_blocks[i1].start
5362      > r2->code_blocks[i2].start);
5363     src = &r2->code_blocks[i2++];
5364     is_qr = 1;
5365     assert(src->end < r1->code_blocks[i1].start);
5366    }
5367
5368    assert(pat[src->start] == '(');
5369    assert(pat[src->end]   == ')');
5370    dst->start     = src->start;
5371    dst->end     = src->end;
5372    dst->block     = src->block;
5373    dst->src_regex  = is_qr ? (REGEXP*) SvREFCNT_inc( (SV*) qr)
5374          : src->src_regex;
5375    dst++;
5376   }
5377   r1->num_code_blocks += r2->num_code_blocks;
5378   Safefree(r1->code_blocks);
5379   r1->code_blocks = new_block;
5380  }
5381
5382  SvREFCNT_dec_NN(qr);
5383  return 1;
5384 }
5385
5386
5387 STATIC bool
5388 S_setup_longest(pTHX_ RExC_state_t *pRExC_state, SV* sv_longest, SV** rx_utf8, SV** rx_substr, I32* rx_end_shift, I32 lookbehind, I32 offset, I32 *minlen, STRLEN longest_length, bool eol, bool meol)
5389 {
5390  /* This is the common code for setting up the floating and fixed length
5391  * string data extracted from Perl_re_op_compile() below.  Returns a boolean
5392  * as to whether succeeded or not */
5393
5394  I32 t,ml;
5395
5396  if (! (longest_length
5397   || (eol /* Can't have SEOL and MULTI */
5398    && (! meol || (RExC_flags & RXf_PMf_MULTILINE)))
5399   )
5400    /* See comments for join_exact for why REG_SEEN_EXACTF_SHARP_S */
5401   || (RExC_seen & REG_SEEN_EXACTF_SHARP_S))
5402  {
5403   return FALSE;
5404  }
5405
5406  /* copy the information about the longest from the reg_scan_data
5407   over to the program. */
5408  if (SvUTF8(sv_longest)) {
5409   *rx_utf8 = sv_longest;
5410   *rx_substr = NULL;
5411  } else {
5412   *rx_substr = sv_longest;
5413   *rx_utf8 = NULL;
5414  }
5415  /* end_shift is how many chars that must be matched that
5416   follow this item. We calculate it ahead of time as once the
5417   lookbehind offset is added in we lose the ability to correctly
5418   calculate it.*/
5419  ml = minlen ? *(minlen) : (I32)longest_length;
5420  *rx_end_shift = ml - offset
5421   - longest_length + (SvTAIL(sv_longest) != 0)
5422   + lookbehind;
5423
5424  t = (eol/* Can't have SEOL and MULTI */
5425   && (! meol || (RExC_flags & RXf_PMf_MULTILINE)));
5426  fbm_compile(sv_longest, t ? FBMcf_TAIL : 0);
5427
5428  return TRUE;
5429 }
5430
5431 /*
5432  * Perl_re_op_compile - the perl internal RE engine's function to compile a
5433  * regular expression into internal code.
5434  * The pattern may be passed either as:
5435  *    a list of SVs (patternp plus pat_count)
5436  *    a list of OPs (expr)
5437  * If both are passed, the SV list is used, but the OP list indicates
5438  * which SVs are actually pre-compiled code blocks
5439  *
5440  * The SVs in the list have magic and qr overloading applied to them (and
5441  * the list may be modified in-place with replacement SVs in the latter
5442  * case).
5443  *
5444  * If the pattern hasn't changed from old_re, then old_re will be
5445  * returned.
5446  *
5447  * eng is the current engine. If that engine has an op_comp method, then
5448  * handle directly (i.e. we assume that op_comp was us); otherwise, just
5449  * do the initial concatenation of arguments and pass on to the external
5450  * engine.
5451  *
5452  * If is_bare_re is not null, set it to a boolean indicating whether the
5453  * arg list reduced (after overloading) to a single bare regex which has
5454  * been returned (i.e. /$qr/).
5455  *
5456  * orig_rx_flags contains RXf_* flags. See perlreapi.pod for more details.
5457  *
5458  * pm_flags contains the PMf_* flags, typically based on those from the
5459  * pm_flags field of the related PMOP. Currently we're only interested in
5460  * PMf_HAS_CV, PMf_IS_QR, PMf_USE_RE_EVAL.
5461  *
5462  * We can't allocate space until we know how big the compiled form will be,
5463  * but we can't compile it (and thus know how big it is) until we've got a
5464  * place to put the code.  So we cheat:  we compile it twice, once with code
5465  * generation turned off and size counting turned on, and once "for real".
5466  * This also means that we don't allocate space until we are sure that the
5467  * thing really will compile successfully, and we never have to move the
5468  * code and thus invalidate pointers into it.  (Note that it has to be in
5469  * one piece because free() must be able to free it all.) [NB: not true in perl]
5470  *
5471  * Beware that the optimization-preparation code in here knows about some
5472  * of the structure of the compiled regexp.  [I'll say.]
5473  */
5474
5475 REGEXP *
5476 Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
5477      OP *expr, const regexp_engine* eng, REGEXP *old_re,
5478      bool *is_bare_re, U32 orig_rx_flags, U32 pm_flags)
5479 {
5480  dVAR;
5481  REGEXP *rx;
5482  struct regexp *r;
5483  regexp_internal *ri;
5484  STRLEN plen;
5485  char *exp;
5486  regnode *scan;
5487  I32 flags;
5488  I32 minlen = 0;
5489  U32 rx_flags;
5490  SV *pat;
5491  SV *code_blocksv = NULL;
5492  SV** new_patternp = patternp;
5493
5494  /* these are all flags - maybe they should be turned
5495  * into a single int with different bit masks */
5496  I32 sawlookahead = 0;
5497  I32 sawplus = 0;
5498  I32 sawopen = 0;
5499  regex_charset initial_charset = get_regex_charset(orig_rx_flags);
5500  bool recompile = 0;
5501  bool runtime_code = 0;
5502  scan_data_t data;
5503  RExC_state_t RExC_state;
5504  RExC_state_t * const pRExC_state = &RExC_state;
5505 #ifdef TRIE_STUDY_OPT
5506  int restudied = 0;
5507  RExC_state_t copyRExC_state;
5508 #endif
5509  GET_RE_DEBUG_FLAGS_DECL;
5510
5511  PERL_ARGS_ASSERT_RE_OP_COMPILE;
5512
5513  DEBUG_r(if (!PL_colorset) reginitcolors());
5514
5515 #ifndef PERL_IN_XSUB_RE
5516  /* Initialize these here instead of as-needed, as is quick and avoids
5517  * having to test them each time otherwise */
5518  if (! PL_AboveLatin1) {
5519   PL_AboveLatin1 = _new_invlist_C_array(AboveLatin1_invlist);
5520   PL_ASCII = _new_invlist_C_array(ASCII_invlist);
5521   PL_Latin1 = _new_invlist_C_array(Latin1_invlist);
5522
5523   PL_L1Posix_ptrs[_CC_ALPHANUMERIC]
5524         = _new_invlist_C_array(L1PosixAlnum_invlist);
5525   PL_Posix_ptrs[_CC_ALPHANUMERIC]
5526         = _new_invlist_C_array(PosixAlnum_invlist);
5527
5528   PL_L1Posix_ptrs[_CC_ALPHA]
5529         = _new_invlist_C_array(L1PosixAlpha_invlist);
5530   PL_Posix_ptrs[_CC_ALPHA] = _new_invlist_C_array(PosixAlpha_invlist);
5531
5532   PL_Posix_ptrs[_CC_BLANK] = _new_invlist_C_array(PosixBlank_invlist);
5533   PL_XPosix_ptrs[_CC_BLANK] = _new_invlist_C_array(XPosixBlank_invlist);
5534
5535   /* Cased is the same as Alpha in the ASCII range */
5536   PL_L1Posix_ptrs[_CC_CASED] =  _new_invlist_C_array(L1Cased_invlist);
5537   PL_Posix_ptrs[_CC_CASED] =  _new_invlist_C_array(PosixAlpha_invlist);
5538
5539   PL_Posix_ptrs[_CC_CNTRL] = _new_invlist_C_array(PosixCntrl_invlist);
5540   PL_XPosix_ptrs[_CC_CNTRL] = _new_invlist_C_array(XPosixCntrl_invlist);
5541
5542   PL_Posix_ptrs[_CC_DIGIT] = _new_invlist_C_array(PosixDigit_invlist);
5543   PL_L1Posix_ptrs[_CC_DIGIT] = _new_invlist_C_array(PosixDigit_invlist);
5544
5545   PL_L1Posix_ptrs[_CC_GRAPH] = _new_invlist_C_array(L1PosixGraph_invlist);
5546   PL_Posix_ptrs[_CC_GRAPH] = _new_invlist_C_array(PosixGraph_invlist);
5547
5548   PL_L1Posix_ptrs[_CC_LOWER] = _new_invlist_C_array(L1PosixLower_invlist);
5549   PL_Posix_ptrs[_CC_LOWER] = _new_invlist_C_array(PosixLower_invlist);
5550
5551   PL_L1Posix_ptrs[_CC_PRINT] = _new_invlist_C_array(L1PosixPrint_invlist);
5552   PL_Posix_ptrs[_CC_PRINT] = _new_invlist_C_array(PosixPrint_invlist);
5553
5554   PL_L1Posix_ptrs[_CC_PUNCT] = _new_invlist_C_array(L1PosixPunct_invlist);
5555   PL_Posix_ptrs[_CC_PUNCT] = _new_invlist_C_array(PosixPunct_invlist);
5556
5557   PL_Posix_ptrs[_CC_SPACE] = _new_invlist_C_array(PerlSpace_invlist);
5558   PL_XPosix_ptrs[_CC_SPACE] = _new_invlist_C_array(XPerlSpace_invlist);
5559   PL_Posix_ptrs[_CC_PSXSPC] = _new_invlist_C_array(PosixSpace_invlist);
5560   PL_XPosix_ptrs[_CC_PSXSPC] = _new_invlist_C_array(XPosixSpace_invlist);
5561
5562   PL_L1Posix_ptrs[_CC_UPPER] = _new_invlist_C_array(L1PosixUpper_invlist);
5563   PL_Posix_ptrs[_CC_UPPER] = _new_invlist_C_array(PosixUpper_invlist);
5564
5565   PL_XPosix_ptrs[_CC_VERTSPACE] = _new_invlist_C_array(VertSpace_invlist);
5566
5567   PL_Posix_ptrs[_CC_WORDCHAR] = _new_invlist_C_array(PosixWord_invlist);
5568   PL_L1Posix_ptrs[_CC_WORDCHAR]
5569         = _new_invlist_C_array(L1PosixWord_invlist);
5570
5571   PL_Posix_ptrs[_CC_XDIGIT] = _new_invlist_C_array(PosixXDigit_invlist);
5572   PL_XPosix_ptrs[_CC_XDIGIT] = _new_invlist_C_array(XPosixXDigit_invlist);
5573
5574   PL_HasMultiCharFold = _new_invlist_C_array(_Perl_Multi_Char_Folds_invlist);
5575  }
5576 #endif
5577
5578  pRExC_state->code_blocks = NULL;
5579  pRExC_state->num_code_blocks = 0;
5580
5581  if (is_bare_re)
5582   *is_bare_re = FALSE;
5583
5584  if (expr && (expr->op_type == OP_LIST ||
5585     (expr->op_type == OP_NULL && expr->op_targ == OP_LIST))) {
5586   /* allocate code_blocks if needed */
5587   OP *o;
5588   int ncode = 0;
5589
5590   for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling)
5591    if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL))
5592     ncode++; /* count of DO blocks */
5593   if (ncode) {
5594    pRExC_state->num_code_blocks = ncode;
5595    Newx(pRExC_state->code_blocks, ncode, struct reg_code_block);
5596   }
5597  }
5598
5599  if (!pat_count) {
5600   /* compile-time pattern with just OP_CONSTs and DO blocks */
5601
5602   int n;
5603   OP *o;
5604
5605   /* find how many CONSTs there are */
5606   assert(expr);
5607   n = 0;
5608   if (expr->op_type == OP_CONST)
5609    n = 1;
5610   else
5611    for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
5612     if (o->op_type == OP_CONST)
5613      n++;
5614    }
5615
5616   /* fake up an SV array */
5617
5618   assert(!new_patternp);
5619   Newx(new_patternp, n, SV*);
5620   SAVEFREEPV(new_patternp);
5621   pat_count = n;
5622
5623   n = 0;
5624   if (expr->op_type == OP_CONST)
5625    new_patternp[n] = cSVOPx_sv(expr);
5626   else
5627    for (o = cLISTOPx(expr)->op_first; o; o = o->op_sibling) {
5628     if (o->op_type == OP_CONST)
5629      new_patternp[n++] = cSVOPo_sv;
5630    }
5631
5632  }
5633
5634  DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log,
5635   "Assembling pattern from %d elements%s\n", pat_count,
5636    orig_rx_flags & RXf_SPLIT ? " for split" : ""));
5637
5638  /* set expr to the first arg op */
5639
5640  if (pRExC_state->num_code_blocks
5641   && expr->op_type != OP_CONST)
5642  {
5643    expr = cLISTOPx(expr)->op_first;
5644    assert(   expr->op_type == OP_PUSHMARK
5645     || (expr->op_type == OP_NULL && expr->op_targ == OP_PUSHMARK)
5646     || expr->op_type == OP_PADRANGE);
5647    expr = expr->op_sibling;
5648  }
5649
5650  pat = S_concat_pat(aTHX_ pRExC_state, NULL, new_patternp, pat_count,
5651       expr, &recompile, NULL);
5652
5653  /* handle bare (possibly after overloading) regex: foo =~ $re */
5654  {
5655   SV *re = pat;
5656   if (SvROK(re))
5657    re = SvRV(re);
5658   if (SvTYPE(re) == SVt_REGEXP) {
5659    if (is_bare_re)
5660     *is_bare_re = TRUE;
5661    SvREFCNT_inc(re);
5662    Safefree(pRExC_state->code_blocks);
5663    DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log,
5664     "Precompiled pattern%s\n",
5665      orig_rx_flags & RXf_SPLIT ? " for split" : ""));
5666
5667    return (REGEXP*)re;
5668   }
5669  }
5670
5671  exp = SvPV_nomg(pat, plen);
5672
5673  if (!eng->op_comp) {
5674   if ((SvUTF8(pat) && IN_BYTES)
5675     || SvGMAGICAL(pat) || SvAMAGIC(pat))
5676   {
5677    /* make a temporary copy; either to convert to bytes,
5678    * or to avoid repeating get-magic / overloaded stringify */
5679    pat = newSVpvn_flags(exp, plen, SVs_TEMP |
5680           (IN_BYTES ? 0 : SvUTF8(pat)));
5681   }
5682   Safefree(pRExC_state->code_blocks);
5683   return CALLREGCOMP_ENG(eng, pat, orig_rx_flags);
5684  }
5685
5686  /* ignore the utf8ness if the pattern is 0 length */
5687  RExC_utf8 = RExC_orig_utf8 = (plen == 0 || IN_BYTES) ? 0 : SvUTF8(pat);
5688  RExC_uni_semantics = 0;
5689  RExC_contains_locale = 0;
5690  pRExC_state->runtime_code_qr = NULL;
5691
5692  DEBUG_COMPILE_r({
5693    SV *dsv= sv_newmortal();
5694    RE_PV_QUOTED_DECL(s, RExC_utf8, dsv, exp, plen, 60);
5695    PerlIO_printf(Perl_debug_log, "%sCompiling REx%s %s\n",
5696       PL_colors[4],PL_colors[5],s);
5697   });
5698
5699   redo_first_pass:
5700  /* we jump here if we upgrade the pattern to utf8 and have to
5701  * recompile */
5702
5703  if ((pm_flags & PMf_USE_RE_EVAL)
5704     /* this second condition covers the non-regex literal case,
5705     * i.e.  $foo =~ '(?{})'. */
5706     || (IN_PERL_COMPILETIME && (PL_hints & HINT_RE_EVAL))
5707  )
5708   runtime_code = S_has_runtime_code(aTHX_ pRExC_state, exp, plen);
5709
5710  /* return old regex if pattern hasn't changed */
5711  /* XXX: note in the below we have to check the flags as well as the pattern.
5712  *
5713  * Things get a touch tricky as we have to compare the utf8 flag independently
5714  * from the compile flags.
5715  */
5716
5717  if (   old_re
5718   && !recompile
5719   && !!RX_UTF8(old_re) == !!RExC_utf8
5720   && ( RX_COMPFLAGS(old_re) == ( orig_rx_flags & RXf_PMf_FLAGCOPYMASK ) )
5721   && RX_PRECOMP(old_re)
5722   && RX_PRELEN(old_re) == plen
5723   && memEQ(RX_PRECOMP(old_re), exp, plen)
5724   && !runtime_code /* with runtime code, always recompile */ )
5725  {
5726   Safefree(pRExC_state->code_blocks);
5727   return old_re;
5728  }
5729
5730  rx_flags = orig_rx_flags;
5731
5732  if (initial_charset == REGEX_LOCALE_CHARSET) {
5733   RExC_contains_locale = 1;
5734  }
5735  else if (RExC_utf8 && initial_charset == REGEX_DEPENDS_CHARSET) {
5736
5737   /* Set to use unicode semantics if the pattern is in utf8 and has the
5738   * 'depends' charset specified, as it means unicode when utf8  */
5739   set_regex_charset(&rx_flags, REGEX_UNICODE_CHARSET);
5740  }
5741
5742  RExC_precomp = exp;
5743  RExC_flags = rx_flags;
5744  RExC_pm_flags = pm_flags;
5745
5746  if (runtime_code) {
5747   if (TAINTING_get && TAINT_get)
5748    Perl_croak(aTHX_ "Eval-group in insecure regular expression");
5749
5750   if (!S_compile_runtime_code(aTHX_ pRExC_state, exp, plen)) {
5751    /* whoops, we have a non-utf8 pattern, whilst run-time code
5752    * got compiled as utf8. Try again with a utf8 pattern */
5753    S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &exp, &plen,
5754          pRExC_state->num_code_blocks);
5755    goto redo_first_pass;
5756   }
5757  }
5758  assert(!pRExC_state->runtime_code_qr);
5759
5760  RExC_sawback = 0;
5761
5762  RExC_seen = 0;
5763  RExC_in_lookbehind = 0;
5764  RExC_seen_zerolen = *exp == '^' ? -1 : 0;
5765  RExC_extralen = 0;
5766  RExC_override_recoding = 0;
5767  RExC_in_multi_char_class = 0;
5768
5769  /* First pass: determine size, legality. */
5770  RExC_parse = exp;
5771  RExC_start = exp;
5772  RExC_end = exp + plen;
5773  RExC_naughty = 0;
5774  RExC_npar = 1;
5775  RExC_nestroot = 0;
5776  RExC_size = 0L;
5777  RExC_emit = &PL_regdummy;
5778  RExC_whilem_seen = 0;
5779  RExC_open_parens = NULL;
5780  RExC_close_parens = NULL;
5781  RExC_opend = NULL;
5782  RExC_paren_names = NULL;
5783 #ifdef DEBUGGING
5784  RExC_paren_name_list = NULL;
5785 #endif
5786  RExC_recurse = NULL;
5787  RExC_recurse_count = 0;
5788  pRExC_state->code_index = 0;
5789
5790 #if 0 /* REGC() is (currently) a NOP at the first pass.
5791  * Clever compilers notice this and complain. --jhi */
5792  REGC((U8)REG_MAGIC, (char*)RExC_emit);
5793 #endif
5794  DEBUG_PARSE_r(
5795   PerlIO_printf(Perl_debug_log, "Starting first pass (sizing)\n");
5796   RExC_lastnum=0;
5797   RExC_lastparse=NULL;
5798  );
5799  /* reg may croak on us, not giving us a chance to free
5800  pRExC_state->code_blocks.  We cannot SAVEFREEPV it now, as we may
5801  need it to survive as long as the regexp (qr/(?{})/).
5802  We must check that code_blocksv is not already set, because we may
5803  have jumped back to restart the sizing pass. */
5804  if (pRExC_state->code_blocks && !code_blocksv) {
5805   code_blocksv = newSV_type(SVt_PV);
5806   SAVEFREESV(code_blocksv);
5807   SvPV_set(code_blocksv, (char *)pRExC_state->code_blocks);
5808   SvLEN_set(code_blocksv, 1); /*sufficient to make sv_clear free it*/
5809  }
5810  if (reg(pRExC_state, 0, &flags,1) == NULL) {
5811   /* It's possible to write a regexp in ascii that represents Unicode
5812   codepoints outside of the byte range, such as via \x{100}. If we
5813   detect such a sequence we have to convert the entire pattern to utf8
5814   and then recompile, as our sizing calculation will have been based
5815   on 1 byte == 1 character, but we will need to use utf8 to encode
5816   at least some part of the pattern, and therefore must convert the whole
5817   thing.
5818   -- dmq */
5819   if (flags & RESTART_UTF8) {
5820    S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &exp, &plen,
5821          pRExC_state->num_code_blocks);
5822    goto redo_first_pass;
5823   }
5824   Perl_croak(aTHX_ "panic: reg returned NULL to re_op_compile for sizing pass, flags=%#X", flags);
5825  }
5826  if (code_blocksv)
5827   SvLEN_set(code_blocksv,0); /* no you can't have it, sv_clear */
5828
5829  DEBUG_PARSE_r({
5830   PerlIO_printf(Perl_debug_log,
5831    "Required size %"IVdf" nodes\n"
5832    "Starting second pass (creation)\n",
5833    (IV)RExC_size);
5834   RExC_lastnum=0;
5835   RExC_lastparse=NULL;
5836  });
5837
5838  /* The first pass could have found things that force Unicode semantics */
5839  if ((RExC_utf8 || RExC_uni_semantics)
5840   && get_regex_charset(rx_flags) == REGEX_DEPENDS_CHARSET)
5841  {
5842   set_regex_charset(&rx_flags, REGEX_UNICODE_CHARSET);
5843  }
5844
5845  /* Small enough for pointer-storage convention?
5846  If extralen==0, this means that we will not need long jumps. */
5847  if (RExC_size >= 0x10000L && RExC_extralen)
5848   RExC_size += RExC_extralen;
5849  else
5850   RExC_extralen = 0;
5851  if (RExC_whilem_seen > 15)
5852   RExC_whilem_seen = 15;
5853
5854  /* Allocate space and zero-initialize. Note, the two step process
5855  of zeroing when in debug mode, thus anything assigned has to
5856  happen after that */
5857  rx = (REGEXP*) newSV_type(SVt_REGEXP);
5858  r = ReANY(rx);
5859  Newxc(ri, sizeof(regexp_internal) + (unsigned)RExC_size * sizeof(regnode),
5860   char, regexp_internal);
5861  if ( r == NULL || ri == NULL )
5862   FAIL("Regexp out of space");
5863 #ifdef DEBUGGING
5864  /* avoid reading uninitialized memory in DEBUGGING code in study_chunk() */
5865  Zero(ri, sizeof(regexp_internal) + (unsigned)RExC_size * sizeof(regnode), char);
5866 #else
5867  /* bulk initialize base fields with 0. */
5868  Zero(ri, sizeof(regexp_internal), char);
5869 #endif
5870
5871  /* non-zero initialization begins here */
5872  RXi_SET( r, ri );
5873  r->engine= eng;
5874  r->extflags = rx_flags;
5875  RXp_COMPFLAGS(r) = orig_rx_flags & RXf_PMf_FLAGCOPYMASK;
5876
5877  if (pm_flags & PMf_IS_QR) {
5878   ri->code_blocks = pRExC_state->code_blocks;
5879   ri->num_code_blocks = pRExC_state->num_code_blocks;
5880  }
5881  else
5882  {
5883   int n;
5884   for (n = 0; n < pRExC_state->num_code_blocks; n++)
5885    if (pRExC_state->code_blocks[n].src_regex)
5886     SAVEFREESV(pRExC_state->code_blocks[n].src_regex);
5887   SAVEFREEPV(pRExC_state->code_blocks);
5888  }
5889
5890  {
5891   bool has_p     = ((r->extflags & RXf_PMf_KEEPCOPY) == RXf_PMf_KEEPCOPY);
5892   bool has_charset = (get_regex_charset(r->extflags) != REGEX_DEPENDS_CHARSET);
5893
5894   /* The caret is output if there are any defaults: if not all the STD
5895   * flags are set, or if no character set specifier is needed */
5896   bool has_default =
5897      (((r->extflags & RXf_PMf_STD_PMMOD) != RXf_PMf_STD_PMMOD)
5898      || ! has_charset);
5899   bool has_runon = ((RExC_seen & REG_SEEN_RUN_ON_COMMENT)==REG_SEEN_RUN_ON_COMMENT);
5900   U16 reganch = (U16)((r->extflags & RXf_PMf_STD_PMMOD)
5901        >> RXf_PMf_STD_PMMOD_SHIFT);
5902   const char *fptr = STD_PAT_MODS;        /*"msix"*/
5903   char *p;
5904   /* Allocate for the worst case, which is all the std flags are turned
5905   * on.  If more precision is desired, we could do a population count of
5906   * the flags set.  This could be done with a small lookup table, or by
5907   * shifting, masking and adding, or even, when available, assembly
5908   * language for a machine-language population count.
5909   * We never output a minus, as all those are defaults, so are
5910   * covered by the caret */
5911   const STRLEN wraplen = plen + has_p + has_runon
5912    + has_default       /* If needs a caret */
5913
5914     /* If needs a character set specifier */
5915    + ((has_charset) ? MAX_CHARSET_NAME_LENGTH : 0)
5916    + (sizeof(STD_PAT_MODS) - 1)
5917    + (sizeof("(?:)") - 1);
5918
5919   Newx(p, wraplen + 1, char); /* +1 for the ending NUL */
5920   r->xpv_len_u.xpvlenu_pv = p;
5921   if (RExC_utf8)
5922    SvFLAGS(rx) |= SVf_UTF8;
5923   *p++='('; *p++='?';
5924
5925   /* If a default, cover it using the caret */
5926   if (has_default) {
5927    *p++= DEFAULT_PAT_MOD;
5928   }
5929   if (has_charset) {
5930    STRLEN len;
5931    const char* const name = get_regex_charset_name(r->extflags, &len);
5932    Copy(name, p, len, char);
5933    p += len;
5934   }
5935   if (has_p)
5936    *p++ = KEEPCOPY_PAT_MOD; /*'p'*/
5937   {
5938    char ch;
5939    while((ch = *fptr++)) {
5940     if(reganch & 1)
5941      *p++ = ch;
5942     reganch >>= 1;
5943    }
5944   }
5945
5946   *p++ = ':';
5947   Copy(RExC_precomp, p, plen, char);
5948   assert ((RX_WRAPPED(rx) - p) < 16);
5949   r->pre_prefix = p - RX_WRAPPED(rx);
5950   p += plen;
5951   if (has_runon)
5952    *p++ = '\n';
5953   *p++ = ')';
5954   *p = 0;
5955   SvCUR_set(rx, p - RX_WRAPPED(rx));
5956  }
5957
5958  r->intflags = 0;
5959  r->nparens = RExC_npar - 1; /* set early to validate backrefs */
5960
5961  if (RExC_seen & REG_SEEN_RECURSE) {
5962   Newxz(RExC_open_parens, RExC_npar,regnode *);
5963   SAVEFREEPV(RExC_open_parens);
5964   Newxz(RExC_close_parens,RExC_npar,regnode *);
5965   SAVEFREEPV(RExC_close_parens);
5966  }
5967
5968  /* Useful during FAIL. */
5969 #ifdef RE_TRACK_PATTERN_OFFSETS
5970  Newxz(ri->u.offsets, 2*RExC_size+1, U32); /* MJD 20001228 */
5971  DEBUG_OFFSETS_r(PerlIO_printf(Perl_debug_log,
5972       "%s %"UVuf" bytes for offset annotations.\n",
5973       ri->u.offsets ? "Got" : "Couldn't get",
5974       (UV)((2*RExC_size+1) * sizeof(U32))));
5975 #endif
5976  SetProgLen(ri,RExC_size);
5977  RExC_rx_sv = rx;
5978  RExC_rx = r;
5979  RExC_rxi = ri;
5980  REH_CALL_COMP_BEGIN_HOOK(pRExC_state->rx);
5981
5982  /* Second pass: emit code. */
5983  RExC_flags = rx_flags; /* don't let top level (?i) bleed */
5984  RExC_pm_flags = pm_flags;
5985  RExC_parse = exp;
5986  RExC_end = exp + plen;
5987  RExC_naughty = 0;
5988  RExC_npar = 1;
5989  RExC_emit_start = ri->program;
5990  RExC_emit = ri->program;
5991  RExC_emit_bound = ri->program + RExC_size + 1;
5992  pRExC_state->code_index = 0;
5993
5994  REGC((U8)REG_MAGIC, (char*) RExC_emit++);
5995  if (reg(pRExC_state, 0, &flags,1) == NULL) {
5996   ReREFCNT_dec(rx);
5997   Perl_croak(aTHX_ "panic: reg returned NULL to re_op_compile for generation pass, flags=%#X", flags);
5998  }
5999  /* XXXX To minimize changes to RE engine we always allocate
6000  3-units-long substrs field. */
6001  Newx(r->substrs, 1, struct reg_substr_data);
6002  if (RExC_recurse_count) {
6003   Newxz(RExC_recurse,RExC_recurse_count,regnode *);
6004   SAVEFREEPV(RExC_recurse);
6005  }
6006
6007 reStudy:
6008  r->minlen = minlen = sawlookahead = sawplus = sawopen = 0;
6009  Zero(r->substrs, 1, struct reg_substr_data);
6010
6011 #ifdef TRIE_STUDY_OPT
6012  if (!restudied) {
6013   StructCopy(&zero_scan_data, &data, scan_data_t);
6014   copyRExC_state = RExC_state;
6015  } else {
6016   U32 seen=RExC_seen;
6017   DEBUG_OPTIMISE_r(PerlIO_printf(Perl_debug_log,"Restudying\n"));
6018
6019   RExC_state = copyRExC_state;
6020   if (seen & REG_TOP_LEVEL_BRANCHES)
6021    RExC_seen |= REG_TOP_LEVEL_BRANCHES;
6022   else
6023    RExC_seen &= ~REG_TOP_LEVEL_BRANCHES;
6024   StructCopy(&zero_scan_data, &data, scan_data_t);
6025  }
6026 #else
6027  StructCopy(&zero_scan_data, &data, scan_data_t);
6028 #endif
6029
6030  /* Dig out information for optimizations. */
6031  r->extflags = RExC_flags; /* was pm_op */
6032  /*dmq: removed as part of de-PMOP: pm->op_pmflags = RExC_flags; */
6033
6034  if (UTF)
6035   SvUTF8_on(rx); /* Unicode in it? */
6036  ri->regstclass = NULL;
6037  if (RExC_naughty >= 10) /* Probably an expensive pattern. */
6038   r->intflags |= PREGf_NAUGHTY;
6039  scan = ri->program + 1;  /* First BRANCH. */
6040
6041  /* testing for BRANCH here tells us whether there is "must appear"
6042  data in the pattern. If there is then we can use it for optimisations */
6043  if (!(RExC_seen & REG_TOP_LEVEL_BRANCHES)) { /*  Only one top-level choice. */
6044   I32 fake;
6045   STRLEN longest_float_length, longest_fixed_length;
6046   struct regnode_charclass_class ch_class; /* pointed to by data */
6047   int stclass_flag;
6048   I32 last_close = 0; /* pointed to by data */
6049   regnode *first= scan;
6050   regnode *first_next= regnext(first);
6051   /*
6052   * Skip introductions and multiplicators >= 1
6053   * so that we can extract the 'meat' of the pattern that must
6054   * match in the large if() sequence following.
6055   * NOTE that EXACT is NOT covered here, as it is normally
6056   * picked up by the optimiser separately.
6057   *
6058   * This is unfortunate as the optimiser isnt handling lookahead
6059   * properly currently.
6060   *
6061   */
6062   while ((OP(first) == OPEN && (sawopen = 1)) ||
6063    /* An OR of *one* alternative - should not happen now. */
6064    (OP(first) == BRANCH && OP(first_next) != BRANCH) ||
6065    /* for now we can't handle lookbehind IFMATCH*/
6066    (OP(first) == IFMATCH && !first->flags && (sawlookahead = 1)) ||
6067    (OP(first) == PLUS) ||
6068    (OP(first) == MINMOD) ||
6069    /* An {n,m} with n>0 */
6070    (PL_regkind[OP(first)] == CURLY && ARG1(first) > 0) ||
6071    (OP(first) == NOTHING && PL_regkind[OP(first_next)] != END ))
6072   {
6073     /*
6074     * the only op that could be a regnode is PLUS, all the rest
6075     * will be regnode_1 or regnode_2.
6076     *
6077     */
6078     if (OP(first) == PLUS)
6079      sawplus = 1;
6080     else
6081      first += regarglen[OP(first)];
6082
6083     first = NEXTOPER(first);
6084     first_next= regnext(first);
6085   }
6086
6087   /* Starting-point info. */
6088  again:
6089   DEBUG_PEEP("first:",first,0);
6090   /* Ignore EXACT as we deal with it later. */
6091   if (PL_regkind[OP(first)] == EXACT) {
6092    if (OP(first) == EXACT)
6093     NOOP; /* Empty, get anchored substr later. */
6094    else
6095     ri->regstclass = first;
6096   }
6097 #ifdef TRIE_STCLASS
6098   else if (PL_regkind[OP(first)] == TRIE &&
6099     ((reg_trie_data *)ri->data->data[ ARG(first) ])->minlen>0)
6100   {
6101    regnode *trie_op;
6102    /* this can happen only on restudy */
6103    if ( OP(first) == TRIE ) {
6104     struct regnode_1 *trieop = (struct regnode_1 *)
6105      PerlMemShared_calloc(1, sizeof(struct regnode_1));
6106     StructCopy(first,trieop,struct regnode_1);
6107     trie_op=(regnode *)trieop;
6108    } else {
6109     struct regnode_charclass *trieop = (struct regnode_charclass *)
6110      PerlMemShared_calloc(1, sizeof(struct regnode_charclass));
6111     StructCopy(first,trieop,struct regnode_charclass);
6112     trie_op=(regnode *)trieop;
6113    }
6114    OP(trie_op)+=2;
6115    make_trie_failtable(pRExC_state, (regnode *)first, trie_op, 0);
6116    ri->regstclass = trie_op;
6117   }
6118 #endif
6119   else if (REGNODE_SIMPLE(OP(first)))
6120    ri->regstclass = first;
6121   else if (PL_regkind[OP(first)] == BOUND ||
6122     PL_regkind[OP(first)] == NBOUND)
6123    ri->regstclass = first;
6124   else if (PL_regkind[OP(first)] == BOL) {
6125    r->extflags |= (OP(first) == MBOL
6126       ? RXf_ANCH_MBOL
6127       : (OP(first) == SBOL
6128        ? RXf_ANCH_SBOL
6129        : RXf_ANCH_BOL));
6130    first = NEXTOPER(first);
6131    goto again;
6132   }
6133   else if (OP(first) == GPOS) {
6134    r->extflags |= RXf_ANCH_GPOS;
6135    first = NEXTOPER(first);
6136    goto again;
6137   }
6138   else if ((!sawopen || !RExC_sawback) &&
6139    (OP(first) == STAR &&
6140    PL_regkind[OP(NEXTOPER(first))] == REG_ANY) &&
6141    !(r->extflags & RXf_ANCH) && !pRExC_state->num_code_blocks)
6142   {
6143    /* turn .* into ^.* with an implied $*=1 */
6144    const int type =
6145     (OP(NEXTOPER(first)) == REG_ANY)
6146      ? RXf_ANCH_MBOL
6147      : RXf_ANCH_SBOL;
6148    r->extflags |= type;
6149    r->intflags |= PREGf_IMPLICIT;
6150    first = NEXTOPER(first);
6151    goto again;
6152   }
6153   if (sawplus && !sawlookahead && (!sawopen || !RExC_sawback)
6154    && !pRExC_state->num_code_blocks) /* May examine pos and $& */
6155    /* x+ must match at the 1st pos of run of x's */
6156    r->intflags |= PREGf_SKIP;
6157
6158   /* Scan is after the zeroth branch, first is atomic matcher. */
6159 #ifdef TRIE_STUDY_OPT
6160   DEBUG_PARSE_r(
6161    if (!restudied)
6162     PerlIO_printf(Perl_debug_log, "first at %"IVdf"\n",
6163        (IV)(first - scan + 1))
6164   );
6165 #else
6166   DEBUG_PARSE_r(
6167    PerlIO_printf(Perl_debug_log, "first at %"IVdf"\n",
6168     (IV)(first - scan + 1))
6169   );
6170 #endif
6171
6172
6173   /*
6174   * If there's something expensive in the r.e., find the
6175   * longest literal string that must appear and make it the
6176   * regmust.  Resolve ties in favor of later strings, since
6177   * the regstart check works with the beginning of the r.e.
6178   * and avoiding duplication strengthens checking.  Not a
6179   * strong reason, but sufficient in the absence of others.
6180   * [Now we resolve ties in favor of the earlier string if
6181   * it happens that c_offset_min has been invalidated, since the
6182   * earlier string may buy us something the later one won't.]
6183   */
6184
6185   data.longest_fixed = newSVpvs("");
6186   data.longest_float = newSVpvs("");
6187   data.last_found = newSVpvs("");
6188   data.longest = &(data.longest_fixed);
6189   ENTER_with_name("study_chunk");
6190   SAVEFREESV(data.longest_fixed);
6191   SAVEFREESV(data.longest_float);
6192   SAVEFREESV(data.last_found);
6193   first = scan;
6194   if (!ri->regstclass) {
6195    cl_init(pRExC_state, &ch_class);
6196    data.start_class = &ch_class;
6197    stclass_flag = SCF_DO_STCLASS_AND;
6198   } else    /* XXXX Check for BOUND? */
6199    stclass_flag = 0;
6200   data.last_closep = &last_close;
6201
6202   minlen = study_chunk(pRExC_state, &first, &minlen, &fake, scan + RExC_size, /* Up to end */
6203    &data, -1, NULL, NULL,
6204    SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flag,0);
6205
6206
6207   CHECK_RESTUDY_GOTO_butfirst(LEAVE_with_name("study_chunk"));
6208
6209
6210   if ( RExC_npar == 1 && data.longest == &(data.longest_fixed)
6211    && data.last_start_min == 0 && data.last_end > 0
6212    && !RExC_seen_zerolen
6213    && !(RExC_seen & REG_SEEN_VERBARG)
6214    && (!(RExC_seen & REG_SEEN_GPOS) || (r->extflags & RXf_ANCH_GPOS)))
6215    r->extflags |= RXf_CHECK_ALL;
6216   scan_commit(pRExC_state, &data,&minlen,0);
6217
6218   longest_float_length = CHR_SVLEN(data.longest_float);
6219
6220   if (! ((SvCUR(data.longest_fixed)  /* ok to leave SvCUR */
6221     && data.offset_fixed == data.offset_float_min
6222     && SvCUR(data.longest_fixed) == SvCUR(data.longest_float)))
6223    && S_setup_longest (aTHX_ pRExC_state,
6224          data.longest_float,
6225          &(r->float_utf8),
6226          &(r->float_substr),
6227          &(r->float_end_shift),
6228          data.lookbehind_float,
6229          data.offset_float_min,
6230          data.minlen_float,
6231          longest_float_length,
6232          cBOOL(data.flags & SF_FL_BEFORE_EOL),
6233          cBOOL(data.flags & SF_FL_BEFORE_MEOL)))
6234   {
6235    r->float_min_offset = data.offset_float_min - data.lookbehind_float;
6236    r->float_max_offset = data.offset_float_max;
6237    if (data.offset_float_max < I32_MAX) /* Don't offset infinity */
6238     r->float_max_offset -= data.lookbehind_float;
6239    SvREFCNT_inc_simple_void_NN(data.longest_float);
6240   }
6241   else {
6242    r->float_substr = r->float_utf8 = NULL;
6243    longest_float_length = 0;
6244   }
6245
6246   longest_fixed_length = CHR_SVLEN(data.longest_fixed);
6247
6248   if (S_setup_longest (aTHX_ pRExC_state,
6249         data.longest_fixed,
6250         &(r->anchored_utf8),
6251         &(r->anchored_substr),
6252         &(r->anchored_end_shift),
6253         data.lookbehind_fixed,
6254         data.offset_fixed,
6255         data.minlen_fixed,
6256         longest_fixed_length,
6257         cBOOL(data.flags & SF_FIX_BEFORE_EOL),
6258         cBOOL(data.flags & SF_FIX_BEFORE_MEOL)))
6259   {
6260    r->anchored_offset = data.offset_fixed - data.lookbehind_fixed;
6261    SvREFCNT_inc_simple_void_NN(data.longest_fixed);
6262   }
6263   else {
6264    r->anchored_substr = r->anchored_utf8 = NULL;
6265    longest_fixed_length = 0;
6266   }
6267   LEAVE_with_name("study_chunk");
6268
6269   if (ri->regstclass
6270    && (OP(ri->regstclass) == REG_ANY || OP(ri->regstclass) == SANY))
6271    ri->regstclass = NULL;
6272
6273   if ((!(r->anchored_substr || r->anchored_utf8) || r->anchored_offset)
6274    && stclass_flag
6275    && ! TEST_SSC_EOS(data.start_class)
6276    && !cl_is_anything(data.start_class))
6277   {
6278    const U32 n = add_data(pRExC_state, 1, "f");
6279    OP(data.start_class) = ANYOF_SYNTHETIC;
6280
6281    Newx(RExC_rxi->data->data[n], 1,
6282     struct regnode_charclass_class);
6283    StructCopy(data.start_class,
6284      (struct regnode_charclass_class*)RExC_rxi->data->data[n],
6285      struct regnode_charclass_class);
6286    ri->regstclass = (regnode*)RExC_rxi->data->data[n];
6287    r->intflags &= ~PREGf_SKIP; /* Used in find_byclass(). */
6288    DEBUG_COMPILE_r({ SV *sv = sv_newmortal();
6289      regprop(r, sv, (regnode*)data.start_class);
6290      PerlIO_printf(Perl_debug_log,
6291          "synthetic stclass \"%s\".\n",
6292          SvPVX_const(sv));});
6293   }
6294
6295   /* A temporary algorithm prefers floated substr to fixed one to dig more info. */
6296   if (longest_fixed_length > longest_float_length) {
6297    r->check_end_shift = r->anchored_end_shift;
6298    r->check_substr = r->anchored_substr;
6299    r->check_utf8 = r->anchored_utf8;
6300    r->check_offset_min = r->check_offset_max = r->anchored_offset;
6301    if (r->extflags & RXf_ANCH_SINGLE)
6302     r->extflags |= RXf_NOSCAN;
6303   }
6304   else {
6305    r->check_end_shift = r->float_end_shift;
6306    r->check_substr = r->float_substr;
6307    r->check_utf8 = r->float_utf8;
6308    r->check_offset_min = r->float_min_offset;
6309    r->check_offset_max = r->float_max_offset;
6310   }
6311   /* XXXX Currently intuiting is not compatible with ANCH_GPOS.
6312   This should be changed ASAP!  */
6313   if ((r->check_substr || r->check_utf8) && !(r->extflags & RXf_ANCH_GPOS)) {
6314    r->extflags |= RXf_USE_INTUIT;
6315    if (SvTAIL(r->check_substr ? r->check_substr : r->check_utf8))
6316     r->extflags |= RXf_INTUIT_TAIL;
6317   }
6318   /* XXX Unneeded? dmq (shouldn't as this is handled elsewhere)
6319   if ( (STRLEN)minlen < longest_float_length )
6320    minlen= longest_float_length;
6321   if ( (STRLEN)minlen < longest_fixed_length )
6322    minlen= longest_fixed_length;
6323   */
6324  }
6325  else {
6326   /* Several toplevels. Best we can is to set minlen. */
6327   I32 fake;
6328   struct regnode_charclass_class ch_class;
6329   I32 last_close = 0;
6330
6331   DEBUG_PARSE_r(PerlIO_printf(Perl_debug_log, "\nMulti Top Level\n"));
6332
6333   scan = ri->program + 1;
6334   cl_init(pRExC_state, &ch_class);
6335   data.start_class = &ch_class;
6336   data.last_closep = &last_close;
6337
6338
6339   minlen = study_chunk(pRExC_state, &scan, &minlen, &fake, scan + RExC_size,
6340    &data, -1, NULL, NULL, SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS,0);
6341
6342   CHECK_RESTUDY_GOTO_butfirst(NOOP);
6343
6344   r->check_substr = r->check_utf8 = r->anchored_substr = r->anchored_utf8
6345     = r->float_substr = r->float_utf8 = NULL;
6346
6347   if (! TEST_SSC_EOS(data.start_class)
6348    && !cl_is_anything(data.start_class))
6349   {
6350    const U32 n = add_data(pRExC_state, 1, "f");
6351    OP(data.start_class) = ANYOF_SYNTHETIC;
6352
6353    Newx(RExC_rxi->data->data[n], 1,
6354     struct regnode_charclass_class);
6355    StructCopy(data.start_class,
6356      (struct regnode_charclass_class*)RExC_rxi->data->data[n],
6357      struct regnode_charclass_class);
6358    ri->regstclass = (regnode*)RExC_rxi->data->data[n];
6359    r->intflags &= ~PREGf_SKIP; /* Used in find_byclass(). */
6360    DEBUG_COMPILE_r({ SV* sv = sv_newmortal();
6361      regprop(r, sv, (regnode*)data.start_class);
6362      PerlIO_printf(Perl_debug_log,
6363          "synthetic stclass \"%s\".\n",
6364          SvPVX_const(sv));});
6365   }
6366  }
6367
6368  /* Guard against an embedded (?=) or (?<=) with a longer minlen than
6369  the "real" pattern. */
6370  DEBUG_OPTIMISE_r({
6371   PerlIO_printf(Perl_debug_log,"minlen: %"IVdf" r->minlen:%"IVdf"\n",
6372      (IV)minlen, (IV)r->minlen);
6373  });
6374  r->minlenret = minlen;
6375  if (r->minlen < minlen)
6376   r->minlen = minlen;
6377
6378  if (RExC_seen & REG_SEEN_GPOS)
6379   r->extflags |= RXf_GPOS_SEEN;
6380  if (RExC_seen & REG_SEEN_LOOKBEHIND)
6381   r->extflags |= RXf_NO_INPLACE_SUBST; /* inplace might break the lookbehind */
6382  if (pRExC_state->num_code_blocks)
6383   r->extflags |= RXf_EVAL_SEEN;
6384  if (RExC_seen & REG_SEEN_CANY)
6385   r->extflags |= RXf_CANY_SEEN;
6386  if (RExC_seen & REG_SEEN_VERBARG)
6387  {
6388   r->intflags |= PREGf_VERBARG_SEEN;
6389   r->extflags |= RXf_NO_INPLACE_SUBST; /* don't understand this! Yves */
6390  }
6391  if (RExC_seen & REG_SEEN_CUTGROUP)
6392   r->intflags |= PREGf_CUTGROUP_SEEN;
6393  if (pm_flags & PMf_USE_RE_EVAL)
6394   r->intflags |= PREGf_USE_RE_EVAL;
6395  if (RExC_paren_names)
6396   RXp_PAREN_NAMES(r) = MUTABLE_HV(SvREFCNT_inc(RExC_paren_names));
6397  else
6398   RXp_PAREN_NAMES(r) = NULL;
6399
6400  {
6401   regnode *first = ri->program + 1;
6402   U8 fop = OP(first);
6403   regnode *next = NEXTOPER(first);
6404   U8 nop = OP(next);
6405
6406   if (PL_regkind[fop] == NOTHING && nop == END)
6407    r->extflags |= RXf_NULL;
6408   else if (PL_regkind[fop] == BOL && nop == END)
6409    r->extflags |= RXf_START_ONLY;
6410   else if (fop == PLUS && PL_regkind[nop] == POSIXD && FLAGS(next) == _CC_SPACE && OP(regnext(first)) == END)
6411    r->extflags |= RXf_WHITE;
6412   else if ( r->extflags & RXf_SPLIT && fop == EXACT && STR_LEN(first) == 1 && *(STRING(first)) == ' ' && OP(regnext(first)) == END )
6413    r->extflags |= (RXf_SKIPWHITE|RXf_WHITE);
6414
6415  }
6416 #ifdef DEBUGGING
6417  if (RExC_paren_names) {
6418   ri->name_list_idx = add_data( pRExC_state, 1, "a" );
6419   ri->data->data[ri->name_list_idx] = (void*)SvREFCNT_inc(RExC_paren_name_list);
6420  } else
6421 #endif
6422   ri->name_list_idx = 0;
6423
6424  if (RExC_recurse_count) {
6425   for ( ; RExC_recurse_count ; RExC_recurse_count-- ) {
6426    const regnode *scan = RExC_recurse[RExC_recurse_count-1];
6427    ARG2L_SET( scan, RExC_open_parens[ARG(scan)-1] - scan );
6428   }
6429  }
6430  Newxz(r->offs, RExC_npar, regexp_paren_pair);
6431  /* assume we don't need to swap parens around before we match */
6432
6433  DEBUG_DUMP_r({
6434   PerlIO_printf(Perl_debug_log,"Final program:\n");
6435   regdump(r);
6436  });
6437 #ifdef RE_TRACK_PATTERN_OFFSETS
6438  DEBUG_OFFSETS_r(if (ri->u.offsets) {
6439   const U32 len = ri->u.offsets[0];
6440   U32 i;
6441   GET_RE_DEBUG_FLAGS_DECL;
6442   PerlIO_printf(Perl_debug_log, "Offsets: [%"UVuf"]\n\t", (UV)ri->u.offsets[0]);
6443   for (i = 1; i <= len; i++) {
6444    if (ri->u.offsets[i*2-1] || ri->u.offsets[i*2])
6445     PerlIO_printf(Perl_debug_log, "%"UVuf":%"UVuf"[%"UVuf"] ",
6446     (UV)i, (UV)ri->u.offsets[i*2-1], (UV)ri->u.offsets[i*2]);
6447    }
6448   PerlIO_printf(Perl_debug_log, "\n");
6449  });
6450 #endif
6451
6452 #ifdef USE_ITHREADS
6453  /* under ithreads the ?pat? PMf_USED flag on the pmop is simulated
6454  * by setting the regexp SV to readonly-only instead. If the
6455  * pattern's been recompiled, the USEDness should remain. */
6456  if (old_re && SvREADONLY(old_re))
6457   SvREADONLY_on(rx);
6458 #endif
6459  return rx;
6460 }
6461
6462
6463 SV*
6464 Perl_reg_named_buff(pTHX_ REGEXP * const rx, SV * const key, SV * const value,
6465      const U32 flags)
6466 {
6467  PERL_ARGS_ASSERT_REG_NAMED_BUFF;
6468
6469  PERL_UNUSED_ARG(value);
6470
6471  if (flags & RXapif_FETCH) {
6472   return reg_named_buff_fetch(rx, key, flags);
6473  } else if (flags & (RXapif_STORE | RXapif_DELETE | RXapif_CLEAR)) {
6474   Perl_croak_no_modify();
6475   return NULL;
6476  } else if (flags & RXapif_EXISTS) {
6477   return reg_named_buff_exists(rx, key, flags)
6478    ? &PL_sv_yes
6479    : &PL_sv_no;
6480  } else if (flags & RXapif_REGNAMES) {
6481   return reg_named_buff_all(rx, flags);
6482  } else if (flags & (RXapif_SCALAR | RXapif_REGNAMES_COUNT)) {
6483   return reg_named_buff_scalar(rx, flags);
6484  } else {
6485   Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff", (int)flags);
6486   return NULL;
6487  }
6488 }
6489
6490 SV*
6491 Perl_reg_named_buff_iter(pTHX_ REGEXP * const rx, const SV * const lastkey,
6492       const U32 flags)
6493 {
6494  PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER;
6495  PERL_UNUSED_ARG(lastkey);
6496
6497  if (flags & RXapif_FIRSTKEY)
6498   return reg_named_buff_firstkey(rx, flags);
6499  else if (flags & RXapif_NEXTKEY)
6500   return reg_named_buff_nextkey(rx, flags);
6501  else {
6502   Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_iter", (int)flags);
6503   return NULL;
6504  }
6505 }
6506
6507 SV*
6508 Perl_reg_named_buff_fetch(pTHX_ REGEXP * const r, SV * const namesv,
6509       const U32 flags)
6510 {
6511  AV *retarray = NULL;
6512  SV *ret;
6513  struct regexp *const rx = ReANY(r);
6514
6515  PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH;
6516
6517  if (flags & RXapif_ALL)
6518   retarray=newAV();
6519
6520  if (rx && RXp_PAREN_NAMES(rx)) {
6521   HE *he_str = hv_fetch_ent( RXp_PAREN_NAMES(rx), namesv, 0, 0 );
6522   if (he_str) {
6523    IV i;
6524    SV* sv_dat=HeVAL(he_str);
6525    I32 *nums=(I32*)SvPVX(sv_dat);
6526    for ( i=0; i<SvIVX(sv_dat); i++ ) {
6527     if ((I32)(rx->nparens) >= nums[i]
6528      && rx->offs[nums[i]].start != -1
6529      && rx->offs[nums[i]].end != -1)
6530     {
6531      ret = newSVpvs("");
6532      CALLREG_NUMBUF_FETCH(r,nums[i],ret);
6533      if (!retarray)
6534       return ret;
6535     } else {
6536      if (retarray)
6537       ret = newSVsv(&PL_sv_undef);
6538     }
6539     if (retarray)
6540      av_push(retarray, ret);
6541    }
6542    if (retarray)
6543     return newRV_noinc(MUTABLE_SV(retarray));
6544   }
6545  }
6546  return NULL;
6547 }
6548
6549 bool
6550 Perl_reg_named_buff_exists(pTHX_ REGEXP * const r, SV * const key,
6551       const U32 flags)
6552 {
6553  struct regexp *const rx = ReANY(r);
6554
6555  PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS;
6556
6557  if (rx && RXp_PAREN_NAMES(rx)) {
6558   if (flags & RXapif_ALL) {
6559    return hv_exists_ent(RXp_PAREN_NAMES(rx), key, 0);
6560   } else {
6561    SV *sv = CALLREG_NAMED_BUFF_FETCH(r, key, flags);
6562    if (sv) {
6563     SvREFCNT_dec_NN(sv);
6564     return TRUE;
6565    } else {
6566     return FALSE;
6567    }
6568   }
6569  } else {
6570   return FALSE;
6571  }
6572 }
6573
6574 SV*
6575 Perl_reg_named_buff_firstkey(pTHX_ REGEXP * const r, const U32 flags)
6576 {
6577  struct regexp *const rx = ReANY(r);
6578
6579  PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY;
6580
6581  if ( rx && RXp_PAREN_NAMES(rx) ) {
6582   (void)hv_iterinit(RXp_PAREN_NAMES(rx));
6583
6584   return CALLREG_NAMED_BUFF_NEXTKEY(r, NULL, flags & ~RXapif_FIRSTKEY);
6585  } else {
6586   return FALSE;
6587  }
6588 }
6589
6590 SV*
6591 Perl_reg_named_buff_nextkey(pTHX_ REGEXP * const r, const U32 flags)
6592 {
6593  struct regexp *const rx = ReANY(r);
6594  GET_RE_DEBUG_FLAGS_DECL;
6595
6596  PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY;
6597
6598  if (rx && RXp_PAREN_NAMES(rx)) {
6599   HV *hv = RXp_PAREN_NAMES(rx);
6600   HE *temphe;
6601   while ( (temphe = hv_iternext_flags(hv,0)) ) {
6602    IV i;
6603    IV parno = 0;
6604    SV* sv_dat = HeVAL(temphe);
6605    I32 *nums = (I32*)SvPVX(sv_dat);
6606    for ( i = 0; i < SvIVX(sv_dat); i++ ) {
6607     if ((I32)(rx->lastparen) >= nums[i] &&
6608      rx->offs[nums[i]].start != -1 &&
6609      rx->offs[nums[i]].end != -1)
6610     {
6611      parno = nums[i];
6612      break;
6613     }
6614    }
6615    if (parno || flags & RXapif_ALL) {
6616     return newSVhek(HeKEY_hek(temphe));
6617    }
6618   }
6619  }
6620  return NULL;
6621 }
6622
6623 SV*
6624 Perl_reg_named_buff_scalar(pTHX_ REGEXP * const r, const U32 flags)
6625 {
6626  SV *ret;
6627  AV *av;
6628  I32 length;
6629  struct regexp *const rx = ReANY(r);
6630
6631  PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR;
6632
6633  if (rx && RXp_PAREN_NAMES(rx)) {
6634   if (flags & (RXapif_ALL | RXapif_REGNAMES_COUNT)) {
6635    return newSViv(HvTOTALKEYS(RXp_PAREN_NAMES(rx)));
6636   } else if (flags & RXapif_ONE) {
6637    ret = CALLREG_NAMED_BUFF_ALL(r, (flags | RXapif_REGNAMES));
6638    av = MUTABLE_AV(SvRV(ret));
6639    length = av_len(av);
6640    SvREFCNT_dec_NN(ret);
6641    return newSViv(length + 1);
6642   } else {
6643    Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_scalar", (int)flags);
6644    return NULL;
6645   }
6646  }
6647  return &PL_sv_undef;
6648 }
6649
6650 SV*
6651 Perl_reg_named_buff_all(pTHX_ REGEXP * const r, const U32 flags)
6652 {
6653  struct regexp *const rx = ReANY(r);
6654  AV *av = newAV();
6655
6656  PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL;
6657
6658  if (rx && RXp_PAREN_NAMES(rx)) {
6659   HV *hv= RXp_PAREN_NAMES(rx);
6660   HE *temphe;
6661   (void)hv_iterinit(hv);
6662   while ( (temphe = hv_iternext_flags(hv,0)) ) {
6663    IV i;
6664    IV parno = 0;
6665    SV* sv_dat = HeVAL(temphe);
6666    I32 *nums = (I32*)SvPVX(sv_dat);
6667    for ( i = 0; i < SvIVX(sv_dat); i++ ) {
6668     if ((I32)(rx->lastparen) >= nums[i] &&
6669      rx->offs[nums[i]].start != -1 &&
6670      rx->offs[nums[i]].end != -1)
6671     {
6672      parno = nums[i];
6673      break;
6674     }
6675    }
6676    if (parno || flags & RXapif_ALL) {
6677     av_push(av, newSVhek(HeKEY_hek(temphe)));
6678    }
6679   }
6680  }
6681
6682  return newRV_noinc(MUTABLE_SV(av));
6683 }
6684
6685 void
6686 Perl_reg_numbered_buff_fetch(pTHX_ REGEXP * const r, const I32 paren,
6687        SV * const sv)
6688 {
6689  struct regexp *const rx = ReANY(r);
6690  char *s = NULL;
6691  I32 i = 0;
6692  I32 s1, t1;
6693  I32 n = paren;
6694
6695  PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH;
6696
6697  if ( (    n == RX_BUFF_IDX_CARET_PREMATCH
6698   || n == RX_BUFF_IDX_CARET_FULLMATCH
6699   || n == RX_BUFF_IDX_CARET_POSTMATCH
6700   )
6701   && !(rx->extflags & RXf_PMf_KEEPCOPY)
6702  )
6703   goto ret_undef;
6704
6705  if (!rx->subbeg)
6706   goto ret_undef;
6707
6708  if (n == RX_BUFF_IDX_CARET_FULLMATCH)
6709   /* no need to distinguish between them any more */
6710   n = RX_BUFF_IDX_FULLMATCH;
6711
6712  if ((n == RX_BUFF_IDX_PREMATCH || n == RX_BUFF_IDX_CARET_PREMATCH)
6713   && rx->offs[0].start != -1)
6714  {
6715   /* $`, ${^PREMATCH} */
6716   i = rx->offs[0].start;
6717   s = rx->subbeg;
6718  }
6719  else
6720  if ((n == RX_BUFF_IDX_POSTMATCH || n == RX_BUFF_IDX_CARET_POSTMATCH)
6721   && rx->offs[0].end != -1)
6722  {
6723   /* $', ${^POSTMATCH} */
6724   s = rx->subbeg - rx->suboffset + rx->offs[0].end;
6725   i = rx->sublen + rx->suboffset - rx->offs[0].end;
6726  }
6727  else
6728  if ( 0 <= n && n <= (I32)rx->nparens &&
6729   (s1 = rx->offs[n].start) != -1 &&
6730   (t1 = rx->offs[n].end) != -1)
6731  {
6732   /* $&, ${^MATCH},  $1 ... */
6733   i = t1 - s1;
6734   s = rx->subbeg + s1 - rx->suboffset;
6735  } else {
6736   goto ret_undef;
6737  }
6738
6739  assert(s >= rx->subbeg);
6740  assert(rx->sublen >= (s - rx->subbeg) + i );
6741  if (i >= 0) {
6742 #if NO_TAINT_SUPPORT
6743   sv_setpvn(sv, s, i);
6744 #else
6745   const int oldtainted = TAINT_get;
6746   TAINT_NOT;
6747   sv_setpvn(sv, s, i);
6748   TAINT_set(oldtainted);
6749 #endif
6750   if ( (rx->extflags & RXf_CANY_SEEN)
6751    ? (RXp_MATCH_UTF8(rx)
6752       && (!i || is_utf8_string((U8*)s, i)))
6753    : (RXp_MATCH_UTF8(rx)) )
6754   {
6755    SvUTF8_on(sv);
6756   }
6757   else
6758    SvUTF8_off(sv);
6759   if (TAINTING_get) {
6760    if (RXp_MATCH_TAINTED(rx)) {
6761     if (SvTYPE(sv) >= SVt_PVMG) {
6762      MAGIC* const mg = SvMAGIC(sv);
6763      MAGIC* mgt;
6764      TAINT;
6765      SvMAGIC_set(sv, mg->mg_moremagic);
6766      SvTAINT(sv);
6767      if ((mgt = SvMAGIC(sv))) {
6768       mg->mg_moremagic = mgt;
6769       SvMAGIC_set(sv, mg);
6770      }
6771     } else {
6772      TAINT;
6773      SvTAINT(sv);
6774     }
6775    } else
6776     SvTAINTED_off(sv);
6777   }
6778  } else {
6779  ret_undef:
6780   sv_setsv(sv,&PL_sv_undef);
6781   return;
6782  }
6783 }
6784
6785 void
6786 Perl_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren,
6787               SV const * const value)
6788 {
6789  PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE;
6790
6791  PERL_UNUSED_ARG(rx);
6792  PERL_UNUSED_ARG(paren);
6793  PERL_UNUSED_ARG(value);
6794
6795  if (!PL_localizing)
6796   Perl_croak_no_modify();
6797 }
6798
6799 I32
6800 Perl_reg_numbered_buff_length(pTHX_ REGEXP * const r, const SV * const sv,
6801        const I32 paren)
6802 {
6803  struct regexp *const rx = ReANY(r);
6804  I32 i;
6805  I32 s1, t1;
6806
6807  PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH;
6808
6809  /* Some of this code was originally in C<Perl_magic_len> in F<mg.c> */
6810  switch (paren) {
6811  case RX_BUFF_IDX_CARET_PREMATCH: /* ${^PREMATCH} */
6812   if (!(rx->extflags & RXf_PMf_KEEPCOPY))
6813    goto warn_undef;
6814   /*FALLTHROUGH*/
6815
6816  case RX_BUFF_IDX_PREMATCH:       /* $` */
6817   if (rx->offs[0].start != -1) {
6818       i = rx->offs[0].start;
6819       if (i > 0) {
6820         s1 = 0;
6821         t1 = i;
6822         goto getlen;
6823       }
6824    }
6825   return 0;
6826
6827  case RX_BUFF_IDX_CARET_POSTMATCH: /* ${^POSTMATCH} */
6828   if (!(rx->extflags & RXf_PMf_KEEPCOPY))
6829    goto warn_undef;
6830  case RX_BUFF_IDX_POSTMATCH:       /* $' */
6831    if (rx->offs[0].end != -1) {
6832       i = rx->sublen - rx->offs[0].end;
6833       if (i > 0) {
6834         s1 = rx->offs[0].end;
6835         t1 = rx->sublen;
6836         goto getlen;
6837       }
6838    }
6839   return 0;
6840
6841  case RX_BUFF_IDX_CARET_FULLMATCH: /* ${^MATCH} */
6842   if (!(rx->extflags & RXf_PMf_KEEPCOPY))
6843    goto warn_undef;
6844   /*FALLTHROUGH*/
6845
6846  /* $& / ${^MATCH}, $1, $2, ... */
6847  default:
6848    if (paren <= (I32)rx->nparens &&
6849    (s1 = rx->offs[paren].start) != -1 &&
6850    (t1 = rx->offs[paren].end) != -1)
6851    {
6852    i = t1 - s1;
6853    goto getlen;
6854   } else {
6855   warn_undef:
6856    if (ckWARN(WARN_UNINITIALIZED))
6857     report_uninit((const SV *)sv);
6858    return 0;
6859   }
6860  }
6861   getlen:
6862  if (i > 0 && RXp_MATCH_UTF8(rx)) {
6863   const char * const s = rx->subbeg - rx->suboffset + s1;
6864   const U8 *ep;
6865   STRLEN el;
6866
6867   i = t1 - s1;
6868   if (is_utf8_string_loclen((U8*)s, i, &ep, &el))
6869       i = el;
6870  }
6871  return i;
6872 }
6873
6874 SV*
6875 Perl_reg_qr_package(pTHX_ REGEXP * const rx)
6876 {
6877  PERL_ARGS_ASSERT_REG_QR_PACKAGE;
6878   PERL_UNUSED_ARG(rx);
6879   if (0)
6880    return NULL;
6881   else
6882    return newSVpvs("Regexp");
6883 }
6884
6885 /* Scans the name of a named buffer from the pattern.
6886  * If flags is REG_RSN_RETURN_NULL returns null.
6887  * If flags is REG_RSN_RETURN_NAME returns an SV* containing the name
6888  * If flags is REG_RSN_RETURN_DATA returns the data SV* corresponding
6889  * to the parsed name as looked up in the RExC_paren_names hash.
6890  * If there is an error throws a vFAIL().. type exception.
6891  */
6892
6893 #define REG_RSN_RETURN_NULL    0
6894 #define REG_RSN_RETURN_NAME    1
6895 #define REG_RSN_RETURN_DATA    2
6896
6897 STATIC SV*
6898 S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags)
6899 {
6900  char *name_start = RExC_parse;
6901
6902  PERL_ARGS_ASSERT_REG_SCAN_NAME;
6903
6904  if (isIDFIRST_lazy_if(RExC_parse, UTF)) {
6905   /* skip IDFIRST by using do...while */
6906   if (UTF)
6907    do {
6908     RExC_parse += UTF8SKIP(RExC_parse);
6909    } while (isWORDCHAR_utf8((U8*)RExC_parse));
6910   else
6911    do {
6912     RExC_parse++;
6913    } while (isWORDCHAR(*RExC_parse));
6914  } else {
6915   RExC_parse++; /* so the <- from the vFAIL is after the offending character */
6916   vFAIL("Group name must start with a non-digit word character");
6917  }
6918  if ( flags ) {
6919   SV* sv_name
6920    = newSVpvn_flags(name_start, (int)(RExC_parse - name_start),
6921        SVs_TEMP | (UTF ? SVf_UTF8 : 0));
6922   if ( flags == REG_RSN_RETURN_NAME)
6923    return sv_name;
6924   else if (flags==REG_RSN_RETURN_DATA) {
6925    HE *he_str = NULL;
6926    SV *sv_dat = NULL;
6927    if ( ! sv_name )      /* should not happen*/
6928     Perl_croak(aTHX_ "panic: no svname in reg_scan_name");
6929    if (RExC_paren_names)
6930     he_str = hv_fetch_ent( RExC_paren_names, sv_name, 0, 0 );
6931    if ( he_str )
6932     sv_dat = HeVAL(he_str);
6933    if ( ! sv_dat )
6934     vFAIL("Reference to nonexistent named group");
6935    return sv_dat;
6936   }
6937   else {
6938    Perl_croak(aTHX_ "panic: bad flag %lx in reg_scan_name",
6939      (unsigned long) flags);
6940   }
6941   assert(0); /* NOT REACHED */
6942  }
6943  return NULL;
6944 }
6945
6946 #define DEBUG_PARSE_MSG(funcname)     DEBUG_PARSE_r({           \
6947  int rem=(int)(RExC_end - RExC_parse);                       \
6948  int cut;                                                    \
6949  int num;                                                    \
6950  int iscut=0;                                                \
6951  if (rem>10) {                                               \
6952   rem=10;                                                 \
6953   iscut=1;                                                \
6954  }                                                           \
6955  cut=10-rem;                                                 \
6956  if (RExC_lastparse!=RExC_parse)                             \
6957   PerlIO_printf(Perl_debug_log," >%.*s%-*s",              \
6958    rem, RExC_parse,                                    \
6959    cut + 4,                                            \
6960    iscut ? "..." : "<"                                 \
6961   );                                                      \
6962  else                                                        \
6963   PerlIO_printf(Perl_debug_log,"%16s","");                \
6964                 \
6965  if (SIZE_ONLY)                                              \
6966  num = RExC_size + 1;                                     \
6967  else                                                        \
6968  num=REG_NODE_NUM(RExC_emit);                             \
6969  if (RExC_lastnum!=num)                                      \
6970  PerlIO_printf(Perl_debug_log,"|%4d",num);                \
6971  else                                                        \
6972  PerlIO_printf(Perl_debug_log,"|%4s","");                 \
6973  PerlIO_printf(Perl_debug_log,"|%*s%-4s",                    \
6974   (int)((depth*2)), "",                                   \
6975   (funcname)                                              \
6976  );                                                          \
6977  RExC_lastnum=num;                                           \
6978  RExC_lastparse=RExC_parse;                                  \
6979 })
6980
6981
6982
6983 #define DEBUG_PARSE(funcname)     DEBUG_PARSE_r({           \
6984  DEBUG_PARSE_MSG((funcname));                            \
6985  PerlIO_printf(Perl_debug_log,"%4s","\n");               \
6986 })
6987 #define DEBUG_PARSE_FMT(funcname,fmt,args)     DEBUG_PARSE_r({           \
6988  DEBUG_PARSE_MSG((funcname));                            \
6989  PerlIO_printf(Perl_debug_log,fmt "\n",args);               \
6990 })
6991
6992 /* This section of code defines the inversion list object and its methods.  The
6993  * interfaces are highly subject to change, so as much as possible is static to
6994  * this file.  An inversion list is here implemented as a malloc'd C UV array
6995  * with some added info that is placed as UVs at the beginning in a header
6996  * portion.  An inversion list for Unicode is an array of code points, sorted
6997  * by ordinal number.  The zeroth element is the first code point in the list.
6998  * The 1th element is the first element beyond that not in the list.  In other
6999  * words, the first range is
7000  *  invlist[0]..(invlist[1]-1)
7001  * The other ranges follow.  Thus every element whose index is divisible by two
7002  * marks the beginning of a range that is in the list, and every element not
7003  * divisible by two marks the beginning of a range not in the list.  A single
7004  * element inversion list that contains the single code point N generally
7005  * consists of two elements
7006  *  invlist[0] == N
7007  *  invlist[1] == N+1
7008  * (The exception is when N is the highest representable value on the
7009  * machine, in which case the list containing just it would be a single
7010  * element, itself.  By extension, if the last range in the list extends to
7011  * infinity, then the first element of that range will be in the inversion list
7012  * at a position that is divisible by two, and is the final element in the
7013  * list.)
7014  * Taking the complement (inverting) an inversion list is quite simple, if the
7015  * first element is 0, remove it; otherwise add a 0 element at the beginning.
7016  * This implementation reserves an element at the beginning of each inversion
7017  * list to contain 0 when the list contains 0, and contains 1 otherwise.  The
7018  * actual beginning of the list is either that element if 0, or the next one if
7019  * 1.
7020  *
7021  * More about inversion lists can be found in "Unicode Demystified"
7022  * Chapter 13 by Richard Gillam, published by Addison-Wesley.
7023  * More will be coming when functionality is added later.
7024  *
7025  * The inversion list data structure is currently implemented as an SV pointing
7026  * to an array of UVs that the SV thinks are bytes.  This allows us to have an
7027  * array of UV whose memory management is automatically handled by the existing
7028  * facilities for SV's.
7029  *
7030  * Some of the methods should always be private to the implementation, and some
7031  * should eventually be made public */
7032
7033 /* The header definitions are in F<inline_invlist.c> */
7034 #define TO_INTERNAL_SIZE(x) (((x) + HEADER_LENGTH) * sizeof(UV))
7035 #define FROM_INTERNAL_SIZE(x) (((x)/ sizeof(UV)) - HEADER_LENGTH)
7036
7037 #define INVLIST_INITIAL_LEN 10
7038
7039 PERL_STATIC_INLINE UV*
7040 S__invlist_array_init(pTHX_ SV* const invlist, const bool will_have_0)
7041 {
7042  /* Returns a pointer to the first element in the inversion list's array.
7043  * This is called upon initialization of an inversion list.  Where the
7044  * array begins depends on whether the list has the code point U+0000
7045  * in it or not.  The other parameter tells it whether the code that
7046  * follows this call is about to put a 0 in the inversion list or not.
7047  * The first element is either the element with 0, if 0, or the next one,
7048  * if 1 */
7049
7050  UV* zero = get_invlist_zero_addr(invlist);
7051
7052  PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT;
7053
7054  /* Must be empty */
7055  assert(! *_get_invlist_len_addr(invlist));
7056
7057  /* 1^1 = 0; 1^0 = 1 */
7058  *zero = 1 ^ will_have_0;
7059  return zero + *zero;
7060 }
7061
7062 PERL_STATIC_INLINE UV*
7063 S_invlist_array(pTHX_ SV* const invlist)
7064 {
7065  /* Returns the pointer to the inversion list's array.  Every time the
7066  * length changes, this needs to be called in case malloc or realloc moved
7067  * it */
7068
7069  PERL_ARGS_ASSERT_INVLIST_ARRAY;
7070
7071  /* Must not be empty.  If these fail, you probably didn't check for <len>
7072  * being non-zero before trying to get the array */
7073  assert(*_get_invlist_len_addr(invlist));
7074  assert(*get_invlist_zero_addr(invlist) == 0
7075   || *get_invlist_zero_addr(invlist) == 1);
7076
7077  /* The array begins either at the element reserved for zero if the
7078  * list contains 0 (that element will be set to 0), or otherwise the next
7079  * element (in which case the reserved element will be set to 1). */
7080  return (UV *) (get_invlist_zero_addr(invlist)
7081     + *get_invlist_zero_addr(invlist));
7082 }
7083
7084 PERL_STATIC_INLINE void
7085 S_invlist_set_len(pTHX_ SV* const invlist, const UV len)
7086 {
7087  /* Sets the current number of elements stored in the inversion list */
7088
7089  PERL_ARGS_ASSERT_INVLIST_SET_LEN;
7090
7091  *_get_invlist_len_addr(invlist) = len;
7092
7093  assert(len <= SvLEN(invlist));
7094
7095  SvCUR_set(invlist, TO_INTERNAL_SIZE(len));
7096  /* If the list contains U+0000, that element is part of the header,
7097  * and should not be counted as part of the array.  It will contain
7098  * 0 in that case, and 1 otherwise.  So we could flop 0=>1, 1=>0 and
7099  * subtract:
7100  * SvCUR_set(invlist,
7101  *    TO_INTERNAL_SIZE(len
7102  *       - (*get_invlist_zero_addr(inv_list) ^ 1)));
7103  * But, this is only valid if len is not 0.  The consequences of not doing
7104  * this is that the memory allocation code may think that 1 more UV is
7105  * being used than actually is, and so might do an unnecessary grow.  That
7106  * seems worth not bothering to make this the precise amount.
7107  *
7108  * Note that when inverting, SvCUR shouldn't change */
7109 }
7110
7111 PERL_STATIC_INLINE IV*
7112 S_get_invlist_previous_index_addr(pTHX_ SV* invlist)
7113 {
7114  /* Return the address of the UV that is reserved to hold the cached index
7115  * */
7116
7117  PERL_ARGS_ASSERT_GET_INVLIST_PREVIOUS_INDEX_ADDR;
7118
7119  return (IV *) (SvPVX(invlist) + (INVLIST_PREVIOUS_INDEX_OFFSET * sizeof (UV)));
7120 }
7121
7122 PERL_STATIC_INLINE IV
7123 S_invlist_previous_index(pTHX_ SV* const invlist)
7124 {
7125  /* Returns cached index of previous search */
7126
7127  PERL_ARGS_ASSERT_INVLIST_PREVIOUS_INDEX;
7128
7129  return *get_invlist_previous_index_addr(invlist);
7130 }
7131
7132 PERL_STATIC_INLINE void
7133 S_invlist_set_previous_index(pTHX_ SV* const invlist, const IV index)
7134 {
7135  /* Caches <index> for later retrieval */
7136
7137  PERL_ARGS_ASSERT_INVLIST_SET_PREVIOUS_INDEX;
7138
7139  assert(index == 0 || index < (int) _invlist_len(invlist));
7140
7141  *get_invlist_previous_index_addr(invlist) = index;
7142 }
7143
7144 PERL_STATIC_INLINE UV
7145 S_invlist_max(pTHX_ SV* const invlist)
7146 {
7147  /* Returns the maximum number of elements storable in the inversion list's
7148  * array, without having to realloc() */
7149
7150  PERL_ARGS_ASSERT_INVLIST_MAX;
7151
7152  return SvLEN(invlist) == 0  /* This happens under _new_invlist_C_array */
7153   ? _invlist_len(invlist)
7154   : FROM_INTERNAL_SIZE(SvLEN(invlist));
7155 }
7156
7157 PERL_STATIC_INLINE UV*
7158 S_get_invlist_zero_addr(pTHX_ SV* invlist)
7159 {
7160  /* Return the address of the UV that is reserved to hold 0 if the inversion
7161  * list contains 0.  This has to be the last element of the heading, as the
7162  * list proper starts with either it if 0, or the next element if not.
7163  * (But we force it to contain either 0 or 1) */
7164
7165  PERL_ARGS_ASSERT_GET_INVLIST_ZERO_ADDR;
7166
7167  return (UV *) (SvPVX(invlist) + (INVLIST_ZERO_OFFSET * sizeof (UV)));
7168 }
7169
7170 #ifndef PERL_IN_XSUB_RE
7171 SV*
7172 Perl__new_invlist(pTHX_ IV initial_size)
7173 {
7174
7175  /* Return a pointer to a newly constructed inversion list, with enough
7176  * space to store 'initial_size' elements.  If that number is negative, a
7177  * system default is used instead */
7178
7179  SV* new_list;
7180
7181  if (initial_size < 0) {
7182   initial_size = INVLIST_INITIAL_LEN;
7183  }
7184
7185  /* Allocate the initial space */
7186  new_list = newSV(TO_INTERNAL_SIZE(initial_size));
7187  invlist_set_len(new_list, 0);
7188
7189  /* Force iterinit() to be used to get iteration to work */
7190  *get_invlist_iter_addr(new_list) = UV_MAX;
7191
7192  /* This should force a segfault if a method doesn't initialize this
7193  * properly */
7194  *get_invlist_zero_addr(new_list) = UV_MAX;
7195
7196  *get_invlist_previous_index_addr(new_list) = 0;
7197  *get_invlist_version_id_addr(new_list) = INVLIST_VERSION_ID;
7198 #if HEADER_LENGTH != 5
7199 #   error Need to regenerate INVLIST_VERSION_ID by running perl -E 'say int(rand 2**31-1)', and then changing the #if to the new length
7200 #endif
7201
7202  return new_list;
7203 }
7204 #endif
7205
7206 STATIC SV*
7207 S__new_invlist_C_array(pTHX_ UV* list)
7208 {
7209  /* Return a pointer to a newly constructed inversion list, initialized to
7210  * point to <list>, which has to be in the exact correct inversion list
7211  * form, including internal fields.  Thus this is a dangerous routine that
7212  * should not be used in the wrong hands */
7213
7214  SV* invlist = newSV_type(SVt_PV);
7215
7216  PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY;
7217
7218  SvPV_set(invlist, (char *) list);
7219  SvLEN_set(invlist, 0);  /* Means we own the contents, and the system
7220        shouldn't touch it */
7221  SvCUR_set(invlist, TO_INTERNAL_SIZE(_invlist_len(invlist)));
7222
7223  if (*get_invlist_version_id_addr(invlist) != INVLIST_VERSION_ID) {
7224   Perl_croak(aTHX_ "panic: Incorrect version for previously generated inversion list");
7225  }
7226
7227  /* Initialize the iteration pointer.
7228  * XXX This could be done at compile time in charclass_invlists.h, but I
7229  * (khw) am not confident that the suffixes for specifying the C constant
7230  * UV_MAX are portable, e.g.  'ull' on a 32 bit machine that is configured
7231  * to use 64 bits; might need a Configure probe */
7232  invlist_iterfinish(invlist);
7233
7234  return invlist;
7235 }
7236
7237 STATIC void
7238 S_invlist_extend(pTHX_ SV* const invlist, const UV new_max)
7239 {
7240  /* Grow the maximum size of an inversion list */
7241
7242  PERL_ARGS_ASSERT_INVLIST_EXTEND;
7243
7244  SvGROW((SV *)invlist, TO_INTERNAL_SIZE(new_max));
7245 }
7246
7247 PERL_STATIC_INLINE void
7248 S_invlist_trim(pTHX_ SV* const invlist)
7249 {
7250  PERL_ARGS_ASSERT_INVLIST_TRIM;
7251
7252  /* Change the length of the inversion list to how many entries it currently
7253  * has */
7254
7255  SvPV_shrink_to_cur((SV *) invlist);
7256 }
7257
7258 #define _invlist_union_complement_2nd(a, b, output) _invlist_union_maybe_complement_2nd(a, b, TRUE, output)
7259
7260 STATIC void
7261 S__append_range_to_invlist(pTHX_ SV* const invlist, const UV start, const UV end)
7262 {
7263    /* Subject to change or removal.  Append the range from 'start' to 'end' at
7264  * the end of the inversion list.  The range must be above any existing
7265  * ones. */
7266
7267  UV* array;
7268  UV max = invlist_max(invlist);
7269  UV len = _invlist_len(invlist);
7270
7271  PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST;
7272
7273  if (len == 0) { /* Empty lists must be initialized */
7274   array = _invlist_array_init(invlist, start == 0);
7275  }
7276  else {
7277   /* Here, the existing list is non-empty. The current max entry in the
7278   * list is generally the first value not in the set, except when the
7279   * set extends to the end of permissible values, in which case it is
7280   * the first entry in that final set, and so this call is an attempt to
7281   * append out-of-order */
7282
7283   UV final_element = len - 1;
7284   array = invlist_array(invlist);
7285   if (array[final_element] > start
7286    || ELEMENT_RANGE_MATCHES_INVLIST(final_element))
7287   {
7288    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",
7289      array[final_element], start,
7290      ELEMENT_RANGE_MATCHES_INVLIST(final_element) ? 't' : 'f');
7291   }
7292
7293   /* Here, it is a legal append.  If the new range begins with the first
7294   * value not in the set, it is extending the set, so the new first
7295   * value not in the set is one greater than the newly extended range.
7296   * */
7297   if (array[final_element] == start) {
7298    if (end != UV_MAX) {
7299     array[final_element] = end + 1;
7300    }
7301    else {
7302     /* But if the end is the maximum representable on the machine,
7303     * just let the range that this would extend to have no end */
7304     invlist_set_len(invlist, len - 1);
7305    }
7306    return;
7307   }
7308  }
7309
7310  /* Here the new range doesn't extend any existing set.  Add it */
7311
7312  len += 2; /* Includes an element each for the start and end of range */
7313
7314  /* If overflows the existing space, extend, which may cause the array to be
7315  * moved */
7316  if (max < len) {
7317   invlist_extend(invlist, len);
7318   invlist_set_len(invlist, len); /* Have to set len here to avoid assert
7319           failure in invlist_array() */
7320   array = invlist_array(invlist);
7321  }
7322  else {
7323   invlist_set_len(invlist, len);
7324  }
7325
7326  /* The next item on the list starts the range, the one after that is
7327  * one past the new range.  */
7328  array[len - 2] = start;
7329  if (end != UV_MAX) {
7330   array[len - 1] = end + 1;
7331  }
7332  else {
7333   /* But if the end is the maximum representable on the machine, just let
7334   * the range have no end */
7335   invlist_set_len(invlist, len - 1);
7336  }
7337 }
7338
7339 #ifndef PERL_IN_XSUB_RE
7340
7341 IV
7342 Perl__invlist_search(pTHX_ SV* const invlist, const UV cp)
7343 {
7344  /* Searches the inversion list for the entry that contains the input code
7345  * point <cp>.  If <cp> is not in the list, -1 is returned.  Otherwise, the
7346  * return value is the index into the list's array of the range that
7347  * contains <cp> */
7348
7349  IV low = 0;
7350  IV mid;
7351  IV high = _invlist_len(invlist);
7352  const IV highest_element = high - 1;
7353  const UV* array;
7354
7355  PERL_ARGS_ASSERT__INVLIST_SEARCH;
7356
7357  /* If list is empty, return failure. */
7358  if (high == 0) {
7359   return -1;
7360  }
7361
7362  /* (We can't get the array unless we know the list is non-empty) */
7363  array = invlist_array(invlist);
7364
7365  mid = invlist_previous_index(invlist);
7366  assert(mid >=0 && mid <= highest_element);
7367
7368  /* <mid> contains the cache of the result of the previous call to this
7369  * function (0 the first time).  See if this call is for the same result,
7370  * or if it is for mid-1.  This is under the theory that calls to this
7371  * function will often be for related code points that are near each other.
7372  * And benchmarks show that caching gives better results.  We also test
7373  * here if the code point is within the bounds of the list.  These tests
7374  * replace others that would have had to be made anyway to make sure that
7375  * the array bounds were not exceeded, and these give us extra information
7376  * at the same time */
7377  if (cp >= array[mid]) {
7378   if (cp >= array[highest_element]) {
7379    return highest_element;
7380   }
7381
7382   /* Here, array[mid] <= cp < array[highest_element].  This means that
7383   * the final element is not the answer, so can exclude it; it also
7384   * means that <mid> is not the final element, so can refer to 'mid + 1'
7385   * safely */
7386   if (cp < array[mid + 1]) {
7387    return mid;
7388   }
7389   high--;
7390   low = mid + 1;
7391  }
7392  else { /* cp < aray[mid] */
7393   if (cp < array[0]) { /* Fail if outside the array */
7394    return -1;
7395   }
7396   high = mid;
7397   if (cp >= array[mid - 1]) {
7398    goto found_entry;
7399   }
7400  }
7401
7402  /* Binary search.  What we are looking for is <i> such that
7403  * array[i] <= cp < array[i+1]
7404  * The loop below converges on the i+1.  Note that there may not be an
7405  * (i+1)th element in the array, and things work nonetheless */
7406  while (low < high) {
7407   mid = (low + high) / 2;
7408   assert(mid <= highest_element);
7409   if (array[mid] <= cp) { /* cp >= array[mid] */
7410    low = mid + 1;
7411
7412    /* We could do this extra test to exit the loop early.
7413    if (cp < array[low]) {
7414     return mid;
7415    }
7416    */
7417   }
7418   else { /* cp < array[mid] */
7419    high = mid;
7420   }
7421  }
7422
7423   found_entry:
7424  high--;
7425  invlist_set_previous_index(invlist, high);
7426  return high;
7427 }
7428
7429 void
7430 Perl__invlist_populate_swatch(pTHX_ SV* const invlist, const UV start, const UV end, U8* swatch)
7431 {
7432  /* populates a swatch of a swash the same way swatch_get() does in utf8.c,
7433  * but is used when the swash has an inversion list.  This makes this much
7434  * faster, as it uses a binary search instead of a linear one.  This is
7435  * intimately tied to that function, and perhaps should be in utf8.c,
7436  * except it is intimately tied to inversion lists as well.  It assumes
7437  * that <swatch> is all 0's on input */
7438
7439  UV current = start;
7440  const IV len = _invlist_len(invlist);
7441  IV i;
7442  const UV * array;
7443
7444  PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH;
7445
7446  if (len == 0) { /* Empty inversion list */
7447   return;
7448  }
7449
7450  array = invlist_array(invlist);
7451
7452  /* Find which element it is */
7453  i = _invlist_search(invlist, start);
7454
7455  /* We populate from <start> to <end> */
7456  while (current < end) {
7457   UV upper;
7458
7459   /* The inversion list gives the results for every possible code point
7460   * after the first one in the list.  Only those ranges whose index is
7461   * even are ones that the inversion list matches.  For the odd ones,
7462   * and if the initial code point is not in the list, we have to skip
7463   * forward to the next element */
7464   if (i == -1 || ! ELEMENT_RANGE_MATCHES_INVLIST(i)) {
7465    i++;
7466    if (i >= len) { /* Finished if beyond the end of the array */
7467     return;
7468    }
7469    current = array[i];
7470    if (current >= end) {   /* Finished if beyond the end of what we
7471          are populating */
7472     if (LIKELY(end < UV_MAX)) {
7473      return;
7474     }
7475
7476     /* We get here when the upper bound is the maximum
7477     * representable on the machine, and we are looking for just
7478     * that code point.  Have to special case it */
7479     i = len;
7480     goto join_end_of_list;
7481    }
7482   }
7483   assert(current >= start);
7484
7485   /* The current range ends one below the next one, except don't go past
7486   * <end> */
7487   i++;
7488   upper = (i < len && array[i] < end) ? array[i] : end;
7489
7490   /* Here we are in a range that matches.  Populate a bit in the 3-bit U8
7491   * for each code point in it */
7492   for (; current < upper; current++) {
7493    const STRLEN offset = (STRLEN)(current - start);
7494    swatch[offset >> 3] |= 1 << (offset & 7);
7495   }
7496
7497  join_end_of_list:
7498
7499   /* Quit if at the end of the list */
7500   if (i >= len) {
7501
7502    /* But first, have to deal with the highest possible code point on
7503    * the platform.  The previous code assumes that <end> is one
7504    * beyond where we want to populate, but that is impossible at the
7505    * platform's infinity, so have to handle it specially */
7506    if (UNLIKELY(end == UV_MAX && ELEMENT_RANGE_MATCHES_INVLIST(len-1)))
7507    {
7508     const STRLEN offset = (STRLEN)(end - start);
7509     swatch[offset >> 3] |= 1 << (offset & 7);
7510    }
7511    return;
7512   }
7513
7514   /* Advance to the next range, which will be for code points not in the
7515   * inversion list */
7516   current = array[i];
7517  }
7518
7519  return;
7520 }
7521
7522 void
7523 Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, bool complement_b, SV** output)
7524 {
7525  /* Take the union of two inversion lists and point <output> to it.  *output
7526  * SHOULD BE DEFINED upon input, and if it points to one of the two lists,
7527  * the reference count to that list will be decremented.  The first list,
7528  * <a>, may be NULL, in which case a copy of the second list is returned.
7529  * If <complement_b> is TRUE, the union is taken of the complement
7530  * (inversion) of <b> instead of b itself.
7531  *
7532  * The basis for this comes from "Unicode Demystified" Chapter 13 by
7533  * Richard Gillam, published by Addison-Wesley, and explained at some
7534  * length there.  The preface says to incorporate its examples into your
7535  * code at your own risk.
7536  *
7537  * The algorithm is like a merge sort.
7538  *
7539  * XXX A potential performance improvement is to keep track as we go along
7540  * if only one of the inputs contributes to the result, meaning the other
7541  * is a subset of that one.  In that case, we can skip the final copy and
7542  * return the larger of the input lists, but then outside code might need
7543  * to keep track of whether to free the input list or not */
7544
7545  UV* array_a;    /* a's array */
7546  UV* array_b;
7547  UV len_a;     /* length of a's array */
7548  UV len_b;
7549
7550  SV* u;   /* the resulting union */
7551  UV* array_u;
7552  UV len_u;
7553
7554  UV i_a = 0;      /* current index into a's array */
7555  UV i_b = 0;
7556  UV i_u = 0;
7557
7558  /* running count, as explained in the algorithm source book; items are
7559  * stopped accumulating and are output when the count changes to/from 0.
7560  * The count is incremented when we start a range that's in the set, and
7561  * decremented when we start a range that's not in the set.  So its range
7562  * is 0 to 2.  Only when the count is zero is something not in the set.
7563  */
7564  UV count = 0;
7565
7566  PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND;
7567  assert(a != b);
7568
7569  /* If either one is empty, the union is the other one */
7570  if (a == NULL || ((len_a = _invlist_len(a)) == 0)) {
7571   if (*output == a) {
7572    if (a != NULL) {
7573     SvREFCNT_dec_NN(a);
7574    }
7575   }
7576   if (*output != b) {
7577    *output = invlist_clone(b);
7578    if (complement_b) {
7579     _invlist_invert(*output);
7580    }
7581   } /* else *output already = b; */
7582   return;
7583  }
7584  else if ((len_b = _invlist_len(b)) == 0) {
7585   if (*output == b) {
7586    SvREFCNT_dec_NN(b);
7587   }
7588
7589   /* The complement of an empty list is a list that has everything in it,
7590   * so the union with <a> includes everything too */
7591   if (complement_b) {
7592    if (a == *output) {
7593     SvREFCNT_dec_NN(a);
7594    }
7595    *output = _new_invlist(1);
7596    _append_range_to_invlist(*output, 0, UV_MAX);
7597   }
7598   else if (*output != a) {
7599    *output = invlist_clone(a);
7600   }
7601   /* else *output already = a; */
7602   return;
7603  }
7604
7605  /* Here both lists exist and are non-empty */
7606  array_a = invlist_array(a);
7607  array_b = invlist_array(b);
7608
7609  /* If are to take the union of 'a' with the complement of b, set it
7610  * up so are looking at b's complement. */
7611  if (complement_b) {
7612
7613   /* To complement, we invert: if the first element is 0, remove it.  To
7614   * do this, we just pretend the array starts one later, and clear the
7615   * flag as we don't have to do anything else later */
7616   if (array_b[0] == 0) {
7617    array_b++;
7618    len_b--;
7619    complement_b = FALSE;
7620   }
7621   else {
7622
7623    /* But if the first element is not zero, we unshift a 0 before the
7624    * array.  The data structure reserves a space for that 0 (which
7625    * should be a '1' right now), so physical shifting is unneeded,
7626    * but temporarily change that element to 0.  Before exiting the
7627    * routine, we must restore the element to '1' */
7628    array_b--;
7629    len_b++;
7630    array_b[0] = 0;
7631   }
7632  }
7633
7634  /* Size the union for the worst case: that the sets are completely
7635  * disjoint */
7636  u = _new_invlist(len_a + len_b);
7637
7638  /* Will contain U+0000 if either component does */
7639  array_u = _invlist_array_init(u, (len_a > 0 && array_a[0] == 0)
7640          || (len_b > 0 && array_b[0] == 0));
7641
7642  /* Go through each list item by item, stopping when exhausted one of
7643  * them */
7644  while (i_a < len_a && i_b < len_b) {
7645   UV cp;     /* The element to potentially add to the union's array */
7646   bool cp_in_set;   /* is it in the the input list's set or not */
7647
7648   /* We need to take one or the other of the two inputs for the union.
7649   * Since we are merging two sorted lists, we take the smaller of the
7650   * next items.  In case of a tie, we take the one that is in its set
7651   * first.  If we took one not in the set first, it would decrement the
7652   * count, possibly to 0 which would cause it to be output as ending the
7653   * range, and the next time through we would take the same number, and
7654   * output it again as beginning the next range.  By doing it the
7655   * opposite way, there is no possibility that the count will be
7656   * momentarily decremented to 0, and thus the two adjoining ranges will
7657   * be seamlessly merged.  (In a tie and both are in the set or both not
7658   * in the set, it doesn't matter which we take first.) */
7659   if (array_a[i_a] < array_b[i_b]
7660    || (array_a[i_a] == array_b[i_b]
7661     && ELEMENT_RANGE_MATCHES_INVLIST(i_a)))
7662   {
7663    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_a);
7664    cp= array_a[i_a++];
7665   }
7666   else {
7667    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_b);
7668    cp = array_b[i_b++];
7669   }
7670
7671   /* Here, have chosen which of the two inputs to look at.  Only output
7672   * if the running count changes to/from 0, which marks the
7673   * beginning/end of a range in that's in the set */
7674   if (cp_in_set) {
7675    if (count == 0) {
7676     array_u[i_u++] = cp;
7677    }
7678    count++;
7679   }
7680   else {
7681    count--;
7682    if (count == 0) {
7683     array_u[i_u++] = cp;
7684    }
7685   }
7686  }
7687
7688  /* Here, we are finished going through at least one of the lists, which
7689  * means there is something remaining in at most one.  We check if the list
7690  * that hasn't been exhausted is positioned such that we are in the middle
7691  * of a range in its set or not.  (i_a and i_b point to the element beyond
7692  * the one we care about.) If in the set, we decrement 'count'; if 0, there
7693  * is potentially more to output.
7694  * There are four cases:
7695  * 1) Both weren't in their sets, count is 0, and remains 0.  What's left
7696  *    in the union is entirely from the non-exhausted set.
7697  * 2) Both were in their sets, count is 2.  Nothing further should
7698  *    be output, as everything that remains will be in the exhausted
7699  *    list's set, hence in the union; decrementing to 1 but not 0 insures
7700  *    that
7701  * 3) the exhausted was in its set, non-exhausted isn't, count is 1.
7702  *    Nothing further should be output because the union includes
7703  *    everything from the exhausted set.  Not decrementing ensures that.
7704  * 4) the exhausted wasn't in its set, non-exhausted is, count is 1;
7705  *    decrementing to 0 insures that we look at the remainder of the
7706  *    non-exhausted set */
7707  if ((i_a != len_a && PREV_RANGE_MATCHES_INVLIST(i_a))
7708   || (i_b != len_b && PREV_RANGE_MATCHES_INVLIST(i_b)))
7709  {
7710   count--;
7711  }
7712
7713  /* The final length is what we've output so far, plus what else is about to
7714  * be output.  (If 'count' is non-zero, then the input list we exhausted
7715  * has everything remaining up to the machine's limit in its set, and hence
7716  * in the union, so there will be no further output. */
7717  len_u = i_u;
7718  if (count == 0) {
7719   /* At most one of the subexpressions will be non-zero */
7720   len_u += (len_a - i_a) + (len_b - i_b);
7721  }
7722
7723  /* Set result to final length, which can change the pointer to array_u, so
7724  * re-find it */
7725  if (len_u != _invlist_len(u)) {
7726   invlist_set_len(u, len_u);
7727   invlist_trim(u);
7728   array_u = invlist_array(u);
7729  }
7730
7731  /* When 'count' is 0, the list that was exhausted (if one was shorter than
7732  * the other) ended with everything above it not in its set.  That means
7733  * that the remaining part of the union is precisely the same as the
7734  * non-exhausted list, so can just copy it unchanged.  (If both list were
7735  * exhausted at the same time, then the operations below will be both 0.)
7736  */
7737  if (count == 0) {
7738   IV copy_count; /* At most one will have a non-zero copy count */
7739   if ((copy_count = len_a - i_a) > 0) {
7740    Copy(array_a + i_a, array_u + i_u, copy_count, UV);
7741   }
7742   else if ((copy_count = len_b - i_b) > 0) {
7743    Copy(array_b + i_b, array_u + i_u, copy_count, UV);
7744   }
7745  }
7746
7747  /* If we've changed b, restore it */
7748  if (complement_b) {
7749   array_b[0] = 1;
7750  }
7751
7752  /*  We may be removing a reference to one of the inputs */
7753  if (a == *output || b == *output) {
7754   assert(! invlist_is_iterating(*output));
7755   SvREFCNT_dec_NN(*output);
7756  }
7757
7758  *output = u;
7759  return;
7760 }
7761
7762 void
7763 Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, bool complement_b, SV** i)
7764 {
7765  /* Take the intersection of two inversion lists and point <i> to it.  *i
7766  * SHOULD BE DEFINED upon input, and if it points to one of the two lists,
7767  * the reference count to that list will be decremented.
7768  * If <complement_b> is TRUE, the result will be the intersection of <a>
7769  * and the complement (or inversion) of <b> instead of <b> directly.
7770  *
7771  * The basis for this comes from "Unicode Demystified" Chapter 13 by
7772  * Richard Gillam, published by Addison-Wesley, and explained at some
7773  * length there.  The preface says to incorporate its examples into your
7774  * code at your own risk.  In fact, it had bugs
7775  *
7776  * The algorithm is like a merge sort, and is essentially the same as the
7777  * union above
7778  */
7779
7780  UV* array_a;  /* a's array */
7781  UV* array_b;
7782  UV len_a; /* length of a's array */
7783  UV len_b;
7784
7785  SV* r;       /* the resulting intersection */
7786  UV* array_r;
7787  UV len_r;
7788
7789  UV i_a = 0;      /* current index into a's array */
7790  UV i_b = 0;
7791  UV i_r = 0;
7792
7793  /* running count, as explained in the algorithm source book; items are
7794  * stopped accumulating and are output when the count changes to/from 2.
7795  * The count is incremented when we start a range that's in the set, and
7796  * decremented when we start a range that's not in the set.  So its range
7797  * is 0 to 2.  Only when the count is 2 is something in the intersection.
7798  */
7799  UV count = 0;
7800
7801  PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND;
7802  assert(a != b);
7803
7804  /* Special case if either one is empty */
7805  len_a = _invlist_len(a);
7806  if ((len_a == 0) || ((len_b = _invlist_len(b)) == 0)) {
7807
7808   if (len_a != 0 && complement_b) {
7809
7810    /* Here, 'a' is not empty, therefore from the above 'if', 'b' must
7811    * be empty.  Here, also we are using 'b's complement, which hence
7812    * must be every possible code point.  Thus the intersection is
7813    * simply 'a'. */
7814    if (*i != a) {
7815     *i = invlist_clone(a);
7816
7817     if (*i == b) {
7818      SvREFCNT_dec_NN(b);
7819     }
7820    }
7821    /* else *i is already 'a' */
7822    return;
7823   }
7824
7825   /* Here, 'a' or 'b' is empty and not using the complement of 'b'.  The
7826   * intersection must be empty */
7827   if (*i == a) {
7828    SvREFCNT_dec_NN(a);
7829   }
7830   else if (*i == b) {
7831    SvREFCNT_dec_NN(b);
7832   }
7833   *i = _new_invlist(0);
7834   return;
7835  }
7836
7837  /* Here both lists exist and are non-empty */
7838  array_a = invlist_array(a);
7839  array_b = invlist_array(b);
7840
7841  /* If are to take the intersection of 'a' with the complement of b, set it
7842  * up so are looking at b's complement. */
7843  if (complement_b) {
7844
7845   /* To complement, we invert: if the first element is 0, remove it.  To
7846   * do this, we just pretend the array starts one later, and clear the
7847   * flag as we don't have to do anything else later */
7848   if (array_b[0] == 0) {
7849    array_b++;
7850    len_b--;
7851    complement_b = FALSE;
7852   }
7853   else {
7854
7855    /* But if the first element is not zero, we unshift a 0 before the
7856    * array.  The data structure reserves a space for that 0 (which
7857    * should be a '1' right now), so physical shifting is unneeded,
7858    * but temporarily change that element to 0.  Before exiting the
7859    * routine, we must restore the element to '1' */
7860    array_b--;
7861    len_b++;
7862    array_b[0] = 0;
7863   }
7864  }
7865
7866  /* Size the intersection for the worst case: that the intersection ends up
7867  * fragmenting everything to be completely disjoint */
7868  r= _new_invlist(len_a + len_b);
7869
7870  /* Will contain U+0000 iff both components do */
7871  array_r = _invlist_array_init(r, len_a > 0 && array_a[0] == 0
7872          && len_b > 0 && array_b[0] == 0);
7873
7874  /* Go through each list item by item, stopping when exhausted one of
7875  * them */
7876  while (i_a < len_a && i_b < len_b) {
7877   UV cp;     /* The element to potentially add to the intersection's
7878      array */
7879   bool cp_in_set; /* Is it in the input list's set or not */
7880
7881   /* We need to take one or the other of the two inputs for the
7882   * intersection.  Since we are merging two sorted lists, we take the
7883   * smaller of the next items.  In case of a tie, we take the one that
7884   * is not in its set first (a difference from the union algorithm).  If
7885   * we took one in the set first, it would increment the count, possibly
7886   * to 2 which would cause it to be output as starting a range in the
7887   * intersection, and the next time through we would take that same
7888   * number, and output it again as ending the set.  By doing it the
7889   * opposite of this, there is no possibility that the count will be
7890   * momentarily incremented to 2.  (In a tie and both are in the set or
7891   * both not in the set, it doesn't matter which we take first.) */
7892   if (array_a[i_a] < array_b[i_b]
7893    || (array_a[i_a] == array_b[i_b]
7894     && ! ELEMENT_RANGE_MATCHES_INVLIST(i_a)))
7895   {
7896    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_a);
7897    cp= array_a[i_a++];
7898   }
7899   else {
7900    cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_b);
7901    cp= array_b[i_b++];
7902   }
7903
7904   /* Here, have chosen which of the two inputs to look at.  Only output
7905   * if the running count changes to/from 2, which marks the
7906   * beginning/end of a range that's in the intersection */
7907   if (cp_in_set) {
7908    count++;
7909    if (count == 2) {
7910     array_r[i_r++] = cp;
7911    }
7912   }
7913   else {
7914    if (count == 2) {
7915     array_r[i_r++] = cp;
7916    }
7917    count--;
7918   }
7919  }
7920
7921  /* Here, we are finished going through at least one of the lists, which
7922  * means there is something remaining in at most one.  We check if the list
7923  * that has been exhausted is positioned such that we are in the middle
7924  * of a range in its set or not.  (i_a and i_b point to elements 1 beyond
7925  * the ones we care about.)  There are four cases:
7926  * 1) Both weren't in their sets, count is 0, and remains 0.  There's
7927  *    nothing left in the intersection.
7928  * 2) Both were in their sets, count is 2 and perhaps is incremented to
7929  *    above 2.  What should be output is exactly that which is in the
7930  *    non-exhausted set, as everything it has is also in the intersection
7931  *    set, and everything it doesn't have can't be in the intersection
7932  * 3) The exhausted was in its set, non-exhausted isn't, count is 1, and
7933  *    gets incremented to 2.  Like the previous case, the intersection is
7934  *    everything that remains in the non-exhausted set.
7935  * 4) the exhausted wasn't in its set, non-exhausted is, count is 1, and
7936  *    remains 1.  And the intersection has nothing more. */
7937  if ((i_a == len_a && PREV_RANGE_MATCHES_INVLIST(i_a))
7938   || (i_b == len_b && PREV_RANGE_MATCHES_INVLIST(i_b)))
7939  {
7940   count++;
7941  }
7942
7943  /* The final length is what we've output so far plus what else is in the
7944  * intersection.  At most one of the subexpressions below will be non-zero */
7945  len_r = i_r;
7946  if (count >= 2) {
7947   len_r += (len_a - i_a) + (len_b - i_b);
7948  }
7949
7950  /* Set result to final length, which can change the pointer to array_r, so
7951  * re-find it */
7952  if (len_r != _invlist_len(r)) {
7953   invlist_set_len(r, len_r);
7954   invlist_trim(r);
7955   array_r = invlist_array(r);
7956  }
7957
7958  /* Finish outputting any remaining */
7959  if (count >= 2) { /* At most one will have a non-zero copy count */
7960   IV copy_count;
7961   if ((copy_count = len_a - i_a) > 0) {
7962    Copy(array_a + i_a, array_r + i_r, copy_count, UV);
7963   }
7964   else if ((copy_count = len_b - i_b) > 0) {
7965    Copy(array_b + i_b, array_r + i_r, copy_count, UV);
7966   }
7967  }
7968
7969  /* If we've changed b, restore it */
7970  if (complement_b) {
7971   array_b[0] = 1;
7972  }
7973
7974  /*  We may be removing a reference to one of the inputs */
7975  if (a == *i || b == *i) {
7976   assert(! invlist_is_iterating(*i));
7977   SvREFCNT_dec_NN(*i);
7978  }
7979
7980  *i = r;
7981  return;
7982 }
7983
7984 SV*
7985 Perl__add_range_to_invlist(pTHX_ SV* invlist, const UV start, const UV end)
7986 {
7987  /* Add the range from 'start' to 'end' inclusive to the inversion list's
7988  * set.  A pointer to the inversion list is returned.  This may actually be
7989  * a new list, in which case the passed in one has been destroyed.  The
7990  * passed in inversion list can be NULL, in which case a new one is created
7991  * with just the one range in it */
7992
7993  SV* range_invlist;
7994  UV len;
7995
7996  if (invlist == NULL) {
7997   invlist = _new_invlist(2);
7998   len = 0;
7999  }
8000  else {
8001   len = _invlist_len(invlist);
8002  }
8003
8004  /* If comes after the final entry actually in the list, can just append it
8005  * to the end, */
8006  if (len == 0
8007   || (! ELEMENT_RANGE_MATCHES_INVLIST(len - 1)
8008    && start >= invlist_array(invlist)[len - 1]))
8009  {
8010   _append_range_to_invlist(invlist, start, end);
8011   return invlist;
8012  }
8013
8014  /* Here, can't just append things, create and return a new inversion list
8015  * which is the union of this range and the existing inversion list */
8016  range_invlist = _new_invlist(2);
8017  _append_range_to_invlist(range_invlist, start, end);
8018
8019  _invlist_union(invlist, range_invlist, &invlist);
8020
8021  /* The temporary can be freed */
8022  SvREFCNT_dec_NN(range_invlist);
8023
8024  return invlist;
8025 }
8026
8027 #endif
8028
8029 PERL_STATIC_INLINE SV*
8030 S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) {
8031  return _add_range_to_invlist(invlist, cp, cp);
8032 }
8033
8034 #ifndef PERL_IN_XSUB_RE
8035 void
8036 Perl__invlist_invert(pTHX_ SV* const invlist)
8037 {
8038  /* Complement the input inversion list.  This adds a 0 if the list didn't
8039  * have a zero; removes it otherwise.  As described above, the data
8040  * structure is set up so that this is very efficient */
8041
8042  UV* len_pos = _get_invlist_len_addr(invlist);
8043
8044  PERL_ARGS_ASSERT__INVLIST_INVERT;
8045
8046  assert(! invlist_is_iterating(invlist));
8047
8048  /* The inverse of matching nothing is matching everything */
8049  if (*len_pos == 0) {
8050   _append_range_to_invlist(invlist, 0, UV_MAX);
8051   return;
8052  }
8053
8054  /* The exclusive or complents 0 to 1; and 1 to 0.  If the result is 1, the
8055  * zero element was a 0, so it is being removed, so the length decrements
8056  * by 1; and vice-versa.  SvCUR is unaffected */
8057  if (*get_invlist_zero_addr(invlist) ^= 1) {
8058   (*len_pos)--;
8059  }
8060  else {
8061   (*len_pos)++;
8062  }
8063 }
8064
8065 void
8066 Perl__invlist_invert_prop(pTHX_ SV* const invlist)
8067 {
8068  /* Complement the input inversion list (which must be a Unicode property,
8069  * all of which don't match above the Unicode maximum code point.)  And
8070  * Perl has chosen to not have the inversion match above that either.  This
8071  * adds a 0x110000 if the list didn't end with it, and removes it if it did
8072  */
8073
8074  UV len;
8075  UV* array;
8076
8077  PERL_ARGS_ASSERT__INVLIST_INVERT_PROP;
8078
8079  _invlist_invert(invlist);
8080
8081  len = _invlist_len(invlist);
8082
8083  if (len != 0) { /* If empty do nothing */
8084   array = invlist_array(invlist);
8085   if (array[len - 1] != PERL_UNICODE_MAX + 1) {
8086    /* Add 0x110000.  First, grow if necessary */
8087    len++;
8088    if (invlist_max(invlist) < len) {
8089     invlist_extend(invlist, len);
8090     array = invlist_array(invlist);
8091    }
8092    invlist_set_len(invlist, len);
8093    array[len - 1] = PERL_UNICODE_MAX + 1;
8094   }
8095   else {  /* Remove the 0x110000 */
8096    invlist_set_len(invlist, len - 1);
8097   }
8098  }
8099
8100  return;
8101 }
8102 #endif
8103
8104 PERL_STATIC_INLINE SV*
8105 S_invlist_clone(pTHX_ SV* const invlist)
8106 {
8107
8108  /* Return a new inversion list that is a copy of the input one, which is
8109  * unchanged */
8110
8111  /* Need to allocate extra space to accommodate Perl's addition of a
8112  * trailing NUL to SvPV's, since it thinks they are always strings */
8113  SV* new_invlist = _new_invlist(_invlist_len(invlist) + 1);
8114  STRLEN length = SvCUR(invlist);
8115
8116  PERL_ARGS_ASSERT_INVLIST_CLONE;
8117
8118  SvCUR_set(new_invlist, length); /* This isn't done automatically */
8119  Copy(SvPVX(invlist), SvPVX(new_invlist), length, char);
8120
8121  return new_invlist;
8122 }
8123
8124 PERL_STATIC_INLINE UV*
8125 S_get_invlist_iter_addr(pTHX_ SV* invlist)
8126 {
8127  /* Return the address of the UV that contains the current iteration
8128  * position */
8129
8130  PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR;
8131
8132  return (UV *) (SvPVX(invlist) + (INVLIST_ITER_OFFSET * sizeof (UV)));
8133 }
8134
8135 PERL_STATIC_INLINE UV*
8136 S_get_invlist_version_id_addr(pTHX_ SV* invlist)
8137 {
8138  /* Return the address of the UV that contains the version id. */
8139
8140  PERL_ARGS_ASSERT_GET_INVLIST_VERSION_ID_ADDR;
8141
8142  return (UV *) (SvPVX(invlist) + (INVLIST_VERSION_ID_OFFSET * sizeof (UV)));
8143 }
8144
8145 PERL_STATIC_INLINE void
8146 S_invlist_iterinit(pTHX_ SV* invlist) /* Initialize iterator for invlist */
8147 {
8148  PERL_ARGS_ASSERT_INVLIST_ITERINIT;
8149
8150  *get_invlist_iter_addr(invlist) = 0;
8151 }
8152
8153 PERL_STATIC_INLINE void
8154 S_invlist_iterfinish(pTHX_ SV* invlist)
8155 {
8156  /* Terminate iterator for invlist.  This is to catch development errors.
8157  * Any iteration that is interrupted before completed should call this
8158  * function.  Functions that add code points anywhere else but to the end
8159  * of an inversion list assert that they are not in the middle of an
8160  * iteration.  If they were, the addition would make the iteration
8161  * problematical: if the iteration hadn't reached the place where things
8162  * were being added, it would be ok */
8163
8164  PERL_ARGS_ASSERT_INVLIST_ITERFINISH;
8165
8166  *get_invlist_iter_addr(invlist) = UV_MAX;
8167 }
8168
8169 STATIC bool
8170 S_invlist_iternext(pTHX_ SV* invlist, UV* start, UV* end)
8171 {
8172  /* An C<invlist_iterinit> call on <invlist> must be used to set this up.
8173  * This call sets in <*start> and <*end>, the next range in <invlist>.
8174  * Returns <TRUE> if successful and the next call will return the next
8175  * range; <FALSE> if was already at the end of the list.  If the latter,
8176  * <*start> and <*end> are unchanged, and the next call to this function
8177  * will start over at the beginning of the list */
8178
8179  UV* pos = get_invlist_iter_addr(invlist);
8180  UV len = _invlist_len(invlist);
8181  UV *array;
8182
8183  PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
8184
8185  if (*pos >= len) {
8186   *pos = UV_MAX; /* Force iterinit() to be required next time */
8187   return FALSE;
8188  }
8189
8190  array = invlist_array(invlist);
8191
8192  *start = array[(*pos)++];
8193
8194  if (*pos >= len) {
8195   *end = UV_MAX;
8196  }
8197  else {
8198   *end = array[(*pos)++] - 1;
8199  }
8200
8201  return TRUE;
8202 }
8203
8204 PERL_STATIC_INLINE bool
8205 S_invlist_is_iterating(pTHX_ SV* const invlist)
8206 {
8207  PERL_ARGS_ASSERT_INVLIST_IS_ITERATING;
8208
8209  return *(get_invlist_iter_addr(invlist)) < UV_MAX;
8210 }
8211
8212 PERL_STATIC_INLINE UV
8213 S_invlist_highest(pTHX_ SV* const invlist)
8214 {
8215  /* Returns the highest code point that matches an inversion list.  This API
8216  * has an ambiguity, as it returns 0 under either the highest is actually
8217  * 0, or if the list is empty.  If this distinction matters to you, check
8218  * for emptiness before calling this function */
8219
8220  UV len = _invlist_len(invlist);
8221  UV *array;
8222
8223  PERL_ARGS_ASSERT_INVLIST_HIGHEST;
8224
8225  if (len == 0) {
8226   return 0;
8227  }
8228
8229  array = invlist_array(invlist);
8230
8231  /* The last element in the array in the inversion list always starts a
8232  * range that goes to infinity.  That range may be for code points that are
8233  * matched in the inversion list, or it may be for ones that aren't
8234  * matched.  In the latter case, the highest code point in the set is one
8235  * less than the beginning of this range; otherwise it is the final element
8236  * of this range: infinity */
8237  return (ELEMENT_RANGE_MATCHES_INVLIST(len - 1))
8238   ? UV_MAX
8239   : array[len - 1] - 1;
8240 }
8241
8242 #ifndef PERL_IN_XSUB_RE
8243 SV *
8244 Perl__invlist_contents(pTHX_ SV* const invlist)
8245 {
8246  /* Get the contents of an inversion list into a string SV so that they can
8247  * be printed out.  It uses the format traditionally done for debug tracing
8248  */
8249
8250  UV start, end;
8251  SV* output = newSVpvs("\n");
8252
8253  PERL_ARGS_ASSERT__INVLIST_CONTENTS;
8254
8255  assert(! invlist_is_iterating(invlist));
8256
8257  invlist_iterinit(invlist);
8258  while (invlist_iternext(invlist, &start, &end)) {
8259   if (end == UV_MAX) {
8260    Perl_sv_catpvf(aTHX_ output, "%04"UVXf"\tINFINITY\n", start);
8261   }
8262   else if (end != start) {
8263    Perl_sv_catpvf(aTHX_ output, "%04"UVXf"\t%04"UVXf"\n",
8264      start,       end);
8265   }
8266   else {
8267    Perl_sv_catpvf(aTHX_ output, "%04"UVXf"\n", start);
8268   }
8269  }
8270
8271  return output;
8272 }
8273 #endif
8274
8275 #ifdef PERL_ARGS_ASSERT__INVLIST_DUMP
8276 void
8277 Perl__invlist_dump(pTHX_ SV* const invlist, const char * const header)
8278 {
8279  /* Dumps out the ranges in an inversion list.  The string 'header'
8280  * if present is output on a line before the first range */
8281
8282  UV start, end;
8283
8284  PERL_ARGS_ASSERT__INVLIST_DUMP;
8285
8286  if (header && strlen(header)) {
8287   PerlIO_printf(Perl_debug_log, "%s\n", header);
8288  }
8289  if (invlist_is_iterating(invlist)) {
8290   PerlIO_printf(Perl_debug_log, "Can't dump because is in middle of iterating\n");
8291   return;
8292  }
8293
8294  invlist_iterinit(invlist);
8295  while (invlist_iternext(invlist, &start, &end)) {
8296   if (end == UV_MAX) {
8297    PerlIO_printf(Perl_debug_log, "0x%04"UVXf" .. INFINITY\n", start);
8298   }
8299   else if (end != start) {
8300    PerlIO_printf(Perl_debug_log, "0x%04"UVXf" .. 0x%04"UVXf"\n",
8301             start,         end);
8302   }
8303   else {
8304    PerlIO_printf(Perl_debug_log, "0x%04"UVXf"\n", start);
8305   }
8306  }
8307 }
8308 #endif
8309
8310 #if 0
8311 bool
8312 S__invlistEQ(pTHX_ SV* const a, SV* const b, bool complement_b)
8313 {
8314  /* Return a boolean as to if the two passed in inversion lists are
8315  * identical.  The final argument, if TRUE, says to take the complement of
8316  * the second inversion list before doing the comparison */
8317
8318  UV* array_a = invlist_array(a);
8319  UV* array_b = invlist_array(b);
8320  UV len_a = _invlist_len(a);
8321  UV len_b = _invlist_len(b);
8322
8323  UV i = 0;      /* current index into the arrays */
8324  bool retval = TRUE;     /* Assume are identical until proven otherwise */
8325
8326  PERL_ARGS_ASSERT__INVLISTEQ;
8327
8328  /* If are to compare 'a' with the complement of b, set it
8329  * up so are looking at b's complement. */
8330  if (complement_b) {
8331
8332   /* The complement of nothing is everything, so <a> would have to have
8333   * just one element, starting at zero (ending at infinity) */
8334   if (len_b == 0) {
8335    return (len_a == 1 && array_a[0] == 0);
8336   }
8337   else if (array_b[0] == 0) {
8338
8339    /* Otherwise, to complement, we invert.  Here, the first element is
8340    * 0, just remove it.  To do this, we just pretend the array starts
8341    * one later, and clear the flag as we don't have to do anything
8342    * else later */
8343
8344    array_b++;
8345    len_b--;
8346    complement_b = FALSE;
8347   }
8348   else {
8349
8350    /* But if the first element is not zero, we unshift a 0 before the
8351    * array.  The data structure reserves a space for that 0 (which
8352    * should be a '1' right now), so physical shifting is unneeded,
8353    * but temporarily change that element to 0.  Before exiting the
8354    * routine, we must restore the element to '1' */
8355    array_b--;
8356    len_b++;
8357    array_b[0] = 0;
8358   }
8359  }
8360
8361  /* Make sure that the lengths are the same, as well as the final element
8362  * before looping through the remainder.  (Thus we test the length, final,
8363  * and first elements right off the bat) */
8364  if (len_a != len_b || array_a[len_a-1] != array_b[len_a-1]) {
8365   retval = FALSE;
8366  }
8367  else for (i = 0; i < len_a - 1; i++) {
8368   if (array_a[i] != array_b[i]) {
8369    retval = FALSE;
8370    break;
8371   }
8372  }
8373
8374  if (complement_b) {
8375   array_b[0] = 1;
8376  }
8377  return retval;
8378 }
8379 #endif
8380
8381 #undef HEADER_LENGTH
8382 #undef INVLIST_INITIAL_LENGTH
8383 #undef TO_INTERNAL_SIZE
8384 #undef FROM_INTERNAL_SIZE
8385 #undef INVLIST_LEN_OFFSET
8386 #undef INVLIST_ZERO_OFFSET
8387 #undef INVLIST_ITER_OFFSET
8388 #undef INVLIST_VERSION_ID
8389 #undef INVLIST_PREVIOUS_INDEX_OFFSET
8390
8391 /* End of inversion list object */
8392
8393 STATIC void
8394 S_parse_lparen_question_flags(pTHX_ struct RExC_state_t *pRExC_state)
8395 {
8396  /* This parses the flags that are in either the '(?foo)' or '(?foo:bar)'
8397  * constructs, and updates RExC_flags with them.  On input, RExC_parse
8398  * should point to the first flag; it is updated on output to point to the
8399  * final ')' or ':'.  There needs to be at least one flag, or this will
8400  * abort */
8401
8402  /* for (?g), (?gc), and (?o) warnings; warning
8403  about (?c) will warn about (?g) -- japhy    */
8404
8405 #define WASTED_O  0x01
8406 #define WASTED_G  0x02
8407 #define WASTED_C  0x04
8408 #define WASTED_GC (0x02|0x04)
8409  I32 wastedflags = 0x00;
8410  U32 posflags = 0, negflags = 0;
8411  U32 *flagsp = &posflags;
8412  char has_charset_modifier = '\0';
8413  regex_charset cs;
8414  bool has_use_defaults = FALSE;
8415  const char* const seqstart = RExC_parse - 1; /* Point to the '?' */
8416
8417  PERL_ARGS_ASSERT_PARSE_LPAREN_QUESTION_FLAGS;
8418
8419  /* '^' as an initial flag sets certain defaults */
8420  if (UCHARAT(RExC_parse) == '^') {
8421   RExC_parse++;
8422   has_use_defaults = TRUE;
8423   STD_PMMOD_FLAGS_CLEAR(&RExC_flags);
8424   set_regex_charset(&RExC_flags, (RExC_utf8 || RExC_uni_semantics)
8425           ? REGEX_UNICODE_CHARSET
8426           : REGEX_DEPENDS_CHARSET);
8427  }
8428
8429  cs = get_regex_charset(RExC_flags);
8430  if (cs == REGEX_DEPENDS_CHARSET
8431   && (RExC_utf8 || RExC_uni_semantics))
8432  {
8433   cs = REGEX_UNICODE_CHARSET;
8434  }
8435
8436  while (*RExC_parse) {
8437   /* && strchr("iogcmsx", *RExC_parse) */
8438   /* (?g), (?gc) and (?o) are useless here
8439   and must be globally applied -- japhy */
8440   switch (*RExC_parse) {
8441
8442    /* Code for the imsx flags */
8443    CASE_STD_PMMOD_FLAGS_PARSE_SET(flagsp);
8444
8445    case LOCALE_PAT_MOD:
8446     if (has_charset_modifier) {
8447      goto excess_modifier;
8448     }
8449     else if (flagsp == &negflags) {
8450      goto neg_modifier;
8451     }
8452     cs = REGEX_LOCALE_CHARSET;
8453     has_charset_modifier = LOCALE_PAT_MOD;
8454     RExC_contains_locale = 1;
8455     break;
8456    case UNICODE_PAT_MOD:
8457     if (has_charset_modifier) {
8458      goto excess_modifier;
8459     }
8460     else if (flagsp == &negflags) {
8461      goto neg_modifier;
8462     }
8463     cs = REGEX_UNICODE_CHARSET;
8464     has_charset_modifier = UNICODE_PAT_MOD;
8465     break;
8466    case ASCII_RESTRICT_PAT_MOD:
8467     if (flagsp == &negflags) {
8468      goto neg_modifier;
8469     }
8470     if (has_charset_modifier) {
8471      if (cs != REGEX_ASCII_RESTRICTED_CHARSET) {
8472       goto excess_modifier;
8473      }
8474      /* Doubled modifier implies more restricted */
8475      cs = REGEX_ASCII_MORE_RESTRICTED_CHARSET;
8476     }
8477     else {
8478      cs = REGEX_ASCII_RESTRICTED_CHARSET;
8479     }
8480     has_charset_modifier = ASCII_RESTRICT_PAT_MOD;
8481     break;
8482    case DEPENDS_PAT_MOD:
8483     if (has_use_defaults) {
8484      goto fail_modifiers;
8485     }
8486     else if (flagsp == &negflags) {
8487      goto neg_modifier;
8488     }
8489     else if (has_charset_modifier) {
8490      goto excess_modifier;
8491     }
8492
8493     /* The dual charset means unicode semantics if the
8494     * pattern (or target, not known until runtime) are
8495     * utf8, or something in the pattern indicates unicode
8496     * semantics */
8497     cs = (RExC_utf8 || RExC_uni_semantics)
8498      ? REGEX_UNICODE_CHARSET
8499      : REGEX_DEPENDS_CHARSET;
8500     has_charset_modifier = DEPENDS_PAT_MOD;
8501     break;
8502    excess_modifier:
8503     RExC_parse++;
8504     if (has_charset_modifier == ASCII_RESTRICT_PAT_MOD) {
8505      vFAIL2("Regexp modifier \"%c\" may appear a maximum of twice", ASCII_RESTRICT_PAT_MOD);
8506     }
8507     else if (has_charset_modifier == *(RExC_parse - 1)) {
8508      vFAIL2("Regexp modifier \"%c\" may not appear twice", *(RExC_parse - 1));
8509     }
8510     else {
8511      vFAIL3("Regexp modifiers \"%c\" and \"%c\" are mutually exclusive", has_charset_modifier, *(RExC_parse - 1));
8512     }
8513     /*NOTREACHED*/
8514    neg_modifier:
8515     RExC_parse++;
8516     vFAIL2("Regexp modifier \"%c\" may not appear after the \"-\"", *(RExC_parse - 1));
8517     /*NOTREACHED*/
8518    case ONCE_PAT_MOD: /* 'o' */
8519    case GLOBAL_PAT_MOD: /* 'g' */
8520     if (SIZE_ONLY && ckWARN(WARN_REGEXP)) {
8521      const I32 wflagbit = *RExC_parse == 'o' ? WASTED_O : WASTED_G;
8522      if (! (wastedflags & wflagbit) ) {
8523       wastedflags |= wflagbit;
8524       vWARN5(
8525        RExC_parse + 1,
8526        "Useless (%s%c) - %suse /%c modifier",
8527        flagsp == &negflags ? "?-" : "?",
8528        *RExC_parse,
8529        flagsp == &negflags ? "don't " : "",
8530        *RExC_parse
8531       );
8532      }
8533     }
8534     break;
8535
8536    case CONTINUE_PAT_MOD: /* 'c' */
8537     if (SIZE_ONLY && ckWARN(WARN_REGEXP)) {
8538      if (! (wastedflags & WASTED_C) ) {
8539       wastedflags |= WASTED_GC;
8540       vWARN3(
8541        RExC_parse + 1,
8542        "Useless (%sc) - %suse /gc modifier",
8543        flagsp == &negflags ? "?-" : "?",
8544        flagsp == &negflags ? "don't " : ""
8545       );
8546      }
8547     }
8548     break;
8549    case KEEPCOPY_PAT_MOD: /* 'p' */
8550     if (flagsp == &negflags) {
8551      if (SIZE_ONLY)
8552       ckWARNreg(RExC_parse + 1,"Useless use of (?-p)");
8553     } else {
8554      *flagsp |= RXf_PMf_KEEPCOPY;
8555     }
8556     break;
8557    case '-':
8558     /* A flag is a default iff it is following a minus, so
8559     * if there is a minus, it means will be trying to
8560     * re-specify a default which is an error */
8561     if (has_use_defaults || flagsp == &negflags) {
8562      goto fail_modifiers;
8563     }
8564     flagsp = &negflags;
8565     wastedflags = 0;  /* reset so (?g-c) warns twice */
8566     break;
8567    case ':':
8568    case ')':
8569     RExC_flags |= posflags;
8570     RExC_flags &= ~negflags;
8571     set_regex_charset(&RExC_flags, cs);
8572     return;
8573     /*NOTREACHED*/
8574    default:
8575    fail_modifiers:
8576     RExC_parse++;
8577     vFAIL3("Sequence (%.*s...) not recognized",
8578      RExC_parse-seqstart, seqstart);
8579     /*NOTREACHED*/
8580   }
8581
8582   ++RExC_parse;
8583  }
8584 }
8585
8586 /*
8587  - reg - regular expression, i.e. main body or parenthesized thing
8588  *
8589  * Caller must absorb opening parenthesis.
8590  *
8591  * Combining parenthesis handling with the base level of regular expression
8592  * is a trifle forced, but the need to tie the tails of the branches to what
8593  * follows makes it hard to avoid.
8594  */
8595 #define REGTAIL(x,y,z) regtail((x),(y),(z),depth+1)
8596 #ifdef DEBUGGING
8597 #define REGTAIL_STUDY(x,y,z) regtail_study((x),(y),(z),depth+1)
8598 #else
8599 #define REGTAIL_STUDY(x,y,z) regtail((x),(y),(z),depth+1)
8600 #endif
8601
8602 /* Returns NULL, setting *flagp to TRYAGAIN at the end of (?) that only sets
8603    flags. Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan
8604    needs to be restarted.
8605    Otherwise would only return NULL if regbranch() returns NULL, which
8606    cannot happen.  */
8607 STATIC regnode *
8608 S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp,U32 depth)
8609  /* paren: Parenthesized? 0=top; 1,2=inside '(': changed to letter.
8610  * 2 is like 1, but indicates that nextchar() has been called to advance
8611  * RExC_parse beyond the '('.  Things like '(?' are indivisible tokens, and
8612  * this flag alerts us to the need to check for that */
8613 {
8614  dVAR;
8615  regnode *ret;  /* Will be the head of the group. */
8616  regnode *br;
8617  regnode *lastbr;
8618  regnode *ender = NULL;
8619  I32 parno = 0;
8620  I32 flags;
8621  U32 oregflags = RExC_flags;
8622  bool have_branch = 0;
8623  bool is_open = 0;
8624  I32 freeze_paren = 0;
8625  I32 after_freeze = 0;
8626
8627  char * parse_start = RExC_parse; /* MJD */
8628  char * const oregcomp_parse = RExC_parse;
8629
8630  GET_RE_DEBUG_FLAGS_DECL;
8631
8632  PERL_ARGS_ASSERT_REG;
8633  DEBUG_PARSE("reg ");
8634
8635  *flagp = 0;    /* Tentatively. */
8636
8637
8638  /* Make an OPEN node, if parenthesized. */
8639  if (paren) {
8640
8641   /* Under /x, space and comments can be gobbled up between the '(' and
8642   * here (if paren ==2).  The forms '(*VERB' and '(?...' disallow such
8643   * intervening space, as the sequence is a token, and a token should be
8644   * indivisible */
8645   bool has_intervening_patws = paren == 2 && *(RExC_parse - 1) != '(';
8646
8647   if ( *RExC_parse == '*') { /* (*VERB:ARG) */
8648    char *start_verb = RExC_parse;
8649    STRLEN verb_len = 0;
8650    char *start_arg = NULL;
8651    unsigned char op = 0;
8652    int argok = 1;
8653    int internal_argval = 0; /* internal_argval is only useful if !argok */
8654
8655    if (has_intervening_patws && SIZE_ONLY) {
8656     ckWARNregdep(RExC_parse + 1, "In '(*VERB...)', splitting the initial '(*' is deprecated");
8657    }
8658    while ( *RExC_parse && *RExC_parse != ')' ) {
8659     if ( *RExC_parse == ':' ) {
8660      start_arg = RExC_parse + 1;
8661      break;
8662     }
8663     RExC_parse++;
8664    }
8665    ++start_verb;
8666    verb_len = RExC_parse - start_verb;
8667    if ( start_arg ) {
8668     RExC_parse++;
8669     while ( *RExC_parse && *RExC_parse != ')' )
8670      RExC_parse++;
8671     if ( *RExC_parse != ')' )
8672      vFAIL("Unterminated verb pattern argument");
8673     if ( RExC_parse == start_arg )
8674      start_arg = NULL;
8675    } else {
8676     if ( *RExC_parse != ')' )
8677      vFAIL("Unterminated verb pattern");
8678    }
8679
8680    switch ( *start_verb ) {
8681    case 'A':  /* (*ACCEPT) */
8682     if ( memEQs(start_verb,verb_len,"ACCEPT") ) {
8683      op = ACCEPT;
8684      internal_argval = RExC_nestroot;
8685     }
8686     break;
8687    case 'C':  /* (*COMMIT) */
8688     if ( memEQs(start_verb,verb_len,"COMMIT") )
8689      op = COMMIT;
8690     break;
8691    case 'F':  /* (*FAIL) */
8692     if ( verb_len==1 || memEQs(start_verb,verb_len,"FAIL") ) {
8693      op = OPFAIL;
8694      argok = 0;
8695     }
8696     break;
8697    case ':':  /* (*:NAME) */
8698    case 'M':  /* (*MARK:NAME) */
8699     if ( verb_len==0 || memEQs(start_verb,verb_len,"MARK") ) {
8700      op = MARKPOINT;
8701      argok = -1;
8702     }
8703     break;
8704    case 'P':  /* (*PRUNE) */
8705     if ( memEQs(start_verb,verb_len,"PRUNE") )
8706      op = PRUNE;
8707     break;
8708    case 'S':   /* (*SKIP) */
8709     if ( memEQs(start_verb,verb_len,"SKIP") )
8710      op = SKIP;
8711     break;
8712    case 'T':  /* (*THEN) */
8713     /* [19:06] <TimToady> :: is then */
8714     if ( memEQs(start_verb,verb_len,"THEN") ) {
8715      op = CUTGROUP;
8716      RExC_seen |= REG_SEEN_CUTGROUP;
8717     }
8718     break;
8719    }
8720    if ( ! op ) {
8721     RExC_parse++;
8722     vFAIL3("Unknown verb pattern '%.*s'",
8723      verb_len, start_verb);
8724    }
8725    if ( argok ) {
8726     if ( start_arg && internal_argval ) {
8727      vFAIL3("Verb pattern '%.*s' may not have an argument",
8728       verb_len, start_verb);
8729     } else if ( argok < 0 && !start_arg ) {
8730      vFAIL3("Verb pattern '%.*s' has a mandatory argument",
8731       verb_len, start_verb);
8732     } else {
8733      ret = reganode(pRExC_state, op, internal_argval);
8734      if ( ! internal_argval && ! SIZE_ONLY ) {
8735       if (start_arg) {
8736        SV *sv = newSVpvn( start_arg, RExC_parse - start_arg);
8737        ARG(ret) = add_data( pRExC_state, 1, "S" );
8738        RExC_rxi->data->data[ARG(ret)]=(void*)sv;
8739        ret->flags = 0;
8740       } else {
8741        ret->flags = 1;
8742       }
8743      }
8744     }
8745     if (!internal_argval)
8746      RExC_seen |= REG_SEEN_VERBARG;
8747    } else if ( start_arg ) {
8748     vFAIL3("Verb pattern '%.*s' may not have an argument",
8749       verb_len, start_verb);
8750    } else {
8751     ret = reg_node(pRExC_state, op);
8752    }
8753    nextchar(pRExC_state);
8754    return ret;
8755   } else
8756   if (*RExC_parse == '?') { /* (?...) */
8757    bool is_logical = 0;
8758    const char * const seqstart = RExC_parse;
8759    if (has_intervening_patws && SIZE_ONLY) {
8760     ckWARNregdep(RExC_parse + 1, "In '(?...)', splitting the initial '(?' is deprecated");
8761    }
8762
8763    RExC_parse++;
8764    paren = *RExC_parse++;
8765    ret = NULL;   /* For look-ahead/behind. */
8766    switch (paren) {
8767
8768    case 'P': /* (?P...) variants for those used to PCRE/Python */
8769     paren = *RExC_parse++;
8770     if ( paren == '<')         /* (?P<...>) named capture */
8771      goto named_capture;
8772     else if (paren == '>') {   /* (?P>name) named recursion */
8773      goto named_recursion;
8774     }
8775     else if (paren == '=') {   /* (?P=...)  named backref */
8776      /* this pretty much dupes the code for \k<NAME> in regatom(), if
8777      you change this make sure you change that */
8778      char* name_start = RExC_parse;
8779      U32 num = 0;
8780      SV *sv_dat = reg_scan_name(pRExC_state,
8781       SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
8782      if (RExC_parse == name_start || *RExC_parse != ')')
8783       vFAIL2("Sequence %.3s... not terminated",parse_start);
8784
8785      if (!SIZE_ONLY) {
8786       num = add_data( pRExC_state, 1, "S" );
8787       RExC_rxi->data->data[num]=(void*)sv_dat;
8788       SvREFCNT_inc_simple_void(sv_dat);
8789      }
8790      RExC_sawback = 1;
8791      ret = reganode(pRExC_state,
8792         ((! FOLD)
8793          ? NREF
8794          : (ASCII_FOLD_RESTRICTED)
8795          ? NREFFA
8796          : (AT_LEAST_UNI_SEMANTICS)
8797           ? NREFFU
8798           : (LOC)
8799           ? NREFFL
8800           : NREFF),
8801          num);
8802      *flagp |= HASWIDTH;
8803
8804      Set_Node_Offset(ret, parse_start+1);
8805      Set_Node_Cur_Length(ret); /* MJD */
8806
8807      nextchar(pRExC_state);
8808      return ret;
8809     }
8810     RExC_parse++;
8811     vFAIL3("Sequence (%.*s...) not recognized", RExC_parse-seqstart, seqstart);
8812     /*NOTREACHED*/
8813    case '<':           /* (?<...) */
8814     if (*RExC_parse == '!')
8815      paren = ',';
8816     else if (*RExC_parse != '=')
8817    named_capture:
8818     {               /* (?<...>) */
8819      char *name_start;
8820      SV *svname;
8821      paren= '>';
8822    case '\'':          /* (?'...') */
8823       name_start= RExC_parse;
8824       svname = reg_scan_name(pRExC_state,
8825        SIZE_ONLY ?  /* reverse test from the others */
8826        REG_RSN_RETURN_NAME :
8827        REG_RSN_RETURN_NULL);
8828      if (RExC_parse == name_start) {
8829       RExC_parse++;
8830       vFAIL3("Sequence (%.*s...) not recognized", RExC_parse-seqstart, seqstart);
8831       /*NOTREACHED*/
8832      }
8833      if (*RExC_parse != paren)
8834       vFAIL2("Sequence (?%c... not terminated",
8835        paren=='>' ? '<' : paren);
8836      if (SIZE_ONLY) {
8837       HE *he_str;
8838       SV *sv_dat = NULL;
8839       if (!svname) /* shouldn't happen */
8840        Perl_croak(aTHX_
8841         "panic: reg_scan_name returned NULL");
8842       if (!RExC_paren_names) {
8843        RExC_paren_names= newHV();
8844        sv_2mortal(MUTABLE_SV(RExC_paren_names));
8845 #ifdef DEBUGGING
8846        RExC_paren_name_list= newAV();
8847        sv_2mortal(MUTABLE_SV(RExC_paren_name_list));
8848 #endif
8849       }
8850       he_str = hv_fetch_ent( RExC_paren_names, svname, 1, 0 );
8851       if ( he_str )
8852        sv_dat = HeVAL(he_str);
8853       if ( ! sv_dat ) {
8854        /* croak baby croak */
8855        Perl_croak(aTHX_
8856         "panic: paren_name hash element allocation failed");
8857       } else if ( SvPOK(sv_dat) ) {
8858        /* (?|...) can mean we have dupes so scan to check
8859        its already been stored. Maybe a flag indicating
8860        we are inside such a construct would be useful,
8861        but the arrays are likely to be quite small, so
8862        for now we punt -- dmq */
8863        IV count = SvIV(sv_dat);
8864        I32 *pv = (I32*)SvPVX(sv_dat);
8865        IV i;
8866        for ( i = 0 ; i < count ; i++ ) {
8867         if ( pv[i] == RExC_npar ) {
8868          count = 0;
8869          break;
8870         }
8871        }
8872        if ( count ) {
8873         pv = (I32*)SvGROW(sv_dat, SvCUR(sv_dat) + sizeof(I32)+1);
8874         SvCUR_set(sv_dat, SvCUR(sv_dat) + sizeof(I32));
8875         pv[count] = RExC_npar;
8876         SvIV_set(sv_dat, SvIVX(sv_dat) + 1);
8877        }
8878       } else {
8879        (void)SvUPGRADE(sv_dat,SVt_PVNV);
8880        sv_setpvn(sv_dat, (char *)&(RExC_npar), sizeof(I32));
8881        SvIOK_on(sv_dat);
8882        SvIV_set(sv_dat, 1);
8883       }
8884 #ifdef DEBUGGING
8885       /* Yes this does cause a memory leak in debugging Perls */
8886       if (!av_store(RExC_paren_name_list, RExC_npar, SvREFCNT_inc(svname)))
8887        SvREFCNT_dec_NN(svname);
8888 #endif
8889
8890       /*sv_dump(sv_dat);*/
8891      }
8892      nextchar(pRExC_state);
8893      paren = 1;
8894      goto capturing_parens;
8895     }
8896     RExC_seen |= REG_SEEN_LOOKBEHIND;
8897     RExC_in_lookbehind++;
8898     RExC_parse++;
8899    case '=':           /* (?=...) */
8900     RExC_seen_zerolen++;
8901     break;
8902    case '!':           /* (?!...) */
8903     RExC_seen_zerolen++;
8904     if (*RExC_parse == ')') {
8905      ret=reg_node(pRExC_state, OPFAIL);
8906      nextchar(pRExC_state);
8907      return ret;
8908     }
8909     break;
8910    case '|':           /* (?|...) */
8911     /* branch reset, behave like a (?:...) except that
8912     buffers in alternations share the same numbers */
8913     paren = ':';
8914     after_freeze = freeze_paren = RExC_npar;
8915     break;
8916    case ':':           /* (?:...) */
8917    case '>':           /* (?>...) */
8918     break;
8919    case '$':           /* (?$...) */
8920    case '@':           /* (?@...) */
8921     vFAIL2("Sequence (?%c...) not implemented", (int)paren);
8922     break;
8923    case '#':           /* (?#...) */
8924     /* XXX As soon as we disallow separating the '?' and '*' (by
8925     * spaces or (?#...) comment), it is believed that this case
8926     * will be unreachable and can be removed.  See
8927     * [perl #117327] */
8928     while (*RExC_parse && *RExC_parse != ')')
8929      RExC_parse++;
8930     if (*RExC_parse != ')')
8931      FAIL("Sequence (?#... not terminated");
8932     nextchar(pRExC_state);
8933     *flagp = TRYAGAIN;
8934     return NULL;
8935    case '0' :           /* (?0) */
8936    case 'R' :           /* (?R) */
8937     if (*RExC_parse != ')')
8938      FAIL("Sequence (?R) not terminated");
8939     ret = reg_node(pRExC_state, GOSTART);
8940     *flagp |= POSTPONED;
8941     nextchar(pRExC_state);
8942     return ret;
8943     /*notreached*/
8944    { /* named and numeric backreferences */
8945     I32 num;
8946    case '&':            /* (?&NAME) */
8947     parse_start = RExC_parse - 1;
8948    named_recursion:
8949     {
8950       SV *sv_dat = reg_scan_name(pRExC_state,
8951        SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
8952       num = sv_dat ? *((I32 *)SvPVX(sv_dat)) : 0;
8953     }
8954     goto gen_recurse_regop;
8955     assert(0); /* NOT REACHED */
8956    case '+':
8957     if (!(RExC_parse[0] >= '1' && RExC_parse[0] <= '9')) {
8958      RExC_parse++;
8959      vFAIL("Illegal pattern");
8960     }
8961     goto parse_recursion;
8962     /* NOT REACHED*/
8963    case '-': /* (?-1) */
8964     if (!(RExC_parse[0] >= '1' && RExC_parse[0] <= '9')) {
8965      RExC_parse--; /* rewind to let it be handled later */
8966      goto parse_flags;
8967     }
8968     /*FALLTHROUGH */
8969    case '1': case '2': case '3': case '4': /* (?1) */
8970    case '5': case '6': case '7': case '8': case '9':
8971     RExC_parse--;
8972    parse_recursion:
8973     num = atoi(RExC_parse);
8974     parse_start = RExC_parse - 1; /* MJD */
8975     if (*RExC_parse == '-')
8976      RExC_parse++;
8977     while (isDIGIT(*RExC_parse))
8978       RExC_parse++;
8979     if (*RExC_parse!=')')
8980      vFAIL("Expecting close bracket");
8981
8982    gen_recurse_regop:
8983     if ( paren == '-' ) {
8984      /*
8985      Diagram of capture buffer numbering.
8986      Top line is the normal capture buffer numbers
8987      Bottom line is the negative indexing as from
8988      the X (the (?-2))
8989
8990      +   1 2    3 4 5 X          6 7
8991      /(a(x)y)(a(b(c(?-2)d)e)f)(g(h))/
8992      -   5 4    3 2 1 X          x x
8993
8994      */
8995      num = RExC_npar + num;
8996      if (num < 1)  {
8997       RExC_parse++;
8998       vFAIL("Reference to nonexistent group");
8999      }
9000     } else if ( paren == '+' ) {
9001      num = RExC_npar + num - 1;
9002     }
9003
9004     ret = reganode(pRExC_state, GOSUB, num);
9005     if (!SIZE_ONLY) {
9006      if (num > (I32)RExC_rx->nparens) {
9007       RExC_parse++;
9008       vFAIL("Reference to nonexistent group");
9009      }
9010      ARG2L_SET( ret, RExC_recurse_count++);
9011      RExC_emit++;
9012      DEBUG_OPTIMISE_MORE_r(PerlIO_printf(Perl_debug_log,
9013       "Recurse #%"UVuf" to %"IVdf"\n", (UV)ARG(ret), (IV)ARG2L(ret)));
9014     } else {
9015      RExC_size++;
9016      }
9017      RExC_seen |= REG_SEEN_RECURSE;
9018     Set_Node_Length(ret, 1 + regarglen[OP(ret)]); /* MJD */
9019     Set_Node_Offset(ret, parse_start); /* MJD */
9020
9021     *flagp |= POSTPONED;
9022     nextchar(pRExC_state);
9023     return ret;
9024    } /* named and numeric backreferences */
9025    assert(0); /* NOT REACHED */
9026
9027    case '?':           /* (??...) */
9028     is_logical = 1;
9029     if (*RExC_parse != '{') {
9030      RExC_parse++;
9031      vFAIL3("Sequence (%.*s...) not recognized", RExC_parse-seqstart, seqstart);
9032      /*NOTREACHED*/
9033     }
9034     *flagp |= POSTPONED;
9035     paren = *RExC_parse++;
9036     /* FALL THROUGH */
9037    case '{':           /* (?{...}) */
9038    {
9039     U32 n = 0;
9040     struct reg_code_block *cb;
9041
9042     RExC_seen_zerolen++;
9043
9044     if (   !pRExC_state->num_code_blocks
9045      || pRExC_state->code_index >= pRExC_state->num_code_blocks
9046      || pRExC_state->code_blocks[pRExC_state->code_index].start
9047       != (STRLEN)((RExC_parse -3 - (is_logical ? 1 : 0))
9048        - RExC_start)
9049     ) {
9050      if (RExC_pm_flags & PMf_USE_RE_EVAL)
9051       FAIL("panic: Sequence (?{...}): no code block found\n");
9052      FAIL("Eval-group not allowed at runtime, use re 'eval'");
9053     }
9054     /* this is a pre-compiled code block (?{...}) */
9055     cb = &pRExC_state->code_blocks[pRExC_state->code_index];
9056     RExC_parse = RExC_start + cb->end;
9057     if (!SIZE_ONLY) {
9058      OP *o = cb->block;
9059      if (cb->src_regex) {
9060       n = add_data(pRExC_state, 2, "rl");
9061       RExC_rxi->data->data[n] =
9062        (void*)SvREFCNT_inc((SV*)cb->src_regex);
9063       RExC_rxi->data->data[n+1] = (void*)o;
9064      }
9065      else {
9066       n = add_data(pRExC_state, 1,
9067        (RExC_pm_flags & PMf_HAS_CV) ? "L" : "l");
9068       RExC_rxi->data->data[n] = (void*)o;
9069      }
9070     }
9071     pRExC_state->code_index++;
9072     nextchar(pRExC_state);
9073
9074     if (is_logical) {
9075      regnode *eval;
9076      ret = reg_node(pRExC_state, LOGICAL);
9077      eval = reganode(pRExC_state, EVAL, n);
9078      if (!SIZE_ONLY) {
9079       ret->flags = 2;
9080       /* for later propagation into (??{}) return value */
9081       eval->flags = (U8) (RExC_flags & RXf_PMf_COMPILETIME);
9082      }
9083      REGTAIL(pRExC_state, ret, eval);
9084      /* deal with the length of this later - MJD */
9085      return ret;
9086     }
9087     ret = reganode(pRExC_state, EVAL, n);
9088     Set_Node_Length(ret, RExC_parse - parse_start + 1);
9089     Set_Node_Offset(ret, parse_start);
9090     return ret;
9091    }
9092    case '(':           /* (?(?{...})...) and (?(?=...)...) */
9093    {
9094     int is_define= 0;
9095     if (RExC_parse[0] == '?') {        /* (?(?...)) */
9096      if (RExC_parse[1] == '=' || RExC_parse[1] == '!'
9097       || RExC_parse[1] == '<'
9098       || RExC_parse[1] == '{') { /* Lookahead or eval. */
9099       I32 flag;
9100       regnode *tail;
9101
9102       ret = reg_node(pRExC_state, LOGICAL);
9103       if (!SIZE_ONLY)
9104        ret->flags = 1;
9105
9106       tail = reg(pRExC_state, 1, &flag, depth+1);
9107       if (flag & RESTART_UTF8) {
9108        *flagp = RESTART_UTF8;
9109        return NULL;
9110       }
9111       REGTAIL(pRExC_state, ret, tail);
9112       goto insert_if;
9113      }
9114     }
9115     else if ( RExC_parse[0] == '<'     /* (?(<NAME>)...) */
9116       || RExC_parse[0] == '\'' ) /* (?('NAME')...) */
9117     {
9118      char ch = RExC_parse[0] == '<' ? '>' : '\'';
9119      char *name_start= RExC_parse++;
9120      U32 num = 0;
9121      SV *sv_dat=reg_scan_name(pRExC_state,
9122       SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
9123      if (RExC_parse == name_start || *RExC_parse != ch)
9124       vFAIL2("Sequence (?(%c... not terminated",
9125        (ch == '>' ? '<' : ch));
9126      RExC_parse++;
9127      if (!SIZE_ONLY) {
9128       num = add_data( pRExC_state, 1, "S" );
9129       RExC_rxi->data->data[num]=(void*)sv_dat;
9130       SvREFCNT_inc_simple_void(sv_dat);
9131      }
9132      ret = reganode(pRExC_state,NGROUPP,num);
9133      goto insert_if_check_paren;
9134     }
9135     else if (RExC_parse[0] == 'D' &&
9136       RExC_parse[1] == 'E' &&
9137       RExC_parse[2] == 'F' &&
9138       RExC_parse[3] == 'I' &&
9139       RExC_parse[4] == 'N' &&
9140       RExC_parse[5] == 'E')
9141     {
9142      ret = reganode(pRExC_state,DEFINEP,0);
9143      RExC_parse +=6 ;
9144      is_define = 1;
9145      goto insert_if_check_paren;
9146     }
9147     else if (RExC_parse[0] == 'R') {
9148      RExC_parse++;
9149      parno = 0;
9150      if (RExC_parse[0] >= '1' && RExC_parse[0] <= '9' ) {
9151       parno = atoi(RExC_parse++);
9152       while (isDIGIT(*RExC_parse))
9153        RExC_parse++;
9154      } else if (RExC_parse[0] == '&') {
9155       SV *sv_dat;
9156       RExC_parse++;
9157       sv_dat = reg_scan_name(pRExC_state,
9158         SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
9159        parno = sv_dat ? *((I32 *)SvPVX(sv_dat)) : 0;
9160      }
9161      ret = reganode(pRExC_state,INSUBP,parno);
9162      goto insert_if_check_paren;
9163     }
9164     else if (RExC_parse[0] >= '1' && RExC_parse[0] <= '9' ) {
9165      /* (?(1)...) */
9166      char c;
9167      parno = atoi(RExC_parse++);
9168
9169      while (isDIGIT(*RExC_parse))
9170       RExC_parse++;
9171      ret = reganode(pRExC_state, GROUPP, parno);
9172
9173     insert_if_check_paren:
9174      if ((c = *nextchar(pRExC_state)) != ')')
9175       vFAIL("Switch condition not recognized");
9176     insert_if:
9177      REGTAIL(pRExC_state, ret, reganode(pRExC_state, IFTHEN, 0));
9178      br = regbranch(pRExC_state, &flags, 1,depth+1);
9179      if (br == NULL) {
9180       if (flags & RESTART_UTF8) {
9181        *flagp = RESTART_UTF8;
9182        return NULL;
9183       }
9184       FAIL2("panic: regbranch returned NULL, flags=%#X",
9185        flags);
9186      } else
9187       REGTAIL(pRExC_state, br, reganode(pRExC_state, LONGJMP, 0));
9188      c = *nextchar(pRExC_state);
9189      if (flags&HASWIDTH)
9190       *flagp |= HASWIDTH;
9191      if (c == '|') {
9192       if (is_define)
9193        vFAIL("(?(DEFINE)....) does not allow branches");
9194       lastbr = reganode(pRExC_state, IFTHEN, 0); /* Fake one for optimizer. */
9195       if (!regbranch(pRExC_state, &flags, 1,depth+1)) {
9196        if (flags & RESTART_UTF8) {
9197         *flagp = RESTART_UTF8;
9198         return NULL;
9199        }
9200        FAIL2("panic: regbranch returned NULL, flags=%#X",
9201         flags);
9202       }
9203       REGTAIL(pRExC_state, ret, lastbr);
9204       if (flags&HASWIDTH)
9205        *flagp |= HASWIDTH;
9206       c = *nextchar(pRExC_state);
9207      }
9208      else
9209       lastbr = NULL;
9210      if (c != ')')
9211       vFAIL("Switch (?(condition)... contains too many branches");
9212      ender = reg_node(pRExC_state, TAIL);
9213      REGTAIL(pRExC_state, br, ender);
9214      if (lastbr) {
9215       REGTAIL(pRExC_state, lastbr, ender);
9216       REGTAIL(pRExC_state, NEXTOPER(NEXTOPER(lastbr)), ender);
9217      }
9218      else
9219       REGTAIL(pRExC_state, ret, ender);
9220      RExC_size++; /* XXX WHY do we need this?!!
9221          For large programs it seems to be required
9222          but I can't figure out why. -- dmq*/
9223      return ret;
9224     }
9225     else {
9226      vFAIL2("Unknown switch condition (?(%.2s", RExC_parse);
9227     }
9228    }
9229    case '[':           /* (?[ ... ]) */
9230     return handle_regex_sets(pRExC_state, NULL, flagp, depth,
9231           oregcomp_parse);
9232    case 0:
9233     RExC_parse--; /* for vFAIL to print correctly */
9234     vFAIL("Sequence (? incomplete");
9235     break;
9236    default: /* e.g., (?i) */
9237     --RExC_parse;
9238    parse_flags:
9239     parse_lparen_question_flags(pRExC_state);
9240     if (UCHARAT(RExC_parse) != ':') {
9241      nextchar(pRExC_state);
9242      *flagp = TRYAGAIN;
9243      return NULL;
9244     }
9245     paren = ':';
9246     nextchar(pRExC_state);
9247     ret = NULL;
9248     goto parse_rest;
9249    } /* end switch */
9250   }
9251   else {                  /* (...) */
9252   capturing_parens:
9253    parno = RExC_npar;
9254    RExC_npar++;
9255
9256    ret = reganode(pRExC_state, OPEN, parno);
9257    if (!SIZE_ONLY ){
9258     if (!RExC_nestroot)
9259      RExC_nestroot = parno;
9260     if (RExC_seen & REG_SEEN_RECURSE
9261      && !RExC_open_parens[parno-1])
9262     {
9263      DEBUG_OPTIMISE_MORE_r(PerlIO_printf(Perl_debug_log,
9264       "Setting open paren #%"IVdf" to %d\n",
9265       (IV)parno, REG_NODE_NUM(ret)));
9266      RExC_open_parens[parno-1]= ret;
9267     }
9268    }
9269    Set_Node_Length(ret, 1); /* MJD */
9270    Set_Node_Offset(ret, RExC_parse); /* MJD */
9271    is_open = 1;
9272   }
9273  }
9274  else                        /* ! paren */
9275   ret = NULL;
9276
9277    parse_rest:
9278  /* Pick up the branches, linking them together. */
9279  parse_start = RExC_parse;   /* MJD */
9280  br = regbranch(pRExC_state, &flags, 1,depth+1);
9281
9282  /*     branch_len = (paren != 0); */
9283
9284  if (br == NULL) {
9285   if (flags & RESTART_UTF8) {
9286    *flagp = RESTART_UTF8;
9287    return NULL;
9288   }
9289   FAIL2("panic: regbranch returned NULL, flags=%#X", flags);
9290  }
9291  if (*RExC_parse == '|') {
9292   if (!SIZE_ONLY && RExC_extralen) {
9293    reginsert(pRExC_state, BRANCHJ, br, depth+1);
9294   }
9295   else {                  /* MJD */
9296    reginsert(pRExC_state, BRANCH, br, depth+1);
9297    Set_Node_Length(br, paren != 0);
9298    Set_Node_Offset_To_R(br-RExC_emit_start, parse_start-RExC_start);
9299   }
9300   have_branch = 1;
9301   if (SIZE_ONLY)
9302    RExC_extralen += 1;  /* For BRANCHJ-BRANCH. */
9303  }
9304  else if (paren == ':') {
9305   *flagp |= flags&SIMPLE;
9306  }
9307  if (is_open) {    /* Starts with OPEN. */
9308   REGTAIL(pRExC_state, ret, br);          /* OPEN -> first. */
9309  }
9310  else if (paren != '?')  /* Not Conditional */
9311   ret = br;
9312  *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
9313  lastbr = br;
9314  while (*RExC_parse == '|') {
9315   if (!SIZE_ONLY && RExC_extralen) {
9316    ender = reganode(pRExC_state, LONGJMP,0);
9317    REGTAIL(pRExC_state, NEXTOPER(NEXTOPER(lastbr)), ender); /* Append to the previous. */
9318   }
9319   if (SIZE_ONLY)
9320    RExC_extralen += 2;  /* Account for LONGJMP. */
9321   nextchar(pRExC_state);
9322   if (freeze_paren) {
9323    if (RExC_npar > after_freeze)
9324     after_freeze = RExC_npar;
9325    RExC_npar = freeze_paren;
9326   }
9327   br = regbranch(pRExC_state, &flags, 0, depth+1);
9328
9329   if (br == NULL) {
9330    if (flags & RESTART_UTF8) {
9331     *flagp = RESTART_UTF8;
9332     return NULL;
9333    }
9334    FAIL2("panic: regbranch returned NULL, flags=%#X", flags);
9335   }
9336   REGTAIL(pRExC_state, lastbr, br);               /* BRANCH -> BRANCH. */
9337   lastbr = br;
9338   *flagp |= flags & (SPSTART | HASWIDTH | POSTPONED);
9339  }
9340
9341  if (have_branch || paren != ':') {
9342   /* Make a closing node, and hook it on the end. */
9343   switch (paren) {
9344   case ':':
9345    ender = reg_node(pRExC_state, TAIL);
9346    break;
9347   case 1: case 2:
9348    ender = reganode(pRExC_state, CLOSE, parno);
9349    if (!SIZE_ONLY && RExC_seen & REG_SEEN_RECURSE) {
9350     DEBUG_OPTIMISE_MORE_r(PerlIO_printf(Perl_debug_log,
9351       "Setting close paren #%"IVdf" to %d\n",
9352       (IV)parno, REG_NODE_NUM(ender)));
9353     RExC_close_parens[parno-1]= ender;
9354     if (RExC_nestroot == parno)
9355      RExC_nestroot = 0;
9356    }
9357    Set_Node_Offset(ender,RExC_parse+1); /* MJD */
9358    Set_Node_Length(ender,1); /* MJD */
9359    break;
9360   case '<':
9361   case ',':
9362   case '=':
9363   case '!':
9364    *flagp &= ~HASWIDTH;
9365    /* FALL THROUGH */
9366   case '>':
9367    ender = reg_node(pRExC_state, SUCCEED);
9368    break;
9369   case 0:
9370    ender = reg_node(pRExC_state, END);
9371    if (!SIZE_ONLY) {
9372     assert(!RExC_opend); /* there can only be one! */
9373     RExC_opend = ender;
9374    }
9375    break;
9376   }
9377   DEBUG_PARSE_r(if (!SIZE_ONLY) {
9378    SV * const mysv_val1=sv_newmortal();
9379    SV * const mysv_val2=sv_newmortal();
9380    DEBUG_PARSE_MSG("lsbr");
9381    regprop(RExC_rx, mysv_val1, lastbr);
9382    regprop(RExC_rx, mysv_val2, ender);
9383    PerlIO_printf(Perl_debug_log, "~ tying lastbr %s (%"IVdf") to ender %s (%"IVdf") offset %"IVdf"\n",
9384       SvPV_nolen_const(mysv_val1),
9385       (IV)REG_NODE_NUM(lastbr),
9386       SvPV_nolen_const(mysv_val2),
9387       (IV)REG_NODE_NUM(ender),
9388       (IV)(ender - lastbr)
9389    );
9390   });
9391   REGTAIL(pRExC_state, lastbr, ender);
9392
9393   if (have_branch && !SIZE_ONLY) {
9394    char is_nothing= 1;
9395    if (depth==1)
9396     RExC_seen |= REG_TOP_LEVEL_BRANCHES;
9397
9398    /* Hook the tails of the branches to the closing node. */
9399    for (br = ret; br; br = regnext(br)) {
9400     const U8 op = PL_regkind[OP(br)];
9401     if (op == BRANCH) {
9402      REGTAIL_STUDY(pRExC_state, NEXTOPER(br), ender);
9403      if (OP(NEXTOPER(br)) != NOTHING || regnext(NEXTOPER(br)) != ender)
9404       is_nothing= 0;
9405     }
9406     else if (op == BRANCHJ) {
9407      REGTAIL_STUDY(pRExC_state, NEXTOPER(NEXTOPER(br)), ender);
9408      /* for now we always disable this optimisation * /
9409      if (OP(NEXTOPER(NEXTOPER(br))) != NOTHING || regnext(NEXTOPER(NEXTOPER(br))) != ender)
9410      */
9411       is_nothing= 0;
9412     }
9413    }
9414    if (is_nothing) {
9415     br= PL_regkind[OP(ret)] != BRANCH ? regnext(ret) : ret;
9416     DEBUG_PARSE_r(if (!SIZE_ONLY) {
9417      SV * const mysv_val1=sv_newmortal();
9418      SV * const mysv_val2=sv_newmortal();
9419      DEBUG_PARSE_MSG("NADA");
9420      regprop(RExC_rx, mysv_val1, ret);
9421      regprop(RExC_rx, mysv_val2, ender);
9422      PerlIO_printf(Perl_debug_log, "~ converting ret %s (%"IVdf") to ender %s (%"IVdf") offset %"IVdf"\n",
9423         SvPV_nolen_const(mysv_val1),
9424         (IV)REG_NODE_NUM(ret),
9425         SvPV_nolen_const(mysv_val2),
9426         (IV)REG_NODE_NUM(ender),
9427         (IV)(ender - ret)
9428      );
9429     });
9430     OP(br)= NOTHING;
9431     if (OP(ender) == TAIL) {
9432      NEXT_OFF(br)= 0;
9433      RExC_emit= br + 1;
9434     } else {
9435      regnode *opt;
9436      for ( opt= br + 1; opt < ender ; opt++ )
9437       OP(opt)= OPTIMIZED;
9438      NEXT_OFF(br)= ender - br;
9439     }
9440    }
9441   }
9442  }
9443
9444  {
9445   const char *p;
9446   static const char parens[] = "=!<,>";
9447
9448   if (paren && (p = strchr(parens, paren))) {
9449    U8 node = ((p - parens) % 2) ? UNLESSM : IFMATCH;
9450    int flag = (p - parens) > 1;
9451
9452    if (paren == '>')
9453     node = SUSPEND, flag = 0;
9454    reginsert(pRExC_state, node,ret, depth+1);
9455    Set_Node_Cur_Length(ret);
9456    Set_Node_Offset(ret, parse_start + 1);
9457    ret->flags = flag;
9458    REGTAIL_STUDY(pRExC_state, ret, reg_node(pRExC_state, TAIL));
9459   }
9460  }
9461
9462  /* Check for proper termination. */
9463  if (paren) {
9464   /* restore original flags, but keep (?p) */
9465   RExC_flags = oregflags | (RExC_flags & RXf_PMf_KEEPCOPY);
9466   if (RExC_parse >= RExC_end || *nextchar(pRExC_state) != ')') {
9467    RExC_parse = oregcomp_parse;
9468    vFAIL("Unmatched (");
9469   }
9470  }
9471  else if (!paren && RExC_parse < RExC_end) {
9472   if (*RExC_parse == ')') {
9473    RExC_parse++;
9474    vFAIL("Unmatched )");
9475   }
9476   else
9477    FAIL("Junk on end of regexp"); /* "Can't happen". */
9478   assert(0); /* NOTREACHED */
9479  }
9480
9481  if (RExC_in_lookbehind) {
9482   RExC_in_lookbehind--;
9483  }
9484  if (after_freeze > RExC_npar)
9485   RExC_npar = after_freeze;
9486  return(ret);
9487 }
9488
9489 /*
9490  - regbranch - one alternative of an | operator
9491  *
9492  * Implements the concatenation operator.
9493  *
9494  * Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs to be
9495  * restarted.
9496  */
9497 STATIC regnode *
9498 S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
9499 {
9500  dVAR;
9501  regnode *ret;
9502  regnode *chain = NULL;
9503  regnode *latest;
9504  I32 flags = 0, c = 0;
9505  GET_RE_DEBUG_FLAGS_DECL;
9506
9507  PERL_ARGS_ASSERT_REGBRANCH;
9508
9509  DEBUG_PARSE("brnc");
9510
9511  if (first)
9512   ret = NULL;
9513  else {
9514   if (!SIZE_ONLY && RExC_extralen)
9515    ret = reganode(pRExC_state, BRANCHJ,0);
9516   else {
9517    ret = reg_node(pRExC_state, BRANCH);
9518    Set_Node_Length(ret, 1);
9519   }
9520  }
9521
9522  if (!first && SIZE_ONLY)
9523   RExC_extralen += 1;   /* BRANCHJ */
9524
9525  *flagp = WORST;   /* Tentatively. */
9526
9527  RExC_parse--;
9528  nextchar(pRExC_state);
9529  while (RExC_parse < RExC_end && *RExC_parse != '|' && *RExC_parse != ')') {
9530   flags &= ~TRYAGAIN;
9531   latest = regpiece(pRExC_state, &flags,depth+1);
9532   if (latest == NULL) {
9533    if (flags & TRYAGAIN)
9534     continue;
9535    if (flags & RESTART_UTF8) {
9536     *flagp = RESTART_UTF8;
9537     return NULL;
9538    }
9539    FAIL2("panic: regpiece returned NULL, flags=%#X", flags);
9540   }
9541   else if (ret == NULL)
9542    ret = latest;
9543   *flagp |= flags&(HASWIDTH|POSTPONED);
9544   if (chain == NULL)  /* First piece. */
9545    *flagp |= flags&SPSTART;
9546   else {
9547    RExC_naughty++;
9548    REGTAIL(pRExC_state, chain, latest);
9549   }
9550   chain = latest;
9551   c++;
9552  }
9553  if (chain == NULL) { /* Loop ran zero times. */
9554   chain = reg_node(pRExC_state, NOTHING);
9555   if (ret == NULL)
9556    ret = chain;
9557  }
9558  if (c == 1) {
9559   *flagp |= flags&SIMPLE;
9560  }
9561
9562  return ret;
9563 }
9564
9565 /*
9566  - regpiece - something followed by possible [*+?]
9567  *
9568  * Note that the branching code sequences used for ? and the general cases
9569  * of * and + are somewhat optimized:  they use the same NOTHING node as
9570  * both the endmarker for their branch list and the body of the last branch.
9571  * It might seem that this node could be dispensed with entirely, but the
9572  * endmarker role is not redundant.
9573  *
9574  * Returns NULL, setting *flagp to TRYAGAIN if regatom() returns NULL with
9575  * TRYAGAIN.
9576  * Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs to be
9577  * restarted.
9578  */
9579 STATIC regnode *
9580 S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
9581 {
9582  dVAR;
9583  regnode *ret;
9584  char op;
9585  char *next;
9586  I32 flags;
9587  const char * const origparse = RExC_parse;
9588  I32 min;
9589  I32 max = REG_INFTY;
9590 #ifdef RE_TRACK_PATTERN_OFFSETS
9591  char *parse_start;
9592 #endif
9593  const char *maxpos = NULL;
9594
9595  /* Save the original in case we change the emitted regop to a FAIL. */
9596  regnode * const orig_emit = RExC_emit;
9597
9598  GET_RE_DEBUG_FLAGS_DECL;
9599
9600  PERL_ARGS_ASSERT_REGPIECE;
9601
9602  DEBUG_PARSE("piec");
9603
9604  ret = regatom(pRExC_state, &flags,depth+1);
9605  if (ret == NULL) {
9606   if (flags & (TRYAGAIN|RESTART_UTF8))
9607    *flagp |= flags & (TRYAGAIN|RESTART_UTF8);
9608   else
9609    FAIL2("panic: regatom returned NULL, flags=%#X", flags);
9610   return(NULL);
9611  }
9612
9613  op = *RExC_parse;
9614
9615  if (op == '{' && regcurly(RExC_parse, FALSE)) {
9616   maxpos = NULL;
9617 #ifdef RE_TRACK_PATTERN_OFFSETS
9618   parse_start = RExC_parse; /* MJD */
9619 #endif
9620   next = RExC_parse + 1;
9621   while (isDIGIT(*next) || *next == ',') {
9622    if (*next == ',') {
9623     if (maxpos)
9624      break;
9625     else
9626      maxpos = next;
9627    }
9628    next++;
9629   }
9630   if (*next == '}') {  /* got one */
9631    if (!maxpos)
9632     maxpos = next;
9633    RExC_parse++;
9634    min = atoi(RExC_parse);
9635    if (*maxpos == ',')
9636     maxpos++;
9637    else
9638     maxpos = RExC_parse;
9639    max = atoi(maxpos);
9640    if (!max && *maxpos != '0')
9641     max = REG_INFTY;  /* meaning "infinity" */
9642    else if (max >= REG_INFTY)
9643     vFAIL2("Quantifier in {,} bigger than %d", REG_INFTY - 1);
9644    RExC_parse = next;
9645    nextchar(pRExC_state);
9646    if (max < min) {    /* If can't match, warn and optimize to fail
9647         unconditionally */
9648     if (SIZE_ONLY) {
9649      ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match");
9650
9651      /* We can't back off the size because we have to reserve
9652      * enough space for all the things we are about to throw
9653      * away, but we can shrink it by the ammount we are about
9654      * to re-use here */
9655      RExC_size = PREVOPER(RExC_size) - regarglen[(U8)OPFAIL];
9656     }
9657     else {
9658      RExC_emit = orig_emit;
9659     }
9660     ret = reg_node(pRExC_state, OPFAIL);
9661     return ret;
9662    }
9663    else if (max == 0) {    /* replace {0} with a nothing node */
9664     if (SIZE_ONLY) {
9665      RExC_size = PREVOPER(RExC_size) - regarglen[(U8)NOTHING];
9666     }
9667     else {
9668      RExC_emit = orig_emit;
9669     }
9670     ret = reg_node(pRExC_state, NOTHING);
9671     return ret;
9672    }
9673
9674   do_curly:
9675    if ((flags&SIMPLE)) {
9676     RExC_naughty += 2 + RExC_naughty / 2;
9677     reginsert(pRExC_state, CURLY, ret, depth+1);
9678     Set_Node_Offset(ret, parse_start+1); /* MJD */
9679     Set_Node_Cur_Length(ret);
9680    }
9681    else {
9682     regnode * const w = reg_node(pRExC_state, WHILEM);
9683
9684     w->flags = 0;
9685     REGTAIL(pRExC_state, ret, w);
9686     if (!SIZE_ONLY && RExC_extralen) {
9687      reginsert(pRExC_state, LONGJMP,ret, depth+1);
9688      reginsert(pRExC_state, NOTHING,ret, depth+1);
9689      NEXT_OFF(ret) = 3; /* Go over LONGJMP. */
9690     }
9691     reginsert(pRExC_state, CURLYX,ret, depth+1);
9692         /* MJD hk */
9693     Set_Node_Offset(ret, parse_start+1);
9694     Set_Node_Length(ret,
9695         op == '{' ? (RExC_parse - parse_start) : 1);
9696
9697     if (!SIZE_ONLY && RExC_extralen)
9698      NEXT_OFF(ret) = 3; /* Go over NOTHING to LONGJMP. */
9699     REGTAIL(pRExC_state, ret, reg_node(pRExC_state, NOTHING));
9700     if (SIZE_ONLY)
9701      RExC_whilem_seen++, RExC_extralen += 3;
9702     RExC_naughty += 4 + RExC_naughty; /* compound interest */
9703    }
9704    ret->flags = 0;
9705
9706    if (min > 0)
9707     *flagp = WORST;
9708    if (max > 0)
9709     *flagp |= HASWIDTH;
9710    if (!SIZE_ONLY) {
9711     ARG1_SET(ret, (U16)min);
9712     ARG2_SET(ret, (U16)max);
9713    }
9714
9715    goto nest_check;
9716   }
9717  }
9718
9719  if (!ISMULT1(op)) {
9720   *flagp = flags;
9721   return(ret);
9722  }
9723
9724 #if 0    /* Now runtime fix should be reliable. */
9725
9726  /* if this is reinstated, don't forget to put this back into perldiag:
9727
9728    =item Regexp *+ operand could be empty at {#} in regex m/%s/
9729
9730   (F) The part of the regexp subject to either the * or + quantifier
9731   could match an empty string. The {#} shows in the regular
9732   expression about where the problem was discovered.
9733
9734  */
9735
9736  if (!(flags&HASWIDTH) && op != '?')
9737  vFAIL("Regexp *+ operand could be empty");
9738 #endif
9739
9740 #ifdef RE_TRACK_PATTERN_OFFSETS
9741  parse_start = RExC_parse;
9742 #endif
9743  nextchar(pRExC_state);
9744
9745  *flagp = (op != '+') ? (WORST|SPSTART|HASWIDTH) : (WORST|HASWIDTH);
9746
9747  if (op == '*' && (flags&SIMPLE)) {
9748   reginsert(pRExC_state, STAR, ret, depth+1);
9749   ret->flags = 0;
9750   RExC_naughty += 4;
9751  }
9752  else if (op == '*') {
9753   min = 0;
9754   goto do_curly;
9755  }
9756  else if (op == '+' && (flags&SIMPLE)) {
9757   reginsert(pRExC_state, PLUS, ret, depth+1);
9758   ret->flags = 0;
9759   RExC_naughty += 3;
9760  }
9761  else if (op == '+') {
9762   min = 1;
9763   goto do_curly;
9764  }
9765  else if (op == '?') {
9766   min = 0; max = 1;
9767   goto do_curly;
9768  }
9769   nest_check:
9770  if (!SIZE_ONLY && !(flags&(HASWIDTH|POSTPONED)) && max > REG_INFTY/3) {
9771   SAVEFREESV(RExC_rx_sv); /* in case of fatal warnings */
9772   ckWARN3reg(RExC_parse,
9773     "%.*s matches null string many times",
9774     (int)(RExC_parse >= origparse ? RExC_parse - origparse : 0),
9775     origparse);
9776   (void)ReREFCNT_inc(RExC_rx_sv);
9777  }
9778
9779  if (RExC_parse < RExC_end && *RExC_parse == '?') {
9780   nextchar(pRExC_state);
9781   reginsert(pRExC_state, MINMOD, ret, depth+1);
9782   REGTAIL(pRExC_state, ret, ret + NODE_STEP_REGNODE);
9783  }
9784 #ifndef REG_ALLOW_MINMOD_SUSPEND
9785  else
9786 #endif
9787  if (RExC_parse < RExC_end && *RExC_parse == '+') {
9788   regnode *ender;
9789   nextchar(pRExC_state);
9790   ender = reg_node(pRExC_state, SUCCEED);
9791   REGTAIL(pRExC_state, ret, ender);
9792   reginsert(pRExC_state, SUSPEND, ret, depth+1);
9793   ret->flags = 0;
9794   ender = reg_node(pRExC_state, TAIL);
9795   REGTAIL(pRExC_state, ret, ender);
9796   /*ret= ender;*/
9797  }
9798
9799  if (RExC_parse < RExC_end && ISMULT2(RExC_parse)) {
9800   RExC_parse++;
9801   vFAIL("Nested quantifiers");
9802  }
9803
9804  return(ret);
9805 }
9806
9807 STATIC bool
9808 S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state, regnode** node_p, UV *valuep, I32 *flagp, U32 depth, bool in_char_class,
9809   const bool strict   /* Apply stricter parsing rules? */
9810  )
9811 {
9812
9813  /* This is expected to be called by a parser routine that has recognized '\N'
9814    and needs to handle the rest. RExC_parse is expected to point at the first
9815    char following the N at the time of the call.  On successful return,
9816    RExC_parse has been updated to point to just after the sequence identified
9817    by this routine, and <*flagp> has been updated.
9818
9819    The \N may be inside (indicated by the boolean <in_char_class>) or outside a
9820    character class.
9821
9822    \N may begin either a named sequence, or if outside a character class, mean
9823    to match a non-newline.  For non single-quoted regexes, the tokenizer has
9824    attempted to decide which, and in the case of a named sequence, converted it
9825    into one of the forms: \N{} (if the sequence is null), or \N{U+c1.c2...},
9826    where c1... are the characters in the sequence.  For single-quoted regexes,
9827    the tokenizer passes the \N sequence through unchanged; this code will not
9828    attempt to determine this nor expand those, instead raising a syntax error.
9829    The net effect is that if the beginning of the passed-in pattern isn't '{U+'
9830    or there is no '}', it signals that this \N occurrence means to match a
9831    non-newline.
9832
9833    Only the \N{U+...} form should occur in a character class, for the same
9834    reason that '.' inside a character class means to just match a period: it
9835    just doesn't make sense.
9836
9837    The function raises an error (via vFAIL), and doesn't return for various
9838    syntax errors.  Otherwise it returns TRUE and sets <node_p> or <valuep> on
9839    success; it returns FALSE otherwise. Returns FALSE, setting *flagp to
9840    RESTART_UTF8 if the sizing scan needs to be restarted. Such a restart is
9841    only possible if node_p is non-NULL.
9842
9843
9844    If <valuep> is non-null, it means the caller can accept an input sequence
9845    consisting of a just a single code point; <*valuep> is set to that value
9846    if the input is such.
9847
9848    If <node_p> is non-null it signifies that the caller can accept any other
9849    legal sequence (i.e., one that isn't just a single code point).  <*node_p>
9850    is set as follows:
9851  1) \N means not-a-NL: points to a newly created REG_ANY node;
9852  2) \N{}:              points to a new NOTHING node;
9853  3) otherwise:         points to a new EXACT node containing the resolved
9854       string.
9855    Note that FALSE is returned for single code point sequences if <valuep> is
9856    null.
9857  */
9858
9859  char * endbrace;    /* '}' following the name */
9860  char* p;
9861  char *endchar; /* Points to '.' or '}' ending cur char in the input
9862       stream */
9863  bool has_multiple_chars; /* true if the input stream contains a sequence of
9864         more than one character */
9865
9866  GET_RE_DEBUG_FLAGS_DECL;
9867
9868  PERL_ARGS_ASSERT_GROK_BSLASH_N;
9869
9870  GET_RE_DEBUG_FLAGS;
9871
9872  assert(cBOOL(node_p) ^ cBOOL(valuep));  /* Exactly one should be set */
9873
9874  /* The [^\n] meaning of \N ignores spaces and comments under the /x
9875  * modifier.  The other meaning does not */
9876  p = (RExC_flags & RXf_PMf_EXTENDED)
9877   ? regwhite( pRExC_state, RExC_parse )
9878   : RExC_parse;
9879
9880  /* Disambiguate between \N meaning a named character versus \N meaning
9881  * [^\n].  The former is assumed when it can't be the latter. */
9882  if (*p != '{' || regcurly(p, FALSE)) {
9883   RExC_parse = p;
9884   if (! node_p) {
9885    /* no bare \N in a charclass */
9886    if (in_char_class) {
9887     vFAIL("\\N in a character class must be a named character: \\N{...}");
9888    }
9889    return FALSE;
9890   }
9891   nextchar(pRExC_state);
9892   *node_p = reg_node(pRExC_state, REG_ANY);
9893   *flagp |= HASWIDTH|SIMPLE;
9894   RExC_naughty++;
9895   RExC_parse--;
9896   Set_Node_Length(*node_p, 1); /* MJD */
9897   return TRUE;
9898  }
9899
9900  /* Here, we have decided it should be a named character or sequence */
9901
9902  /* The test above made sure that the next real character is a '{', but
9903  * under the /x modifier, it could be separated by space (or a comment and
9904  * \n) and this is not allowed (for consistency with \x{...} and the
9905  * tokenizer handling of \N{NAME}). */
9906  if (*RExC_parse != '{') {
9907   vFAIL("Missing braces on \\N{}");
9908  }
9909
9910  RExC_parse++; /* Skip past the '{' */
9911
9912  if (! (endbrace = strchr(RExC_parse, '}')) /* no trailing brace */
9913   || ! (endbrace == RExC_parse  /* nothing between the {} */
9914    || (endbrace - RExC_parse >= 2 /* U+ (bad hex is checked below */
9915     && strnEQ(RExC_parse, "U+", 2)))) /* for a better error msg) */
9916  {
9917   if (endbrace) RExC_parse = endbrace; /* position msg's '<--HERE' */
9918   vFAIL("\\N{NAME} must be resolved by the lexer");
9919  }
9920
9921  if (endbrace == RExC_parse) {   /* empty: \N{} */
9922   bool ret = TRUE;
9923   if (node_p) {
9924    *node_p = reg_node(pRExC_state,NOTHING);
9925   }
9926   else if (in_char_class) {
9927    if (SIZE_ONLY && in_char_class) {
9928     if (strict) {
9929      RExC_parse++;   /* Position after the "}" */
9930      vFAIL("Zero length \\N{}");
9931     }
9932     else {
9933      ckWARNreg(RExC_parse,
9934        "Ignoring zero length \\N{} in character class");
9935     }
9936    }
9937    ret = FALSE;
9938   }
9939   else {
9940    return FALSE;
9941   }
9942   nextchar(pRExC_state);
9943   return ret;
9944  }
9945
9946  RExC_uni_semantics = 1; /* Unicode named chars imply Unicode semantics */
9947  RExC_parse += 2; /* Skip past the 'U+' */
9948
9949  endchar = RExC_parse + strcspn(RExC_parse, ".}");
9950
9951  /* Code points are separated by dots.  If none, there is only one code
9952  * point, and is terminated by the brace */
9953  has_multiple_chars = (endchar < endbrace);
9954
9955  if (valuep && (! has_multiple_chars || in_char_class)) {
9956   /* We only pay attention to the first char of
9957   multichar strings being returned in char classes. I kinda wonder
9958   if this makes sense as it does change the behaviour
9959   from earlier versions, OTOH that behaviour was broken
9960   as well. XXX Solution is to recharacterize as
9961   [rest-of-class]|multi1|multi2... */
9962
9963   STRLEN length_of_hex = (STRLEN)(endchar - RExC_parse);
9964   I32 grok_hex_flags = PERL_SCAN_ALLOW_UNDERSCORES
9965    | PERL_SCAN_DISALLOW_PREFIX
9966    | (SIZE_ONLY ? PERL_SCAN_SILENT_ILLDIGIT : 0);
9967
9968   *valuep = grok_hex(RExC_parse, &length_of_hex, &grok_hex_flags, NULL);
9969
9970   /* The tokenizer should have guaranteed validity, but it's possible to
9971   * bypass it by using single quoting, so check */
9972   if (length_of_hex == 0
9973    || length_of_hex != (STRLEN)(endchar - RExC_parse) )
9974   {
9975    RExC_parse += length_of_hex; /* Includes all the valid */
9976    RExC_parse += (RExC_orig_utf8) /* point to after 1st invalid */
9977        ? UTF8SKIP(RExC_parse)
9978        : 1;
9979    /* Guard against malformed utf8 */
9980    if (RExC_parse >= endchar) {
9981     RExC_parse = endchar;
9982    }
9983    vFAIL("Invalid hexadecimal number in \\N{U+...}");
9984   }
9985
9986   if (in_char_class && has_multiple_chars) {
9987    if (strict) {
9988     RExC_parse = endbrace;
9989     vFAIL("\\N{} in character class restricted to one character");
9990    }
9991    else {
9992     ckWARNreg(endchar, "Using just the first character returned by \\N{} in character class");
9993    }
9994   }
9995
9996   RExC_parse = endbrace + 1;
9997  }
9998  else if (! node_p || ! has_multiple_chars) {
9999
10000   /* Here, the input is legal, but not according to the caller's
10001   * options.  We fail without advancing the parse, so that the
10002   * caller can try again */
10003   RExC_parse = p;
10004   return FALSE;
10005  }
10006  else {
10007
10008   /* What is done here is to convert this to a sub-pattern of the form
10009   * (?:\x{char1}\x{char2}...)
10010   * and then call reg recursively.  That way, it retains its atomicness,
10011   * while not having to worry about special handling that some code
10012   * points may have.  toke.c has converted the original Unicode values
10013   * to native, so that we can just pass on the hex values unchanged.  We
10014   * do have to set a flag to keep recoding from happening in the
10015   * recursion */
10016
10017   SV * substitute_parse = newSVpvn_flags("?:", 2, SVf_UTF8|SVs_TEMP);
10018   STRLEN len;
10019   char *orig_end = RExC_end;
10020   I32 flags;
10021
10022   while (RExC_parse < endbrace) {
10023
10024    /* Convert to notation the rest of the code understands */
10025    sv_catpv(substitute_parse, "\\x{");
10026    sv_catpvn(substitute_parse, RExC_parse, endchar - RExC_parse);
10027    sv_catpv(substitute_parse, "}");
10028
10029    /* Point to the beginning of the next character in the sequence. */
10030    RExC_parse = endchar + 1;
10031    endchar = RExC_parse + strcspn(RExC_parse, ".}");
10032   }
10033   sv_catpv(substitute_parse, ")");
10034
10035   RExC_parse = SvPV(substitute_parse, len);
10036
10037   /* Don't allow empty number */
10038   if (len < 8) {
10039    vFAIL("Invalid hexadecimal number in \\N{U+...}");
10040   }
10041   RExC_end = RExC_parse + len;
10042
10043   /* The values are Unicode, and therefore not subject to recoding */
10044   RExC_override_recoding = 1;
10045
10046   if (!(*node_p = reg(pRExC_state, 1, &flags, depth+1))) {
10047    if (flags & RESTART_UTF8) {
10048     *flagp = RESTART_UTF8;
10049     return FALSE;
10050    }
10051    FAIL2("panic: reg returned NULL to grok_bslash_N, flags=%#X",
10052     flags);
10053   }
10054   *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE|POSTPONED);
10055
10056   RExC_parse = endbrace;
10057   RExC_end = orig_end;
10058   RExC_override_recoding = 0;
10059
10060   nextchar(pRExC_state);
10061  }
10062
10063  return TRUE;
10064 }
10065
10066
10067 /*
10068  * reg_recode
10069  *
10070  * It returns the code point in utf8 for the value in *encp.
10071  *    value: a code value in the source encoding
10072  *    encp:  a pointer to an Encode object
10073  *
10074  * If the result from Encode is not a single character,
10075  * it returns U+FFFD (Replacement character) and sets *encp to NULL.
10076  */
10077 STATIC UV
10078 S_reg_recode(pTHX_ const char value, SV **encp)
10079 {
10080  STRLEN numlen = 1;
10081  SV * const sv = newSVpvn_flags(&value, numlen, SVs_TEMP);
10082  const char * const s = *encp ? sv_recode_to_utf8(sv, *encp) : SvPVX(sv);
10083  const STRLEN newlen = SvCUR(sv);
10084  UV uv = UNICODE_REPLACEMENT;
10085
10086  PERL_ARGS_ASSERT_REG_RECODE;
10087
10088  if (newlen)
10089   uv = SvUTF8(sv)
10090    ? utf8n_to_uvchr((U8*)s, newlen, &numlen, UTF8_ALLOW_DEFAULT)
10091    : *(U8*)s;
10092
10093  if (!newlen || numlen != newlen) {
10094   uv = UNICODE_REPLACEMENT;
10095   *encp = NULL;
10096  }
10097  return uv;
10098 }
10099
10100 PERL_STATIC_INLINE U8
10101 S_compute_EXACTish(pTHX_ RExC_state_t *pRExC_state)
10102 {
10103  U8 op;
10104
10105  PERL_ARGS_ASSERT_COMPUTE_EXACTISH;
10106
10107  if (! FOLD) {
10108   return EXACT;
10109  }
10110
10111  op = get_regex_charset(RExC_flags);
10112  if (op >= REGEX_ASCII_RESTRICTED_CHARSET) {
10113   op--; /* /a is same as /u, and map /aa's offset to what /a's would have
10114     been, so there is no hole */
10115  }
10116
10117  return op + EXACTF;
10118 }
10119
10120 PERL_STATIC_INLINE void
10121 S_alloc_maybe_populate_EXACT(pTHX_ RExC_state_t *pRExC_state, regnode *node, I32* flagp, STRLEN len, UV code_point)
10122 {
10123  /* This knows the details about sizing an EXACTish node, setting flags for
10124  * it (by setting <*flagp>, and potentially populating it with a single
10125  * character.
10126  *
10127  * If <len> (the length in bytes) is non-zero, this function assumes that
10128  * the node has already been populated, and just does the sizing.  In this
10129  * case <code_point> should be the final code point that has already been
10130  * placed into the node.  This value will be ignored except that under some
10131  * circumstances <*flagp> is set based on it.
10132  *
10133  * If <len> is zero, the function assumes that the node is to contain only
10134  * the single character given by <code_point> and calculates what <len>
10135  * should be.  In pass 1, it sizes the node appropriately.  In pass 2, it
10136  * additionally will populate the node's STRING with <code_point>, if <len>
10137  * is 0.  In both cases <*flagp> is appropriately set
10138  *
10139  * It knows that under FOLD, the Latin Sharp S and UTF characters above
10140  * 255, must be folded (the former only when the rules indicate it can
10141  * match 'ss') */
10142
10143  bool len_passed_in = cBOOL(len != 0);
10144  U8 character[UTF8_MAXBYTES_CASE+1];
10145
10146  PERL_ARGS_ASSERT_ALLOC_MAYBE_POPULATE_EXACT;
10147
10148  if (! len_passed_in) {
10149   if (UTF) {
10150    if (FOLD && (! LOC || code_point > 255)) {
10151     _to_uni_fold_flags(NATIVE_TO_UNI(code_point),
10152         character,
10153         &len,
10154         FOLD_FLAGS_FULL | ((LOC)
10155              ? FOLD_FLAGS_LOCALE
10156              : (ASCII_FOLD_RESTRICTED)
10157              ? FOLD_FLAGS_NOMIX_ASCII
10158              : 0));
10159    }
10160    else {
10161     uvchr_to_utf8( character, code_point);
10162     len = UTF8SKIP(character);
10163    }
10164   }
10165   else if (! FOLD
10166     || code_point != LATIN_SMALL_LETTER_SHARP_S
10167     || ASCII_FOLD_RESTRICTED
10168     || ! AT_LEAST_UNI_SEMANTICS)
10169   {
10170    *character = (U8) code_point;
10171    len = 1;
10172   }
10173   else {
10174    *character = 's';
10175    *(character + 1) = 's';
10176    len = 2;
10177   }
10178  }
10179
10180  if (SIZE_ONLY) {
10181   RExC_size += STR_SZ(len);
10182  }
10183  else {
10184   RExC_emit += STR_SZ(len);
10185   STR_LEN(node) = len;
10186   if (! len_passed_in) {
10187    Copy((char *) character, STRING(node), len, char);
10188   }
10189  }
10190
10191  *flagp |= HASWIDTH;
10192
10193  /* A single character node is SIMPLE, except for the special-cased SHARP S
10194  * under /di. */
10195  if ((len == 1 || (UTF && len == UNISKIP(code_point)))
10196   && (code_point != LATIN_SMALL_LETTER_SHARP_S
10197    || ! FOLD || ! DEPENDS_SEMANTICS))
10198  {
10199   *flagp |= SIMPLE;
10200  }
10201 }
10202
10203 /*
10204  - regatom - the lowest level
10205
10206    Try to identify anything special at the start of the pattern. If there
10207    is, then handle it as required. This may involve generating a single regop,
10208    such as for an assertion; or it may involve recursing, such as to
10209    handle a () structure.
10210
10211    If the string doesn't start with something special then we gobble up
10212    as much literal text as we can.
10213
10214    Once we have been able to handle whatever type of thing started the
10215    sequence, we return.
10216
10217    Note: we have to be careful with escapes, as they can be both literal
10218    and special, and in the case of \10 and friends, context determines which.
10219
10220    A summary of the code structure is:
10221
10222    switch (first_byte) {
10223   cases for each special:
10224    handle this special;
10225    break;
10226   case '\\':
10227    switch (2nd byte) {
10228     cases for each unambiguous special:
10229      handle this special;
10230      break;
10231     cases for each ambigous special/literal:
10232      disambiguate;
10233      if (special)  handle here
10234      else goto defchar;
10235     default: // unambiguously literal:
10236      goto defchar;
10237    }
10238   default:  // is a literal char
10239    // FALL THROUGH
10240   defchar:
10241    create EXACTish node for literal;
10242    while (more input and node isn't full) {
10243     switch (input_byte) {
10244     cases for each special;
10245      make sure parse pointer is set so that the next call to
10246       regatom will see this special first
10247      goto loopdone; // EXACTish node terminated by prev. char
10248     default:
10249      append char to EXACTISH node;
10250     }
10251     get next input byte;
10252    }
10253   loopdone:
10254    }
10255    return the generated node;
10256
10257    Specifically there are two separate switches for handling
10258    escape sequences, with the one for handling literal escapes requiring
10259    a dummy entry for all of the special escapes that are actually handled
10260    by the other.
10261
10262    Returns NULL, setting *flagp to TRYAGAIN if reg() returns NULL with
10263    TRYAGAIN.
10264    Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs to be
10265    restarted.
10266    Otherwise does not return NULL.
10267 */
10268
10269 STATIC regnode *
10270 S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
10271 {
10272  dVAR;
10273  regnode *ret = NULL;
10274  I32 flags = 0;
10275  char *parse_start = RExC_parse;
10276  U8 op;
10277  int invert = 0;
10278
10279  GET_RE_DEBUG_FLAGS_DECL;
10280
10281  *flagp = WORST;  /* Tentatively. */
10282
10283  DEBUG_PARSE("atom");
10284
10285  PERL_ARGS_ASSERT_REGATOM;
10286
10287 tryagain:
10288  switch ((U8)*RExC_parse) {
10289  case '^':
10290   RExC_seen_zerolen++;
10291   nextchar(pRExC_state);
10292   if (RExC_flags & RXf_PMf_MULTILINE)
10293    ret = reg_node(pRExC_state, MBOL);
10294   else if (RExC_flags & RXf_PMf_SINGLELINE)
10295    ret = reg_node(pRExC_state, SBOL);
10296   else
10297    ret = reg_node(pRExC_state, BOL);
10298   Set_Node_Length(ret, 1); /* MJD */
10299   break;
10300  case '$':
10301   nextchar(pRExC_state);
10302   if (*RExC_parse)
10303    RExC_seen_zerolen++;
10304   if (RExC_flags & RXf_PMf_MULTILINE)
10305    ret = reg_node(pRExC_state, MEOL);
10306   else if (RExC_flags & RXf_PMf_SINGLELINE)
10307    ret = reg_node(pRExC_state, SEOL);
10308   else
10309    ret = reg_node(pRExC_state, EOL);
10310   Set_Node_Length(ret, 1); /* MJD */
10311   break;
10312  case '.':
10313   nextchar(pRExC_state);
10314   if (RExC_flags & RXf_PMf_SINGLELINE)
10315    ret = reg_node(pRExC_state, SANY);
10316   else
10317    ret = reg_node(pRExC_state, REG_ANY);
10318   *flagp |= HASWIDTH|SIMPLE;
10319   RExC_naughty++;
10320   Set_Node_Length(ret, 1); /* MJD */
10321   break;
10322  case '[':
10323  {
10324   char * const oregcomp_parse = ++RExC_parse;
10325   ret = regclass(pRExC_state, flagp,depth+1,
10326      FALSE, /* means parse the whole char class */
10327      TRUE, /* allow multi-char folds */
10328      FALSE, /* don't silence non-portable warnings. */
10329      NULL);
10330   if (*RExC_parse != ']') {
10331    RExC_parse = oregcomp_parse;
10332    vFAIL("Unmatched [");
10333   }
10334   if (ret == NULL) {
10335    if (*flagp & RESTART_UTF8)
10336     return NULL;
10337    FAIL2("panic: regclass returned NULL to regatom, flags=%#X",
10338     *flagp);
10339   }
10340   nextchar(pRExC_state);
10341   Set_Node_Length(ret, RExC_parse - oregcomp_parse + 1); /* MJD */
10342   break;
10343  }
10344  case '(':
10345   nextchar(pRExC_state);
10346   ret = reg(pRExC_state, 2, &flags,depth+1);
10347   if (ret == NULL) {
10348     if (flags & TRYAGAIN) {
10349      if (RExC_parse == RExC_end) {
10350       /* Make parent create an empty node if needed. */
10351       *flagp |= TRYAGAIN;
10352       return(NULL);
10353      }
10354      goto tryagain;
10355     }
10356     if (flags & RESTART_UTF8) {
10357      *flagp = RESTART_UTF8;
10358      return NULL;
10359     }
10360     FAIL2("panic: reg returned NULL to regatom, flags=%#X", flags);
10361   }
10362   *flagp |= flags&(HASWIDTH|SPSTART|SIMPLE|POSTPONED);
10363   break;
10364  case '|':
10365  case ')':
10366   if (flags & TRYAGAIN) {
10367    *flagp |= TRYAGAIN;
10368    return NULL;
10369   }
10370   vFAIL("Internal urp");
10371         /* Supposed to be caught earlier. */
10372   break;
10373  case '{':
10374   if (!regcurly(RExC_parse, FALSE)) {
10375    RExC_parse++;
10376    goto defchar;
10377   }
10378   /* FALL THROUGH */
10379  case '?':
10380  case '+':
10381  case '*':
10382   RExC_parse++;
10383   vFAIL("Quantifier follows nothing");
10384   break;
10385  case '\\':
10386   /* Special Escapes
10387
10388   This switch handles escape sequences that resolve to some kind
10389   of special regop and not to literal text. Escape sequnces that
10390   resolve to literal text are handled below in the switch marked
10391   "Literal Escapes".
10392
10393   Every entry in this switch *must* have a corresponding entry
10394   in the literal escape switch. However, the opposite is not
10395   required, as the default for this switch is to jump to the
10396   literal text handling code.
10397   */
10398   switch ((U8)*++RExC_parse) {
10399    U8 arg;
10400   /* Special Escapes */
10401   case 'A':
10402    RExC_seen_zerolen++;
10403    ret = reg_node(pRExC_state, SBOL);
10404    *flagp |= SIMPLE;
10405    goto finish_meta_pat;
10406   case 'G':
10407    ret = reg_node(pRExC_state, GPOS);
10408    RExC_seen |= REG_SEEN_GPOS;
10409    *flagp |= SIMPLE;
10410    goto finish_meta_pat;
10411   case 'K':
10412    RExC_seen_zerolen++;
10413    ret = reg_node(pRExC_state, KEEPS);
10414    *flagp |= SIMPLE;
10415    /* XXX:dmq : disabling in-place substitution seems to
10416    * be necessary here to avoid cases of memory corruption, as
10417    * with: C<$_="x" x 80; s/x\K/y/> -- rgs
10418    */
10419    RExC_seen |= REG_SEEN_LOOKBEHIND;
10420    goto finish_meta_pat;
10421   case 'Z':
10422    ret = reg_node(pRExC_state, SEOL);
10423    *flagp |= SIMPLE;
10424    RExC_seen_zerolen++;  /* Do not optimize RE away */
10425    goto finish_meta_pat;
10426   case 'z':
10427    ret = reg_node(pRExC_state, EOS);
10428    *flagp |= SIMPLE;
10429    RExC_seen_zerolen++;  /* Do not optimize RE away */
10430    goto finish_meta_pat;
10431   case 'C':
10432    ret = reg_node(pRExC_state, CANY);
10433    RExC_seen |= REG_SEEN_CANY;
10434    *flagp |= HASWIDTH|SIMPLE;
10435    goto finish_meta_pat;
10436   case 'X':
10437    ret = reg_node(pRExC_state, CLUMP);
10438    *flagp |= HASWIDTH;
10439    goto finish_meta_pat;
10440
10441   case 'W':
10442    invert = 1;
10443    /* FALLTHROUGH */
10444   case 'w':
10445    arg = ANYOF_WORDCHAR;
10446    goto join_posix;
10447
10448   case 'b':
10449    RExC_seen_zerolen++;
10450    RExC_seen |= REG_SEEN_LOOKBEHIND;
10451    op = BOUND + get_regex_charset(RExC_flags);
10452    if (op > BOUNDA) {  /* /aa is same as /a */
10453     op = BOUNDA;
10454    }
10455    ret = reg_node(pRExC_state, op);
10456    FLAGS(ret) = get_regex_charset(RExC_flags);
10457    *flagp |= SIMPLE;
10458    if (! SIZE_ONLY && (U8) *(RExC_parse + 1) == '{') {
10459     ckWARNdep(RExC_parse, "\"\\b{\" is deprecated; use \"\\b\\{\" or \"\\b[{]\" instead");
10460    }
10461    goto finish_meta_pat;
10462   case 'B':
10463    RExC_seen_zerolen++;
10464    RExC_seen |= REG_SEEN_LOOKBEHIND;
10465    op = NBOUND + get_regex_charset(RExC_flags);
10466    if (op > NBOUNDA) { /* /aa is same as /a */
10467     op = NBOUNDA;
10468    }
10469    ret = reg_node(pRExC_state, op);
10470    FLAGS(ret) = get_regex_charset(RExC_flags);
10471    *flagp |= SIMPLE;
10472    if (! SIZE_ONLY && (U8) *(RExC_parse + 1) == '{') {
10473     ckWARNdep(RExC_parse, "\"\\B{\" is deprecated; use \"\\B\\{\" or \"\\B[{]\" instead");
10474    }
10475    goto finish_meta_pat;
10476
10477   case 'D':
10478    invert = 1;
10479    /* FALLTHROUGH */
10480   case 'd':
10481    arg = ANYOF_DIGIT;
10482    goto join_posix;
10483
10484   case 'R':
10485    ret = reg_node(pRExC_state, LNBREAK);
10486    *flagp |= HASWIDTH|SIMPLE;
10487    goto finish_meta_pat;
10488
10489   case 'H':
10490    invert = 1;
10491    /* FALLTHROUGH */
10492   case 'h':
10493    arg = ANYOF_BLANK;
10494    op = POSIXU;
10495    goto join_posix_op_known;
10496
10497   case 'V':
10498    invert = 1;
10499    /* FALLTHROUGH */
10500   case 'v':
10501    arg = ANYOF_VERTWS;
10502    op = POSIXU;
10503    goto join_posix_op_known;
10504
10505   case 'S':
10506    invert = 1;
10507    /* FALLTHROUGH */
10508   case 's':
10509    arg = ANYOF_SPACE;
10510
10511   join_posix:
10512
10513    op = POSIXD + get_regex_charset(RExC_flags);
10514    if (op > POSIXA) {  /* /aa is same as /a */
10515     op = POSIXA;
10516    }
10517
10518   join_posix_op_known:
10519
10520    if (invert) {
10521     op += NPOSIXD - POSIXD;
10522    }
10523
10524    ret = reg_node(pRExC_state, op);
10525    if (! SIZE_ONLY) {
10526     FLAGS(ret) = namedclass_to_classnum(arg);
10527    }
10528
10529    *flagp |= HASWIDTH|SIMPLE;
10530    /* FALL THROUGH */
10531
10532   finish_meta_pat:
10533    nextchar(pRExC_state);
10534    Set_Node_Length(ret, 2); /* MJD */
10535    break;
10536   case 'p':
10537   case 'P':
10538    {
10539 #ifdef DEBUGGING
10540     char* parse_start = RExC_parse - 2;
10541 #endif
10542
10543     RExC_parse--;
10544
10545     ret = regclass(pRExC_state, flagp,depth+1,
10546        TRUE, /* means just parse this element */
10547        FALSE, /* don't allow multi-char folds */
10548        FALSE, /* don't silence non-portable warnings.
10549           It would be a bug if these returned
10550           non-portables */
10551        NULL);
10552     /* regclass() can only return RESTART_UTF8 if multi-char folds
10553     are allowed.  */
10554     if (!ret)
10555      FAIL2("panic: regclass returned NULL to regatom, flags=%#X",
10556       *flagp);
10557
10558     RExC_parse--;
10559
10560     Set_Node_Offset(ret, parse_start + 2);
10561     Set_Node_Cur_Length(ret);
10562     nextchar(pRExC_state);
10563    }
10564    break;
10565   case 'N':
10566    /* Handle \N and \N{NAME} with multiple code points here and not
10567    * below because it can be multicharacter. join_exact() will join
10568    * them up later on.  Also this makes sure that things like
10569    * /\N{BLAH}+/ and \N{BLAH} being multi char Just Happen. dmq.
10570    * The options to the grok function call causes it to fail if the
10571    * sequence is just a single code point.  We then go treat it as
10572    * just another character in the current EXACT node, and hence it
10573    * gets uniform treatment with all the other characters.  The
10574    * special treatment for quantifiers is not needed for such single
10575    * character sequences */
10576    ++RExC_parse;
10577    if (! grok_bslash_N(pRExC_state, &ret, NULL, flagp, depth, FALSE,
10578         FALSE /* not strict */ )) {
10579     if (*flagp & RESTART_UTF8)
10580      return NULL;
10581     RExC_parse--;
10582     goto defchar;
10583    }
10584    break;
10585   case 'k':    /* Handle \k<NAME> and \k'NAME' */
10586   parse_named_seq:
10587   {
10588    char ch= RExC_parse[1];
10589    if (ch != '<' && ch != '\'' && ch != '{') {
10590     RExC_parse++;
10591     vFAIL2("Sequence %.2s... not terminated",parse_start);
10592    } else {
10593     /* this pretty much dupes the code for (?P=...) in reg(), if
10594     you change this make sure you change that */
10595     char* name_start = (RExC_parse += 2);
10596     U32 num = 0;
10597     SV *sv_dat = reg_scan_name(pRExC_state,
10598      SIZE_ONLY ? REG_RSN_RETURN_NULL : REG_RSN_RETURN_DATA);
10599     ch= (ch == '<') ? '>' : (ch == '{') ? '}' : '\'';
10600     if (RExC_parse == name_start || *RExC_parse != ch)
10601      vFAIL2("Sequence %.3s... not terminated",parse_start);
10602
10603     if (!SIZE_ONLY) {
10604      num = add_data( pRExC_state, 1, "S" );
10605      RExC_rxi->data->data[num]=(void*)sv_dat;
10606      SvREFCNT_inc_simple_void(sv_dat);
10607     }
10608
10609     RExC_sawback = 1;
10610     ret = reganode(pRExC_state,
10611        ((! FOLD)
10612         ? NREF
10613         : (ASCII_FOLD_RESTRICTED)
10614         ? NREFFA
10615         : (AT_LEAST_UNI_SEMANTICS)
10616          ? NREFFU
10617          : (LOC)
10618          ? NREFFL
10619          : NREFF),
10620         num);
10621     *flagp |= HASWIDTH;
10622
10623     /* override incorrect value set in reganode MJD */
10624     Set_Node_Offset(ret, parse_start+1);
10625     Set_Node_Cur_Length(ret); /* MJD */
10626     nextchar(pRExC_state);
10627
10628    }
10629    break;
10630   }
10631   case 'g':
10632   case '1': case '2': case '3': case '4':
10633   case '5': case '6': case '7': case '8': case '9':
10634    {
10635     I32 num;
10636     bool isg = *RExC_parse == 'g';
10637     bool isrel = 0;
10638     bool hasbrace = 0;
10639     if (isg) {
10640      RExC_parse++;
10641      if (*RExC_parse == '{') {
10642       RExC_parse++;
10643       hasbrace = 1;
10644      }
10645      if (*RExC_parse == '-') {
10646       RExC_parse++;
10647       isrel = 1;
10648      }
10649      if (hasbrace && !isDIGIT(*RExC_parse)) {
10650       if (isrel) RExC_parse--;
10651       RExC_parse -= 2;
10652       goto parse_named_seq;
10653     }   }
10654     num = atoi(RExC_parse);
10655     if (isg && num == 0)
10656      vFAIL("Reference to invalid group 0");
10657     if (isrel) {
10658      num = RExC_npar - num;
10659      if (num < 1)
10660       vFAIL("Reference to nonexistent or unclosed group");
10661     }
10662     if (!isg && num > 9 && num >= RExC_npar)
10663      /* Probably a character specified in octal, e.g. \35 */
10664      goto defchar;
10665     else {
10666      char * const parse_start = RExC_parse - 1; /* MJD */
10667      while (isDIGIT(*RExC_parse))
10668       RExC_parse++;
10669      if (parse_start == RExC_parse - 1)
10670       vFAIL("Unterminated \\g... pattern");
10671      if (hasbrace) {
10672       if (*RExC_parse != '}')
10673        vFAIL("Unterminated \\g{...} pattern");
10674       RExC_parse++;
10675      }
10676      if (!SIZE_ONLY) {
10677       if (num > (I32)RExC_rx->nparens)
10678        vFAIL("Reference to nonexistent group");
10679      }
10680      RExC_sawback = 1;
10681      ret = reganode(pRExC_state,
10682         ((! FOLD)
10683          ? REF
10684          : (ASCII_FOLD_RESTRICTED)
10685          ? REFFA
10686          : (AT_LEAST_UNI_SEMANTICS)
10687           ? REFFU
10688           : (LOC)
10689           ? REFFL
10690           : REFF),
10691          num);
10692      *flagp |= HASWIDTH;
10693
10694      /* override incorrect value set in reganode MJD */
10695      Set_Node_Offset(ret, parse_start+1);
10696      Set_Node_Cur_Length(ret); /* MJD */
10697      RExC_parse--;
10698      nextchar(pRExC_state);
10699     }
10700    }
10701    break;
10702   case '\0':
10703    if (RExC_parse >= RExC_end)
10704     FAIL("Trailing \\");
10705    /* FALL THROUGH */
10706   default:
10707    /* Do not generate "unrecognized" warnings here, we fall
10708    back into the quick-grab loop below */
10709    parse_start--;
10710    goto defchar;
10711   }
10712   break;
10713
10714  case '#':
10715   if (RExC_flags & RXf_PMf_EXTENDED) {
10716    if ( reg_skipcomment( pRExC_state ) )
10717     goto tryagain;
10718   }
10719   /* FALL THROUGH */
10720
10721  default:
10722
10723    parse_start = RExC_parse - 1;
10724
10725    RExC_parse++;
10726
10727   defchar: {
10728    STRLEN len = 0;
10729    UV ender;
10730    char *p;
10731    char *s;
10732 #define MAX_NODE_STRING_SIZE 127
10733    char foldbuf[MAX_NODE_STRING_SIZE+UTF8_MAXBYTES_CASE];
10734    char *s0;
10735    U8 upper_parse = MAX_NODE_STRING_SIZE;
10736    STRLEN foldlen;
10737    U8 node_type;
10738    bool next_is_quantifier;
10739    char * oldp = NULL;
10740
10741    /* If a folding node contains only code points that don't
10742    * participate in folds, it can be changed into an EXACT node,
10743    * which allows the optimizer more things to look for */
10744    bool maybe_exact;
10745
10746    ender = 0;
10747    node_type = compute_EXACTish(pRExC_state);
10748    ret = reg_node(pRExC_state, node_type);
10749
10750    /* In pass1, folded, we use a temporary buffer instead of the
10751    * actual node, as the node doesn't exist yet */
10752    s = (SIZE_ONLY && FOLD) ? foldbuf : STRING(ret);
10753
10754    s0 = s;
10755
10756   reparse:
10757
10758    /* We do the EXACTFish to EXACT node only if folding, and not if in
10759    * locale, as whether a character folds or not isn't known until
10760    * runtime */
10761    maybe_exact = FOLD && ! LOC;
10762
10763    /* XXX The node can hold up to 255 bytes, yet this only goes to
10764    * 127.  I (khw) do not know why.  Keeping it somewhat less than
10765    * 255 allows us to not have to worry about overflow due to
10766    * converting to utf8 and fold expansion, but that value is
10767    * 255-UTF8_MAXBYTES_CASE.  join_exact() may join adjacent nodes
10768    * split up by this limit into a single one using the real max of
10769    * 255.  Even at 127, this breaks under rare circumstances.  If
10770    * folding, we do not want to split a node at a character that is a
10771    * non-final in a multi-char fold, as an input string could just
10772    * happen to want to match across the node boundary.  The join
10773    * would solve that problem if the join actually happens.  But a
10774    * series of more than two nodes in a row each of 127 would cause
10775    * the first join to succeed to get to 254, but then there wouldn't
10776    * be room for the next one, which could at be one of those split
10777    * multi-char folds.  I don't know of any fool-proof solution.  One
10778    * could back off to end with only a code point that isn't such a
10779    * non-final, but it is possible for there not to be any in the
10780    * entire node. */
10781    for (p = RExC_parse - 1;
10782     len < upper_parse && p < RExC_end;
10783     len++)
10784    {
10785     oldp = p;
10786
10787     if (RExC_flags & RXf_PMf_EXTENDED)
10788      p = regwhite( pRExC_state, p );
10789     switch ((U8)*p) {
10790     case '^':
10791     case '$':
10792     case '.':
10793     case '[':
10794     case '(':
10795     case ')':
10796     case '|':
10797      goto loopdone;
10798     case '\\':
10799      /* Literal Escapes Switch
10800
10801      This switch is meant to handle escape sequences that
10802      resolve to a literal character.
10803
10804      Every escape sequence that represents something
10805      else, like an assertion or a char class, is handled
10806      in the switch marked 'Special Escapes' above in this
10807      routine, but also has an entry here as anything that
10808      isn't explicitly mentioned here will be treated as
10809      an unescaped equivalent literal.
10810      */
10811
10812      switch ((U8)*++p) {
10813      /* These are all the special escapes. */
10814      case 'A':             /* Start assertion */
10815      case 'b': case 'B':   /* Word-boundary assertion*/
10816      case 'C':             /* Single char !DANGEROUS! */
10817      case 'd': case 'D':   /* digit class */
10818      case 'g': case 'G':   /* generic-backref, pos assertion */
10819      case 'h': case 'H':   /* HORIZWS */
10820      case 'k': case 'K':   /* named backref, keep marker */
10821      case 'p': case 'P':   /* Unicode property */
10822        case 'R':   /* LNBREAK */
10823      case 's': case 'S':   /* space class */
10824      case 'v': case 'V':   /* VERTWS */
10825      case 'w': case 'W':   /* word class */
10826      case 'X':             /* eXtended Unicode "combining character sequence" */
10827      case 'z': case 'Z':   /* End of line/string assertion */
10828       --p;
10829       goto loopdone;
10830
10831      /* Anything after here is an escape that resolves to a
10832      literal. (Except digits, which may or may not)
10833      */
10834      case 'n':
10835       ender = '\n';
10836       p++;
10837       break;
10838      case 'N': /* Handle a single-code point named character. */
10839       /* The options cause it to fail if a multiple code
10840       * point sequence.  Handle those in the switch() above
10841       * */
10842       RExC_parse = p + 1;
10843       if (! grok_bslash_N(pRExC_state, NULL, &ender,
10844            flagp, depth, FALSE,
10845            FALSE /* not strict */ ))
10846       {
10847        if (*flagp & RESTART_UTF8)
10848         FAIL("panic: grok_bslash_N set RESTART_UTF8");
10849        RExC_parse = p = oldp;
10850        goto loopdone;
10851       }
10852       p = RExC_parse;
10853       if (ender > 0xff) {
10854        REQUIRE_UTF8;
10855       }
10856       break;
10857      case 'r':
10858       ender = '\r';
10859       p++;
10860       break;
10861      case 't':
10862       ender = '\t';
10863       p++;
10864       break;
10865      case 'f':
10866       ender = '\f';
10867       p++;
10868       break;
10869      case 'e':
10870       ender = ASCII_TO_NATIVE('\033');
10871       p++;
10872       break;
10873      case 'a':
10874       ender = ASCII_TO_NATIVE('\007');
10875       p++;
10876       break;
10877      case 'o':
10878       {
10879        UV result;
10880        const char* error_msg;
10881
10882        bool valid = grok_bslash_o(&p,
10883              &result,
10884              &error_msg,
10885              TRUE, /* out warnings */
10886              FALSE, /* not strict */
10887              TRUE, /* Output warnings
10888                 for non-
10889                 portables */
10890              UTF);
10891        if (! valid) {
10892         RExC_parse = p; /* going to die anyway; point
10893             to exact spot of failure */
10894         vFAIL(error_msg);
10895        }
10896        ender = result;
10897        if (PL_encoding && ender < 0x100) {
10898         goto recode_encoding;
10899        }
10900        if (ender > 0xff) {
10901         REQUIRE_UTF8;
10902        }
10903        break;
10904       }
10905      case 'x':
10906       {
10907        UV result = UV_MAX; /* initialize to erroneous
10908             value */
10909        const char* error_msg;
10910
10911        bool valid = grok_bslash_x(&p,
10912              &result,
10913              &error_msg,
10914              TRUE, /* out warnings */
10915              FALSE, /* not strict */
10916              TRUE, /* Output warnings
10917                 for non-
10918                 portables */
10919              UTF);
10920        if (! valid) {
10921         RExC_parse = p; /* going to die anyway; point
10922             to exact spot of failure */
10923         vFAIL(error_msg);
10924        }
10925        ender = result;
10926
10927        if (PL_encoding && ender < 0x100) {
10928         goto recode_encoding;
10929        }
10930        if (ender > 0xff) {
10931         REQUIRE_UTF8;
10932        }
10933        break;
10934       }
10935      case 'c':
10936       p++;
10937       ender = grok_bslash_c(*p++, UTF, SIZE_ONLY);
10938       break;
10939      case '0': case '1': case '2': case '3':case '4':
10940      case '5': case '6': case '7':
10941       if (*p == '0' ||
10942        (isDIGIT(p[1]) && atoi(p) >= RExC_npar))
10943       {
10944        I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
10945        STRLEN numlen = 3;
10946        ender = grok_oct(p, &numlen, &flags, NULL);
10947        if (ender > 0xff) {
10948         REQUIRE_UTF8;
10949        }
10950        p += numlen;
10951        if (SIZE_ONLY   /* like \08, \178 */
10952         && numlen < 3
10953         && p < RExC_end
10954         && isDIGIT(*p) && ckWARN(WARN_REGEXP))
10955        {
10956         reg_warn_non_literal_string(
10957           p + 1,
10958           form_short_octal_warning(p, numlen));
10959        }
10960       }
10961       else {  /* Not to be treated as an octal constant, go
10962         find backref */
10963        --p;
10964        goto loopdone;
10965       }
10966       if (PL_encoding && ender < 0x100)
10967        goto recode_encoding;
10968       break;
10969      recode_encoding:
10970       if (! RExC_override_recoding) {
10971        SV* enc = PL_encoding;
10972        ender = reg_recode((const char)(U8)ender, &enc);
10973        if (!enc && SIZE_ONLY)
10974         ckWARNreg(p, "Invalid escape in the specified encoding");
10975        REQUIRE_UTF8;
10976       }
10977       break;
10978      case '\0':
10979       if (p >= RExC_end)
10980        FAIL("Trailing \\");
10981       /* FALL THROUGH */
10982      default:
10983       if (!SIZE_ONLY&& isALPHANUMERIC(*p)) {
10984        /* Include any { following the alpha to emphasize
10985        * that it could be part of an escape at some point
10986        * in the future */
10987        int len = (isALPHA(*p) && *(p + 1) == '{') ? 2 : 1;
10988        ckWARN3reg(p + len, "Unrecognized escape \\%.*s passed through", len, p);
10989       }
10990       goto normal_default;
10991      } /* End of switch on '\' */
10992      break;
10993     default:    /* A literal character */
10994
10995      if (! SIZE_ONLY
10996       && RExC_flags & RXf_PMf_EXTENDED
10997       && ckWARN(WARN_DEPRECATED)
10998       && is_PATWS_non_low(p, UTF))
10999      {
11000       vWARN_dep(p + ((UTF) ? UTF8SKIP(p) : 1),
11001         "Escape literal pattern white space under /x");
11002      }
11003
11004     normal_default:
11005      if (UTF8_IS_START(*p) && UTF) {
11006       STRLEN numlen;
11007       ender = utf8n_to_uvchr((U8*)p, RExC_end - p,
11008            &numlen, UTF8_ALLOW_DEFAULT);
11009       p += numlen;
11010      }
11011      else
11012       ender = (U8) *p++;
11013      break;
11014     } /* End of switch on the literal */
11015
11016     /* Here, have looked at the literal character and <ender>
11017     * contains its ordinal, <p> points to the character after it
11018     */
11019
11020     if ( RExC_flags & RXf_PMf_EXTENDED)
11021      p = regwhite( pRExC_state, p );
11022
11023     /* If the next thing is a quantifier, it applies to this
11024     * character only, which means that this character has to be in
11025     * its own node and can't just be appended to the string in an
11026     * existing node, so if there are already other characters in
11027     * the node, close the node with just them, and set up to do
11028     * this character again next time through, when it will be the
11029     * only thing in its new node */
11030     if ((next_is_quantifier = (p < RExC_end && ISMULT2(p))) && len)
11031     {
11032      p = oldp;
11033      goto loopdone;
11034     }
11035
11036     if (FOLD) {
11037      if (UTF
11038        /* See comments for join_exact() as to why we fold
11039        * this non-UTF at compile time */
11040       || (node_type == EXACTFU
11041        && ender == LATIN_SMALL_LETTER_SHARP_S))
11042      {
11043
11044
11045       /* Prime the casefolded buffer.  Locale rules, which
11046       * apply only to code points < 256, aren't known until
11047       * execution, so for them, just output the original
11048       * character using utf8.  If we start to fold non-UTF
11049       * patterns, be sure to update join_exact() */
11050       if (LOC && ender < 256) {
11051        if (UNI_IS_INVARIANT(ender)) {
11052         *s = (U8) ender;
11053         foldlen = 1;
11054        } else {
11055         *s = UTF8_TWO_BYTE_HI(ender);
11056         *(s + 1) = UTF8_TWO_BYTE_LO(ender);
11057         foldlen = 2;
11058        }
11059       }
11060       else {
11061        UV folded = _to_uni_fold_flags(
11062           ender,
11063           (U8 *) s,
11064           &foldlen,
11065           FOLD_FLAGS_FULL
11066           | ((LOC) ?  FOLD_FLAGS_LOCALE
11067              : (ASCII_FOLD_RESTRICTED)
11068              ? FOLD_FLAGS_NOMIX_ASCII
11069              : 0)
11070            );
11071
11072        /* If this node only contains non-folding code
11073        * points so far, see if this new one is also
11074        * non-folding */
11075        if (maybe_exact) {
11076         if (folded != ender) {
11077          maybe_exact = FALSE;
11078         }
11079         else {
11080          /* Here the fold is the original; we have
11081          * to check further to see if anything
11082          * folds to it */
11083          if (! PL_utf8_foldable) {
11084           SV* swash = swash_init("utf8",
11085               "_Perl_Any_Folds",
11086               &PL_sv_undef, 1, 0);
11087           PL_utf8_foldable =
11088              _get_swash_invlist(swash);
11089           SvREFCNT_dec_NN(swash);
11090          }
11091          if (_invlist_contains_cp(PL_utf8_foldable,
11092                ender))
11093          {
11094           maybe_exact = FALSE;
11095          }
11096         }
11097        }
11098        ender = folded;
11099       }
11100       s += foldlen;
11101
11102       /* The loop increments <len> each time, as all but this
11103       * path (and the one just below for UTF) through it add
11104       * a single byte to the EXACTish node.  But this one
11105       * has changed len to be the correct final value, so
11106       * subtract one to cancel out the increment that
11107       * follows */
11108       len += foldlen - 1;
11109      }
11110      else {
11111       *(s++) = (char) ender;
11112       maybe_exact &= ! IS_IN_SOME_FOLD_L1(ender);
11113      }
11114     }
11115     else if (UTF) {
11116      const STRLEN unilen = reguni(pRExC_state, ender, s);
11117      if (unilen > 0) {
11118      s   += unilen;
11119      len += unilen;
11120      }
11121
11122      /* See comment just above for - 1 */
11123      len--;
11124     }
11125     else {
11126      REGC((char)ender, s++);
11127     }
11128
11129     if (next_is_quantifier) {
11130
11131      /* Here, the next input is a quantifier, and to get here,
11132      * the current character is the only one in the node.
11133      * Also, here <len> doesn't include the final byte for this
11134      * character */
11135      len++;
11136      goto loopdone;
11137     }
11138
11139    } /* End of loop through literal characters */
11140
11141    /* Here we have either exhausted the input or ran out of room in
11142    * the node.  (If we encountered a character that can't be in the
11143    * node, transfer is made directly to <loopdone>, and so we
11144    * wouldn't have fallen off the end of the loop.)  In the latter
11145    * case, we artificially have to split the node into two, because
11146    * we just don't have enough space to hold everything.  This
11147    * creates a problem if the final character participates in a
11148    * multi-character fold in the non-final position, as a match that
11149    * should have occurred won't, due to the way nodes are matched,
11150    * and our artificial boundary.  So back off until we find a non-
11151    * problematic character -- one that isn't at the beginning or
11152    * middle of such a fold.  (Either it doesn't participate in any
11153    * folds, or appears only in the final position of all the folds it
11154    * does participate in.)  A better solution with far fewer false
11155    * positives, and that would fill the nodes more completely, would
11156    * be to actually have available all the multi-character folds to
11157    * test against, and to back-off only far enough to be sure that
11158    * this node isn't ending with a partial one.  <upper_parse> is set
11159    * further below (if we need to reparse the node) to include just
11160    * up through that final non-problematic character that this code
11161    * identifies, so when it is set to less than the full node, we can
11162    * skip the rest of this */
11163    if (FOLD && p < RExC_end && upper_parse == MAX_NODE_STRING_SIZE) {
11164
11165     const STRLEN full_len = len;
11166
11167     assert(len >= MAX_NODE_STRING_SIZE);
11168
11169     /* Here, <s> points to the final byte of the final character.
11170     * Look backwards through the string until find a non-
11171     * problematic character */
11172
11173     if (! UTF) {
11174
11175      /* These two have no multi-char folds to non-UTF characters
11176      */
11177      if (ASCII_FOLD_RESTRICTED || LOC) {
11178       goto loopdone;
11179      }
11180
11181      while (--s >= s0 && IS_NON_FINAL_FOLD(*s)) { }
11182      len = s - s0 + 1;
11183     }
11184     else {
11185      if (!  PL_NonL1NonFinalFold) {
11186       PL_NonL1NonFinalFold = _new_invlist_C_array(
11187           NonL1_Perl_Non_Final_Folds_invlist);
11188      }
11189
11190      /* Point to the first byte of the final character */
11191      s = (char *) utf8_hop((U8 *) s, -1);
11192
11193      while (s >= s0) {   /* Search backwards until find
11194           non-problematic char */
11195       if (UTF8_IS_INVARIANT(*s)) {
11196
11197        /* There are no ascii characters that participate
11198        * in multi-char folds under /aa.  In EBCDIC, the
11199        * non-ascii invariants are all control characters,
11200        * so don't ever participate in any folds. */
11201        if (ASCII_FOLD_RESTRICTED
11202         || ! IS_NON_FINAL_FOLD(*s))
11203        {
11204         break;
11205        }
11206       }
11207       else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
11208
11209        /* No Latin1 characters participate in multi-char
11210        * folds under /l */
11211        if (LOC
11212         || ! IS_NON_FINAL_FOLD(TWO_BYTE_UTF8_TO_UNI(
11213                 *s, *(s+1))))
11214        {
11215         break;
11216        }
11217       }
11218       else if (! _invlist_contains_cp(
11219           PL_NonL1NonFinalFold,
11220           valid_utf8_to_uvchr((U8 *) s, NULL)))
11221       {
11222        break;
11223       }
11224
11225       /* Here, the current character is problematic in that
11226       * it does occur in the non-final position of some
11227       * fold, so try the character before it, but have to
11228       * special case the very first byte in the string, so
11229       * we don't read outside the string */
11230       s = (s == s0) ? s -1 : (char *) utf8_hop((U8 *) s, -1);
11231      } /* End of loop backwards through the string */
11232
11233      /* If there were only problematic characters in the string,
11234      * <s> will point to before s0, in which case the length
11235      * should be 0, otherwise include the length of the
11236      * non-problematic character just found */
11237      len = (s < s0) ? 0 : s - s0 + UTF8SKIP(s);
11238     }
11239
11240     /* Here, have found the final character, if any, that is
11241     * non-problematic as far as ending the node without splitting
11242     * it across a potential multi-char fold.  <len> contains the
11243     * number of bytes in the node up-to and including that
11244     * character, or is 0 if there is no such character, meaning
11245     * the whole node contains only problematic characters.  In
11246     * this case, give up and just take the node as-is.  We can't
11247     * do any better */
11248     if (len == 0) {
11249      len = full_len;
11250     } else {
11251
11252      /* Here, the node does contain some characters that aren't
11253      * problematic.  If one such is the final character in the
11254      * node, we are done */
11255      if (len == full_len) {
11256       goto loopdone;
11257      }
11258      else if (len + ((UTF) ? UTF8SKIP(s) : 1) == full_len) {
11259
11260       /* If the final character is problematic, but the
11261       * penultimate is not, back-off that last character to
11262       * later start a new node with it */
11263       p = oldp;
11264       goto loopdone;
11265      }
11266
11267      /* Here, the final non-problematic character is earlier
11268      * in the input than the penultimate character.  What we do
11269      * is reparse from the beginning, going up only as far as
11270      * this final ok one, thus guaranteeing that the node ends
11271      * in an acceptable character.  The reason we reparse is
11272      * that we know how far in the character is, but we don't
11273      * know how to correlate its position with the input parse.
11274      * An alternate implementation would be to build that
11275      * correlation as we go along during the original parse,
11276      * but that would entail extra work for every node, whereas
11277      * this code gets executed only when the string is too
11278      * large for the node, and the final two characters are
11279      * problematic, an infrequent occurrence.  Yet another
11280      * possible strategy would be to save the tail of the
11281      * string, and the next time regatom is called, initialize
11282      * with that.  The problem with this is that unless you
11283      * back off one more character, you won't be guaranteed
11284      * regatom will get called again, unless regbranch,
11285      * regpiece ... are also changed.  If you do back off that
11286      * extra character, so that there is input guaranteed to
11287      * force calling regatom, you can't handle the case where
11288      * just the first character in the node is acceptable.  I
11289      * (khw) decided to try this method which doesn't have that
11290      * pitfall; if performance issues are found, we can do a
11291      * combination of the current approach plus that one */
11292      upper_parse = len;
11293      len = 0;
11294      s = s0;
11295      goto reparse;
11296     }
11297    }   /* End of verifying node ends with an appropriate char */
11298
11299   loopdone:   /* Jumped to when encounters something that shouldn't be in
11300      the node */
11301
11302    /* If 'maybe_exact' is still set here, means there are no
11303    * code points in the node that participate in folds */
11304    if (FOLD && maybe_exact) {
11305     OP(ret) = EXACT;
11306    }
11307
11308    /* I (khw) don't know if you can get here with zero length, but the
11309    * old code handled this situation by creating a zero-length EXACT
11310    * node.  Might as well be NOTHING instead */
11311    if (len == 0) {
11312     OP(ret) = NOTHING;
11313    }
11314    else{
11315     alloc_maybe_populate_EXACT(pRExC_state, ret, flagp, len, ender);
11316    }
11317
11318    RExC_parse = p - 1;
11319    Set_Node_Cur_Length(ret); /* MJD */
11320    nextchar(pRExC_state);
11321    {
11322     /* len is STRLEN which is unsigned, need to copy to signed */
11323     IV iv = len;
11324     if (iv < 0)
11325      vFAIL("Internal disaster");
11326    }
11327
11328   } /* End of label 'defchar:' */
11329   break;
11330  } /* End of giant switch on input character */
11331
11332  return(ret);
11333 }
11334
11335 STATIC char *
11336 S_regwhite( RExC_state_t *pRExC_state, char *p )
11337 {
11338  const char *e = RExC_end;
11339
11340  PERL_ARGS_ASSERT_REGWHITE;
11341
11342  while (p < e) {
11343   if (isSPACE(*p))
11344    ++p;
11345   else if (*p == '#') {
11346    bool ended = 0;
11347    do {
11348     if (*p++ == '\n') {
11349      ended = 1;
11350      break;
11351     }
11352    } while (p < e);
11353    if (!ended)
11354     RExC_seen |= REG_SEEN_RUN_ON_COMMENT;
11355   }
11356   else
11357    break;
11358  }
11359  return p;
11360 }
11361
11362 STATIC char *
11363 S_regpatws( RExC_state_t *pRExC_state, char *p , const bool recognize_comment )
11364 {
11365  /* Returns the next non-pattern-white space, non-comment character (the
11366  * latter only if 'recognize_comment is true) in the string p, which is
11367  * ended by RExC_end.  If there is no line break ending a comment,
11368  * RExC_seen has added the REG_SEEN_RUN_ON_COMMENT flag; */
11369  const char *e = RExC_end;
11370
11371  PERL_ARGS_ASSERT_REGPATWS;
11372
11373  while (p < e) {
11374   STRLEN len;
11375   if ((len = is_PATWS_safe(p, e, UTF))) {
11376    p += len;
11377   }
11378   else if (recognize_comment && *p == '#') {
11379    bool ended = 0;
11380    do {
11381     p++;
11382     if (is_LNBREAK_safe(p, e, UTF)) {
11383      ended = 1;
11384      break;
11385     }
11386    } while (p < e);
11387    if (!ended)
11388     RExC_seen |= REG_SEEN_RUN_ON_COMMENT;
11389   }
11390   else
11391    break;
11392  }
11393  return p;
11394 }
11395
11396 /* Parse POSIX character classes: [[:foo:]], [[=foo=]], [[.foo.]].
11397    Character classes ([:foo:]) can also be negated ([:^foo:]).
11398    Returns a named class id (ANYOF_XXX) if successful, -1 otherwise.
11399    Equivalence classes ([=foo=]) and composites ([.foo.]) are parsed,
11400    but trigger failures because they are currently unimplemented. */
11401
11402 #define POSIXCC_DONE(c)   ((c) == ':')
11403 #define POSIXCC_NOTYET(c) ((c) == '=' || (c) == '.')
11404 #define POSIXCC(c) (POSIXCC_DONE(c) || POSIXCC_NOTYET(c))
11405
11406 PERL_STATIC_INLINE I32
11407 S_regpposixcc(pTHX_ RExC_state_t *pRExC_state, I32 value, const bool strict)
11408 {
11409  dVAR;
11410  I32 namedclass = OOB_NAMEDCLASS;
11411
11412  PERL_ARGS_ASSERT_REGPPOSIXCC;
11413
11414  if (value == '[' && RExC_parse + 1 < RExC_end &&
11415   /* I smell either [: or [= or [. -- POSIX has been here, right? */
11416   POSIXCC(UCHARAT(RExC_parse)))
11417  {
11418   const char c = UCHARAT(RExC_parse);
11419   char* const s = RExC_parse++;
11420
11421   while (RExC_parse < RExC_end && UCHARAT(RExC_parse) != c)
11422    RExC_parse++;
11423   if (RExC_parse == RExC_end) {
11424    if (strict) {
11425
11426     /* Try to give a better location for the error (than the end of
11427     * the string) by looking for the matching ']' */
11428     RExC_parse = s;
11429     while (RExC_parse < RExC_end && UCHARAT(RExC_parse) != ']') {
11430      RExC_parse++;
11431     }
11432     vFAIL2("Unmatched '%c' in POSIX class", c);
11433    }
11434    /* Grandfather lone [:, [=, [. */
11435    RExC_parse = s;
11436   }
11437   else {
11438    const char* const t = RExC_parse++; /* skip over the c */
11439    assert(*t == c);
11440
11441    if (UCHARAT(RExC_parse) == ']') {
11442     const char *posixcc = s + 1;
11443     RExC_parse++; /* skip over the ending ] */
11444
11445     if (*s == ':') {
11446      const I32 complement = *posixcc == '^' ? *posixcc++ : 0;
11447      const I32 skip = t - posixcc;
11448
11449      /* Initially switch on the length of the name.  */
11450      switch (skip) {
11451      case 4:
11452       if (memEQ(posixcc, "word", 4)) /* this is not POSIX,
11453               this is the Perl \w
11454               */
11455        namedclass = ANYOF_WORDCHAR;
11456       break;
11457      case 5:
11458       /* Names all of length 5.  */
11459       /* alnum alpha ascii blank cntrl digit graph lower
11460       print punct space upper  */
11461       /* Offset 4 gives the best switch position.  */
11462       switch (posixcc[4]) {
11463       case 'a':
11464        if (memEQ(posixcc, "alph", 4)) /* alpha */
11465         namedclass = ANYOF_ALPHA;
11466        break;
11467       case 'e':
11468        if (memEQ(posixcc, "spac", 4)) /* space */
11469         namedclass = ANYOF_PSXSPC;
11470        break;
11471       case 'h':
11472        if (memEQ(posixcc, "grap", 4)) /* graph */
11473         namedclass = ANYOF_GRAPH;
11474        break;
11475       case 'i':
11476        if (memEQ(posixcc, "asci", 4)) /* ascii */
11477         namedclass = ANYOF_ASCII;
11478        break;
11479       case 'k':
11480        if (memEQ(posixcc, "blan", 4)) /* blank */
11481         namedclass = ANYOF_BLANK;
11482        break;
11483       case 'l':
11484        if (memEQ(posixcc, "cntr", 4)) /* cntrl */
11485         namedclass = ANYOF_CNTRL;
11486        break;
11487       case 'm':
11488        if (memEQ(posixcc, "alnu", 4)) /* alnum */
11489         namedclass = ANYOF_ALPHANUMERIC;
11490        break;
11491       case 'r':
11492        if (memEQ(posixcc, "lowe", 4)) /* lower */
11493         namedclass = (FOLD) ? ANYOF_CASED : ANYOF_LOWER;
11494        else if (memEQ(posixcc, "uppe", 4)) /* upper */
11495         namedclass = (FOLD) ? ANYOF_CASED : ANYOF_UPPER;
11496        break;
11497       case 't':
11498        if (memEQ(posixcc, "digi", 4)) /* digit */
11499         namedclass = ANYOF_DIGIT;
11500        else if (memEQ(posixcc, "prin", 4)) /* print */
11501         namedclass = ANYOF_PRINT;
11502        else if (memEQ(posixcc, "punc", 4)) /* punct */
11503         namedclass = ANYOF_PUNCT;
11504        break;
11505       }
11506       break;
11507      case 6:
11508       if (memEQ(posixcc, "xdigit", 6))
11509        namedclass = ANYOF_XDIGIT;
11510       break;
11511      }
11512
11513      if (namedclass == OOB_NAMEDCLASS)
11514       Simple_vFAIL3("POSIX class [:%.*s:] unknown",
11515          t - s - 1, s + 1);
11516
11517      /* The #defines are structured so each complement is +1 to
11518      * the normal one */
11519      if (complement) {
11520       namedclass++;
11521      }
11522      assert (posixcc[skip] == ':');
11523      assert (posixcc[skip+1] == ']');
11524     } else if (!SIZE_ONLY) {
11525      /* [[=foo=]] and [[.foo.]] are still future. */
11526
11527      /* adjust RExC_parse so the warning shows after
11528      the class closes */
11529      while (UCHARAT(RExC_parse) && UCHARAT(RExC_parse) != ']')
11530       RExC_parse++;
11531      vFAIL3("POSIX syntax [%c %c] is reserved for future extensions", c, c);
11532     }
11533    } else {
11534     /* Maternal grandfather:
11535     * "[:" ending in ":" but not in ":]" */
11536     if (strict) {
11537      vFAIL("Unmatched '[' in POSIX class");
11538     }
11539
11540     /* Grandfather lone [:, [=, [. */
11541     RExC_parse = s;
11542    }
11543   }
11544  }
11545
11546  return namedclass;
11547 }
11548
11549 STATIC bool
11550 S_could_it_be_a_POSIX_class(pTHX_ RExC_state_t *pRExC_state)
11551 {
11552  /* This applies some heuristics at the current parse position (which should
11553  * be at a '[') to see if what follows might be intended to be a [:posix:]
11554  * class.  It returns true if it really is a posix class, of course, but it
11555  * also can return true if it thinks that what was intended was a posix
11556  * class that didn't quite make it.
11557  *
11558  * It will return true for
11559  *      [:alphanumerics:
11560  *      [:alphanumerics]  (as long as the ] isn't followed immediately by a
11561  *                         ')' indicating the end of the (?[
11562  *      [:any garbage including %^&$ punctuation:]
11563  *
11564  * This is designed to be called only from S_handle_regex_sets; it could be
11565  * easily adapted to be called from the spot at the beginning of regclass()
11566  * that checks to see in a normal bracketed class if the surrounding []
11567  * have been omitted ([:word:] instead of [[:word:]]).  But doing so would
11568  * change long-standing behavior, so I (khw) didn't do that */
11569  char* p = RExC_parse + 1;
11570  char first_char = *p;
11571
11572  PERL_ARGS_ASSERT_COULD_IT_BE_A_POSIX_CLASS;
11573
11574  assert(*(p - 1) == '[');
11575
11576  if (! POSIXCC(first_char)) {
11577   return FALSE;
11578  }
11579
11580  p++;
11581  while (p < RExC_end && isWORDCHAR(*p)) p++;
11582
11583  if (p >= RExC_end) {
11584   return FALSE;
11585  }
11586
11587  if (p - RExC_parse > 2    /* Got at least 1 word character */
11588   && (*p == first_char
11589    || (*p == ']' && p + 1 < RExC_end && *(p + 1) != ')')))
11590  {
11591   return TRUE;
11592  }
11593
11594  p = (char *) memchr(RExC_parse, ']', RExC_end - RExC_parse);
11595
11596  return (p
11597    && p - RExC_parse > 2 /* [:] evaluates to colon;
11598          [::] is a bad posix class. */
11599    && first_char == *(p - 1));
11600 }
11601
11602 STATIC regnode *
11603 S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist, I32 *flagp, U32 depth,
11604     char * const oregcomp_parse)
11605 {
11606  /* Handle the (?[...]) construct to do set operations */
11607
11608  U8 curchar;
11609  UV start, end; /* End points of code point ranges */
11610  SV* result_string;
11611  char *save_end, *save_parse;
11612  SV* final;
11613  STRLEN len;
11614  regnode* node;
11615  AV* stack;
11616  const bool save_fold = FOLD;
11617
11618  GET_RE_DEBUG_FLAGS_DECL;
11619
11620  PERL_ARGS_ASSERT_HANDLE_REGEX_SETS;
11621
11622  if (LOC) {
11623   vFAIL("(?[...]) not valid in locale");
11624  }
11625  RExC_uni_semantics = 1;
11626
11627  /* This will return only an ANYOF regnode, or (unlikely) something smaller
11628  * (such as EXACT).  Thus we can skip most everything if just sizing.  We
11629  * call regclass to handle '[]' so as to not have to reinvent its parsing
11630  * rules here (throwing away the size it computes each time).  And, we exit
11631  * upon an unescaped ']' that isn't one ending a regclass.  To do both
11632  * these things, we need to realize that something preceded by a backslash
11633  * is escaped, so we have to keep track of backslashes */
11634  if (SIZE_ONLY) {
11635
11636   Perl_ck_warner_d(aTHX_
11637    packWARN(WARN_EXPERIMENTAL__REGEX_SETS),
11638    "The regex_sets feature is experimental" REPORT_LOCATION,
11639    (int) (RExC_parse - RExC_precomp) , RExC_precomp, RExC_parse);
11640
11641   while (RExC_parse < RExC_end) {
11642    SV* current = NULL;
11643    RExC_parse = regpatws(pRExC_state, RExC_parse,
11644         TRUE); /* means recognize comments */
11645    switch (*RExC_parse) {
11646     default:
11647      break;
11648     case '\\':
11649      /* Skip the next byte (which could cause us to end up in
11650      * the middle of a UTF-8 character, but since none of those
11651      * are confusable with anything we currently handle in this
11652      * switch (invariants all), it's safe.  We'll just hit the
11653      * default: case next time and keep on incrementing until
11654      * we find one of the invariants we do handle. */
11655      RExC_parse++;
11656      break;
11657     case '[':
11658     {
11659      /* If this looks like it is a [:posix:] class, leave the
11660      * parse pointer at the '[' to fool regclass() into
11661      * thinking it is part of a '[[:posix:]]'.  That function
11662      * will use strict checking to force a syntax error if it
11663      * doesn't work out to a legitimate class */
11664      bool is_posix_class
11665          = could_it_be_a_POSIX_class(pRExC_state);
11666      if (! is_posix_class) {
11667       RExC_parse++;
11668      }
11669
11670      /* regclass() can only return RESTART_UTF8 if multi-char
11671      folds are allowed.  */
11672      if (!regclass(pRExC_state, flagp,depth+1,
11673         is_posix_class, /* parse the whole char
11674              class only if not a
11675              posix class */
11676         FALSE, /* don't allow multi-char folds */
11677         TRUE, /* silence non-portable warnings. */
11678         &current))
11679       FAIL2("panic: regclass returned NULL to handle_sets, flags=%#X",
11680        *flagp);
11681
11682      /* function call leaves parse pointing to the ']', except
11683      * if we faked it */
11684      if (is_posix_class) {
11685       RExC_parse--;
11686      }
11687
11688      SvREFCNT_dec(current);   /* In case it returned something */
11689      break;
11690     }
11691
11692     case ']':
11693      RExC_parse++;
11694      if (RExC_parse < RExC_end
11695       && *RExC_parse == ')')
11696      {
11697       node = reganode(pRExC_state, ANYOF, 0);
11698       RExC_size += ANYOF_SKIP;
11699       nextchar(pRExC_state);
11700       Set_Node_Length(node,
11701         RExC_parse - oregcomp_parse + 1); /* MJD */
11702       return node;
11703      }
11704      goto no_close;
11705    }
11706    RExC_parse++;
11707   }
11708
11709   no_close:
11710   FAIL("Syntax error in (?[...])");
11711  }
11712
11713  /* Pass 2 only after this.  Everything in this construct is a
11714  * metacharacter.  Operands begin with either a '\' (for an escape
11715  * sequence), or a '[' for a bracketed character class.  Any other
11716  * character should be an operator, or parenthesis for grouping.  Both
11717  * types of operands are handled by calling regclass() to parse them.  It
11718  * is called with a parameter to indicate to return the computed inversion
11719  * list.  The parsing here is implemented via a stack.  Each entry on the
11720  * stack is a single character representing one of the operators, or the
11721  * '('; or else a pointer to an operand inversion list. */
11722
11723 #define IS_OPERAND(a)  (! SvIOK(a))
11724
11725  /* The stack starts empty.  It is a syntax error if the first thing parsed
11726  * is a binary operator; everything else is pushed on the stack.  When an
11727  * operand is parsed, the top of the stack is examined.  If it is a binary
11728  * operator, the item before it should be an operand, and both are replaced
11729  * by the result of doing that operation on the new operand and the one on
11730  * the stack.   Thus a sequence of binary operands is reduced to a single
11731  * one before the next one is parsed.
11732  *
11733  * A unary operator may immediately follow a binary in the input, for
11734  * example
11735  *      [a] + ! [b]
11736  * When an operand is parsed and the top of the stack is a unary operator,
11737  * the operation is performed, and then the stack is rechecked to see if
11738  * this new operand is part of a binary operation; if so, it is handled as
11739  * above.
11740  *
11741  * A '(' is simply pushed on the stack; it is valid only if the stack is
11742  * empty, or the top element of the stack is an operator or another '('
11743  * (for which the parenthesized expression will become an operand).  By the
11744  * time the corresponding ')' is parsed everything in between should have
11745  * been parsed and evaluated to a single operand (or else is a syntax
11746  * error), and is handled as a regular operand */
11747
11748  stack = newAV();
11749
11750  while (RExC_parse < RExC_end) {
11751   I32 top_index = av_tindex(stack);
11752   SV** top_ptr;
11753   SV* current = NULL;
11754
11755   /* Skip white space */
11756   RExC_parse = regpatws(pRExC_state, RExC_parse,
11757         TRUE); /* means recognize comments */
11758   if (RExC_parse >= RExC_end) {
11759    Perl_croak(aTHX_ "panic: Read past end of '(?[ ])'");
11760   }
11761   if ((curchar = UCHARAT(RExC_parse)) == ']') {
11762    break;
11763   }
11764
11765   switch (curchar) {
11766
11767    case '?':
11768     if (av_tindex(stack) >= 0   /* This makes sure that we can
11769            safely subtract 1 from
11770            RExC_parse in the next clause.
11771            If we have something on the
11772            stack, we have parsed something
11773            */
11774      && UCHARAT(RExC_parse - 1) == '('
11775      && RExC_parse < RExC_end)
11776     {
11777      /* If is a '(?', could be an embedded '(?flags:(?[...])'.
11778      * This happens when we have some thing like
11779      *
11780      *   my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
11781      *   ...
11782      *   qr/(?[ \p{Digit} & $thai_or_lao ])/;
11783      *
11784      * Here we would be handling the interpolated
11785      * '$thai_or_lao'.  We handle this by a recursive call to
11786      * ourselves which returns the inversion list the
11787      * interpolated expression evaluates to.  We use the flags
11788      * from the interpolated pattern. */
11789      U32 save_flags = RExC_flags;
11790      const char * const save_parse = ++RExC_parse;
11791
11792      parse_lparen_question_flags(pRExC_state);
11793
11794      if (RExC_parse == save_parse  /* Makes sure there was at
11795              least one flag (or this
11796              embedding wasn't compiled)
11797             */
11798       || RExC_parse >= RExC_end - 4
11799       || UCHARAT(RExC_parse) != ':'
11800       || UCHARAT(++RExC_parse) != '('
11801       || UCHARAT(++RExC_parse) != '?'
11802       || UCHARAT(++RExC_parse) != '[')
11803      {
11804
11805       /* In combination with the above, this moves the
11806       * pointer to the point just after the first erroneous
11807       * character (or if there are no flags, to where they
11808       * should have been) */
11809       if (RExC_parse >= RExC_end - 4) {
11810        RExC_parse = RExC_end;
11811       }
11812       else if (RExC_parse != save_parse) {
11813        RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
11814       }
11815       vFAIL("Expecting '(?flags:(?[...'");
11816      }
11817      RExC_parse++;
11818      (void) handle_regex_sets(pRExC_state, &current, flagp,
11819              depth+1, oregcomp_parse);
11820
11821      /* Here, 'current' contains the embedded expression's
11822      * inversion list, and RExC_parse points to the trailing
11823      * ']'; the next character should be the ')' which will be
11824      * paired with the '(' that has been put on the stack, so
11825      * the whole embedded expression reduces to '(operand)' */
11826      RExC_parse++;
11827
11828      RExC_flags = save_flags;
11829      goto handle_operand;
11830     }
11831     /* FALL THROUGH */
11832
11833    default:
11834     RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
11835     vFAIL("Unexpected character");
11836
11837    case '\\':
11838     /* regclass() can only return RESTART_UTF8 if multi-char
11839     folds are allowed.  */
11840     if (!regclass(pRExC_state, flagp,depth+1,
11841        TRUE, /* means parse just the next thing */
11842        FALSE, /* don't allow multi-char folds */
11843        FALSE, /* don't silence non-portable warnings.  */
11844        &current))
11845      FAIL2("panic: regclass returned NULL to handle_sets, flags=%#X",
11846       *flagp);
11847     /* regclass() will return with parsing just the \ sequence,
11848     * leaving the parse pointer at the next thing to parse */
11849     RExC_parse--;
11850     goto handle_operand;
11851
11852    case '[':   /* Is a bracketed character class */
11853    {
11854     bool is_posix_class = could_it_be_a_POSIX_class(pRExC_state);
11855
11856     if (! is_posix_class) {
11857      RExC_parse++;
11858     }
11859
11860     /* regclass() can only return RESTART_UTF8 if multi-char
11861     folds are allowed.  */
11862     if(!regclass(pRExC_state, flagp,depth+1,
11863        is_posix_class, /* parse the whole char class
11864             only if not a posix class */
11865        FALSE, /* don't allow multi-char folds */
11866        FALSE, /* don't silence non-portable warnings.  */
11867        &current))
11868      FAIL2("panic: regclass returned NULL to handle_sets, flags=%#X",
11869       *flagp);
11870     /* function call leaves parse pointing to the ']', except if we
11871     * faked it */
11872     if (is_posix_class) {
11873      RExC_parse--;
11874     }
11875
11876     goto handle_operand;
11877    }
11878
11879    case '&':
11880    case '|':
11881    case '+':
11882    case '-':
11883    case '^':
11884     if (top_index < 0
11885      || ( ! (top_ptr = av_fetch(stack, top_index, FALSE)))
11886      || ! IS_OPERAND(*top_ptr))
11887     {
11888      RExC_parse++;
11889      vFAIL2("Unexpected binary operator '%c' with no preceding operand", curchar);
11890     }
11891     av_push(stack, newSVuv(curchar));
11892     break;
11893
11894    case '!':
11895     av_push(stack, newSVuv(curchar));
11896     break;
11897
11898    case '(':
11899     if (top_index >= 0) {
11900      top_ptr = av_fetch(stack, top_index, FALSE);
11901      assert(top_ptr);
11902      if (IS_OPERAND(*top_ptr)) {
11903       RExC_parse++;
11904       vFAIL("Unexpected '(' with no preceding operator");
11905      }
11906     }
11907     av_push(stack, newSVuv(curchar));
11908     break;
11909
11910    case ')':
11911    {
11912     SV* lparen;
11913     if (top_index < 1
11914      || ! (current = av_pop(stack))
11915      || ! IS_OPERAND(current)
11916      || ! (lparen = av_pop(stack))
11917      || IS_OPERAND(lparen)
11918      || SvUV(lparen) != '(')
11919     {
11920      RExC_parse++;
11921      vFAIL("Unexpected ')'");
11922     }
11923     top_index -= 2;
11924     SvREFCNT_dec_NN(lparen);
11925
11926     /* FALL THROUGH */
11927    }
11928
11929    handle_operand:
11930
11931     /* Here, we have an operand to process, in 'current' */
11932
11933     if (top_index < 0) {    /* Just push if stack is empty */
11934      av_push(stack, current);
11935     }
11936     else {
11937      SV* top = av_pop(stack);
11938      char current_operator;
11939
11940      if (IS_OPERAND(top)) {
11941       vFAIL("Operand with no preceding operator");
11942      }
11943      current_operator = (char) SvUV(top);
11944      switch (current_operator) {
11945       case '(':   /* Push the '(' back on followed by the new
11946          operand */
11947        av_push(stack, top);
11948        av_push(stack, current);
11949        SvREFCNT_inc(top);  /* Counters the '_dec' done
11950             just after the 'break', so
11951             it doesn't get wrongly freed
11952             */
11953        break;
11954
11955       case '!':
11956        _invlist_invert(current);
11957
11958        /* Unlike binary operators, the top of the stack,
11959        * now that this unary one has been popped off, may
11960        * legally be an operator, and we now have operand
11961        * for it. */
11962        top_index--;
11963        SvREFCNT_dec_NN(top);
11964        goto handle_operand;
11965
11966       case '&':
11967        _invlist_intersection(av_pop(stack),
11968             current,
11969             &current);
11970        av_push(stack, current);
11971        break;
11972
11973       case '|':
11974       case '+':
11975        _invlist_union(av_pop(stack), current, &current);
11976        av_push(stack, current);
11977        break;
11978
11979       case '-':
11980        _invlist_subtract(av_pop(stack), current, &current);
11981        av_push(stack, current);
11982        break;
11983
11984       case '^':   /* The union minus the intersection */
11985       {
11986        SV* i = NULL;
11987        SV* u = NULL;
11988        SV* element;
11989
11990        element = av_pop(stack);
11991        _invlist_union(element, current, &u);
11992        _invlist_intersection(element, current, &i);
11993        _invlist_subtract(u, i, &current);
11994        av_push(stack, current);
11995        SvREFCNT_dec_NN(i);
11996        SvREFCNT_dec_NN(u);
11997        SvREFCNT_dec_NN(element);
11998        break;
11999       }
12000
12001       default:
12002        Perl_croak(aTHX_ "panic: Unexpected item on '(?[ ])' stack");
12003     }
12004     SvREFCNT_dec_NN(top);
12005    }
12006   }
12007
12008   RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
12009  }
12010
12011  if (av_tindex(stack) < 0   /* Was empty */
12012   || ((final = av_pop(stack)) == NULL)
12013   || ! IS_OPERAND(final)
12014   || av_tindex(stack) >= 0)  /* More left on stack */
12015  {
12016   vFAIL("Incomplete expression within '(?[ ])'");
12017  }
12018
12019  /* Here, 'final' is the resultant inversion list from evaluating the
12020  * expression.  Return it if so requested */
12021  if (return_invlist) {
12022   *return_invlist = final;
12023   return END;
12024  }
12025
12026  /* Otherwise generate a resultant node, based on 'final'.  regclass() is
12027  * expecting a string of ranges and individual code points */
12028  invlist_iterinit(final);
12029  result_string = newSVpvs("");
12030  while (invlist_iternext(final, &start, &end)) {
12031   if (start == end) {
12032    Perl_sv_catpvf(aTHX_ result_string, "\\x{%"UVXf"}", start);
12033   }
12034   else {
12035    Perl_sv_catpvf(aTHX_ result_string, "\\x{%"UVXf"}-\\x{%"UVXf"}",
12036              start,          end);
12037   }
12038  }
12039
12040  save_parse = RExC_parse;
12041  RExC_parse = SvPV(result_string, len);
12042  save_end = RExC_end;
12043  RExC_end = RExC_parse + len;
12044
12045  /* We turn off folding around the call, as the class we have constructed
12046  * already has all folding taken into consideration, and we don't want
12047  * regclass() to add to that */
12048  RExC_flags &= ~RXf_PMf_FOLD;
12049  /* regclass() can only return RESTART_UTF8 if multi-char folds are allowed.
12050  */
12051  node = regclass(pRExC_state, flagp,depth+1,
12052      FALSE, /* means parse the whole char class */
12053      FALSE, /* don't allow multi-char folds */
12054      TRUE, /* silence non-portable warnings.  The above may very
12055        well have generated non-portable code points, but
12056        they're valid on this machine */
12057      NULL);
12058  if (!node)
12059   FAIL2("panic: regclass returned NULL to handle_sets, flags=%#"UVxf,
12060      PTR2UV(flagp));
12061  if (save_fold) {
12062   RExC_flags |= RXf_PMf_FOLD;
12063  }
12064  RExC_parse = save_parse + 1;
12065  RExC_end = save_end;
12066  SvREFCNT_dec_NN(final);
12067  SvREFCNT_dec_NN(result_string);
12068  SvREFCNT_dec_NN(stack);
12069
12070  nextchar(pRExC_state);
12071  Set_Node_Length(node, RExC_parse - oregcomp_parse + 1); /* MJD */
12072  return node;
12073 }
12074 #undef IS_OPERAND
12075
12076 /* The names of properties whose definitions are not known at compile time are
12077  * stored in this SV, after a constant heading.  So if the length has been
12078  * changed since initialization, then there is a run-time definition. */
12079 #define HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION (SvCUR(listsv) != initial_listsv_len)
12080
12081 STATIC regnode *
12082 S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
12083     const bool stop_at_1,  /* Just parse the next thing, don't
12084           look for a full character class */
12085     bool allow_multi_folds,
12086     const bool silence_non_portable,   /* Don't output warnings
12087              about too large
12088              characters */
12089     SV** ret_invlist)  /* Return an inversion list, not a node */
12090 {
12091  /* parse a bracketed class specification.  Most of these will produce an
12092  * ANYOF node; but something like [a] will produce an EXACT node; [aA], an
12093  * EXACTFish node; [[:ascii:]], a POSIXA node; etc.  It is more complex
12094  * under /i with multi-character folds: it will be rewritten following the
12095  * paradigm of this example, where the <multi-fold>s are characters which
12096  * fold to multiple character sequences:
12097  *      /[abc\x{multi-fold1}def\x{multi-fold2}ghi]/i
12098  * gets effectively rewritten as:
12099  *      /(?:\x{multi-fold1}|\x{multi-fold2}|[abcdefghi]/i
12100  * reg() gets called (recursively) on the rewritten version, and this
12101  * function will return what it constructs.  (Actually the <multi-fold>s
12102  * aren't physically removed from the [abcdefghi], it's just that they are
12103  * ignored in the recursion by means of a flag:
12104  * <RExC_in_multi_char_class>.)
12105  *
12106  * ANYOF nodes contain a bit map for the first 256 characters, with the
12107  * corresponding bit set if that character is in the list.  For characters
12108  * above 255, a range list or swash is used.  There are extra bits for \w,
12109  * etc. in locale ANYOFs, as what these match is not determinable at
12110  * compile time
12111  *
12112  * Returns NULL, setting *flagp to RESTART_UTF8 if the sizing scan needs
12113  * to be restarted.  This can only happen if ret_invlist is non-NULL.
12114  */
12115
12116  dVAR;
12117  UV prevvalue = OOB_UNICODE, save_prevvalue = OOB_UNICODE;
12118  IV range = 0;
12119  UV value = OOB_UNICODE, save_value = OOB_UNICODE;
12120  regnode *ret;
12121  STRLEN numlen;
12122  IV namedclass = OOB_NAMEDCLASS;
12123  char *rangebegin = NULL;
12124  bool need_class = 0;
12125  SV *listsv = NULL;
12126  STRLEN initial_listsv_len = 0; /* Kind of a kludge to see if it is more
12127          than just initialized.  */
12128  SV* properties = NULL;    /* Code points that match \p{} \P{} */
12129  SV* posixes = NULL;     /* Code points that match classes like, [:word:],
12130        extended beyond the Latin1 range */
12131  UV element_count = 0;   /* Number of distinct elements in the class.
12132        Optimizations may be possible if this is tiny */
12133  AV * multi_char_matches = NULL; /* Code points that fold to more than one
12134          character; used under /i */
12135  UV n;
12136  char * stop_ptr = RExC_end;    /* where to stop parsing */
12137  const bool skip_white = cBOOL(ret_invlist); /* ignore unescaped white
12138             space? */
12139  const bool strict = cBOOL(ret_invlist); /* Apply strict parsing rules? */
12140
12141  /* Unicode properties are stored in a swash; this holds the current one
12142  * being parsed.  If this swash is the only above-latin1 component of the
12143  * character class, an optimization is to pass it directly on to the
12144  * execution engine.  Otherwise, it is set to NULL to indicate that there
12145  * are other things in the class that have to be dealt with at execution
12146  * time */
12147  SV* swash = NULL;  /* Code points that match \p{} \P{} */
12148
12149  /* Set if a component of this character class is user-defined; just passed
12150  * on to the engine */
12151  bool has_user_defined_property = FALSE;
12152
12153  /* inversion list of code points this node matches only when the target
12154  * string is in UTF-8.  (Because is under /d) */
12155  SV* depends_list = NULL;
12156
12157  /* inversion list of code points this node matches.  For much of the
12158  * function, it includes only those that match regardless of the utf8ness
12159  * of the target string */
12160  SV* cp_list = NULL;
12161
12162 #ifdef EBCDIC
12163  /* In a range, counts how many 0-2 of the ends of it came from literals,
12164  * not escapes.  Thus we can tell if 'A' was input vs \x{C1} */
12165  UV literal_endpoint = 0;
12166 #endif
12167  bool invert = FALSE;    /* Is this class to be complemented */
12168
12169  /* Is there any thing like \W or [:^digit:] that matches above the legal
12170  * Unicode range? */
12171  bool runtime_posix_matches_above_Unicode = FALSE;
12172
12173  regnode * const orig_emit = RExC_emit; /* Save the original RExC_emit in
12174   case we need to change the emitted regop to an EXACT. */
12175  const char * orig_parse = RExC_parse;
12176  const I32 orig_size = RExC_size;
12177  GET_RE_DEBUG_FLAGS_DECL;
12178
12179  PERL_ARGS_ASSERT_REGCLASS;
12180 #ifndef DEBUGGING
12181  PERL_UNUSED_ARG(depth);
12182 #endif
12183
12184  DEBUG_PARSE("clas");
12185
12186  /* Assume we are going to generate an ANYOF node. */
12187  ret = reganode(pRExC_state, ANYOF, 0);
12188
12189  if (SIZE_ONLY) {
12190   RExC_size += ANYOF_SKIP;
12191   listsv = &PL_sv_undef; /* For code scanners: listsv always non-NULL. */
12192  }
12193  else {
12194   ANYOF_FLAGS(ret) = 0;
12195
12196   RExC_emit += ANYOF_SKIP;
12197   if (LOC) {
12198    ANYOF_FLAGS(ret) |= ANYOF_LOCALE;
12199   }
12200   listsv = newSVpvs_flags("# comment\n", SVs_TEMP);
12201   initial_listsv_len = SvCUR(listsv);
12202   SvTEMP_off(listsv); /* Grr, TEMPs and mortals are conflated.  */
12203  }
12204
12205  if (skip_white) {
12206   RExC_parse = regpatws(pRExC_state, RExC_parse,
12207        FALSE /* means don't recognize comments */);
12208  }
12209
12210  if (UCHARAT(RExC_parse) == '^') { /* Complement of range. */
12211   RExC_parse++;
12212   invert = TRUE;
12213   allow_multi_folds = FALSE;
12214   RExC_naughty++;
12215   if (skip_white) {
12216    RExC_parse = regpatws(pRExC_state, RExC_parse,
12217         FALSE /* means don't recognize comments */);
12218   }
12219  }
12220
12221  /* Check that they didn't say [:posix:] instead of [[:posix:]] */
12222  if (!SIZE_ONLY && RExC_parse < RExC_end && POSIXCC(UCHARAT(RExC_parse))) {
12223   const char *s = RExC_parse;
12224   const char  c = *s++;
12225
12226   while (isWORDCHAR(*s))
12227    s++;
12228   if (*s && c == *s && s[1] == ']') {
12229    SAVEFREESV(RExC_rx_sv);
12230    ckWARN3reg(s+2,
12231      "POSIX syntax [%c %c] belongs inside character classes",
12232      c, c);
12233    (void)ReREFCNT_inc(RExC_rx_sv);
12234   }
12235  }
12236
12237  /* If the caller wants us to just parse a single element, accomplish this
12238  * by faking the loop ending condition */
12239  if (stop_at_1 && RExC_end > RExC_parse) {
12240   stop_ptr = RExC_parse + 1;
12241  }
12242
12243  /* allow 1st char to be ']' (allowing it to be '-' is dealt with later) */
12244  if (UCHARAT(RExC_parse) == ']')
12245   goto charclassloop;
12246
12247 parseit:
12248  while (1) {
12249   if  (RExC_parse >= stop_ptr) {
12250    break;
12251   }
12252
12253   if (skip_white) {
12254    RExC_parse = regpatws(pRExC_state, RExC_parse,
12255         FALSE /* means don't recognize comments */);
12256   }
12257
12258   if  (UCHARAT(RExC_parse) == ']') {
12259    break;
12260   }
12261
12262  charclassloop:
12263
12264   namedclass = OOB_NAMEDCLASS; /* initialize as illegal */
12265   save_value = value;
12266   save_prevvalue = prevvalue;
12267
12268   if (!range) {
12269    rangebegin = RExC_parse;
12270    element_count++;
12271   }
12272   if (UTF) {
12273    value = utf8n_to_uvchr((U8*)RExC_parse,
12274         RExC_end - RExC_parse,
12275         &numlen, UTF8_ALLOW_DEFAULT);
12276    RExC_parse += numlen;
12277   }
12278   else
12279    value = UCHARAT(RExC_parse++);
12280
12281   if (value == '['
12282    && RExC_parse < RExC_end
12283    && POSIXCC(UCHARAT(RExC_parse)))
12284   {
12285    namedclass = regpposixcc(pRExC_state, value, strict);
12286   }
12287   else if (value == '\\') {
12288    if (UTF) {
12289     value = utf8n_to_uvchr((U8*)RExC_parse,
12290         RExC_end - RExC_parse,
12291         &numlen, UTF8_ALLOW_DEFAULT);
12292     RExC_parse += numlen;
12293    }
12294    else
12295     value = UCHARAT(RExC_parse++);
12296
12297    /* Some compilers cannot handle switching on 64-bit integer
12298    * values, therefore value cannot be an UV.  Yes, this will
12299    * be a problem later if we want switch on Unicode.
12300    * A similar issue a little bit later when switching on
12301    * namedclass. --jhi */
12302
12303    /* If the \ is escaping white space when white space is being
12304    * skipped, it means that that white space is wanted literally, and
12305    * is already in 'value'.  Otherwise, need to translate the escape
12306    * into what it signifies. */
12307    if (! skip_white || ! is_PATWS_cp(value)) switch ((I32)value) {
12308
12309    case 'w': namedclass = ANYOF_WORDCHAR; break;
12310    case 'W': namedclass = ANYOF_NWORDCHAR; break;
12311    case 's': namedclass = ANYOF_SPACE; break;
12312    case 'S': namedclass = ANYOF_NSPACE; break;
12313    case 'd': namedclass = ANYOF_DIGIT; break;
12314    case 'D': namedclass = ANYOF_NDIGIT; break;
12315    case 'v': namedclass = ANYOF_VERTWS; break;
12316    case 'V': namedclass = ANYOF_NVERTWS; break;
12317    case 'h': namedclass = ANYOF_HORIZWS; break;
12318    case 'H': namedclass = ANYOF_NHORIZWS; break;
12319    case 'N':  /* Handle \N{NAME} in class */
12320     {
12321      /* We only pay attention to the first char of
12322      multichar strings being returned. I kinda wonder
12323      if this makes sense as it does change the behaviour
12324      from earlier versions, OTOH that behaviour was broken
12325      as well. */
12326      if (! grok_bslash_N(pRExC_state, NULL, &value, flagp, depth,
12327          TRUE, /* => charclass */
12328          strict))
12329      {
12330       if (*flagp & RESTART_UTF8)
12331        FAIL("panic: grok_bslash_N set RESTART_UTF8");
12332       goto parseit;
12333      }
12334     }
12335     break;
12336    case 'p':
12337    case 'P':
12338     {
12339     char *e;
12340
12341     /* We will handle any undefined properties ourselves */
12342     U8 swash_init_flags = _CORE_SWASH_INIT_RETURN_IF_UNDEF;
12343
12344     if (RExC_parse >= RExC_end)
12345      vFAIL2("Empty \\%c{}", (U8)value);
12346     if (*RExC_parse == '{') {
12347      const U8 c = (U8)value;
12348      e = strchr(RExC_parse++, '}');
12349      if (!e)
12350       vFAIL2("Missing right brace on \\%c{}", c);
12351      while (isSPACE(UCHARAT(RExC_parse)))
12352       RExC_parse++;
12353      if (e == RExC_parse)
12354       vFAIL2("Empty \\%c{}", c);
12355      n = e - RExC_parse;
12356      while (isSPACE(UCHARAT(RExC_parse + n - 1)))
12357       n--;
12358     }
12359     else {
12360      e = RExC_parse;
12361      n = 1;
12362     }
12363     if (!SIZE_ONLY) {
12364      SV* invlist;
12365      char* name;
12366
12367      if (UCHARAT(RExC_parse) == '^') {
12368       RExC_parse++;
12369       n--;
12370       /* toggle.  (The rhs xor gets the single bit that
12371       * differs between P and p; the other xor inverts just
12372       * that bit) */
12373       value ^= 'P' ^ 'p';
12374
12375       while (isSPACE(UCHARAT(RExC_parse))) {
12376        RExC_parse++;
12377        n--;
12378       }
12379      }
12380      /* Try to get the definition of the property into
12381      * <invlist>.  If /i is in effect, the effective property
12382      * will have its name be <__NAME_i>.  The design is
12383      * discussed in commit
12384      * 2f833f5208e26b208886e51e09e2c072b5eabb46 */
12385      Newx(name, n + sizeof("_i__\n"), char);
12386
12387      sprintf(name, "%s%.*s%s\n",
12388          (FOLD) ? "__" : "",
12389          (int)n,
12390          RExC_parse,
12391          (FOLD) ? "_i" : ""
12392      );
12393
12394      /* Look up the property name, and get its swash and
12395      * inversion list, if the property is found  */
12396      if (swash) {
12397       SvREFCNT_dec_NN(swash);
12398      }
12399      swash = _core_swash_init("utf8", name, &PL_sv_undef,
12400            1, /* binary */
12401            0, /* not tr/// */
12402            NULL, /* No inversion list */
12403            &swash_init_flags
12404            );
12405      if (! swash || ! (invlist = _get_swash_invlist(swash))) {
12406       if (swash) {
12407        SvREFCNT_dec_NN(swash);
12408        swash = NULL;
12409       }
12410
12411       /* Here didn't find it.  It could be a user-defined
12412       * property that will be available at run-time.  If we
12413       * accept only compile-time properties, is an error;
12414       * otherwise add it to the list for run-time look up */
12415       if (ret_invlist) {
12416        RExC_parse = e + 1;
12417        vFAIL3("Property '%.*s' is unknown", (int) n, name);
12418       }
12419       Perl_sv_catpvf(aTHX_ listsv, "%cutf8::%s\n",
12420           (value == 'p' ? '+' : '!'),
12421           name);
12422       has_user_defined_property = TRUE;
12423
12424       /* We don't know yet, so have to assume that the
12425       * property could match something in the Latin1 range,
12426       * hence something that isn't utf8.  Note that this
12427       * would cause things in <depends_list> to match
12428       * inappropriately, except that any \p{}, including
12429       * this one forces Unicode semantics, which means there
12430       * is <no depends_list> */
12431       ANYOF_FLAGS(ret) |= ANYOF_NONBITMAP_NON_UTF8;
12432      }
12433      else {
12434
12435       /* Here, did get the swash and its inversion list.  If
12436       * the swash is from a user-defined property, then this
12437       * whole character class should be regarded as such */
12438       has_user_defined_property =
12439          (swash_init_flags
12440          & _CORE_SWASH_INIT_USER_DEFINED_PROPERTY);
12441
12442       /* Invert if asking for the complement */
12443       if (value == 'P') {
12444        _invlist_union_complement_2nd(properties,
12445               invlist,
12446               &properties);
12447
12448        /* The swash can't be used as-is, because we've
12449        * inverted things; delay removing it to here after
12450        * have copied its invlist above */
12451        SvREFCNT_dec_NN(swash);
12452        swash = NULL;
12453       }
12454       else {
12455        _invlist_union(properties, invlist, &properties);
12456       }
12457      }
12458      Safefree(name);
12459     }
12460     RExC_parse = e + 1;
12461     namedclass = ANYOF_UNIPROP;  /* no official name, but it's
12462             named */
12463
12464     /* \p means they want Unicode semantics */
12465     RExC_uni_semantics = 1;
12466     }
12467     break;
12468    case 'n': value = '\n';   break;
12469    case 'r': value = '\r';   break;
12470    case 't': value = '\t';   break;
12471    case 'f': value = '\f';   break;
12472    case 'b': value = '\b';   break;
12473    case 'e': value = ASCII_TO_NATIVE('\033');break;
12474    case 'a': value = ASCII_TO_NATIVE('\007');break;
12475    case 'o':
12476     RExC_parse--; /* function expects to be pointed at the 'o' */
12477     {
12478      const char* error_msg;
12479      bool valid = grok_bslash_o(&RExC_parse,
12480            &value,
12481            &error_msg,
12482            SIZE_ONLY,   /* warnings in pass
12483                1 only */
12484            strict,
12485            silence_non_portable,
12486            UTF);
12487      if (! valid) {
12488       vFAIL(error_msg);
12489      }
12490     }
12491     if (PL_encoding && value < 0x100) {
12492      goto recode_encoding;
12493     }
12494     break;
12495    case 'x':
12496     RExC_parse--; /* function expects to be pointed at the 'x' */
12497     {
12498      const char* error_msg;
12499      bool valid = grok_bslash_x(&RExC_parse,
12500            &value,
12501            &error_msg,
12502            TRUE, /* Output warnings */
12503            strict,
12504            silence_non_portable,
12505            UTF);
12506      if (! valid) {
12507       vFAIL(error_msg);
12508      }
12509     }
12510     if (PL_encoding && value < 0x100)
12511      goto recode_encoding;
12512     break;
12513    case 'c':
12514     value = grok_bslash_c(*RExC_parse++, UTF, SIZE_ONLY);
12515     break;
12516    case '0': case '1': case '2': case '3': case '4':
12517    case '5': case '6': case '7':
12518     {
12519      /* Take 1-3 octal digits */
12520      I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
12521      numlen = (strict) ? 4 : 3;
12522      value = grok_oct(--RExC_parse, &numlen, &flags, NULL);
12523      RExC_parse += numlen;
12524      if (numlen != 3) {
12525       if (strict) {
12526        RExC_parse += (UTF) ? UTF8SKIP(RExC_parse) : 1;
12527        vFAIL("Need exactly 3 octal digits");
12528       }
12529       else if (! SIZE_ONLY /* like \08, \178 */
12530         && numlen < 3
12531         && RExC_parse < RExC_end
12532         && isDIGIT(*RExC_parse)
12533         && ckWARN(WARN_REGEXP))
12534       {
12535        SAVEFREESV(RExC_rx_sv);
12536        reg_warn_non_literal_string(
12537         RExC_parse + 1,
12538         form_short_octal_warning(RExC_parse, numlen));
12539        (void)ReREFCNT_inc(RExC_rx_sv);
12540       }
12541      }
12542      if (PL_encoding && value < 0x100)
12543       goto recode_encoding;
12544      break;
12545     }
12546    recode_encoding:
12547     if (! RExC_override_recoding) {
12548      SV* enc = PL_encoding;
12549      value = reg_recode((const char)(U8)value, &enc);
12550      if (!enc) {
12551       if (strict) {
12552        vFAIL("Invalid escape in the specified encoding");
12553       }
12554       else if (SIZE_ONLY) {
12555        ckWARNreg(RExC_parse,
12556         "Invalid escape in the specified encoding");
12557       }
12558      }
12559      break;
12560     }
12561    default:
12562     /* Allow \_ to not give an error */
12563     if (!SIZE_ONLY && isWORDCHAR(value) && value != '_') {
12564      if (strict) {
12565       vFAIL2("Unrecognized escape \\%c in character class",
12566        (int)value);
12567      }
12568      else {
12569       SAVEFREESV(RExC_rx_sv);
12570       ckWARN2reg(RExC_parse,
12571        "Unrecognized escape \\%c in character class passed through",
12572        (int)value);
12573       (void)ReREFCNT_inc(RExC_rx_sv);
12574      }
12575     }
12576     break;
12577    }   /* End of switch on char following backslash */
12578   } /* end of handling backslash escape sequences */
12579 #ifdef EBCDIC
12580   else
12581    literal_endpoint++;
12582 #endif
12583
12584   /* Here, we have the current token in 'value' */
12585
12586   /* What matches in a locale is not known until runtime.  This includes
12587   * what the Posix classes (like \w, [:space:]) match.  Room must be
12588   * reserved (one time per class) to store such classes, either if Perl
12589   * is compiled so that locale nodes always should have this space, or
12590   * if there is such class info to be stored.  The space will contain a
12591   * bit for each named class that is to be matched against.  This isn't
12592   * needed for \p{} and pseudo-classes, as they are not affected by
12593   * locale, and hence are dealt with separately */
12594   if (LOC
12595    && ! need_class
12596    && (ANYOF_LOCALE == ANYOF_CLASS
12597     || (namedclass > OOB_NAMEDCLASS && namedclass < ANYOF_MAX)))
12598   {
12599    need_class = 1;
12600    if (SIZE_ONLY) {
12601     RExC_size += ANYOF_CLASS_SKIP - ANYOF_SKIP;
12602    }
12603    else {
12604     RExC_emit += ANYOF_CLASS_SKIP - ANYOF_SKIP;
12605     ANYOF_CLASS_ZERO(ret);
12606    }
12607    ANYOF_FLAGS(ret) |= ANYOF_CLASS;
12608   }
12609
12610   if (namedclass > OOB_NAMEDCLASS) { /* this is a named class \blah */
12611
12612    /* a bad range like a-\d, a-[:digit:].  The '-' is taken as a
12613    * literal, as is the character that began the false range, i.e.
12614    * the 'a' in the examples */
12615    if (range) {
12616     if (!SIZE_ONLY) {
12617      const int w = (RExC_parse >= rangebegin)
12618         ? RExC_parse - rangebegin
12619         : 0;
12620      if (strict) {
12621       vFAIL4("False [] range \"%*.*s\"", w, w, rangebegin);
12622      }
12623      else {
12624       SAVEFREESV(RExC_rx_sv); /* in case of fatal warnings */
12625       ckWARN4reg(RExC_parse,
12626         "False [] range \"%*.*s\"",
12627         w, w, rangebegin);
12628       (void)ReREFCNT_inc(RExC_rx_sv);
12629       cp_list = add_cp_to_invlist(cp_list, '-');
12630       cp_list = add_cp_to_invlist(cp_list, prevvalue);
12631      }
12632     }
12633
12634     range = 0; /* this was not a true range */
12635     element_count += 2; /* So counts for three values */
12636    }
12637
12638    if (! SIZE_ONLY) {
12639     U8 classnum = namedclass_to_classnum(namedclass);
12640     if (namedclass >= ANYOF_MAX) {  /* If a special class */
12641      if (namedclass != ANYOF_UNIPROP) { /* UNIPROP = \p and \P */
12642
12643       /* Here, should be \h, \H, \v, or \V.  Neither /d nor
12644       * /l make a difference in what these match.  There
12645       * would be problems if these characters had folds
12646       * other than themselves, as cp_list is subject to
12647       * folding. */
12648       if (classnum != _CC_VERTSPACE) {
12649        assert(   namedclass == ANYOF_HORIZWS
12650         || namedclass == ANYOF_NHORIZWS);
12651
12652        /* It turns out that \h is just a synonym for
12653        * XPosixBlank */
12654        classnum = _CC_BLANK;
12655       }
12656
12657       _invlist_union_maybe_complement_2nd(
12658         cp_list,
12659         PL_XPosix_ptrs[classnum],
12660         cBOOL(namedclass % 2), /* Complement if odd
12661               (NHORIZWS, NVERTWS)
12662               */
12663         &cp_list);
12664      }
12665     }
12666     else if (classnum == _CC_ASCII) {
12667 #ifdef HAS_ISASCII
12668      if (LOC) {
12669       ANYOF_CLASS_SET(ret, namedclass);
12670      }
12671      else
12672 #endif  /* Not isascii(); just use the hard-coded definition for it */
12673       _invlist_union_maybe_complement_2nd(
12674         posixes,
12675         PL_ASCII,
12676         cBOOL(namedclass % 2), /* Complement if odd
12677               (NASCII) */
12678         &posixes);
12679     }
12680     else {  /* Garden variety class */
12681
12682      /* The ascii range inversion list */
12683      SV* ascii_source = PL_Posix_ptrs[classnum];
12684
12685      /* The full Latin1 range inversion list */
12686      SV* l1_source = PL_L1Posix_ptrs[classnum];
12687
12688      /* This code is structured into two major clauses.  The
12689      * first is for classes whose complete definitions may not
12690      * already be known.  It not, the Latin1 definition
12691      * (guaranteed to already known) is used plus code is
12692      * generated to load the rest at run-time (only if needed).
12693      * If the complete definition is known, it drops down to
12694      * the second clause, where the complete definition is
12695      * known */
12696
12697      if (classnum < _FIRST_NON_SWASH_CC) {
12698
12699       /* Here, the class has a swash, which may or not
12700       * already be loaded */
12701
12702       /* The name of the property to use to match the full
12703       * eXtended Unicode range swash for this character
12704       * class */
12705       const char *Xname = swash_property_names[classnum];
12706
12707       /* If returning the inversion list, we can't defer
12708       * getting this until runtime */
12709       if (ret_invlist && !  PL_utf8_swash_ptrs[classnum]) {
12710        PL_utf8_swash_ptrs[classnum] =
12711         _core_swash_init("utf8", Xname, &PL_sv_undef,
12712            1, /* binary */
12713            0, /* not tr/// */
12714            NULL, /* No inversion list */
12715            NULL  /* No flags */
12716            );
12717        assert(PL_utf8_swash_ptrs[classnum]);
12718       }
12719       if ( !  PL_utf8_swash_ptrs[classnum]) {
12720        if (namedclass % 2 == 0) { /* A non-complemented
12721               class */
12722         /* If not /a matching, there are code points we
12723         * don't know at compile time.  Arrange for the
12724         * unknown matches to be loaded at run-time, if
12725         * needed */
12726         if (! AT_LEAST_ASCII_RESTRICTED) {
12727          Perl_sv_catpvf(aTHX_ listsv, "+utf8::%s\n",
12728                 Xname);
12729         }
12730         if (LOC) {  /* Under locale, set run-time
12731            lookup */
12732          ANYOF_CLASS_SET(ret, namedclass);
12733         }
12734         else {
12735          /* Add the current class's code points to
12736          * the running total */
12737          _invlist_union(posixes,
12738             (AT_LEAST_ASCII_RESTRICTED)
12739               ? ascii_source
12740               : l1_source,
12741             &posixes);
12742         }
12743        }
12744        else {  /* A complemented class */
12745         if (AT_LEAST_ASCII_RESTRICTED) {
12746          /* Under /a should match everything above
12747          * ASCII, plus the complement of the set's
12748          * ASCII matches */
12749          _invlist_union_complement_2nd(posixes,
12750                 ascii_source,
12751                 &posixes);
12752         }
12753         else {
12754          /* Arrange for the unknown matches to be
12755          * loaded at run-time, if needed */
12756          Perl_sv_catpvf(aTHX_ listsv, "!utf8::%s\n",
12757                 Xname);
12758          runtime_posix_matches_above_Unicode = TRUE;
12759          if (LOC) {
12760           ANYOF_CLASS_SET(ret, namedclass);
12761          }
12762          else {
12763
12764           /* We want to match everything in
12765           * Latin1, except those things that
12766           * l1_source matches */
12767           SV* scratch_list = NULL;
12768           _invlist_subtract(PL_Latin1, l1_source,
12769               &scratch_list);
12770
12771           /* Add the list from this class to the
12772           * running total */
12773           if (! posixes) {
12774            posixes = scratch_list;
12775           }
12776           else {
12777            _invlist_union(posixes,
12778               scratch_list,
12779               &posixes);
12780            SvREFCNT_dec_NN(scratch_list);
12781           }
12782           if (DEPENDS_SEMANTICS) {
12783            ANYOF_FLAGS(ret)
12784             |= ANYOF_NON_UTF8_LATIN1_ALL;
12785           }
12786          }
12787         }
12788        }
12789        goto namedclass_done;
12790       }
12791
12792       /* Here, there is a swash loaded for the class.  If no
12793       * inversion list for it yet, get it */
12794       if (! PL_XPosix_ptrs[classnum]) {
12795        PL_XPosix_ptrs[classnum]
12796        = _swash_to_invlist(PL_utf8_swash_ptrs[classnum]);
12797       }
12798      }
12799
12800      /* Here there is an inversion list already loaded for the
12801      * entire class */
12802
12803      if (namedclass % 2 == 0) {  /* A non-complemented class,
12804             like ANYOF_PUNCT */
12805       if (! LOC) {
12806        /* For non-locale, just add it to any existing list
12807        * */
12808        _invlist_union(posixes,
12809           (AT_LEAST_ASCII_RESTRICTED)
12810            ? ascii_source
12811            : PL_XPosix_ptrs[classnum],
12812           &posixes);
12813       }
12814       else {  /* Locale */
12815        SV* scratch_list = NULL;
12816
12817        /* For above Latin1 code points, we use the full
12818        * Unicode range */
12819        _invlist_intersection(PL_AboveLatin1,
12820             PL_XPosix_ptrs[classnum],
12821             &scratch_list);
12822        /* And set the output to it, adding instead if
12823        * there already is an output.  Checking if
12824        * 'posixes' is NULL first saves an extra clone.
12825        * Its reference count will be decremented at the
12826        * next union, etc, or if this is the only
12827        * instance, at the end of the routine */
12828        if (! posixes) {
12829         posixes = scratch_list;
12830        }
12831        else {
12832         _invlist_union(posixes, scratch_list, &posixes);
12833         SvREFCNT_dec_NN(scratch_list);
12834        }
12835
12836 #ifndef HAS_ISBLANK
12837        if (namedclass != ANYOF_BLANK) {
12838 #endif
12839         /* Set this class in the node for runtime
12840         * matching */
12841         ANYOF_CLASS_SET(ret, namedclass);
12842 #ifndef HAS_ISBLANK
12843        }
12844        else {
12845         /* No isblank(), use the hard-coded ASCII-range
12846         * blanks, adding them to the running total. */
12847
12848         _invlist_union(posixes, ascii_source, &posixes);
12849        }
12850 #endif
12851       }
12852      }
12853      else {  /* A complemented class, like ANYOF_NPUNCT */
12854       if (! LOC) {
12855        _invlist_union_complement_2nd(
12856             posixes,
12857             (AT_LEAST_ASCII_RESTRICTED)
12858              ? ascii_source
12859              : PL_XPosix_ptrs[classnum],
12860             &posixes);
12861        /* Under /d, everything in the upper half of the
12862        * Latin1 range matches this complement */
12863        if (DEPENDS_SEMANTICS) {
12864         ANYOF_FLAGS(ret) |= ANYOF_NON_UTF8_LATIN1_ALL;
12865        }
12866       }
12867       else {  /* Locale */
12868        SV* scratch_list = NULL;
12869        _invlist_subtract(PL_AboveLatin1,
12870            PL_XPosix_ptrs[classnum],
12871            &scratch_list);
12872        if (! posixes) {
12873         posixes = scratch_list;
12874        }
12875        else {
12876         _invlist_union(posixes, scratch_list, &posixes);
12877         SvREFCNT_dec_NN(scratch_list);
12878        }
12879 #ifndef HAS_ISBLANK
12880        if (namedclass != ANYOF_NBLANK) {
12881 #endif
12882         ANYOF_CLASS_SET(ret, namedclass);
12883 #ifndef HAS_ISBLANK
12884        }
12885        else {
12886         /* Get the list of all code points in Latin1
12887         * that are not ASCII blanks, and add them to
12888         * the running total */
12889         _invlist_subtract(PL_Latin1, ascii_source,
12890             &scratch_list);
12891         _invlist_union(posixes, scratch_list, &posixes);
12892         SvREFCNT_dec_NN(scratch_list);
12893        }
12894 #endif
12895       }
12896      }
12897     }
12898    namedclass_done:
12899     continue;   /* Go get next character */
12900    }
12901   } /* end of namedclass \blah */
12902
12903   /* Here, we have a single value.  If 'range' is set, it is the ending
12904   * of a range--check its validity.  Later, we will handle each
12905   * individual code point in the range.  If 'range' isn't set, this
12906   * could be the beginning of a range, so check for that by looking
12907   * ahead to see if the next real character to be processed is the range
12908   * indicator--the minus sign */
12909
12910   if (skip_white) {
12911    RExC_parse = regpatws(pRExC_state, RExC_parse,
12912         FALSE /* means don't recognize comments */);
12913   }
12914
12915   if (range) {
12916    if (prevvalue > value) /* b-a */ {
12917     const int w = RExC_parse - rangebegin;
12918     Simple_vFAIL4("Invalid [] range \"%*.*s\"", w, w, rangebegin);
12919     range = 0; /* not a valid range */
12920    }
12921   }
12922   else {
12923    prevvalue = value; /* save the beginning of the potential range */
12924    if (! stop_at_1     /* Can't be a range if parsing just one thing */
12925     && *RExC_parse == '-')
12926    {
12927     char* next_char_ptr = RExC_parse + 1;
12928     if (skip_white) {   /* Get the next real char after the '-' */
12929      next_char_ptr = regpatws(pRExC_state,
12930            RExC_parse + 1,
12931            FALSE); /* means don't recognize
12932               comments */
12933     }
12934
12935     /* If the '-' is at the end of the class (just before the ']',
12936     * it is a literal minus; otherwise it is a range */
12937     if (next_char_ptr < RExC_end && *next_char_ptr != ']') {
12938      RExC_parse = next_char_ptr;
12939
12940      /* a bad range like \w-, [:word:]- ? */
12941      if (namedclass > OOB_NAMEDCLASS) {
12942       if (strict || ckWARN(WARN_REGEXP)) {
12943        const int w =
12944         RExC_parse >= rangebegin ?
12945         RExC_parse - rangebegin : 0;
12946        if (strict) {
12947         vFAIL4("False [] range \"%*.*s\"",
12948          w, w, rangebegin);
12949        }
12950        else {
12951         vWARN4(RExC_parse,
12952          "False [] range \"%*.*s\"",
12953          w, w, rangebegin);
12954        }
12955       }
12956       if (!SIZE_ONLY) {
12957        cp_list = add_cp_to_invlist(cp_list, '-');
12958       }
12959       element_count++;
12960      } else
12961       range = 1; /* yeah, it's a range! */
12962      continue; /* but do it the next time */
12963     }
12964    }
12965   }
12966
12967   /* Here, <prevvalue> is the beginning of the range, if any; or <value>
12968   * if not */
12969
12970   /* non-Latin1 code point implies unicode semantics.  Must be set in
12971   * pass1 so is there for the whole of pass 2 */
12972   if (value > 255) {
12973    RExC_uni_semantics = 1;
12974   }
12975
12976   /* Ready to process either the single value, or the completed range.
12977   * For single-valued non-inverted ranges, we consider the possibility
12978   * of multi-char folds.  (We made a conscious decision to not do this
12979   * for the other cases because it can often lead to non-intuitive
12980   * results.  For example, you have the peculiar case that:
12981   *  "s s" =~ /^[^\xDF]+$/i => Y
12982   *  "ss"  =~ /^[^\xDF]+$/i => N
12983   *
12984   * See [perl #89750] */
12985   if (FOLD && allow_multi_folds && value == prevvalue) {
12986    if (value == LATIN_SMALL_LETTER_SHARP_S
12987     || (value > 255 && _invlist_contains_cp(PL_HasMultiCharFold,
12988               value)))
12989    {
12990     /* Here <value> is indeed a multi-char fold.  Get what it is */
12991
12992     U8 foldbuf[UTF8_MAXBYTES_CASE];
12993     STRLEN foldlen;
12994
12995     UV folded = _to_uni_fold_flags(
12996         value,
12997         foldbuf,
12998         &foldlen,
12999         FOLD_FLAGS_FULL
13000         | ((LOC) ?  FOLD_FLAGS_LOCALE
13001            : (ASCII_FOLD_RESTRICTED)
13002            ? FOLD_FLAGS_NOMIX_ASCII
13003            : 0)
13004         );
13005
13006     /* Here, <folded> should be the first character of the
13007     * multi-char fold of <value>, with <foldbuf> containing the
13008     * whole thing.  But, if this fold is not allowed (because of
13009     * the flags), <fold> will be the same as <value>, and should
13010     * be processed like any other character, so skip the special
13011     * handling */
13012     if (folded != value) {
13013
13014      /* Skip if we are recursed, currently parsing the class
13015      * again.  Otherwise add this character to the list of
13016      * multi-char folds. */
13017      if (! RExC_in_multi_char_class) {
13018       AV** this_array_ptr;
13019       AV* this_array;
13020       STRLEN cp_count = utf8_length(foldbuf,
13021              foldbuf + foldlen);
13022       SV* multi_fold = sv_2mortal(newSVpvn("", 0));
13023
13024       Perl_sv_catpvf(aTHX_ multi_fold, "\\x{%"UVXf"}", value);
13025
13026
13027       if (! multi_char_matches) {
13028        multi_char_matches = newAV();
13029       }
13030
13031       /* <multi_char_matches> is actually an array of arrays.
13032       * There will be one or two top-level elements: [2],
13033       * and/or [3].  The [2] element is an array, each
13034       * element thereof is a character which folds to two
13035       * characters; likewise for [3].  (Unicode guarantees a
13036       * maximum of 3 characters in any fold.)  When we
13037       * rewrite the character class below, we will do so
13038       * such that the longest folds are written first, so
13039       * that it prefers the longest matching strings first.
13040       * This is done even if it turns out that any
13041       * quantifier is non-greedy, out of programmer
13042       * laziness.  Tom Christiansen has agreed that this is
13043       * ok.  This makes the test for the ligature 'ffi' come
13044       * before the test for 'ff' */
13045       if (av_exists(multi_char_matches, cp_count)) {
13046        this_array_ptr = (AV**) av_fetch(multi_char_matches,
13047                cp_count, FALSE);
13048        this_array = *this_array_ptr;
13049       }
13050       else {
13051        this_array = newAV();
13052        av_store(multi_char_matches, cp_count,
13053          (SV*) this_array);
13054       }
13055       av_push(this_array, multi_fold);
13056      }
13057
13058      /* This element should not be processed further in this
13059      * class */
13060      element_count--;
13061      value = save_value;
13062      prevvalue = save_prevvalue;
13063      continue;
13064     }
13065    }
13066   }
13067
13068   /* Deal with this element of the class */
13069   if (! SIZE_ONLY) {
13070 #ifndef EBCDIC
13071    cp_list = _add_range_to_invlist(cp_list, prevvalue, value);
13072 #else
13073    SV* this_range = _new_invlist(1);
13074    _append_range_to_invlist(this_range, prevvalue, value);
13075
13076    /* In EBCDIC, the ranges 'A-Z' and 'a-z' are each not contiguous.
13077    * If this range was specified using something like 'i-j', we want
13078    * to include only the 'i' and the 'j', and not anything in
13079    * between, so exclude non-ASCII, non-alphabetics from it.
13080    * However, if the range was specified with something like
13081    * [\x89-\x91] or [\x89-j], all code points within it should be
13082    * included.  literal_endpoint==2 means both ends of the range used
13083    * a literal character, not \x{foo} */
13084    if (literal_endpoint == 2
13085     && (prevvalue >= 'a' && value <= 'z')
13086      || (prevvalue >= 'A' && value <= 'Z'))
13087    {
13088     _invlist_intersection(this_range, PL_Posix_ptrs[_CC_ALPHA],
13089          &this_range);
13090    }
13091    _invlist_union(cp_list, this_range, &cp_list);
13092    literal_endpoint = 0;
13093 #endif
13094   }
13095
13096   range = 0; /* this range (if it was one) is done now */
13097  } /* End of loop through all the text within the brackets */
13098
13099  /* If anything in the class expands to more than one character, we have to
13100  * deal with them by building up a substitute parse string, and recursively
13101  * calling reg() on it, instead of proceeding */
13102  if (multi_char_matches) {
13103   SV * substitute_parse = newSVpvn_flags("?:", 2, SVs_TEMP);
13104   I32 cp_count;
13105   STRLEN len;
13106   char *save_end = RExC_end;
13107   char *save_parse = RExC_parse;
13108   bool first_time = TRUE;     /* First multi-char occurrence doesn't get
13109          a "|" */
13110   I32 reg_flags;
13111
13112   assert(! invert);
13113 #if 0   /* Have decided not to deal with multi-char folds in inverted classes,
13114   because too confusing */
13115   if (invert) {
13116    sv_catpv(substitute_parse, "(?:");
13117   }
13118 #endif
13119
13120   /* Look at the longest folds first */
13121   for (cp_count = av_len(multi_char_matches); cp_count > 0; cp_count--) {
13122
13123    if (av_exists(multi_char_matches, cp_count)) {
13124     AV** this_array_ptr;
13125     SV* this_sequence;
13126
13127     this_array_ptr = (AV**) av_fetch(multi_char_matches,
13128             cp_count, FALSE);
13129     while ((this_sequence = av_pop(*this_array_ptr)) !=
13130                 &PL_sv_undef)
13131     {
13132      if (! first_time) {
13133       sv_catpv(substitute_parse, "|");
13134      }
13135      first_time = FALSE;
13136
13137      sv_catpv(substitute_parse, SvPVX(this_sequence));
13138     }
13139    }
13140   }
13141
13142   /* If the character class contains anything else besides these
13143   * multi-character folds, have to include it in recursive parsing */
13144   if (element_count) {
13145    sv_catpv(substitute_parse, "|[");
13146    sv_catpvn(substitute_parse, orig_parse, RExC_parse - orig_parse);
13147    sv_catpv(substitute_parse, "]");
13148   }
13149
13150   sv_catpv(substitute_parse, ")");
13151 #if 0
13152   if (invert) {
13153    /* This is a way to get the parse to skip forward a whole named
13154    * sequence instead of matching the 2nd character when it fails the
13155    * first */
13156    sv_catpv(substitute_parse, "(*THEN)(*SKIP)(*FAIL)|.)");
13157   }
13158 #endif
13159
13160   RExC_parse = SvPV(substitute_parse, len);
13161   RExC_end = RExC_parse + len;
13162   RExC_in_multi_char_class = 1;
13163   RExC_emit = (regnode *)orig_emit;
13164
13165   ret = reg(pRExC_state, 1, &reg_flags, depth+1);
13166
13167   *flagp |= reg_flags&(HASWIDTH|SIMPLE|SPSTART|POSTPONED|RESTART_UTF8);
13168
13169   RExC_parse = save_parse;
13170   RExC_end = save_end;
13171   RExC_in_multi_char_class = 0;
13172   SvREFCNT_dec_NN(multi_char_matches);
13173   return ret;
13174  }
13175
13176  /* If the character class contains only a single element, it may be
13177  * optimizable into another node type which is smaller and runs faster.
13178  * Check if this is the case for this class */
13179  if (element_count == 1 && ! ret_invlist) {
13180   U8 op = END;
13181   U8 arg = 0;
13182
13183   if (namedclass > OOB_NAMEDCLASS) { /* this is a named class, like \w or
13184            [:digit:] or \p{foo} */
13185
13186    /* All named classes are mapped into POSIXish nodes, with its FLAG
13187    * argument giving which class it is */
13188    switch ((I32)namedclass) {
13189     case ANYOF_UNIPROP:
13190      break;
13191
13192     /* These don't depend on the charset modifiers.  They always
13193     * match under /u rules */
13194     case ANYOF_NHORIZWS:
13195     case ANYOF_HORIZWS:
13196      namedclass = ANYOF_BLANK + namedclass - ANYOF_HORIZWS;
13197      /* FALLTHROUGH */
13198
13199     case ANYOF_NVERTWS:
13200     case ANYOF_VERTWS:
13201      op = POSIXU;
13202      goto join_posix;
13203
13204     /* The actual POSIXish node for all the rest depends on the
13205     * charset modifier.  The ones in the first set depend only on
13206     * ASCII or, if available on this platform, locale */
13207     case ANYOF_ASCII:
13208     case ANYOF_NASCII:
13209 #ifdef HAS_ISASCII
13210      op = (LOC) ? POSIXL : POSIXA;
13211 #else
13212      op = POSIXA;
13213 #endif
13214      goto join_posix;
13215
13216     case ANYOF_NCASED:
13217     case ANYOF_LOWER:
13218     case ANYOF_NLOWER:
13219     case ANYOF_UPPER:
13220     case ANYOF_NUPPER:
13221      /* under /a could be alpha */
13222      if (FOLD) {
13223       if (ASCII_RESTRICTED) {
13224        namedclass = ANYOF_ALPHA + (namedclass % 2);
13225       }
13226       else if (! LOC) {
13227        break;
13228       }
13229      }
13230      /* FALLTHROUGH */
13231
13232     /* The rest have more possibilities depending on the charset.
13233     * We take advantage of the enum ordering of the charset
13234     * modifiers to get the exact node type, */
13235     default:
13236      op = POSIXD + get_regex_charset(RExC_flags);
13237      if (op > POSIXA) { /* /aa is same as /a */
13238       op = POSIXA;
13239      }
13240 #ifndef HAS_ISBLANK
13241      if (op == POSIXL
13242       && (namedclass == ANYOF_BLANK
13243        || namedclass == ANYOF_NBLANK))
13244      {
13245       op = POSIXA;
13246      }
13247 #endif
13248
13249     join_posix:
13250      /* The odd numbered ones are the complements of the
13251      * next-lower even number one */
13252      if (namedclass % 2 == 1) {
13253       invert = ! invert;
13254       namedclass--;
13255      }
13256      arg = namedclass_to_classnum(namedclass);
13257      break;
13258    }
13259   }
13260   else if (value == prevvalue) {
13261
13262    /* Here, the class consists of just a single code point */
13263
13264    if (invert) {
13265     if (! LOC && value == '\n') {
13266      op = REG_ANY; /* Optimize [^\n] */
13267      *flagp |= HASWIDTH|SIMPLE;
13268      RExC_naughty++;
13269     }
13270    }
13271    else if (value < 256 || UTF) {
13272
13273     /* Optimize a single value into an EXACTish node, but not if it
13274     * would require converting the pattern to UTF-8. */
13275     op = compute_EXACTish(pRExC_state);
13276    }
13277   } /* Otherwise is a range */
13278   else if (! LOC) {   /* locale could vary these */
13279    if (prevvalue == '0') {
13280     if (value == '9') {
13281      arg = _CC_DIGIT;
13282      op = POSIXA;
13283     }
13284    }
13285   }
13286
13287   /* Here, we have changed <op> away from its initial value iff we found
13288   * an optimization */
13289   if (op != END) {
13290
13291    /* Throw away this ANYOF regnode, and emit the calculated one,
13292    * which should correspond to the beginning, not current, state of
13293    * the parse */
13294    const char * cur_parse = RExC_parse;
13295    RExC_parse = (char *)orig_parse;
13296    if ( SIZE_ONLY) {
13297     if (! LOC) {
13298
13299      /* To get locale nodes to not use the full ANYOF size would
13300      * require moving the code above that writes the portions
13301      * of it that aren't in other nodes to after this point.
13302      * e.g.  ANYOF_CLASS_SET */
13303      RExC_size = orig_size;
13304     }
13305    }
13306    else {
13307     RExC_emit = (regnode *)orig_emit;
13308     if (PL_regkind[op] == POSIXD) {
13309      if (invert) {
13310       op += NPOSIXD - POSIXD;
13311      }
13312     }
13313    }
13314
13315    ret = reg_node(pRExC_state, op);
13316
13317    if (PL_regkind[op] == POSIXD || PL_regkind[op] == NPOSIXD) {
13318     if (! SIZE_ONLY) {
13319      FLAGS(ret) = arg;
13320     }
13321     *flagp |= HASWIDTH|SIMPLE;
13322    }
13323    else if (PL_regkind[op] == EXACT) {
13324     alloc_maybe_populate_EXACT(pRExC_state, ret, flagp, 0, value);
13325    }
13326
13327    RExC_parse = (char *) cur_parse;
13328
13329    SvREFCNT_dec(posixes);
13330    SvREFCNT_dec(cp_list);
13331    return ret;
13332   }
13333  }
13334
13335  if (SIZE_ONLY)
13336   return ret;
13337  /****** !SIZE_ONLY (Pass 2) AFTER HERE *********/
13338
13339  /* If folding, we calculate all characters that could fold to or from the
13340  * ones already on the list */
13341  if (FOLD && cp_list) {
13342   UV start, end; /* End points of code point ranges */
13343
13344   SV* fold_intersection = NULL;
13345
13346   /* If the highest code point is within Latin1, we can use the
13347   * compiled-in Alphas list, and not have to go out to disk.  This
13348   * yields two false positives, the masculine and feminine ordinal
13349   * indicators, which are weeded out below using the
13350   * IS_IN_SOME_FOLD_L1() macro */
13351   if (invlist_highest(cp_list) < 256) {
13352    _invlist_intersection(PL_L1Posix_ptrs[_CC_ALPHA], cp_list,
13353               &fold_intersection);
13354   }
13355   else {
13356
13357    /* Here, there are non-Latin1 code points, so we will have to go
13358    * fetch the list of all the characters that participate in folds
13359    */
13360    if (! PL_utf8_foldable) {
13361     SV* swash = swash_init("utf8", "_Perl_Any_Folds",
13362          &PL_sv_undef, 1, 0);
13363     PL_utf8_foldable = _get_swash_invlist(swash);
13364     SvREFCNT_dec_NN(swash);
13365    }
13366
13367    /* This is a hash that for a particular fold gives all characters
13368    * that are involved in it */
13369    if (! PL_utf8_foldclosures) {
13370
13371     /* If we were unable to find any folds, then we likely won't be
13372     * able to find the closures.  So just create an empty list.
13373     * Folding will effectively be restricted to the non-Unicode
13374     * rules hard-coded into Perl.  (This case happens legitimately
13375     * during compilation of Perl itself before the Unicode tables
13376     * are generated) */
13377     if (_invlist_len(PL_utf8_foldable) == 0) {
13378      PL_utf8_foldclosures = newHV();
13379     }
13380     else {
13381      /* If the folds haven't been read in, call a fold function
13382      * to force that */
13383      if (! PL_utf8_tofold) {
13384       U8 dummy[UTF8_MAXBYTES+1];
13385
13386       /* This string is just a short named one above \xff */
13387       to_utf8_fold((U8*) HYPHEN_UTF8, dummy, NULL);
13388       assert(PL_utf8_tofold); /* Verify that worked */
13389      }
13390      PL_utf8_foldclosures =
13391          _swash_inversion_hash(PL_utf8_tofold);
13392     }
13393    }
13394
13395    /* Only the characters in this class that participate in folds need
13396    * be checked.  Get the intersection of this class and all the
13397    * possible characters that are foldable.  This can quickly narrow
13398    * down a large class */
13399    _invlist_intersection(PL_utf8_foldable, cp_list,
13400         &fold_intersection);
13401   }
13402
13403   /* Now look at the foldable characters in this class individually */
13404   invlist_iterinit(fold_intersection);
13405   while (invlist_iternext(fold_intersection, &start, &end)) {
13406    UV j;
13407
13408    /* Locale folding for Latin1 characters is deferred until runtime */
13409    if (LOC && start < 256) {
13410     start = 256;
13411    }
13412
13413    /* Look at every character in the range */
13414    for (j = start; j <= end; j++) {
13415
13416     U8 foldbuf[UTF8_MAXBYTES_CASE+1];
13417     STRLEN foldlen;
13418     SV** listp;
13419
13420     if (j < 256) {
13421
13422      /* We have the latin1 folding rules hard-coded here so that
13423      * an innocent-looking character class, like /[ks]/i won't
13424      * have to go out to disk to find the possible matches.
13425      * XXX It would be better to generate these via regen, in
13426      * case a new version of the Unicode standard adds new
13427      * mappings, though that is not really likely, and may be
13428      * caught by the default: case of the switch below. */
13429
13430      if (IS_IN_SOME_FOLD_L1(j)) {
13431
13432       /* ASCII is always matched; non-ASCII is matched only
13433       * under Unicode rules */
13434       if (isASCII(j) || AT_LEAST_UNI_SEMANTICS) {
13435        cp_list =
13436         add_cp_to_invlist(cp_list, PL_fold_latin1[j]);
13437       }
13438       else {
13439        depends_list =
13440        add_cp_to_invlist(depends_list, PL_fold_latin1[j]);
13441       }
13442      }
13443
13444      if (HAS_NONLATIN1_FOLD_CLOSURE(j)
13445       && (! isASCII(j) || ! ASCII_FOLD_RESTRICTED))
13446      {
13447       /* Certain Latin1 characters have matches outside
13448       * Latin1.  To get here, <j> is one of those
13449       * characters.   None of these matches is valid for
13450       * ASCII characters under /aa, which is why the 'if'
13451       * just above excludes those.  These matches only
13452       * happen when the target string is utf8.  The code
13453       * below adds the single fold closures for <j> to the
13454       * inversion list. */
13455       switch (j) {
13456        case 'k':
13457        case 'K':
13458         cp_list =
13459          add_cp_to_invlist(cp_list, KELVIN_SIGN);
13460         break;
13461        case 's':
13462        case 'S':
13463         cp_list = add_cp_to_invlist(cp_list,
13464              LATIN_SMALL_LETTER_LONG_S);
13465         break;
13466        case MICRO_SIGN:
13467         cp_list = add_cp_to_invlist(cp_list,
13468              GREEK_CAPITAL_LETTER_MU);
13469         cp_list = add_cp_to_invlist(cp_list,
13470              GREEK_SMALL_LETTER_MU);
13471         break;
13472        case LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE:
13473        case LATIN_SMALL_LETTER_A_WITH_RING_ABOVE:
13474         cp_list =
13475          add_cp_to_invlist(cp_list, ANGSTROM_SIGN);
13476         break;
13477        case LATIN_SMALL_LETTER_Y_WITH_DIAERESIS:
13478         cp_list = add_cp_to_invlist(cp_list,
13479           LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS);
13480         break;
13481        case LATIN_SMALL_LETTER_SHARP_S:
13482         cp_list = add_cp_to_invlist(cp_list,
13483             LATIN_CAPITAL_LETTER_SHARP_S);
13484         break;
13485        case 'F': case 'f':
13486        case 'I': case 'i':
13487        case 'L': case 'l':
13488        case 'T': case 't':
13489        case 'A': case 'a':
13490        case 'H': case 'h':
13491        case 'J': case 'j':
13492        case 'N': case 'n':
13493        case 'W': case 'w':
13494        case 'Y': case 'y':
13495         /* These all are targets of multi-character
13496         * folds from code points that require UTF8 to
13497         * express, so they can't match unless the
13498         * target string is in UTF-8, so no action here
13499         * is necessary, as regexec.c properly handles
13500         * the general case for UTF-8 matching and
13501         * multi-char folds */
13502         break;
13503        default:
13504         /* Use deprecated warning to increase the
13505         * chances of this being output */
13506         ckWARN2regdep(RExC_parse, "Perl folding rules are not up-to-date for 0x%"UVXf"; please use the perlbug utility to report;", j);
13507         break;
13508       }
13509      }
13510      continue;
13511     }
13512
13513     /* Here is an above Latin1 character.  We don't have the rules
13514     * hard-coded for it.  First, get its fold.  This is the simple
13515     * fold, as the multi-character folds have been handled earlier
13516     * and separated out */
13517     _to_uni_fold_flags(j, foldbuf, &foldlen,
13518            ((LOC)
13519            ? FOLD_FLAGS_LOCALE
13520            : (ASCII_FOLD_RESTRICTED)
13521             ? FOLD_FLAGS_NOMIX_ASCII
13522             : 0));
13523
13524     /* Single character fold of above Latin1.  Add everything in
13525     * its fold closure to the list that this node should match.
13526     * The fold closures data structure is a hash with the keys
13527     * being the UTF-8 of every character that is folded to, like
13528     * 'k', and the values each an array of all code points that
13529     * fold to its key.  e.g. [ 'k', 'K', KELVIN_SIGN ].
13530     * Multi-character folds are not included */
13531     if ((listp = hv_fetch(PL_utf8_foldclosures,
13532          (char *) foldbuf, foldlen, FALSE)))
13533     {
13534      AV* list = (AV*) *listp;
13535      IV k;
13536      for (k = 0; k <= av_len(list); k++) {
13537       SV** c_p = av_fetch(list, k, FALSE);
13538       UV c;
13539       if (c_p == NULL) {
13540        Perl_croak(aTHX_ "panic: invalid PL_utf8_foldclosures structure");
13541       }
13542       c = SvUV(*c_p);
13543
13544       /* /aa doesn't allow folds between ASCII and non-; /l
13545       * doesn't allow them between above and below 256 */
13546       if ((ASCII_FOLD_RESTRICTED
13547         && (isASCII(c) != isASCII(j)))
13548        || (LOC && ((c < 256) != (j < 256))))
13549       {
13550        continue;
13551       }
13552
13553       /* Folds involving non-ascii Latin1 characters
13554       * under /d are added to a separate list */
13555       if (isASCII(c) || c > 255 || AT_LEAST_UNI_SEMANTICS)
13556       {
13557        cp_list = add_cp_to_invlist(cp_list, c);
13558       }
13559       else {
13560       depends_list = add_cp_to_invlist(depends_list, c);
13561       }
13562      }
13563     }
13564    }
13565   }
13566   SvREFCNT_dec_NN(fold_intersection);
13567  }
13568
13569  /* And combine the result (if any) with any inversion list from posix
13570  * classes.  The lists are kept separate up to now because we don't want to
13571  * fold the classes (folding of those is automatically handled by the swash
13572  * fetching code) */
13573  if (posixes) {
13574   if (! DEPENDS_SEMANTICS) {
13575    if (cp_list) {
13576     _invlist_union(cp_list, posixes, &cp_list);
13577     SvREFCNT_dec_NN(posixes);
13578    }
13579    else {
13580     cp_list = posixes;
13581    }
13582   }
13583   else {
13584    /* Under /d, we put into a separate list the Latin1 things that
13585    * match only when the target string is utf8 */
13586    SV* nonascii_but_latin1_properties = NULL;
13587    _invlist_intersection(posixes, PL_Latin1,
13588         &nonascii_but_latin1_properties);
13589    _invlist_subtract(nonascii_but_latin1_properties, PL_ASCII,
13590        &nonascii_but_latin1_properties);
13591    _invlist_subtract(posixes, nonascii_but_latin1_properties,
13592        &posixes);
13593    if (cp_list) {
13594     _invlist_union(cp_list, posixes, &cp_list);
13595     SvREFCNT_dec_NN(posixes);
13596    }
13597    else {
13598     cp_list = posixes;
13599    }
13600
13601    if (depends_list) {
13602     _invlist_union(depends_list, nonascii_but_latin1_properties,
13603        &depends_list);
13604     SvREFCNT_dec_NN(nonascii_but_latin1_properties);
13605    }
13606    else {
13607     depends_list = nonascii_but_latin1_properties;
13608    }
13609   }
13610  }
13611
13612  /* And combine the result (if any) with any inversion list from properties.
13613  * The lists are kept separate up to now so that we can distinguish the two
13614  * in regards to matching above-Unicode.  A run-time warning is generated
13615  * if a Unicode property is matched against a non-Unicode code point. But,
13616  * we allow user-defined properties to match anything, without any warning,
13617  * and we also suppress the warning if there is a portion of the character
13618  * class that isn't a Unicode property, and which matches above Unicode, \W
13619  * or [\x{110000}] for example.
13620  * (Note that in this case, unlike the Posix one above, there is no
13621  * <depends_list>, because having a Unicode property forces Unicode
13622  * semantics */
13623  if (properties) {
13624   bool warn_super = ! has_user_defined_property;
13625   if (cp_list) {
13626
13627    /* If it matters to the final outcome, see if a non-property
13628    * component of the class matches above Unicode.  If so, the
13629    * warning gets suppressed.  This is true even if just a single
13630    * such code point is specified, as though not strictly correct if
13631    * another such code point is matched against, the fact that they
13632    * are using above-Unicode code points indicates they should know
13633    * the issues involved */
13634    if (warn_super) {
13635     bool non_prop_matches_above_Unicode =
13636        runtime_posix_matches_above_Unicode
13637        | (invlist_highest(cp_list) > PERL_UNICODE_MAX);
13638     if (invert) {
13639      non_prop_matches_above_Unicode =
13640            !  non_prop_matches_above_Unicode;
13641     }
13642     warn_super = ! non_prop_matches_above_Unicode;
13643    }
13644
13645    _invlist_union(properties, cp_list, &cp_list);
13646    SvREFCNT_dec_NN(properties);
13647   }
13648   else {
13649    cp_list = properties;
13650   }
13651
13652   if (warn_super) {
13653    OP(ret) = ANYOF_WARN_SUPER;
13654   }
13655  }
13656
13657  /* Here, we have calculated what code points should be in the character
13658  * class.
13659  *
13660  * Now we can see about various optimizations.  Fold calculation (which we
13661  * did above) needs to take place before inversion.  Otherwise /[^k]/i
13662  * would invert to include K, which under /i would match k, which it
13663  * shouldn't.  Therefore we can't invert folded locale now, as it won't be
13664  * folded until runtime */
13665
13666  /* Optimize inverted simple patterns (e.g. [^a-z]) when everything is known
13667  * at compile time.  Besides not inverting folded locale now, we can't
13668  * invert if there are things such as \w, which aren't known until runtime
13669  * */
13670  if (invert
13671   && ! (LOC && (FOLD || (ANYOF_FLAGS(ret) & ANYOF_CLASS)))
13672   && ! depends_list
13673   && ! HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
13674  {
13675   _invlist_invert(cp_list);
13676
13677   /* Any swash can't be used as-is, because we've inverted things */
13678   if (swash) {
13679    SvREFCNT_dec_NN(swash);
13680    swash = NULL;
13681   }
13682
13683   /* Clear the invert flag since have just done it here */
13684   invert = FALSE;
13685  }
13686
13687  if (ret_invlist) {
13688   *ret_invlist = cp_list;
13689
13690   /* Discard the generated node */
13691   if (SIZE_ONLY) {
13692    RExC_size = orig_size;
13693   }
13694   else {
13695    RExC_emit = orig_emit;
13696   }
13697   return orig_emit;
13698  }
13699
13700  /* If we didn't do folding, it's because some information isn't available
13701  * until runtime; set the run-time fold flag for these.  (We don't have to
13702  * worry about properties folding, as that is taken care of by the swash
13703  * fetching) */
13704  if (FOLD && LOC)
13705  {
13706  ANYOF_FLAGS(ret) |= ANYOF_LOC_FOLD;
13707  }
13708
13709  /* Some character classes are equivalent to other nodes.  Such nodes take
13710  * up less room and generally fewer operations to execute than ANYOF nodes.
13711  * Above, we checked for and optimized into some such equivalents for
13712  * certain common classes that are easy to test.  Getting to this point in
13713  * the code means that the class didn't get optimized there.  Since this
13714  * code is only executed in Pass 2, it is too late to save space--it has
13715  * been allocated in Pass 1, and currently isn't given back.  But turning
13716  * things into an EXACTish node can allow the optimizer to join it to any
13717  * adjacent such nodes.  And if the class is equivalent to things like /./,
13718  * expensive run-time swashes can be avoided.  Now that we have more
13719  * complete information, we can find things necessarily missed by the
13720  * earlier code.  I (khw) am not sure how much to look for here.  It would
13721  * be easy, but perhaps too slow, to check any candidates against all the
13722  * node types they could possibly match using _invlistEQ(). */
13723
13724  if (cp_list
13725   && ! invert
13726   && ! depends_list
13727   && ! (ANYOF_FLAGS(ret) & ANYOF_CLASS)
13728   && ! HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
13729  {
13730   UV start, end;
13731   U8 op = END;  /* The optimzation node-type */
13732   const char * cur_parse= RExC_parse;
13733
13734   invlist_iterinit(cp_list);
13735   if (! invlist_iternext(cp_list, &start, &end)) {
13736
13737    /* Here, the list is empty.  This happens, for example, when a
13738    * Unicode property is the only thing in the character class, and
13739    * it doesn't match anything.  (perluniprops.pod notes such
13740    * properties) */
13741    op = OPFAIL;
13742    *flagp |= HASWIDTH|SIMPLE;
13743   }
13744   else if (start == end) {    /* The range is a single code point */
13745    if (! invlist_iternext(cp_list, &start, &end)
13746
13747      /* Don't do this optimization if it would require changing
13748      * the pattern to UTF-8 */
13749     && (start < 256 || UTF))
13750    {
13751     /* Here, the list contains a single code point.  Can optimize
13752     * into an EXACT node */
13753
13754     value = start;
13755
13756     if (! FOLD) {
13757      op = EXACT;
13758     }
13759     else if (LOC) {
13760
13761      /* A locale node under folding with one code point can be
13762      * an EXACTFL, as its fold won't be calculated until
13763      * runtime */
13764      op = EXACTFL;
13765     }
13766     else {
13767
13768      /* Here, we are generally folding, but there is only one
13769      * code point to match.  If we have to, we use an EXACT
13770      * node, but it would be better for joining with adjacent
13771      * nodes in the optimization pass if we used the same
13772      * EXACTFish node that any such are likely to be.  We can
13773      * do this iff the code point doesn't participate in any
13774      * folds.  For example, an EXACTF of a colon is the same as
13775      * an EXACT one, since nothing folds to or from a colon. */
13776      if (value < 256) {
13777       if (IS_IN_SOME_FOLD_L1(value)) {
13778        op = EXACT;
13779       }
13780      }
13781      else {
13782       if (! PL_utf8_foldable) {
13783        SV* swash = swash_init("utf8", "_Perl_Any_Folds",
13784             &PL_sv_undef, 1, 0);
13785        PL_utf8_foldable = _get_swash_invlist(swash);
13786        SvREFCNT_dec_NN(swash);
13787       }
13788       if (_invlist_contains_cp(PL_utf8_foldable, value)) {
13789        op = EXACT;
13790       }
13791      }
13792
13793      /* If we haven't found the node type, above, it means we
13794      * can use the prevailing one */
13795      if (op == END) {
13796       op = compute_EXACTish(pRExC_state);
13797      }
13798     }
13799    }
13800   }
13801   else if (start == 0) {
13802    if (end == UV_MAX) {
13803     op = SANY;
13804     *flagp |= HASWIDTH|SIMPLE;
13805     RExC_naughty++;
13806    }
13807    else if (end == '\n' - 1
13808      && invlist_iternext(cp_list, &start, &end)
13809      && start == '\n' + 1 && end == UV_MAX)
13810    {
13811     op = REG_ANY;
13812     *flagp |= HASWIDTH|SIMPLE;
13813     RExC_naughty++;
13814    }
13815   }
13816   invlist_iterfinish(cp_list);
13817
13818   if (op != END) {
13819    RExC_parse = (char *)orig_parse;
13820    RExC_emit = (regnode *)orig_emit;
13821
13822    ret = reg_node(pRExC_state, op);
13823
13824    RExC_parse = (char *)cur_parse;
13825
13826    if (PL_regkind[op] == EXACT) {
13827     alloc_maybe_populate_EXACT(pRExC_state, ret, flagp, 0, value);
13828    }
13829
13830    SvREFCNT_dec_NN(cp_list);
13831    return ret;
13832   }
13833  }
13834
13835  /* Here, <cp_list> contains all the code points we can determine at
13836  * compile time that match under all conditions.  Go through it, and
13837  * for things that belong in the bitmap, put them there, and delete from
13838  * <cp_list>.  While we are at it, see if everything above 255 is in the
13839  * list, and if so, set a flag to speed up execution */
13840  ANYOF_BITMAP_ZERO(ret);
13841  if (cp_list) {
13842
13843   /* This gets set if we actually need to modify things */
13844   bool change_invlist = FALSE;
13845
13846   UV start, end;
13847
13848   /* Start looking through <cp_list> */
13849   invlist_iterinit(cp_list);
13850   while (invlist_iternext(cp_list, &start, &end)) {
13851    UV high;
13852    int i;
13853
13854    if (end == UV_MAX && start <= 256) {
13855     ANYOF_FLAGS(ret) |= ANYOF_UNICODE_ALL;
13856    }
13857
13858    /* Quit if are above what we should change */
13859    if (start > 255) {
13860     break;
13861    }
13862
13863    change_invlist = TRUE;
13864
13865    /* Set all the bits in the range, up to the max that we are doing */
13866    high = (end < 255) ? end : 255;
13867    for (i = start; i <= (int) high; i++) {
13868     if (! ANYOF_BITMAP_TEST(ret, i)) {
13869      ANYOF_BITMAP_SET(ret, i);
13870      prevvalue = value;
13871      value = i;
13872     }
13873    }
13874   }
13875   invlist_iterfinish(cp_list);
13876
13877   /* Done with loop; remove any code points that are in the bitmap from
13878   * <cp_list> */
13879   if (change_invlist) {
13880    _invlist_subtract(cp_list, PL_Latin1, &cp_list);
13881   }
13882
13883   /* If have completely emptied it, remove it completely */
13884   if (_invlist_len(cp_list) == 0) {
13885    SvREFCNT_dec_NN(cp_list);
13886    cp_list = NULL;
13887   }
13888  }
13889
13890  if (invert) {
13891   ANYOF_FLAGS(ret) |= ANYOF_INVERT;
13892  }
13893
13894  /* Here, the bitmap has been populated with all the Latin1 code points that
13895  * always match.  Can now add to the overall list those that match only
13896  * when the target string is UTF-8 (<depends_list>). */
13897  if (depends_list) {
13898   if (cp_list) {
13899    _invlist_union(cp_list, depends_list, &cp_list);
13900    SvREFCNT_dec_NN(depends_list);
13901   }
13902   else {
13903    cp_list = depends_list;
13904   }
13905  }
13906
13907  /* If there is a swash and more than one element, we can't use the swash in
13908  * the optimization below. */
13909  if (swash && element_count > 1) {
13910   SvREFCNT_dec_NN(swash);
13911   swash = NULL;
13912  }
13913
13914  if (! cp_list
13915   && ! HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
13916  {
13917   ARG_SET(ret, ANYOF_NONBITMAP_EMPTY);
13918  }
13919  else {
13920   /* av[0] stores the character class description in its textual form:
13921   *       used later (regexec.c:Perl_regclass_swash()) to initialize the
13922   *       appropriate swash, and is also useful for dumping the regnode.
13923   * av[1] if NULL, is a placeholder to later contain the swash computed
13924   *       from av[0].  But if no further computation need be done, the
13925   *       swash is stored there now.
13926   * av[2] stores the cp_list inversion list for use in addition or
13927   *       instead of av[0]; used only if av[1] is NULL
13928   * av[3] is set if any component of the class is from a user-defined
13929   *       property; used only if av[1] is NULL */
13930   AV * const av = newAV();
13931   SV *rv;
13932
13933   av_store(av, 0, (HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
13934       ? SvREFCNT_inc(listsv) : &PL_sv_undef);
13935   if (swash) {
13936    av_store(av, 1, swash);
13937    SvREFCNT_dec_NN(cp_list);
13938   }
13939   else {
13940    av_store(av, 1, NULL);
13941    if (cp_list) {
13942     av_store(av, 2, cp_list);
13943     av_store(av, 3, newSVuv(has_user_defined_property));
13944    }
13945   }
13946
13947   rv = newRV_noinc(MUTABLE_SV(av));
13948   n = add_data(pRExC_state, 1, "s");
13949   RExC_rxi->data->data[n] = (void*)rv;
13950   ARG_SET(ret, n);
13951  }
13952
13953  *flagp |= HASWIDTH|SIMPLE;
13954  return ret;
13955 }
13956 #undef HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION
13957
13958
13959 /* reg_skipcomment()
13960
13961    Absorbs an /x style # comments from the input stream.
13962    Returns true if there is more text remaining in the stream.
13963    Will set the REG_SEEN_RUN_ON_COMMENT flag if the comment
13964    terminates the pattern without including a newline.
13965
13966    Note its the callers responsibility to ensure that we are
13967    actually in /x mode
13968
13969 */
13970
13971 STATIC bool
13972 S_reg_skipcomment(pTHX_ RExC_state_t *pRExC_state)
13973 {
13974  bool ended = 0;
13975
13976  PERL_ARGS_ASSERT_REG_SKIPCOMMENT;
13977
13978  while (RExC_parse < RExC_end)
13979   if (*RExC_parse++ == '\n') {
13980    ended = 1;
13981    break;
13982   }
13983  if (!ended) {
13984   /* we ran off the end of the pattern without ending
13985   the comment, so we have to add an \n when wrapping */
13986   RExC_seen |= REG_SEEN_RUN_ON_COMMENT;
13987   return 0;
13988  } else
13989   return 1;
13990 }
13991
13992 /* nextchar()
13993
13994    Advances the parse position, and optionally absorbs
13995    "whitespace" from the inputstream.
13996
13997    Without /x "whitespace" means (?#...) style comments only,
13998    with /x this means (?#...) and # comments and whitespace proper.
13999
14000    Returns the RExC_parse point from BEFORE the scan occurs.
14001
14002    This is the /x friendly way of saying RExC_parse++.
14003 */
14004
14005 STATIC char*
14006 S_nextchar(pTHX_ RExC_state_t *pRExC_state)
14007 {
14008  char* const retval = RExC_parse++;
14009
14010  PERL_ARGS_ASSERT_NEXTCHAR;
14011
14012  for (;;) {
14013   if (RExC_end - RExC_parse >= 3
14014    && *RExC_parse == '('
14015    && RExC_parse[1] == '?'
14016    && RExC_parse[2] == '#')
14017   {
14018    while (*RExC_parse != ')') {
14019     if (RExC_parse == RExC_end)
14020      FAIL("Sequence (?#... not terminated");
14021     RExC_parse++;
14022    }
14023    RExC_parse++;
14024    continue;
14025   }
14026   if (RExC_flags & RXf_PMf_EXTENDED) {
14027    if (isSPACE(*RExC_parse)) {
14028     RExC_parse++;
14029     continue;
14030    }
14031    else if (*RExC_parse == '#') {
14032     if ( reg_skipcomment( pRExC_state ) )
14033      continue;
14034    }
14035   }
14036   return retval;
14037  }
14038 }
14039
14040 /*
14041 - reg_node - emit a node
14042 */
14043 STATIC regnode *   /* Location. */
14044 S_reg_node(pTHX_ RExC_state_t *pRExC_state, U8 op)
14045 {
14046  dVAR;
14047  regnode *ptr;
14048  regnode * const ret = RExC_emit;
14049  GET_RE_DEBUG_FLAGS_DECL;
14050
14051  PERL_ARGS_ASSERT_REG_NODE;
14052
14053  if (SIZE_ONLY) {
14054   SIZE_ALIGN(RExC_size);
14055   RExC_size += 1;
14056   return(ret);
14057  }
14058  if (RExC_emit >= RExC_emit_bound)
14059   Perl_croak(aTHX_ "panic: reg_node overrun trying to emit %d, %p>=%p",
14060     op, RExC_emit, RExC_emit_bound);
14061
14062  NODE_ALIGN_FILL(ret);
14063  ptr = ret;
14064  FILL_ADVANCE_NODE(ptr, op);
14065  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, (ptr) - 1);
14066 #ifdef RE_TRACK_PATTERN_OFFSETS
14067  if (RExC_offsets) {         /* MJD */
14068   MJD_OFFSET_DEBUG(("%s:%d: (op %s) %s %"UVuf" (len %"UVuf") (max %"UVuf").\n",
14069    "reg_node", __LINE__,
14070    PL_reg_name[op],
14071    (UV)(RExC_emit - RExC_emit_start) > RExC_offsets[0]
14072     ? "Overwriting end of array!\n" : "OK",
14073    (UV)(RExC_emit - RExC_emit_start),
14074    (UV)(RExC_parse - RExC_start),
14075    (UV)RExC_offsets[0]));
14076   Set_Node_Offset(RExC_emit, RExC_parse + (op == END));
14077  }
14078 #endif
14079  RExC_emit = ptr;
14080  return(ret);
14081 }
14082
14083 /*
14084 - reganode - emit a node with an argument
14085 */
14086 STATIC regnode *   /* Location. */
14087 S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg)
14088 {
14089  dVAR;
14090  regnode *ptr;
14091  regnode * const ret = RExC_emit;
14092  GET_RE_DEBUG_FLAGS_DECL;
14093
14094  PERL_ARGS_ASSERT_REGANODE;
14095
14096  if (SIZE_ONLY) {
14097   SIZE_ALIGN(RExC_size);
14098   RExC_size += 2;
14099   /*
14100   We can't do this:
14101
14102   assert(2==regarglen[op]+1);
14103
14104   Anything larger than this has to allocate the extra amount.
14105   If we changed this to be:
14106
14107   RExC_size += (1 + regarglen[op]);
14108
14109   then it wouldn't matter. Its not clear what side effect
14110   might come from that so its not done so far.
14111   -- dmq
14112   */
14113   return(ret);
14114  }
14115  if (RExC_emit >= RExC_emit_bound)
14116   Perl_croak(aTHX_ "panic: reg_node overrun trying to emit %d, %p>=%p",
14117     op, RExC_emit, RExC_emit_bound);
14118
14119  NODE_ALIGN_FILL(ret);
14120  ptr = ret;
14121  FILL_ADVANCE_NODE_ARG(ptr, op, arg);
14122  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, (ptr) - 2);
14123 #ifdef RE_TRACK_PATTERN_OFFSETS
14124  if (RExC_offsets) {         /* MJD */
14125   MJD_OFFSET_DEBUG(("%s(%d): (op %s) %s %"UVuf" <- %"UVuf" (max %"UVuf").\n",
14126    "reganode",
14127    __LINE__,
14128    PL_reg_name[op],
14129    (UV)(RExC_emit - RExC_emit_start) > RExC_offsets[0] ?
14130    "Overwriting end of array!\n" : "OK",
14131    (UV)(RExC_emit - RExC_emit_start),
14132    (UV)(RExC_parse - RExC_start),
14133    (UV)RExC_offsets[0]));
14134   Set_Cur_Node_Offset;
14135  }
14136 #endif
14137  RExC_emit = ptr;
14138  return(ret);
14139 }
14140
14141 /*
14142 - reguni - emit (if appropriate) a Unicode character
14143 */
14144 STATIC STRLEN
14145 S_reguni(pTHX_ const RExC_state_t *pRExC_state, UV uv, char* s)
14146 {
14147  dVAR;
14148
14149  PERL_ARGS_ASSERT_REGUNI;
14150
14151  return SIZE_ONLY ? UNISKIP(uv) : (uvchr_to_utf8((U8*)s, uv) - (U8*)s);
14152 }
14153
14154 /*
14155 - reginsert - insert an operator in front of already-emitted operand
14156 *
14157 * Means relocating the operand.
14158 */
14159 STATIC void
14160 S_reginsert(pTHX_ RExC_state_t *pRExC_state, U8 op, regnode *opnd, U32 depth)
14161 {
14162  dVAR;
14163  regnode *src;
14164  regnode *dst;
14165  regnode *place;
14166  const int offset = regarglen[(U8)op];
14167  const int size = NODE_STEP_REGNODE + offset;
14168  GET_RE_DEBUG_FLAGS_DECL;
14169
14170  PERL_ARGS_ASSERT_REGINSERT;
14171  PERL_UNUSED_ARG(depth);
14172 /* (PL_regkind[(U8)op] == CURLY ? EXTRA_STEP_2ARGS : 0); */
14173  DEBUG_PARSE_FMT("inst"," - %s",PL_reg_name[op]);
14174  if (SIZE_ONLY) {
14175   RExC_size += size;
14176   return;
14177  }
14178
14179  src = RExC_emit;
14180  RExC_emit += size;
14181  dst = RExC_emit;
14182  if (RExC_open_parens) {
14183   int paren;
14184   /*DEBUG_PARSE_FMT("inst"," - %"IVdf, (IV)RExC_npar);*/
14185   for ( paren=0 ; paren < RExC_npar ; paren++ ) {
14186    if ( RExC_open_parens[paren] >= opnd ) {
14187     /*DEBUG_PARSE_FMT("open"," - %d",size);*/
14188     RExC_open_parens[paren] += size;
14189    } else {
14190     /*DEBUG_PARSE_FMT("open"," - %s","ok");*/
14191    }
14192    if ( RExC_close_parens[paren] >= opnd ) {
14193     /*DEBUG_PARSE_FMT("close"," - %d",size);*/
14194     RExC_close_parens[paren] += size;
14195    } else {
14196     /*DEBUG_PARSE_FMT("close"," - %s","ok");*/
14197    }
14198   }
14199  }
14200
14201  while (src > opnd) {
14202   StructCopy(--src, --dst, regnode);
14203 #ifdef RE_TRACK_PATTERN_OFFSETS
14204   if (RExC_offsets) {     /* MJD 20010112 */
14205    MJD_OFFSET_DEBUG(("%s(%d): (op %s) %s copy %"UVuf" -> %"UVuf" (max %"UVuf").\n",
14206     "reg_insert",
14207     __LINE__,
14208     PL_reg_name[op],
14209     (UV)(dst - RExC_emit_start) > RExC_offsets[0]
14210      ? "Overwriting end of array!\n" : "OK",
14211     (UV)(src - RExC_emit_start),
14212     (UV)(dst - RExC_emit_start),
14213     (UV)RExC_offsets[0]));
14214    Set_Node_Offset_To_R(dst-RExC_emit_start, Node_Offset(src));
14215    Set_Node_Length_To_R(dst-RExC_emit_start, Node_Length(src));
14216   }
14217 #endif
14218  }
14219
14220
14221  place = opnd;  /* Op node, where operand used to be. */
14222 #ifdef RE_TRACK_PATTERN_OFFSETS
14223  if (RExC_offsets) {         /* MJD */
14224   MJD_OFFSET_DEBUG(("%s(%d): (op %s) %s %"UVuf" <- %"UVuf" (max %"UVuf").\n",
14225    "reginsert",
14226    __LINE__,
14227    PL_reg_name[op],
14228    (UV)(place - RExC_emit_start) > RExC_offsets[0]
14229    ? "Overwriting end of array!\n" : "OK",
14230    (UV)(place - RExC_emit_start),
14231    (UV)(RExC_parse - RExC_start),
14232    (UV)RExC_offsets[0]));
14233   Set_Node_Offset(place, RExC_parse);
14234   Set_Node_Length(place, 1);
14235  }
14236 #endif
14237  src = NEXTOPER(place);
14238  FILL_ADVANCE_NODE(place, op);
14239  REH_CALL_COMP_NODE_HOOK(pRExC_state->rx, (place) - 1);
14240  Zero(src, offset, regnode);
14241 }
14242
14243 /*
14244 - regtail - set the next-pointer at the end of a node chain of p to val.
14245 - SEE ALSO: regtail_study
14246 */
14247 /* TODO: All three parms should be const */
14248 STATIC void
14249 S_regtail(pTHX_ RExC_state_t *pRExC_state, regnode *p, const regnode *val,U32 depth)
14250 {
14251  dVAR;
14252  regnode *scan;
14253  GET_RE_DEBUG_FLAGS_DECL;
14254
14255  PERL_ARGS_ASSERT_REGTAIL;
14256 #ifndef DEBUGGING
14257  PERL_UNUSED_ARG(depth);
14258 #endif
14259
14260  if (SIZE_ONLY)
14261   return;
14262
14263  /* Find last node. */
14264  scan = p;
14265  for (;;) {
14266   regnode * const temp = regnext(scan);
14267   DEBUG_PARSE_r({
14268    SV * const mysv=sv_newmortal();
14269    DEBUG_PARSE_MSG((scan==p ? "tail" : ""));
14270    regprop(RExC_rx, mysv, scan);
14271    PerlIO_printf(Perl_debug_log, "~ %s (%d) %s %s\n",
14272     SvPV_nolen_const(mysv), REG_NODE_NUM(scan),
14273      (temp == NULL ? "->" : ""),
14274      (temp == NULL ? PL_reg_name[OP(val)] : "")
14275    );
14276   });
14277   if (temp == NULL)
14278    break;
14279   scan = temp;
14280  }
14281
14282  if (reg_off_by_arg[OP(scan)]) {
14283   ARG_SET(scan, val - scan);
14284  }
14285  else {
14286   NEXT_OFF(scan) = val - scan;
14287  }
14288 }
14289
14290 #ifdef DEBUGGING
14291 /*
14292 - regtail_study - set the next-pointer at the end of a node chain of p to val.
14293 - Look for optimizable sequences at the same time.
14294 - currently only looks for EXACT chains.
14295
14296 This is experimental code. The idea is to use this routine to perform
14297 in place optimizations on branches and groups as they are constructed,
14298 with the long term intention of removing optimization from study_chunk so
14299 that it is purely analytical.
14300
14301 Currently only used when in DEBUG mode. The macro REGTAIL_STUDY() is used
14302 to control which is which.
14303
14304 */
14305 /* TODO: All four parms should be const */
14306
14307 STATIC U8
14308 S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode *p, const regnode *val,U32 depth)
14309 {
14310  dVAR;
14311  regnode *scan;
14312  U8 exact = PSEUDO;
14313 #ifdef EXPERIMENTAL_INPLACESCAN
14314  I32 min = 0;
14315 #endif
14316  GET_RE_DEBUG_FLAGS_DECL;
14317
14318  PERL_ARGS_ASSERT_REGTAIL_STUDY;
14319
14320
14321  if (SIZE_ONLY)
14322   return exact;
14323
14324  /* Find last node. */
14325
14326  scan = p;
14327  for (;;) {
14328   regnode * const temp = regnext(scan);
14329 #ifdef EXPERIMENTAL_INPLACESCAN
14330   if (PL_regkind[OP(scan)] == EXACT) {
14331    bool has_exactf_sharp_s; /* Unexamined in this routine */
14332    if (join_exact(pRExC_state,scan,&min, &has_exactf_sharp_s, 1,val,depth+1))
14333     return EXACT;
14334   }
14335 #endif
14336   if ( exact ) {
14337    switch (OP(scan)) {
14338     case EXACT:
14339     case EXACTF:
14340     case EXACTFA:
14341     case EXACTFU:
14342     case EXACTFU_SS:
14343     case EXACTFU_TRICKYFOLD:
14344     case EXACTFL:
14345       if( exact == PSEUDO )
14346        exact= OP(scan);
14347       else if ( exact != OP(scan) )
14348        exact= 0;
14349     case NOTHING:
14350      break;
14351     default:
14352      exact= 0;
14353    }
14354   }
14355   DEBUG_PARSE_r({
14356    SV * const mysv=sv_newmortal();
14357    DEBUG_PARSE_MSG((scan==p ? "tsdy" : ""));
14358    regprop(RExC_rx, mysv, scan);
14359    PerlIO_printf(Perl_debug_log, "~ %s (%d) -> %s\n",
14360     SvPV_nolen_const(mysv),
14361     REG_NODE_NUM(scan),
14362     PL_reg_name[exact]);
14363   });
14364   if (temp == NULL)
14365    break;
14366   scan = temp;
14367  }
14368  DEBUG_PARSE_r({
14369   SV * const mysv_val=sv_newmortal();
14370   DEBUG_PARSE_MSG("");
14371   regprop(RExC_rx, mysv_val, val);
14372   PerlIO_printf(Perl_debug_log, "~ attach to %s (%"IVdf") offset to %"IVdf"\n",
14373      SvPV_nolen_const(mysv_val),
14374      (IV)REG_NODE_NUM(val),
14375      (IV)(val - scan)
14376   );
14377  });
14378  if (reg_off_by_arg[OP(scan)]) {
14379   ARG_SET(scan, val - scan);
14380  }
14381  else {
14382   NEXT_OFF(scan) = val - scan;
14383  }
14384
14385  return exact;
14386 }
14387 #endif
14388
14389 /*
14390  - regdump - dump a regexp onto Perl_debug_log in vaguely comprehensible form
14391  */
14392 #ifdef DEBUGGING
14393 static void
14394 S_regdump_extflags(pTHX_ const char *lead, const U32 flags)
14395 {
14396  int bit;
14397  int set=0;
14398  regex_charset cs;
14399
14400  for (bit=0; bit<32; bit++) {
14401   if (flags & (1<<bit)) {
14402    if ((1<<bit) & RXf_PMf_CHARSET) { /* Output separately, below */
14403     continue;
14404    }
14405    if (!set++ && lead)
14406     PerlIO_printf(Perl_debug_log, "%s",lead);
14407    PerlIO_printf(Perl_debug_log, "%s ",PL_reg_extflags_name[bit]);
14408   }
14409  }
14410  if ((cs = get_regex_charset(flags)) != REGEX_DEPENDS_CHARSET) {
14411    if (!set++ && lead) {
14412     PerlIO_printf(Perl_debug_log, "%s",lead);
14413    }
14414    switch (cs) {
14415     case REGEX_UNICODE_CHARSET:
14416      PerlIO_printf(Perl_debug_log, "UNICODE");
14417      break;
14418     case REGEX_LOCALE_CHARSET:
14419      PerlIO_printf(Perl_debug_log, "LOCALE");
14420      break;
14421     case REGEX_ASCII_RESTRICTED_CHARSET:
14422      PerlIO_printf(Perl_debug_log, "ASCII-RESTRICTED");
14423      break;
14424     case REGEX_ASCII_MORE_RESTRICTED_CHARSET:
14425      PerlIO_printf(Perl_debug_log, "ASCII-MORE_RESTRICTED");
14426      break;
14427     default:
14428      PerlIO_printf(Perl_debug_log, "UNKNOWN CHARACTER SET");
14429      break;
14430    }
14431  }
14432  if (lead)  {
14433   if (set)
14434    PerlIO_printf(Perl_debug_log, "\n");
14435   else
14436    PerlIO_printf(Perl_debug_log, "%s[none-set]\n",lead);
14437  }
14438 }
14439 #endif
14440
14441 void
14442 Perl_regdump(pTHX_ const regexp *r)
14443 {
14444 #ifdef DEBUGGING
14445  dVAR;
14446  SV * const sv = sv_newmortal();
14447  SV *dsv= sv_newmortal();
14448  RXi_GET_DECL(r,ri);
14449  GET_RE_DEBUG_FLAGS_DECL;
14450
14451  PERL_ARGS_ASSERT_REGDUMP;
14452
14453  (void)dumpuntil(r, ri->program, ri->program + 1, NULL, NULL, sv, 0, 0);
14454
14455  /* Header fields of interest. */
14456  if (r->anchored_substr) {
14457   RE_PV_QUOTED_DECL(s, 0, dsv, SvPVX_const(r->anchored_substr),
14458    RE_SV_DUMPLEN(r->anchored_substr), 30);
14459   PerlIO_printf(Perl_debug_log,
14460      "anchored %s%s at %"IVdf" ",
14461      s, RE_SV_TAIL(r->anchored_substr),
14462      (IV)r->anchored_offset);
14463  } else if (r->anchored_utf8) {
14464   RE_PV_QUOTED_DECL(s, 1, dsv, SvPVX_const(r->anchored_utf8),
14465    RE_SV_DUMPLEN(r->anchored_utf8), 30);
14466   PerlIO_printf(Perl_debug_log,
14467      "anchored utf8 %s%s at %"IVdf" ",
14468      s, RE_SV_TAIL(r->anchored_utf8),
14469      (IV)r->anchored_offset);
14470  }
14471  if (r->float_substr) {
14472   RE_PV_QUOTED_DECL(s, 0, dsv, SvPVX_const(r->float_substr),
14473    RE_SV_DUMPLEN(r->float_substr), 30);
14474   PerlIO_printf(Perl_debug_log,
14475      "floating %s%s at %"IVdf"..%"UVuf" ",
14476      s, RE_SV_TAIL(r->float_substr),
14477      (IV)r->float_min_offset, (UV)r->float_max_offset);
14478  } else if (r->float_utf8) {
14479   RE_PV_QUOTED_DECL(s, 1, dsv, SvPVX_const(r->float_utf8),
14480    RE_SV_DUMPLEN(r->float_utf8), 30);
14481   PerlIO_printf(Perl_debug_log,
14482      "floating utf8 %s%s at %"IVdf"..%"UVuf" ",
14483      s, RE_SV_TAIL(r->float_utf8),
14484      (IV)r->float_min_offset, (UV)r->float_max_offset);
14485  }
14486  if (r->check_substr || r->check_utf8)
14487   PerlIO_printf(Perl_debug_log,
14488      (const char *)
14489      (r->check_substr == r->float_substr
14490      && r->check_utf8 == r->float_utf8
14491      ? "(checking floating" : "(checking anchored"));
14492  if (r->extflags & RXf_NOSCAN)
14493   PerlIO_printf(Perl_debug_log, " noscan");
14494  if (r->extflags & RXf_CHECK_ALL)
14495   PerlIO_printf(Perl_debug_log, " isall");
14496  if (r->check_substr || r->check_utf8)
14497   PerlIO_printf(Perl_debug_log, ") ");
14498
14499  if (ri->regstclass) {
14500   regprop(r, sv, ri->regstclass);
14501   PerlIO_printf(Perl_debug_log, "stclass %s ", SvPVX_const(sv));
14502  }
14503  if (r->extflags & RXf_ANCH) {
14504   PerlIO_printf(Perl_debug_log, "anchored");
14505   if (r->extflags & RXf_ANCH_BOL)
14506    PerlIO_printf(Perl_debug_log, "(BOL)");
14507   if (r->extflags & RXf_ANCH_MBOL)
14508    PerlIO_printf(Perl_debug_log, "(MBOL)");
14509   if (r->extflags & RXf_ANCH_SBOL)
14510    PerlIO_printf(Perl_debug_log, "(SBOL)");
14511   if (r->extflags & RXf_ANCH_GPOS)
14512    PerlIO_printf(Perl_debug_log, "(GPOS)");
14513   PerlIO_putc(Perl_debug_log, ' ');
14514  }
14515  if (r->extflags & RXf_GPOS_SEEN)
14516   PerlIO_printf(Perl_debug_log, "GPOS:%"UVuf" ", (UV)r->gofs);
14517  if (r->intflags & PREGf_SKIP)
14518   PerlIO_printf(Perl_debug_log, "plus ");
14519  if (r->intflags & PREGf_IMPLICIT)
14520   PerlIO_printf(Perl_debug_log, "implicit ");
14521  PerlIO_printf(Perl_debug_log, "minlen %"IVdf" ", (IV)r->minlen);
14522  if (r->extflags & RXf_EVAL_SEEN)
14523   PerlIO_printf(Perl_debug_log, "with eval ");
14524  PerlIO_printf(Perl_debug_log, "\n");
14525  DEBUG_FLAGS_r(regdump_extflags("r->extflags: ",r->extflags));
14526 #else
14527  PERL_ARGS_ASSERT_REGDUMP;
14528  PERL_UNUSED_CONTEXT;
14529  PERL_UNUSED_ARG(r);
14530 #endif /* DEBUGGING */
14531 }
14532
14533 /*
14534 - regprop - printable representation of opcode
14535 */
14536 #define EMIT_ANYOF_TEST_SEPARATOR(do_sep,sv,flags) \
14537 STMT_START { \
14538   if (do_sep) {                           \
14539    Perl_sv_catpvf(aTHX_ sv,"%s][%s",PL_colors[1],PL_colors[0]); \
14540    if (flags & ANYOF_INVERT)           \
14541     /*make sure the invert info is in each */ \
14542     sv_catpvs(sv, "^");             \
14543    do_sep = 0;                         \
14544   }                                       \
14545 } STMT_END
14546
14547 void
14548 Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o)
14549 {
14550 #ifdef DEBUGGING
14551  dVAR;
14552  int k;
14553
14554  /* Should be synchronized with * ANYOF_ #xdefines in regcomp.h */
14555  static const char * const anyofs[] = {
14556 #if _CC_WORDCHAR != 0 || _CC_DIGIT != 1 || _CC_ALPHA != 2 || _CC_LOWER != 3 \
14557  || _CC_UPPER != 4 || _CC_PUNCT != 5 || _CC_PRINT != 6                   \
14558  || _CC_ALPHANUMERIC != 7 || _CC_GRAPH != 8 || _CC_CASED != 9            \
14559  || _CC_SPACE != 10 || _CC_BLANK != 11 || _CC_XDIGIT != 12               \
14560  || _CC_PSXSPC != 13 || _CC_CNTRL != 14 || _CC_ASCII != 15               \
14561  || _CC_VERTSPACE != 16
14562   #error Need to adjust order of anyofs[]
14563 #endif
14564   "[\\w]",
14565   "[\\W]",
14566   "[\\d]",
14567   "[\\D]",
14568   "[:alpha:]",
14569   "[:^alpha:]",
14570   "[:lower:]",
14571   "[:^lower:]",
14572   "[:upper:]",
14573   "[:^upper:]",
14574   "[:punct:]",
14575   "[:^punct:]",
14576   "[:print:]",
14577   "[:^print:]",
14578   "[:alnum:]",
14579   "[:^alnum:]",
14580   "[:graph:]",
14581   "[:^graph:]",
14582   "[:cased:]",
14583   "[:^cased:]",
14584   "[\\s]",
14585   "[\\S]",
14586   "[:blank:]",
14587   "[:^blank:]",
14588   "[:xdigit:]",
14589   "[:^xdigit:]",
14590   "[:space:]",
14591   "[:^space:]",
14592   "[:cntrl:]",
14593   "[:^cntrl:]",
14594   "[:ascii:]",
14595   "[:^ascii:]",
14596   "[\\v]",
14597   "[\\V]"
14598  };
14599  RXi_GET_DECL(prog,progi);
14600  GET_RE_DEBUG_FLAGS_DECL;
14601
14602  PERL_ARGS_ASSERT_REGPROP;
14603
14604  sv_setpvs(sv, "");
14605
14606  if (OP(o) > REGNODE_MAX)  /* regnode.type is unsigned */
14607   /* It would be nice to FAIL() here, but this may be called from
14608   regexec.c, and it would be hard to supply pRExC_state. */
14609   Perl_croak(aTHX_ "Corrupted regexp opcode %d > %d", (int)OP(o), (int)REGNODE_MAX);
14610  sv_catpv(sv, PL_reg_name[OP(o)]); /* Take off const! */
14611
14612  k = PL_regkind[OP(o)];
14613
14614  if (k == EXACT) {
14615   sv_catpvs(sv, " ");
14616   /* Using is_utf8_string() (via PERL_PV_UNI_DETECT)
14617   * is a crude hack but it may be the best for now since
14618   * we have no flag "this EXACTish node was UTF-8"
14619   * --jhi */
14620   pv_pretty(sv, STRING(o), STR_LEN(o), 60, PL_colors[0], PL_colors[1],
14621     PERL_PV_ESCAPE_UNI_DETECT |
14622     PERL_PV_ESCAPE_NONASCII   |
14623     PERL_PV_PRETTY_ELLIPSES   |
14624     PERL_PV_PRETTY_LTGT       |
14625     PERL_PV_PRETTY_NOCLEAR
14626     );
14627  } else if (k == TRIE) {
14628   /* print the details of the trie in dumpuntil instead, as
14629   * progi->data isn't available here */
14630   const char op = OP(o);
14631   const U32 n = ARG(o);
14632   const reg_ac_data * const ac = IS_TRIE_AC(op) ?
14633    (reg_ac_data *)progi->data->data[n] :
14634    NULL;
14635   const reg_trie_data * const trie
14636    = (reg_trie_data*)progi->data->data[!IS_TRIE_AC(op) ? n : ac->trie];
14637
14638   Perl_sv_catpvf(aTHX_ sv, "-%s",PL_reg_name[o->flags]);
14639   DEBUG_TRIE_COMPILE_r(
14640    Perl_sv_catpvf(aTHX_ sv,
14641     "<S:%"UVuf"/%"IVdf" W:%"UVuf" L:%"UVuf"/%"UVuf" C:%"UVuf"/%"UVuf">",
14642     (UV)trie->startstate,
14643     (IV)trie->statecount-1, /* -1 because of the unused 0 element */
14644     (UV)trie->wordcount,
14645     (UV)trie->minlen,
14646     (UV)trie->maxlen,
14647     (UV)TRIE_CHARCOUNT(trie),
14648     (UV)trie->uniquecharcount
14649    )
14650   );
14651   if ( IS_ANYOF_TRIE(op) || trie->bitmap ) {
14652    int i;
14653    int rangestart = -1;
14654    U8* bitmap = IS_ANYOF_TRIE(op) ? (U8*)ANYOF_BITMAP(o) : (U8*)TRIE_BITMAP(trie);
14655    sv_catpvs(sv, "[");
14656    for (i = 0; i <= 256; i++) {
14657     if (i < 256 && BITMAP_TEST(bitmap,i)) {
14658      if (rangestart == -1)
14659       rangestart = i;
14660     } else if (rangestart != -1) {
14661      if (i <= rangestart + 3)
14662       for (; rangestart < i; rangestart++)
14663        put_byte(sv, rangestart);
14664      else {
14665       put_byte(sv, rangestart);
14666       sv_catpvs(sv, "-");
14667       put_byte(sv, i - 1);
14668      }
14669      rangestart = -1;
14670     }
14671    }
14672    sv_catpvs(sv, "]");
14673   }
14674
14675  } else if (k == CURLY) {
14676   if (OP(o) == CURLYM || OP(o) == CURLYN || OP(o) == CURLYX)
14677    Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags); /* Parenth number */
14678   Perl_sv_catpvf(aTHX_ sv, " {%d,%d}", ARG1(o), ARG2(o));
14679  }
14680  else if (k == WHILEM && o->flags)   /* Ordinal/of */
14681   Perl_sv_catpvf(aTHX_ sv, "[%d/%d]", o->flags & 0xf, o->flags>>4);
14682  else if (k == REF || k == OPEN || k == CLOSE || k == GROUPP || OP(o)==ACCEPT) {
14683   Perl_sv_catpvf(aTHX_ sv, "%d", (int)ARG(o)); /* Parenth number */
14684   if ( RXp_PAREN_NAMES(prog) ) {
14685    if ( k != REF || (OP(o) < NREF)) {
14686     AV *list= MUTABLE_AV(progi->data->data[progi->name_list_idx]);
14687     SV **name= av_fetch(list, ARG(o), 0 );
14688     if (name)
14689      Perl_sv_catpvf(aTHX_ sv, " '%"SVf"'", SVfARG(*name));
14690    }
14691    else {
14692     AV *list= MUTABLE_AV(progi->data->data[ progi->name_list_idx ]);
14693     SV *sv_dat= MUTABLE_SV(progi->data->data[ ARG( o ) ]);
14694     I32 *nums=(I32*)SvPVX(sv_dat);
14695     SV **name= av_fetch(list, nums[0], 0 );
14696     I32 n;
14697     if (name) {
14698      for ( n=0; n<SvIVX(sv_dat); n++ ) {
14699       Perl_sv_catpvf(aTHX_ sv, "%s%"IVdf,
14700          (n ? "," : ""), (IV)nums[n]);
14701      }
14702      Perl_sv_catpvf(aTHX_ sv, " '%"SVf"'", SVfARG(*name));
14703     }
14704    }
14705   }
14706  } else if (k == GOSUB)
14707   Perl_sv_catpvf(aTHX_ sv, "%d[%+d]", (int)ARG(o),(int)ARG2L(o)); /* Paren and offset */
14708  else if (k == VERB) {
14709   if (!o->flags)
14710    Perl_sv_catpvf(aTHX_ sv, ":%"SVf,
14711       SVfARG((MUTABLE_SV(progi->data->data[ ARG( o ) ]))));
14712  } else if (k == LOGICAL)
14713   Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags); /* 2: embedded, otherwise 1 */
14714  else if (k == ANYOF) {
14715   int i, rangestart = -1;
14716   const U8 flags = ANYOF_FLAGS(o);
14717   int do_sep = 0;
14718
14719
14720   if (flags & ANYOF_LOCALE)
14721    sv_catpvs(sv, "{loc}");
14722   if (flags & ANYOF_LOC_FOLD)
14723    sv_catpvs(sv, "{i}");
14724   Perl_sv_catpvf(aTHX_ sv, "[%s", PL_colors[0]);
14725   if (flags & ANYOF_INVERT)
14726    sv_catpvs(sv, "^");
14727
14728   /* output what the standard cp 0-255 bitmap matches */
14729   for (i = 0; i <= 256; i++) {
14730    if (i < 256 && ANYOF_BITMAP_TEST(o,i)) {
14731     if (rangestart == -1)
14732      rangestart = i;
14733    } else if (rangestart != -1) {
14734     if (i <= rangestart + 3)
14735      for (; rangestart < i; rangestart++)
14736       put_byte(sv, rangestart);
14737     else {
14738      put_byte(sv, rangestart);
14739      sv_catpvs(sv, "-");
14740      put_byte(sv, i - 1);
14741     }
14742     do_sep = 1;
14743     rangestart = -1;
14744    }
14745   }
14746
14747   EMIT_ANYOF_TEST_SEPARATOR(do_sep,sv,flags);
14748   /* output any special charclass tests (used entirely under use locale) */
14749   if (ANYOF_CLASS_TEST_ANY_SET(o))
14750    for (i = 0; i < (int)(sizeof(anyofs)/sizeof(char*)); i++)
14751     if (ANYOF_CLASS_TEST(o,i)) {
14752      sv_catpv(sv, anyofs[i]);
14753      do_sep = 1;
14754     }
14755
14756   EMIT_ANYOF_TEST_SEPARATOR(do_sep,sv,flags);
14757
14758   if (flags & ANYOF_NON_UTF8_LATIN1_ALL) {
14759    sv_catpvs(sv, "{non-utf8-latin1-all}");
14760   }
14761
14762   /* output information about the unicode matching */
14763   if (flags & ANYOF_UNICODE_ALL)
14764    sv_catpvs(sv, "{unicode_all}");
14765   else if (ANYOF_NONBITMAP(o))
14766    sv_catpvs(sv, "{unicode}");
14767   if (flags & ANYOF_NONBITMAP_NON_UTF8)
14768    sv_catpvs(sv, "{outside bitmap}");
14769
14770   if (ANYOF_NONBITMAP(o)) {
14771    SV *lv; /* Set if there is something outside the bit map */
14772    SV * const sw = regclass_swash(prog, o, FALSE, &lv, NULL);
14773    bool byte_output = FALSE;   /* If something in the bitmap has been
14774           output */
14775
14776    if (lv && lv != &PL_sv_undef) {
14777     if (sw) {
14778      U8 s[UTF8_MAXBYTES_CASE+1];
14779
14780      for (i = 0; i <= 256; i++) { /* Look at chars in bitmap */
14781       uvchr_to_utf8(s, i);
14782
14783       if (i < 256
14784        && ! ANYOF_BITMAP_TEST(o, i)    /* Don't duplicate
14785                things already
14786                output as part
14787                of the bitmap */
14788        && swash_fetch(sw, s, TRUE))
14789       {
14790        if (rangestart == -1)
14791         rangestart = i;
14792       } else if (rangestart != -1) {
14793        byte_output = TRUE;
14794        if (i <= rangestart + 3)
14795         for (; rangestart < i; rangestart++) {
14796          put_byte(sv, rangestart);
14797         }
14798        else {
14799         put_byte(sv, rangestart);
14800         sv_catpvs(sv, "-");
14801         put_byte(sv, i-1);
14802        }
14803        rangestart = -1;
14804       }
14805      }
14806     }
14807
14808     {
14809      char *s = savesvpv(lv);
14810      char * const origs = s;
14811
14812      while (*s && *s != '\n')
14813       s++;
14814
14815      if (*s == '\n') {
14816       const char * const t = ++s;
14817
14818       if (byte_output) {
14819        sv_catpvs(sv, " ");
14820       }
14821
14822       while (*s) {
14823        if (*s == '\n') {
14824
14825         /* Truncate very long output */
14826         if (s - origs > 256) {
14827          Perl_sv_catpvf(aTHX_ sv,
14828             "%.*s...",
14829             (int) (s - origs - 1),
14830             t);
14831          goto out_dump;
14832         }
14833         *s = ' ';
14834        }
14835        else if (*s == '\t') {
14836         *s = '-';
14837        }
14838        s++;
14839       }
14840       if (s[-1] == ' ')
14841        s[-1] = 0;
14842
14843       sv_catpv(sv, t);
14844      }
14845
14846     out_dump:
14847
14848      Safefree(origs);
14849     }
14850     SvREFCNT_dec_NN(lv);
14851    }
14852   }
14853
14854   Perl_sv_catpvf(aTHX_ sv, "%s]", PL_colors[1]);
14855  }
14856  else if (k == POSIXD || k == NPOSIXD) {
14857   U8 index = FLAGS(o) * 2;
14858   if (index > (sizeof(anyofs) / sizeof(anyofs[0]))) {
14859    Perl_sv_catpvf(aTHX_ sv, "[illegal type=%d])", index);
14860   }
14861   else {
14862    sv_catpv(sv, anyofs[index]);
14863   }
14864  }
14865  else if (k == BRANCHJ && (OP(o) == UNLESSM || OP(o) == IFMATCH))
14866   Perl_sv_catpvf(aTHX_ sv, "[%d]", -(o->flags));
14867 #else
14868  PERL_UNUSED_CONTEXT;
14869  PERL_UNUSED_ARG(sv);
14870  PERL_UNUSED_ARG(o);
14871  PERL_UNUSED_ARG(prog);
14872 #endif /* DEBUGGING */
14873 }
14874
14875 SV *
14876 Perl_re_intuit_string(pTHX_ REGEXP * const r)
14877 {    /* Assume that RE_INTUIT is set */
14878  dVAR;
14879  struct regexp *const prog = ReANY(r);
14880  GET_RE_DEBUG_FLAGS_DECL;
14881
14882  PERL_ARGS_ASSERT_RE_INTUIT_STRING;
14883  PERL_UNUSED_CONTEXT;
14884
14885  DEBUG_COMPILE_r(
14886   {
14887    const char * const s = SvPV_nolen_const(prog->check_substr
14888      ? prog->check_substr : prog->check_utf8);
14889
14890    if (!PL_colorset) reginitcolors();
14891    PerlIO_printf(Perl_debug_log,
14892      "%sUsing REx %ssubstr:%s \"%s%.60s%s%s\"\n",
14893      PL_colors[4],
14894      prog->check_substr ? "" : "utf8 ",
14895      PL_colors[5],PL_colors[0],
14896      s,
14897      PL_colors[1],
14898      (strlen(s) > 60 ? "..." : ""));
14899   } );
14900
14901  return prog->check_substr ? prog->check_substr : prog->check_utf8;
14902 }
14903
14904 /*
14905    pregfree()
14906
14907    handles refcounting and freeing the perl core regexp structure. When
14908    it is necessary to actually free the structure the first thing it
14909    does is call the 'free' method of the regexp_engine associated to
14910    the regexp, allowing the handling of the void *pprivate; member
14911    first. (This routine is not overridable by extensions, which is why
14912    the extensions free is called first.)
14913
14914    See regdupe and regdupe_internal if you change anything here.
14915 */
14916 #ifndef PERL_IN_XSUB_RE
14917 void
14918 Perl_pregfree(pTHX_ REGEXP *r)
14919 {
14920  SvREFCNT_dec(r);
14921 }
14922
14923 void
14924 Perl_pregfree2(pTHX_ REGEXP *rx)
14925 {
14926  dVAR;
14927  struct regexp *const r = ReANY(rx);
14928  GET_RE_DEBUG_FLAGS_DECL;
14929
14930  PERL_ARGS_ASSERT_PREGFREE2;
14931
14932  if (r->mother_re) {
14933   ReREFCNT_dec(r->mother_re);
14934  } else {
14935   CALLREGFREE_PVT(rx); /* free the private data */
14936   SvREFCNT_dec(RXp_PAREN_NAMES(r));
14937   Safefree(r->xpv_len_u.xpvlenu_pv);
14938  }
14939  if (r->substrs) {
14940   SvREFCNT_dec(r->anchored_substr);
14941   SvREFCNT_dec(r->anchored_utf8);
14942   SvREFCNT_dec(r->float_substr);
14943   SvREFCNT_dec(r->float_utf8);
14944   Safefree(r->substrs);
14945  }
14946  RX_MATCH_COPY_FREE(rx);
14947 #ifdef PERL_ANY_COW
14948  SvREFCNT_dec(r->saved_copy);
14949 #endif
14950  Safefree(r->offs);
14951  SvREFCNT_dec(r->qr_anoncv);
14952  rx->sv_u.svu_rx = 0;
14953 }
14954
14955 /*  reg_temp_copy()
14956
14957  This is a hacky workaround to the structural issue of match results
14958  being stored in the regexp structure which is in turn stored in
14959  PL_curpm/PL_reg_curpm. The problem is that due to qr// the pattern
14960  could be PL_curpm in multiple contexts, and could require multiple
14961  result sets being associated with the pattern simultaneously, such
14962  as when doing a recursive match with (??{$qr})
14963
14964  The solution is to make a lightweight copy of the regexp structure
14965  when a qr// is returned from the code executed by (??{$qr}) this
14966  lightweight copy doesn't actually own any of its data except for
14967  the starp/end and the actual regexp structure itself.
14968
14969 */
14970
14971
14972 REGEXP *
14973 Perl_reg_temp_copy (pTHX_ REGEXP *ret_x, REGEXP *rx)
14974 {
14975  struct regexp *ret;
14976  struct regexp *const r = ReANY(rx);
14977  const bool islv = ret_x && SvTYPE(ret_x) == SVt_PVLV;
14978
14979  PERL_ARGS_ASSERT_REG_TEMP_COPY;
14980
14981  if (!ret_x)
14982   ret_x = (REGEXP*) newSV_type(SVt_REGEXP);
14983  else {
14984   SvOK_off((SV *)ret_x);
14985   if (islv) {
14986    /* For PVLVs, SvANY points to the xpvlv body while sv_u points
14987    to the regexp.  (For SVt_REGEXPs, sv_upgrade has already
14988    made both spots point to the same regexp body.) */
14989    REGEXP *temp = (REGEXP *)newSV_type(SVt_REGEXP);
14990    assert(!SvPVX(ret_x));
14991    ret_x->sv_u.svu_rx = temp->sv_any;
14992    temp->sv_any = NULL;
14993    SvFLAGS(temp) = (SvFLAGS(temp) & ~SVTYPEMASK) | SVt_NULL;
14994    SvREFCNT_dec_NN(temp);
14995    /* SvCUR still resides in the xpvlv struct, so the regexp copy-
14996    ing below will not set it. */
14997    SvCUR_set(ret_x, SvCUR(rx));
14998   }
14999  }
15000  /* This ensures that SvTHINKFIRST(sv) is true, and hence that
15001  sv_force_normal(sv) is called.  */
15002  SvFAKE_on(ret_x);
15003  ret = ReANY(ret_x);
15004
15005  SvFLAGS(ret_x) |= SvUTF8(rx);
15006  /* We share the same string buffer as the original regexp, on which we
15007  hold a reference count, incremented when mother_re is set below.
15008  The string pointer is copied here, being part of the regexp struct.
15009  */
15010  memcpy(&(ret->xpv_cur), &(r->xpv_cur),
15011   sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur));
15012  if (r->offs) {
15013   const I32 npar = r->nparens+1;
15014   Newx(ret->offs, npar, regexp_paren_pair);
15015   Copy(r->offs, ret->offs, npar, regexp_paren_pair);
15016  }
15017  if (r->substrs) {
15018   Newx(ret->substrs, 1, struct reg_substr_data);
15019   StructCopy(r->substrs, ret->substrs, struct reg_substr_data);
15020
15021   SvREFCNT_inc_void(ret->anchored_substr);
15022   SvREFCNT_inc_void(ret->anchored_utf8);
15023   SvREFCNT_inc_void(ret->float_substr);
15024   SvREFCNT_inc_void(ret->float_utf8);
15025
15026   /* check_substr and check_utf8, if non-NULL, point to either their
15027   anchored or float namesakes, and don't hold a second reference.  */
15028  }
15029  RX_MATCH_COPIED_off(ret_x);
15030 #ifdef PERL_ANY_COW
15031  ret->saved_copy = NULL;
15032 #endif
15033  ret->mother_re = ReREFCNT_inc(r->mother_re ? r->mother_re : rx);
15034  SvREFCNT_inc_void(ret->qr_anoncv);
15035
15036  return ret_x;
15037 }
15038 #endif
15039
15040 /* regfree_internal()
15041
15042    Free the private data in a regexp. This is overloadable by
15043    extensions. Perl takes care of the regexp structure in pregfree(),
15044    this covers the *pprivate pointer which technically perl doesn't
15045    know about, however of course we have to handle the
15046    regexp_internal structure when no extension is in use.
15047
15048    Note this is called before freeing anything in the regexp
15049    structure.
15050  */
15051
15052 void
15053 Perl_regfree_internal(pTHX_ REGEXP * const rx)
15054 {
15055  dVAR;
15056  struct regexp *const r = ReANY(rx);
15057  RXi_GET_DECL(r,ri);
15058  GET_RE_DEBUG_FLAGS_DECL;
15059
15060  PERL_ARGS_ASSERT_REGFREE_INTERNAL;
15061
15062  DEBUG_COMPILE_r({
15063   if (!PL_colorset)
15064    reginitcolors();
15065   {
15066    SV *dsv= sv_newmortal();
15067    RE_PV_QUOTED_DECL(s, RX_UTF8(rx),
15068     dsv, RX_PRECOMP(rx), RX_PRELEN(rx), 60);
15069    PerlIO_printf(Perl_debug_log,"%sFreeing REx:%s %s\n",
15070     PL_colors[4],PL_colors[5],s);
15071   }
15072  });
15073 #ifdef RE_TRACK_PATTERN_OFFSETS
15074  if (ri->u.offsets)
15075   Safefree(ri->u.offsets);             /* 20010421 MJD */
15076 #endif
15077  if (ri->code_blocks) {
15078   int n;
15079   for (n = 0; n < ri->num_code_blocks; n++)
15080    SvREFCNT_dec(ri->code_blocks[n].src_regex);
15081   Safefree(ri->code_blocks);
15082  }
15083
15084  if (ri->data) {
15085   int n = ri->data->count;
15086
15087   while (--n >= 0) {
15088   /* If you add a ->what type here, update the comment in regcomp.h */
15089    switch (ri->data->what[n]) {
15090    case 'a':
15091    case 'r':
15092    case 's':
15093    case 'S':
15094    case 'u':
15095     SvREFCNT_dec(MUTABLE_SV(ri->data->data[n]));
15096     break;
15097    case 'f':
15098     Safefree(ri->data->data[n]);
15099     break;
15100    case 'l':
15101    case 'L':
15102     break;
15103    case 'T':
15104     { /* Aho Corasick add-on structure for a trie node.
15105      Used in stclass optimization only */
15106      U32 refcount;
15107      reg_ac_data *aho=(reg_ac_data*)ri->data->data[n];
15108      OP_REFCNT_LOCK;
15109      refcount = --aho->refcount;
15110      OP_REFCNT_UNLOCK;
15111      if ( !refcount ) {
15112       PerlMemShared_free(aho->states);
15113       PerlMemShared_free(aho->fail);
15114       /* do this last!!!! */
15115       PerlMemShared_free(ri->data->data[n]);
15116       PerlMemShared_free(ri->regstclass);
15117      }
15118     }
15119     break;
15120    case 't':
15121     {
15122      /* trie structure. */
15123      U32 refcount;
15124      reg_trie_data *trie=(reg_trie_data*)ri->data->data[n];
15125      OP_REFCNT_LOCK;
15126      refcount = --trie->refcount;
15127      OP_REFCNT_UNLOCK;
15128      if ( !refcount ) {
15129       PerlMemShared_free(trie->charmap);
15130       PerlMemShared_free(trie->states);
15131       PerlMemShared_free(trie->trans);
15132       if (trie->bitmap)
15133        PerlMemShared_free(trie->bitmap);
15134       if (trie->jump)
15135        PerlMemShared_free(trie->jump);
15136       PerlMemShared_free(trie->wordinfo);
15137       /* do this last!!!! */
15138       PerlMemShared_free(ri->data->data[n]);
15139      }
15140     }
15141     break;
15142    default:
15143     Perl_croak(aTHX_ "panic: regfree data code '%c'", ri->data->what[n]);
15144    }
15145   }
15146   Safefree(ri->data->what);
15147   Safefree(ri->data);
15148  }
15149
15150  Safefree(ri);
15151 }
15152
15153 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
15154 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
15155 #define SAVEPVN(p,n) ((p) ? savepvn(p,n) : NULL)
15156
15157 /*
15158    re_dup - duplicate a regexp.
15159
15160    This routine is expected to clone a given regexp structure. It is only
15161    compiled under USE_ITHREADS.
15162
15163    After all of the core data stored in struct regexp is duplicated
15164    the regexp_engine.dupe method is used to copy any private data
15165    stored in the *pprivate pointer. This allows extensions to handle
15166    any duplication it needs to do.
15167
15168    See pregfree() and regfree_internal() if you change anything here.
15169 */
15170 #if defined(USE_ITHREADS)
15171 #ifndef PERL_IN_XSUB_RE
15172 void
15173 Perl_re_dup_guts(pTHX_ const REGEXP *sstr, REGEXP *dstr, CLONE_PARAMS *param)
15174 {
15175  dVAR;
15176  I32 npar;
15177  const struct regexp *r = ReANY(sstr);
15178  struct regexp *ret = ReANY(dstr);
15179
15180  PERL_ARGS_ASSERT_RE_DUP_GUTS;
15181
15182  npar = r->nparens+1;
15183  Newx(ret->offs, npar, regexp_paren_pair);
15184  Copy(r->offs, ret->offs, npar, regexp_paren_pair);
15185
15186  if (ret->substrs) {
15187   /* Do it this way to avoid reading from *r after the StructCopy().
15188   That way, if any of the sv_dup_inc()s dislodge *r from the L1
15189   cache, it doesn't matter.  */
15190   const bool anchored = r->check_substr
15191    ? r->check_substr == r->anchored_substr
15192    : r->check_utf8 == r->anchored_utf8;
15193   Newx(ret->substrs, 1, struct reg_substr_data);
15194   StructCopy(r->substrs, ret->substrs, struct reg_substr_data);
15195
15196   ret->anchored_substr = sv_dup_inc(ret->anchored_substr, param);
15197   ret->anchored_utf8 = sv_dup_inc(ret->anchored_utf8, param);
15198   ret->float_substr = sv_dup_inc(ret->float_substr, param);
15199   ret->float_utf8 = sv_dup_inc(ret->float_utf8, param);
15200
15201   /* check_substr and check_utf8, if non-NULL, point to either their
15202   anchored or float namesakes, and don't hold a second reference.  */
15203
15204   if (ret->check_substr) {
15205    if (anchored) {
15206     assert(r->check_utf8 == r->anchored_utf8);
15207     ret->check_substr = ret->anchored_substr;
15208     ret->check_utf8 = ret->anchored_utf8;
15209    } else {
15210     assert(r->check_substr == r->float_substr);
15211     assert(r->check_utf8 == r->float_utf8);
15212     ret->check_substr = ret->float_substr;
15213     ret->check_utf8 = ret->float_utf8;
15214    }
15215   } else if (ret->check_utf8) {
15216    if (anchored) {
15217     ret->check_utf8 = ret->anchored_utf8;
15218    } else {
15219     ret->check_utf8 = ret->float_utf8;
15220    }
15221   }
15222  }
15223
15224  RXp_PAREN_NAMES(ret) = hv_dup_inc(RXp_PAREN_NAMES(ret), param);
15225  ret->qr_anoncv = MUTABLE_CV(sv_dup_inc((const SV *)ret->qr_anoncv, param));
15226
15227  if (ret->pprivate)
15228   RXi_SET(ret,CALLREGDUPE_PVT(dstr,param));
15229
15230  if (RX_MATCH_COPIED(dstr))
15231   ret->subbeg  = SAVEPVN(ret->subbeg, ret->sublen);
15232  else
15233   ret->subbeg = NULL;
15234 #ifdef PERL_ANY_COW
15235  ret->saved_copy = NULL;
15236 #endif
15237
15238  /* Whether mother_re be set or no, we need to copy the string.  We
15239  cannot refrain from copying it when the storage points directly to
15240  our mother regexp, because that's
15241    1: a buffer in a different thread
15242    2: something we no longer hold a reference on
15243    so we need to copy it locally.  */
15244  RX_WRAPPED(dstr) = SAVEPVN(RX_WRAPPED(sstr), SvCUR(sstr)+1);
15245  ret->mother_re   = NULL;
15246  ret->gofs = 0;
15247 }
15248 #endif /* PERL_IN_XSUB_RE */
15249
15250 /*
15251    regdupe_internal()
15252
15253    This is the internal complement to regdupe() which is used to copy
15254    the structure pointed to by the *pprivate pointer in the regexp.
15255    This is the core version of the extension overridable cloning hook.
15256    The regexp structure being duplicated will be copied by perl prior
15257    to this and will be provided as the regexp *r argument, however
15258    with the /old/ structures pprivate pointer value. Thus this routine
15259    may override any copying normally done by perl.
15260
15261    It returns a pointer to the new regexp_internal structure.
15262 */
15263
15264 void *
15265 Perl_regdupe_internal(pTHX_ REGEXP * const rx, CLONE_PARAMS *param)
15266 {
15267  dVAR;
15268  struct regexp *const r = ReANY(rx);
15269  regexp_internal *reti;
15270  int len;
15271  RXi_GET_DECL(r,ri);
15272
15273  PERL_ARGS_ASSERT_REGDUPE_INTERNAL;
15274
15275  len = ProgLen(ri);
15276
15277  Newxc(reti, sizeof(regexp_internal) + len*sizeof(regnode), char, regexp_internal);
15278  Copy(ri->program, reti->program, len+1, regnode);
15279
15280  reti->num_code_blocks = ri->num_code_blocks;
15281  if (ri->code_blocks) {
15282   int n;
15283   Newxc(reti->code_blocks, ri->num_code_blocks, struct reg_code_block,
15284     struct reg_code_block);
15285   Copy(ri->code_blocks, reti->code_blocks, ri->num_code_blocks,
15286     struct reg_code_block);
15287   for (n = 0; n < ri->num_code_blocks; n++)
15288    reti->code_blocks[n].src_regex = (REGEXP*)
15289      sv_dup_inc((SV*)(ri->code_blocks[n].src_regex), param);
15290  }
15291  else
15292   reti->code_blocks = NULL;
15293
15294  reti->regstclass = NULL;
15295
15296  if (ri->data) {
15297   struct reg_data *d;
15298   const int count = ri->data->count;
15299   int i;
15300
15301   Newxc(d, sizeof(struct reg_data) + count*sizeof(void *),
15302     char, struct reg_data);
15303   Newx(d->what, count, U8);
15304
15305   d->count = count;
15306   for (i = 0; i < count; i++) {
15307    d->what[i] = ri->data->what[i];
15308    switch (d->what[i]) {
15309     /* see also regcomp.h and regfree_internal() */
15310    case 'a': /* actually an AV, but the dup function is identical.  */
15311    case 'r':
15312    case 's':
15313    case 'S':
15314    case 'u': /* actually an HV, but the dup function is identical.  */
15315     d->data[i] = sv_dup_inc((const SV *)ri->data->data[i], param);
15316     break;
15317    case 'f':
15318     /* This is cheating. */
15319     Newx(d->data[i], 1, struct regnode_charclass_class);
15320     StructCopy(ri->data->data[i], d->data[i],
15321        struct regnode_charclass_class);
15322     reti->regstclass = (regnode*)d->data[i];
15323     break;
15324    case 'T':
15325     /* Trie stclasses are readonly and can thus be shared
15326     * without duplication. We free the stclass in pregfree
15327     * when the corresponding reg_ac_data struct is freed.
15328     */
15329     reti->regstclass= ri->regstclass;
15330     /* Fall through */
15331    case 't':
15332     OP_REFCNT_LOCK;
15333     ((reg_trie_data*)ri->data->data[i])->refcount++;
15334     OP_REFCNT_UNLOCK;
15335     /* Fall through */
15336    case 'l':
15337    case 'L':
15338     d->data[i] = ri->data->data[i];
15339     break;
15340    default:
15341     Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'", ri->data->what[i]);
15342    }
15343   }
15344
15345   reti->data = d;
15346  }
15347  else
15348   reti->data = NULL;
15349
15350  reti->name_list_idx = ri->name_list_idx;
15351
15352 #ifdef RE_TRACK_PATTERN_OFFSETS
15353  if (ri->u.offsets) {
15354   Newx(reti->u.offsets, 2*len+1, U32);
15355   Copy(ri->u.offsets, reti->u.offsets, 2*len+1, U32);
15356  }
15357 #else
15358  SetProgLen(reti,len);
15359 #endif
15360
15361  return (void*)reti;
15362 }
15363
15364 #endif    /* USE_ITHREADS */
15365
15366 #ifndef PERL_IN_XSUB_RE
15367
15368 /*
15369  - regnext - dig the "next" pointer out of a node
15370  */
15371 regnode *
15372 Perl_regnext(pTHX_ regnode *p)
15373 {
15374  dVAR;
15375  I32 offset;
15376
15377  if (!p)
15378   return(NULL);
15379
15380  if (OP(p) > REGNODE_MAX) {  /* regnode.type is unsigned */
15381   Perl_croak(aTHX_ "Corrupted regexp opcode %d > %d", (int)OP(p), (int)REGNODE_MAX);
15382  }
15383
15384  offset = (reg_off_by_arg[OP(p)] ? ARG(p) : NEXT_OFF(p));
15385  if (offset == 0)
15386   return(NULL);
15387
15388  return(p+offset);
15389 }
15390 #endif
15391
15392 STATIC void
15393 S_re_croak2(pTHX_ const char* pat1,const char* pat2,...)
15394 {
15395  va_list args;
15396  STRLEN l1 = strlen(pat1);
15397  STRLEN l2 = strlen(pat2);
15398  char buf[512];
15399  SV *msv;
15400  const char *message;
15401
15402  PERL_ARGS_ASSERT_RE_CROAK2;
15403
15404  if (l1 > 510)
15405   l1 = 510;
15406  if (l1 + l2 > 510)
15407   l2 = 510 - l1;
15408  Copy(pat1, buf, l1 , char);
15409  Copy(pat2, buf + l1, l2 , char);
15410  buf[l1 + l2] = '\n';
15411  buf[l1 + l2 + 1] = '\0';
15412 #ifdef I_STDARG
15413  /* ANSI variant takes additional second argument */
15414  va_start(args, pat2);
15415 #else
15416  va_start(args);
15417 #endif
15418  msv = vmess(buf, &args);
15419  va_end(args);
15420  message = SvPV_const(msv,l1);
15421  if (l1 > 512)
15422   l1 = 512;
15423  Copy(message, buf, l1 , char);
15424  buf[l1-1] = '\0';   /* Overwrite \n */
15425  Perl_croak(aTHX_ "%s", buf);
15426 }
15427
15428 /* XXX Here's a total kludge.  But we need to re-enter for swash routines. */
15429
15430 #ifndef PERL_IN_XSUB_RE
15431 void
15432 Perl_save_re_context(pTHX)
15433 {
15434  dVAR;
15435
15436  struct re_save_state *state;
15437
15438  SAVEVPTR(PL_curcop);
15439  SSGROW(SAVESTACK_ALLOC_FOR_RE_SAVE_STATE + 1);
15440
15441  state = (struct re_save_state *)(PL_savestack + PL_savestack_ix);
15442  PL_savestack_ix += SAVESTACK_ALLOC_FOR_RE_SAVE_STATE;
15443  SSPUSHUV(SAVEt_RE_STATE);
15444
15445  Copy(&PL_reg_state, state, 1, struct re_save_state);
15446
15447  PL_reg_oldsaved = NULL;
15448  PL_reg_oldsavedlen = 0;
15449  PL_reg_oldsavedoffset = 0;
15450  PL_reg_oldsavedcoffset = 0;
15451  PL_reg_maxiter = 0;
15452  PL_reg_leftiter = 0;
15453  PL_reg_poscache = NULL;
15454  PL_reg_poscache_size = 0;
15455 #ifdef PERL_ANY_COW
15456  PL_nrs = NULL;
15457 #endif
15458
15459  /* Save $1..$n (#18107: UTF-8 s/(\w+)/uc($1)/e); AMS 20021106. */
15460  if (PL_curpm) {
15461   const REGEXP * const rx = PM_GETRE(PL_curpm);
15462   if (rx) {
15463    U32 i;
15464    for (i = 1; i <= RX_NPARENS(rx); i++) {
15465     char digits[TYPE_CHARS(long)];
15466     const STRLEN len = my_snprintf(digits, sizeof(digits), "%lu", (long)i);
15467     GV *const *const gvp
15468      = (GV**)hv_fetch(PL_defstash, digits, len, 0);
15469
15470     if (gvp) {
15471      GV * const gv = *gvp;
15472      if (SvTYPE(gv) == SVt_PVGV && GvSV(gv))
15473       save_scalar(gv);
15474     }
15475    }
15476   }
15477  }
15478 }
15479 #endif
15480
15481 #ifdef DEBUGGING
15482
15483 STATIC void
15484 S_put_byte(pTHX_ SV *sv, int c)
15485 {
15486  PERL_ARGS_ASSERT_PUT_BYTE;
15487
15488  /* Our definition of isPRINT() ignores locales, so only bytes that are
15489  not part of UTF-8 are considered printable. I assume that the same
15490  holds for UTF-EBCDIC.
15491  Also, code point 255 is not printable in either (it's E0 in EBCDIC,
15492  which Wikipedia says:
15493
15494  EO, or Eight Ones, is an 8-bit EBCDIC character code represented as all
15495  ones (binary 1111 1111, hexadecimal FF). It is similar, but not
15496  identical, to the ASCII delete (DEL) or rubout control character. ...
15497  it is typically mapped to hexadecimal code 9F, in order to provide a
15498  unique character mapping in both directions)
15499
15500  So the old condition can be simplified to !isPRINT(c)  */
15501  if (!isPRINT(c)) {
15502   if (c < 256) {
15503    Perl_sv_catpvf(aTHX_ sv, "\\x%02x", c);
15504   }
15505   else {
15506    Perl_sv_catpvf(aTHX_ sv, "\\x{%x}", c);
15507   }
15508  }
15509  else {
15510   const char string = c;
15511   if (c == '-' || c == ']' || c == '\\' || c == '^')
15512    sv_catpvs(sv, "\\");
15513   sv_catpvn(sv, &string, 1);
15514  }
15515 }
15516
15517
15518 #define CLEAR_OPTSTART \
15519  if (optstart) STMT_START { \
15520    DEBUG_OPTIMISE_r(PerlIO_printf(Perl_debug_log, " (%"IVdf" nodes)\n", (IV)(node - optstart))); \
15521    optstart=NULL; \
15522  } STMT_END
15523
15524 #define DUMPUNTIL(b,e) CLEAR_OPTSTART; node=dumpuntil(r,start,(b),(e),last,sv,indent+1,depth+1);
15525
15526 STATIC const regnode *
15527 S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node,
15528    const regnode *last, const regnode *plast,
15529    SV* sv, I32 indent, U32 depth)
15530 {
15531  dVAR;
15532  U8 op = PSEUDO; /* Arbitrary non-END op. */
15533  const regnode *next;
15534  const regnode *optstart= NULL;
15535
15536  RXi_GET_DECL(r,ri);
15537  GET_RE_DEBUG_FLAGS_DECL;
15538
15539  PERL_ARGS_ASSERT_DUMPUNTIL;
15540
15541 #ifdef DEBUG_DUMPUNTIL
15542  PerlIO_printf(Perl_debug_log, "--- %d : %d - %d - %d\n",indent,node-start,
15543   last ? last-start : 0,plast ? plast-start : 0);
15544 #endif
15545
15546  if (plast && plast < last)
15547   last= plast;
15548
15549  while (PL_regkind[op] != END && (!last || node < last)) {
15550   /* While that wasn't END last time... */
15551   NODE_ALIGN(node);
15552   op = OP(node);
15553   if (op == CLOSE || op == WHILEM)
15554    indent--;
15555   next = regnext((regnode *)node);
15556
15557   /* Where, what. */
15558   if (OP(node) == OPTIMIZED) {
15559    if (!optstart && RE_DEBUG_FLAG(RE_DEBUG_COMPILE_OPTIMISE))
15560     optstart = node;
15561    else
15562     goto after_print;
15563   } else
15564    CLEAR_OPTSTART;
15565
15566   regprop(r, sv, node);
15567   PerlIO_printf(Perl_debug_log, "%4"IVdf":%*s%s", (IV)(node - start),
15568      (int)(2*indent + 1), "", SvPVX_const(sv));
15569
15570   if (OP(node) != OPTIMIZED) {
15571    if (next == NULL)  /* Next ptr. */
15572     PerlIO_printf(Perl_debug_log, " (0)");
15573    else if (PL_regkind[(U8)op] == BRANCH && PL_regkind[OP(next)] != BRANCH )
15574     PerlIO_printf(Perl_debug_log, " (FAIL)");
15575    else
15576     PerlIO_printf(Perl_debug_log, " (%"IVdf")", (IV)(next - start));
15577    (void)PerlIO_putc(Perl_debug_log, '\n');
15578   }
15579
15580  after_print:
15581   if (PL_regkind[(U8)op] == BRANCHJ) {
15582    assert(next);
15583    {
15584     const regnode *nnode = (OP(next) == LONGJMP
15585          ? regnext((regnode *)next)
15586          : next);
15587     if (last && nnode > last)
15588      nnode = last;
15589     DUMPUNTIL(NEXTOPER(NEXTOPER(node)), nnode);
15590    }
15591   }
15592   else if (PL_regkind[(U8)op] == BRANCH) {
15593    assert(next);
15594    DUMPUNTIL(NEXTOPER(node), next);
15595   }
15596   else if ( PL_regkind[(U8)op]  == TRIE ) {
15597    const regnode *this_trie = node;
15598    const char op = OP(node);
15599    const U32 n = ARG(node);
15600    const reg_ac_data * const ac = op>=AHOCORASICK ?
15601    (reg_ac_data *)ri->data->data[n] :
15602    NULL;
15603    const reg_trie_data * const trie =
15604     (reg_trie_data*)ri->data->data[op<AHOCORASICK ? n : ac->trie];
15605 #ifdef DEBUGGING
15606    AV *const trie_words = MUTABLE_AV(ri->data->data[n + TRIE_WORDS_OFFSET]);
15607 #endif
15608    const regnode *nextbranch= NULL;
15609    I32 word_idx;
15610    sv_setpvs(sv, "");
15611    for (word_idx= 0; word_idx < (I32)trie->wordcount; word_idx++) {
15612     SV ** const elem_ptr = av_fetch(trie_words,word_idx,0);
15613
15614     PerlIO_printf(Perl_debug_log, "%*s%s ",
15615     (int)(2*(indent+3)), "",
15616      elem_ptr ? pv_pretty(sv, SvPV_nolen_const(*elem_ptr), SvCUR(*elem_ptr), 60,
15617        PL_colors[0], PL_colors[1],
15618        (SvUTF8(*elem_ptr) ? PERL_PV_ESCAPE_UNI : 0) |
15619        PERL_PV_PRETTY_ELLIPSES    |
15620        PERL_PV_PRETTY_LTGT
15621        )
15622        : "???"
15623     );
15624     if (trie->jump) {
15625      U16 dist= trie->jump[word_idx+1];
15626      PerlIO_printf(Perl_debug_log, "(%"UVuf")\n",
15627         (UV)((dist ? this_trie + dist : next) - start));
15628      if (dist) {
15629       if (!nextbranch)
15630        nextbranch= this_trie + trie->jump[0];
15631       DUMPUNTIL(this_trie + dist, nextbranch);
15632      }
15633      if (nextbranch && PL_regkind[OP(nextbranch)]==BRANCH)
15634       nextbranch= regnext((regnode *)nextbranch);
15635     } else {
15636      PerlIO_printf(Perl_debug_log, "\n");
15637     }
15638    }
15639    if (last && next > last)
15640     node= last;
15641    else
15642     node= next;
15643   }
15644   else if ( op == CURLY ) {   /* "next" might be very big: optimizer */
15645    DUMPUNTIL(NEXTOPER(node) + EXTRA_STEP_2ARGS,
15646      NEXTOPER(node) + EXTRA_STEP_2ARGS + 1);
15647   }
15648   else if (PL_regkind[(U8)op] == CURLY && op != CURLYX) {
15649    assert(next);
15650    DUMPUNTIL(NEXTOPER(node) + EXTRA_STEP_2ARGS, next);
15651   }
15652   else if ( op == PLUS || op == STAR) {
15653    DUMPUNTIL(NEXTOPER(node), NEXTOPER(node) + 1);
15654   }
15655   else if (PL_regkind[(U8)op] == ANYOF) {
15656    /* arglen 1 + class block */
15657    node += 1 + ((ANYOF_FLAGS(node) & ANYOF_CLASS)
15658      ? ANYOF_CLASS_SKIP : ANYOF_SKIP);
15659    node = NEXTOPER(node);
15660   }
15661   else if (PL_regkind[(U8)op] == EXACT) {
15662    /* Literal string, where present. */
15663    node += NODE_SZ_STR(node) - 1;
15664    node = NEXTOPER(node);
15665   }
15666   else {
15667    node = NEXTOPER(node);
15668    node += regarglen[(U8)op];
15669   }
15670   if (op == CURLYX || op == OPEN)
15671    indent++;
15672  }
15673  CLEAR_OPTSTART;
15674 #ifdef DEBUG_DUMPUNTIL
15675  PerlIO_printf(Perl_debug_log, "--- %d\n", (int)indent);
15676 #endif
15677  return node;
15678 }
15679
15680 #endif /* DEBUGGING */
15681
15682 /*
15683  * Local variables:
15684  * c-indentation-style: bsd
15685  * c-basic-offset: 4
15686  * indent-tabs-mode: nil
15687  * End:
15688  *
15689  * ex: set ts=8 sts=4 sw=4 et:
15690  */