Bug Summary

File:obj/gnu/usr.bin/perl/ext/re/re_comp.c
Warning:line 24041, column 13
Value stored to 'stricter' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name re_comp.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/obj/gnu/usr.bin/perl/ext/re -resource-dir /usr/local/lib/clang/13.0.0 -D NO_LOCALE_NUMERIC -D NO_LOCALE_COLLATE -D VERSION="0.40" -D XS_VERSION="0.40" -D PIC -I ../.. -D PERL_EXT_RE_BUILD -D PERL_EXT_RE_DEBUG -D PERL_EXT -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -Wwrite-strings -fconst-strings -fdebug-compilation-dir=/usr/obj/gnu/usr.bin/perl/ext/re -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c re_comp.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_BUILD1
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
74/* Note on debug output:
75 *
76 * This is set up so that -Dr turns on debugging like all other flags that are
77 * enabled by -DDEBUGGING. -Drv gives more verbose output. This applies to
78 * all regular expressions encountered in a program, and gives a huge amount of
79 * output for all but the shortest programs.
80 *
81 * The ability to output pattern debugging information lexically, and with much
82 * finer grained control was added, with 'use re qw(Debug ....);' available even
83 * in non-DEBUGGING builds. This is accomplished by copying the contents of
84 * regcomp.c to ext/re/re_comp.c, and regexec.c is copied to ext/re/re_exec.c.
85 * Those files are compiled and linked into the perl executable, and they are
86 * compiled essentially as if DEBUGGING were enabled, and controlled by calls
87 * to re.pm.
88 *
89 * That would normally mean linking errors when two functions of the same name
90 * are attempted to be placed into the same executable. That is solved in one
91 * of four ways:
92 * 1) Static functions aren't known outside the file they are in, so for the
93 * many functions of that type in this file, it just isn't a problem.
94 * 2) Most externally known functions are enclosed in
95 * #ifndef PERL_IN_XSUB_RE
96 * ...
97 * #endif
98 * blocks, so there is only one defintion for them in the whole
99 * executable, the one in regcomp.c (or regexec.c). The implication of
100 * that is any debugging info that comes from them is controlled only by
101 * -Dr. Further, any static function they call will also be the version
102 * in regcomp.c (or regexec.c), so its debugging will also be by -Dr.
103 * 3) About a dozen external functions are re-#defined in ext/re/re_top.h, to
104 * have different names, so that what gets loaded in the executable is
105 * 'Perl_foo' from regcomp.c (and regexec.c), and the identical function
106 * from re_comp.c (and re_exec.c), but with the name 'my_foo' Debugging
107 * in the 'Perl_foo' versions is controlled by -Dr, but the 'my_foo'
108 * versions and their callees are under control of re.pm. The catch is
109 * that references to all these go through the regexp_engine structure,
110 * which is initialized in regcomp.h to the Perl_foo versions, and
111 * substituted out in lexical scopes where 'use re' is in effect to the
112 * 'my_foo' ones. That structure is public API, so it would be a hard
113 * sell to add any additional members.
114 * 4) For functions in regcomp.c and re_comp.c that are called only from,
115 * respectively, regexec.c and re_exec.c, they can have two different
116 * names, depending on #ifdef'ing PERL_IN_XSUB_RE, in both regexec.c and
117 * embed.fnc.
118 *
119 * The bottom line is that if you add code to one of the public functions
120 * listed in ext/re/re_top.h, debugging automagically works. But if you write
121 * a new function that needs to do debugging or there is a chain of calls from
122 * it that need to do debugging, all functions in the chain should use options
123 * 2) or 4) above.
124 *
125 * A function may have to be split so that debugging stuff is static, but it
126 * calls out to some other function that only gets compiled in regcomp.c to
127 * access data that we don't want to duplicate.
128 */
129
130#include "EXTERN.h"
131#define PERL_IN_REGCOMP_C
132#include "perl.h"
133
134#define REG_COMP_C
135#ifdef PERL_IN_XSUB_RE
136# include "re_comp.h"
137EXTERN_Cextern const struct regexp_engine my_reg_engine;
138EXTERN_Cextern const struct regexp_engine wild_reg_engine;
139#else
140# include "regcomp.h"
141#endif
142
143#include "invlist_inline.h"
144#include "unicode_constants.h"
145
146#define HAS_NONLATIN1_FOLD_CLOSURE(i)((! ((( (sizeof(i) == 1) || !(((U64)((i) | 0)) & ~0xFF)))
? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (i)] & (1U
<< (18))))
\
147 _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(i)((! ((( (sizeof(i) == 1) || !(((U64)((i) | 0)) & ~0xFF)))
? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (i)] & (1U
<< (18))))
148#define HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(i)((! ((( (sizeof(i) == 1) || !(((U64)((i) | 0)) & ~0xFF)))
? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (i)] & (1U
<< (19))))
\
149 _HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(i)((! ((( (sizeof(i) == 1) || !(((U64)((i) | 0)) & ~0xFF)))
? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (i)] & (1U
<< (19))))
150#define IS_NON_FINAL_FOLD(c)((( (sizeof(c) == 1) || !(((U64)((c) | 0)) & ~0xFF)) &&
(PL_charclass[(U8) (c)] & (1U << (21)))) ? (_Bool)
1 : (_Bool)0)
_IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)((( (sizeof(c) == 1) || !(((U64)((c) | 0)) & ~0xFF)) &&
(PL_charclass[(U8) (c)] & (1U << (21)))) ? (_Bool)
1 : (_Bool)0)
151#define IS_IN_SOME_FOLD_L1(c)((( (sizeof(c) == 1) || !(((U64)((c) | 0)) & ~0xFF)) &&
(PL_charclass[(U8) (c)] & (1U << (22)))) ? (_Bool)
1 : (_Bool)0)
_IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)((( (sizeof(c) == 1) || !(((U64)((c) | 0)) & ~0xFF)) &&
(PL_charclass[(U8) (c)] & (1U << (22)))) ? (_Bool)
1 : (_Bool)0)
152
153#ifndef STATICstatic
154#define STATICstatic static
155#endif
156
157/* this is a chain of data about sub patterns we are processing that
158 need to be handled separately/specially in study_chunk. Its so
159 we can simulate recursion without losing state. */
160struct scan_frame;
161typedef struct scan_frame {
162 regnode *last_regnode; /* last node to process in this frame */
163 regnode *next_regnode; /* next node to process when last is reached */
164 U32 prev_recursed_depth;
165 I32 stopparen; /* what stopparen do we use */
166 bool_Bool in_gosub; /* this or an outer frame is for GOSUB */
167
168 struct scan_frame *this_prev_frame; /* this previous frame */
169 struct scan_frame *prev_frame; /* previous frame */
170 struct scan_frame *next_frame; /* next frame */
171} scan_frame;
172
173/* Certain characters are output as a sequence with the first being a
174 * backslash. */
175#define isBACKSLASHED_PUNCT(c)((const char *) memchr("" "-[]\\^" "" , c, sizeof("-[]\\^")-1
))
memCHRs("-[]\\^", c)((const char *) memchr("" "-[]\\^" "" , c, sizeof("-[]\\^")-1
))
176
177
178struct RExC_state_t {
179 U32 flags; /* RXf_* are we folding, multilining? */
180 U32 pm_flags; /* PMf_* stuff from the calling PMOP */
181 char *precomp; /* uncompiled string. */
182 char *precomp_end; /* pointer to end of uncompiled string. */
183 REGEXP *rx_sv; /* The SV that is the regexp. */
184 regexp *rx; /* perl core regexp structure */
185 regexp_internal *rxi; /* internal data for regexp object
186 pprivate field */
187 char *start; /* Start of input for compile */
188 char *end; /* End of input for compile */
189 char *parse; /* Input-scan pointer. */
190 char *copy_start; /* start of copy of input within
191 constructed parse string */
192 char *save_copy_start; /* Provides one level of saving
193 and restoring 'copy_start' */
194 char *copy_start_in_input; /* Position in input string
195 corresponding to copy_start */
196 SSize_tssize_t whilem_seen; /* number of WHILEM in this expr */
197 regnode *emit_start; /* Start of emitted-code area */
198 regnode_offset emit; /* Code-emit pointer */
199 I32 naughty; /* How bad is this pattern? */
200 I32 sawback; /* Did we see \1, ...? */
201 SSize_tssize_t size; /* Number of regnode equivalents in
202 pattern */
203 Size_tsize_t sets_depth; /* Counts recursion depth of already-
204 compiled regex set patterns */
205 U32 seen;
206
207 I32 parens_buf_size; /* #slots malloced open/close_parens */
208 regnode_offset *open_parens; /* offsets to open parens */
209 regnode_offset *close_parens; /* offsets to close parens */
210 HV *paren_names; /* Paren names */
211
212 /* position beyond 'precomp' of the warning message furthest away from
213 * 'precomp'. During the parse, no warnings are raised for any problems
214 * earlier in the parse than this position. This works if warnings are
215 * raised the first time a given spot is parsed, and if only one
216 * independent warning is raised for any given spot */
217 Size_tsize_t latest_warn_offset;
218
219 I32 npar; /* Capture buffer count so far in the
220 parse, (OPEN) plus one. ("par" 0 is
221 the whole pattern)*/
222 I32 total_par; /* During initial parse, is either 0,
223 or -1; the latter indicating a
224 reparse is needed. After that pass,
225 it is what 'npar' became after the
226 pass. Hence, it being > 0 indicates
227 we are in a reparse situation */
228 I32 nestroot; /* root parens we are in - used by
229 accept */
230 I32 seen_zerolen;
231 regnode *end_op; /* END node in program */
232 I32 utf8; /* whether the pattern is utf8 or not */
233 I32 orig_utf8; /* whether the pattern was originally in utf8 */
234 /* XXX use this for future optimisation of case
235 * where pattern must be upgraded to utf8. */
236 I32 uni_semantics; /* If a d charset modifier should use unicode
237 rules, even if the pattern is not in
238 utf8 */
239
240 I32 recurse_count; /* Number of recurse regops we have generated */
241 regnode **recurse; /* Recurse regops */
242 U8 *study_chunk_recursed; /* bitmap of which subs we have moved
243 through */
244 U32 study_chunk_recursed_bytes; /* bytes in bitmap */
245 I32 in_lookaround;
246 I32 contains_locale;
247 I32 override_recoding;
248 I32 recode_x_to_native;
249 I32 in_multi_char_class;
250 int code_index; /* next code_blocks[] slot */
251 struct reg_code_blocks *code_blocks;/* positions of literal (?{})
252 within pattern */
253 SSize_tssize_t maxlen; /* mininum possible number of chars in string to match */
254 scan_frame *frame_head;
255 scan_frame *frame_last;
256 U32 frame_count;
257 AV *warn_text;
258 HV *unlexed_names;
259 SV *runtime_code_qr; /* qr with the runtime code blocks */
260#ifdef DEBUGGING
261 const char *lastparse;
262 I32 lastnum;
263 U32 study_chunk_recursed_count;
264 AV *paren_name_list; /* idx -> name */
265 SV *mysv1;
266 SV *mysv2;
267
268#define RExC_lastparse(pRExC_state->lastparse) (pRExC_state->lastparse)
269#define RExC_lastnum(pRExC_state->lastnum) (pRExC_state->lastnum)
270#define RExC_paren_name_list(pRExC_state->paren_name_list) (pRExC_state->paren_name_list)
271#define RExC_study_chunk_recursed_count(pRExC_state->study_chunk_recursed_count) (pRExC_state->study_chunk_recursed_count)
272#define RExC_mysv(pRExC_state->mysv1) (pRExC_state->mysv1)
273#define RExC_mysv1(pRExC_state->mysv1) (pRExC_state->mysv1)
274#define RExC_mysv2(pRExC_state->mysv2) (pRExC_state->mysv2)
275
276#endif
277 bool_Bool seen_d_op;
278 bool_Bool strict;
279 bool_Bool study_started;
280 bool_Bool in_script_run;
281 bool_Bool use_BRANCHJ;
282 bool_Bool sWARN_EXPERIMENTAL__VLB;
283 bool_Bool sWARN_EXPERIMENTAL__REGEX_SETS;
284};
285
286#define RExC_flags(pRExC_state->flags) (pRExC_state->flags)
287#define RExC_pm_flags(pRExC_state->pm_flags) (pRExC_state->pm_flags)
288#define RExC_precomp(pRExC_state->precomp) (pRExC_state->precomp)
289#define RExC_copy_start_in_input(pRExC_state->copy_start_in_input) (pRExC_state->copy_start_in_input)
290#define RExC_copy_start_in_constructed(pRExC_state->copy_start) (pRExC_state->copy_start)
291#define RExC_save_copy_start_in_constructed(pRExC_state->save_copy_start) (pRExC_state->save_copy_start)
292#define RExC_precomp_end(pRExC_state->precomp_end) (pRExC_state->precomp_end)
293#define RExC_rx_sv(pRExC_state->rx_sv) (pRExC_state->rx_sv)
294#define RExC_rx(pRExC_state->rx) (pRExC_state->rx)
295#define RExC_rxi(pRExC_state->rxi) (pRExC_state->rxi)
296#define RExC_start(pRExC_state->start) (pRExC_state->start)
297#define RExC_end(pRExC_state->end) (pRExC_state->end)
298#define RExC_parse(pRExC_state->parse) (pRExC_state->parse)
299#define RExC_latest_warn_offset(pRExC_state->latest_warn_offset ) (pRExC_state->latest_warn_offset )
300#define RExC_whilem_seen(pRExC_state->whilem_seen) (pRExC_state->whilem_seen)
301#define RExC_seen_d_op(pRExC_state->seen_d_op) (pRExC_state->seen_d_op) /* Seen something that differs
302 under /d from /u ? */
303
304#ifdef RE_TRACK_PATTERN_OFFSETS
305# define RExC_offsets((pRExC_state->rxi)->u.offsets) (RExC_rxi(pRExC_state->rxi)->u.offsets) /* I am not like the
306 others */
307#endif
308#define RExC_emit(pRExC_state->emit) (pRExC_state->emit)
309#define RExC_emit_start(pRExC_state->emit_start) (pRExC_state->emit_start)
310#define RExC_sawback(pRExC_state->sawback) (pRExC_state->sawback)
311#define RExC_seen(pRExC_state->seen) (pRExC_state->seen)
312#define RExC_size(pRExC_state->size) (pRExC_state->size)
313#define RExC_maxlen(pRExC_state->maxlen) (pRExC_state->maxlen)
314#define RExC_npar(pRExC_state->npar) (pRExC_state->npar)
315#define RExC_total_parens(pRExC_state->total_par) (pRExC_state->total_par)
316#define RExC_parens_buf_size(pRExC_state->parens_buf_size) (pRExC_state->parens_buf_size)
317#define RExC_nestroot(pRExC_state->nestroot) (pRExC_state->nestroot)
318#define RExC_seen_zerolen(pRExC_state->seen_zerolen) (pRExC_state->seen_zerolen)
319#define RExC_utf8(pRExC_state->utf8) (pRExC_state->utf8)
320#define RExC_uni_semantics(pRExC_state->uni_semantics) (pRExC_state->uni_semantics)
321#define RExC_orig_utf8(pRExC_state->orig_utf8) (pRExC_state->orig_utf8)
322#define RExC_open_parens(pRExC_state->open_parens) (pRExC_state->open_parens)
323#define RExC_close_parens(pRExC_state->close_parens) (pRExC_state->close_parens)
324#define RExC_end_op(pRExC_state->end_op) (pRExC_state->end_op)
325#define RExC_paren_names(pRExC_state->paren_names) (pRExC_state->paren_names)
326#define RExC_recurse(pRExC_state->recurse) (pRExC_state->recurse)
327#define RExC_recurse_count(pRExC_state->recurse_count) (pRExC_state->recurse_count)
328#define RExC_sets_depth(pRExC_state->sets_depth) (pRExC_state->sets_depth)
329#define RExC_study_chunk_recursed(pRExC_state->study_chunk_recursed) (pRExC_state->study_chunk_recursed)
330#define RExC_study_chunk_recursed_bytes(pRExC_state->study_chunk_recursed_bytes) \
331 (pRExC_state->study_chunk_recursed_bytes)
332#define RExC_in_lookaround(pRExC_state->in_lookaround) (pRExC_state->in_lookaround)
333#define RExC_contains_locale(pRExC_state->contains_locale) (pRExC_state->contains_locale)
334#define RExC_recode_x_to_native(pRExC_state->recode_x_to_native) (pRExC_state->recode_x_to_native)
335
336#ifdef EBCDIC
337# define SET_recode_x_to_native(x)(void)0 \
338 STMT_STARTdo { RExC_recode_x_to_native(pRExC_state->recode_x_to_native) = (x); } STMT_ENDwhile (0)
339#else
340# define SET_recode_x_to_native(x)(void)0 NOOP(void)0
341#endif
342
343#define RExC_in_multi_char_class(pRExC_state->in_multi_char_class) (pRExC_state->in_multi_char_class)
344#define RExC_frame_head(pRExC_state->frame_head) (pRExC_state->frame_head)
345#define RExC_frame_last(pRExC_state->frame_last) (pRExC_state->frame_last)
346#define RExC_frame_count(pRExC_state->frame_count) (pRExC_state->frame_count)
347#define RExC_strict(pRExC_state->strict) (pRExC_state->strict)
348#define RExC_study_started(pRExC_state->study_started) (pRExC_state->study_started)
349#define RExC_warn_text(pRExC_state->warn_text) (pRExC_state->warn_text)
350#define RExC_in_script_run(pRExC_state->in_script_run) (pRExC_state->in_script_run)
351#define RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ) (pRExC_state->use_BRANCHJ)
352#define RExC_warned_WARN_EXPERIMENTAL__VLB(pRExC_state->sWARN_EXPERIMENTAL__VLB) (pRExC_state->sWARN_EXPERIMENTAL__VLB)
353#define RExC_warned_WARN_EXPERIMENTAL__REGEX_SETS(pRExC_state->sWARN_EXPERIMENTAL__REGEX_SETS) (pRExC_state->sWARN_EXPERIMENTAL__REGEX_SETS)
354#define RExC_unlexed_names(pRExC_state->unlexed_names) (pRExC_state->unlexed_names)
355
356/* Heuristic check on the complexity of the pattern: if TOO_NAUGHTY, we set
357 * a flag to disable back-off on the fixed/floating substrings - if it's
358 * a high complexity pattern we assume the benefit of avoiding a full match
359 * is worth the cost of checking for the substrings even if they rarely help.
360 */
361#define RExC_naughty(pRExC_state->naughty) (pRExC_state->naughty)
362#define TOO_NAUGHTY(10) (10)
363#define MARK_NAUGHTY(add)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (add)
\
364 if (RExC_naughty(pRExC_state->naughty) < TOO_NAUGHTY(10)) \
365 RExC_naughty(pRExC_state->naughty) += (add)
366#define MARK_NAUGHTY_EXP(exp, add)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (pRExC_state->naughty) / (exp) + (add)
\
367 if (RExC_naughty(pRExC_state->naughty) < TOO_NAUGHTY(10)) \
368 RExC_naughty(pRExC_state->naughty) += RExC_naughty(pRExC_state->naughty) / (exp) + (add)
369
370#define ISMULT1(c)((c) == '*' || (c) == '+' || (c) == '?') ((c) == '*' || (c) == '+' || (c) == '?')
371#define ISMULT2(s)((*s) == '*' || (*s) == '+' || (*s) == '?' || ((*s) == '{' &&
S_regcurly(s)))
((*s) == '*' || (*s) == '+' || (*s) == '?' || \
372 ((*s) == '{' && regcurlyS_regcurly(s)))
373
374/*
375 * Flags to be passed up and down.
376 */
377#define WORST0 0 /* Worst case. */
378#define HASWIDTH0x01 0x01 /* Known to not match null strings, could match
379 non-null ones. */
380
381/* Simple enough to be STAR/PLUS operand; in an EXACTish node must be a single
382 * character. (There needs to be a case: in the switch statement in regexec.c
383 * for any node marked SIMPLE.) Note that this is not the same thing as
384 * REGNODE_SIMPLE */
385#define SIMPLE0x02 0x02
386#define SPSTART0x04 0x04 /* Starts with * or + */
387#define POSTPONED0x08 0x08 /* (?1),(?&name), (??{...}) or similar */
388#define TRYAGAIN0x10 0x10 /* Weeded out a declaration. */
389#define RESTART_PARSE0x20 0x20 /* Need to redo the parse */
390#define NEED_UTF80x40 0x40 /* In conjunction with RESTART_PARSE, need to
391 calcuate sizes as UTF-8 */
392
393#define REG_NODE_NUM(x)((x) ? (int)((x)-(pRExC_state->emit_start)) : -1) ((x) ? (int)((x)-RExC_emit_start(pRExC_state->emit_start)) : -1)
394
395/* whether trie related optimizations are enabled */
396#if PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION1
397#define TRIE_STUDY_OPT
398#define FULL_TRIE_STUDY
399#define TRIE_STCLASS
400#endif
401
402
403
404#define PBYTE(u8str,paren)((U8*)(u8str))[(paren) >> 3] ((U8*)(u8str))[(paren) >> 3]
405#define PBITVAL(paren)(1 << ((paren) & 7)) (1 << ((paren) & 7))
406#define PAREN_OFFSET(depth)((pRExC_state->study_chunk_recursed) + (depth) * (pRExC_state
->study_chunk_recursed_bytes))
\
407 (RExC_study_chunk_recursed(pRExC_state->study_chunk_recursed) + (depth) * RExC_study_chunk_recursed_bytes(pRExC_state->study_chunk_recursed_bytes))
408#define PAREN_TEST(depth, paren)(((U8*)(((pRExC_state->study_chunk_recursed) + (depth) * (
pRExC_state->study_chunk_recursed_bytes))))[(paren) >>
3] & (1 << ((paren) & 7)))
\
409 (PBYTE(PAREN_OFFSET(depth), paren)((U8*)(((pRExC_state->study_chunk_recursed) + (depth) * (pRExC_state
->study_chunk_recursed_bytes))))[(paren) >> 3]
& PBITVAL(paren)(1 << ((paren) & 7)))
410#define PAREN_SET(depth, paren)(((U8*)(((pRExC_state->study_chunk_recursed) + (depth) * (
pRExC_state->study_chunk_recursed_bytes))))[(paren) >>
3] |= (1 << ((paren) & 7)))
\
411 (PBYTE(PAREN_OFFSET(depth), paren)((U8*)(((pRExC_state->study_chunk_recursed) + (depth) * (pRExC_state
->study_chunk_recursed_bytes))))[(paren) >> 3]
|= PBITVAL(paren)(1 << ((paren) & 7)))
412#define PAREN_UNSET(depth, paren)(((U8*)(((pRExC_state->study_chunk_recursed) + (depth) * (
pRExC_state->study_chunk_recursed_bytes))))[(paren) >>
3] &= ~(1 << ((paren) & 7)))
\
413 (PBYTE(PAREN_OFFSET(depth), paren)((U8*)(((pRExC_state->study_chunk_recursed) + (depth) * (pRExC_state
->study_chunk_recursed_bytes))))[(paren) >> 3]
&= ~PBITVAL(paren)(1 << ((paren) & 7)))
414
415#define REQUIRE_UTF8(flagp)do { if (!(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
*flagp = 0x20|0x40; return 0; } } while (0)
STMT_STARTdo { \
416 if (!UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { \
417 *flagp = RESTART_PARSE0x20|NEED_UTF80x40; \
418 return 0; \
419 } \
420 } STMT_ENDwhile (0)
421
422/* /u is to be chosen if we are supposed to use Unicode rules, or if the
423 * pattern is in UTF-8. This latter condition is in case the outermost rules
424 * are locale. See GH #17278 */
425#define toUSE_UNI_CHARSET_NOT_DEPENDS((pRExC_state->uni_semantics) || (((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0))
(RExC_uni_semantics(pRExC_state->uni_semantics) || UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
426
427/* Change from /d into /u rules, and restart the parse. RExC_uni_semantics is
428 * a flag that indicates we need to override /d with /u as a result of
429 * something in the pattern. It should only be used in regards to calling
430 * set_regex_charset() or get_regex_charset() */
431#define REQUIRE_UNI_RULES(flagp, restart_retval)do { if ((get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)) { set_regex_charset(&(pRExC_state->flags), REGEX_UNICODE_CHARSET
); (pRExC_state->uni_semantics) = 1; if ((pRExC_state->
seen_d_op) && __builtin_expect(((! ((pRExC_state->
total_par) < 0)) ? (_Bool)1 : (_Bool)0),(1))) { *flagp |= 0x20
; return restart_retval; } } } while (0)
\
432 STMT_STARTdo { \
433 if (DEPENDS_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)
) { \
434 set_regex_charset(&RExC_flags(pRExC_state->flags), REGEX_UNICODE_CHARSET); \
435 RExC_uni_semantics(pRExC_state->uni_semantics) = 1; \
436 if (RExC_seen_d_op(pRExC_state->seen_d_op) && LIKELY(! IN_PARENS_PASS)__builtin_expect(((! ((pRExC_state->total_par) < 0)) ? (
_Bool)1 : (_Bool)0),(1))
) { \
437 /* No need to restart the parse if we haven't seen \
438 * anything that differs between /u and /d, and no need \
439 * to restart immediately if we're going to reparse \
440 * anyway to count parens */ \
441 *flagp |= RESTART_PARSE0x20; \
442 return restart_retval; \
443 } \
444 } \
445 } STMT_ENDwhile (0)
446
447#define REQUIRE_BRANCHJ(flagp, restart_retval)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
restart_retval; } while (0)
\
448 STMT_STARTdo { \
449 RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ) = 1; \
450 *flagp |= RESTART_PARSE0x20; \
451 return restart_retval; \
452 } STMT_ENDwhile (0)
453
454/* Until we have completed the parse, we leave RExC_total_parens at 0 or
455 * less. After that, it must always be positive, because the whole re is
456 * considered to be surrounded by virtual parens. Setting it to negative
457 * indicates there is some construct that needs to know the actual number of
458 * parens to be properly handled. And that means an extra pass will be
459 * required after we've counted them all */
460#define ALL_PARENS_COUNTED((pRExC_state->total_par) > 0) (RExC_total_parens(pRExC_state->total_par) > 0)
461#define REQUIRE_PARENS_PASSdo { if (! ((pRExC_state->total_par) > 0)) (pRExC_state
->total_par) = -1; } while (0)
\
462 STMT_STARTdo { /* No-op if have completed a pass */ \
463 if (! ALL_PARENS_COUNTED((pRExC_state->total_par) > 0)) RExC_total_parens(pRExC_state->total_par) = -1; \
464 } STMT_ENDwhile (0)
465#define IN_PARENS_PASS((pRExC_state->total_par) < 0) (RExC_total_parens(pRExC_state->total_par) < 0)
466
467
468/* This is used to return failure (zero) early from the calling function if
469 * various flags in 'flags' are set. Two flags always cause a return:
470 * 'RESTART_PARSE' and 'NEED_UTF8'. 'extra' can be used to specify any
471 * additional flags that should cause a return; 0 if none. If the return will
472 * be done, '*flagp' is first set to be all of the flags that caused the
473 * return. */
474#define RETURN_FAIL_ON_RESTART_OR_FLAGS(flags,flagp,extra)do { if ((flags) & (0x20|0x40|(extra))) { *(flagp) = (flags
) & (0x20|0x40|(extra)); return 0; } } while (0)
\
475 STMT_STARTdo { \
476 if ((flags) & (RESTART_PARSE0x20|NEED_UTF80x40|(extra))) { \
477 *(flagp) = (flags) & (RESTART_PARSE0x20|NEED_UTF80x40|(extra)); \
478 return 0; \
479 } \
480 } STMT_ENDwhile (0)
481
482#define MUST_RESTART(flags)((flags) & (0x20)) ((flags) & (RESTART_PARSE0x20))
483
484#define RETURN_FAIL_ON_RESTART(flags,flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
\
485 RETURN_FAIL_ON_RESTART_OR_FLAGS( flags, flagp, 0)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
486#define RETURN_FAIL_ON_RESTART_FLAGP(flagp)if (((*(flagp)) & (0x20))) return 0 \
487 if (MUST_RESTART(*(flagp))((*(flagp)) & (0x20))) return 0
488
489/* This converts the named class defined in regcomp.h to its equivalent class
490 * number defined in handy.h. */
491#define namedclass_to_classnum(class)((int) ((class) / 2)) ((int) ((class) / 2))
492#define classnum_to_namedclass(classnum)((classnum) * 2) ((classnum) * 2)
493
494#define _invlist_union_complement_2nd(a, b, output)Perl__invlist_union_maybe_complement_2nd( a,b,(1),output) \
495 _invlist_union_maybe_complement_2nd(a, b, TRUE, output)Perl__invlist_union_maybe_complement_2nd( a,b,(1),output)
496#define _invlist_intersection_complement_2nd(a, b, output)Perl__invlist_intersection_maybe_complement_2nd( a,b,(1),output
)
\
497 _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)Perl__invlist_intersection_maybe_complement_2nd( a,b,(1),output
)
498
499/* We add a marker if we are deferring expansion of a property that is both
500 * 1) potentiallly user-defined; and
501 * 2) could also be an official Unicode property.
502 *
503 * Without this marker, any deferred expansion can only be for a user-defined
504 * one. This marker shouldn't conflict with any that could be in a legal name,
505 * and is appended to its name to indicate this. There is a string and
506 * character form */
507#define DEFERRED_COULD_BE_OFFICIAL_MARKERs"~" "~"
508#define DEFERRED_COULD_BE_OFFICIAL_MARKERc'~' '~'
509
510/* What is infinity for optimization purposes */
511#define OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) SSize_t_MAX(ssize_t)(~(size_t)0 >> 1)
512
513/* About scan_data_t.
514
515 During optimisation we recurse through the regexp program performing
516 various inplace (keyhole style) optimisations. In addition study_chunk
517 and scan_commit populate this data structure with information about
518 what strings MUST appear in the pattern. We look for the longest
519 string that must appear at a fixed location, and we look for the
520 longest string that may appear at a floating location. So for instance
521 in the pattern:
522
523 /FOO[xX]A.*B[xX]BAR/
524
525 Both 'FOO' and 'A' are fixed strings. Both 'B' and 'BAR' are floating
526 strings (because they follow a .* construct). study_chunk will identify
527 both FOO and BAR as being the longest fixed and floating strings respectively.
528
529 The strings can be composites, for instance
530
531 /(f)(o)(o)/
532
533 will result in a composite fixed substring 'foo'.
534
535 For each string some basic information is maintained:
536
537 - min_offset
538 This is the position the string must appear at, or not before.
539 It also implicitly (when combined with minlenp) tells us how many
540 characters must match before the string we are searching for.
541 Likewise when combined with minlenp and the length of the string it
542 tells us how many characters must appear after the string we have
543 found.
544
545 - max_offset
546 Only used for floating strings. This is the rightmost point that
547 the string can appear at. If set to OPTIMIZE_INFTY it indicates that the
548 string can occur infinitely far to the right.
549 For fixed strings, it is equal to min_offset.
550
551 - minlenp
552 A pointer to the minimum number of characters of the pattern that the
553 string was found inside. This is important as in the case of positive
554 lookahead or positive lookbehind we can have multiple patterns
555 involved. Consider
556
557 /(?=FOO).*F/
558
559 The minimum length of the pattern overall is 3, the minimum length
560 of the lookahead part is 3, but the minimum length of the part that
561 will actually match is 1. So 'FOO's minimum length is 3, but the
562 minimum length for the F is 1. This is important as the minimum length
563 is used to determine offsets in front of and behind the string being
564 looked for. Since strings can be composites this is the length of the
565 pattern at the time it was committed with a scan_commit. Note that
566 the length is calculated by study_chunk, so that the minimum lengths
567 are not known until the full pattern has been compiled, thus the
568 pointer to the value.
569
570 - lookbehind
571
572 In the case of lookbehind the string being searched for can be
573 offset past the start point of the final matching string.
574 If this value was just blithely removed from the min_offset it would
575 invalidate some of the calculations for how many chars must match
576 before or after (as they are derived from min_offset and minlen and
577 the length of the string being searched for).
578 When the final pattern is compiled and the data is moved from the
579 scan_data_t structure into the regexp structure the information
580 about lookbehind is factored in, with the information that would
581 have been lost precalculated in the end_shift field for the
582 associated string.
583
584 The fields pos_min and pos_delta are used to store the minimum offset
585 and the delta to the maximum offset at the current point in the pattern.
586
587*/
588
589struct scan_data_substrs {
590 SV *str; /* longest substring found in pattern */
591 SSize_tssize_t min_offset; /* earliest point in string it can appear */
592 SSize_tssize_t max_offset; /* latest point in string it can appear */
593 SSize_tssize_t *minlenp; /* pointer to the minlen relevant to the string */
594 SSize_tssize_t lookbehind; /* is the pos of the string modified by LB */
595 I32 flags; /* per substring SF_* and SCF_* flags */
596};
597
598typedef struct scan_data_t {
599 /*I32 len_min; unused */
600 /*I32 len_delta; unused */
601 SSize_tssize_t pos_min;
602 SSize_tssize_t pos_delta;
603 SV *last_found;
604 SSize_tssize_t last_end; /* min value, <0 unless valid. */
605 SSize_tssize_t last_start_min;
606 SSize_tssize_t last_start_max;
607 U8 cur_is_floating; /* whether the last_* values should be set as
608 * the next fixed (0) or floating (1)
609 * substring */
610
611 /* [0] is longest fixed substring so far, [1] is longest float so far */
612 struct scan_data_substrs substrs[2];
613
614 I32 flags; /* common SF_* and SCF_* flags */
615 I32 whilem_c;
616 SSize_tssize_t *last_closep;
617 regnode_ssc *start_class;
618} scan_data_t;
619
620/*
621 * Forward declarations for pregcomp()'s friends.
622 */
623
624static const scan_data_t zero_scan_data = {
625 0, 0, NULL((void*)0), 0, 0, 0, 0,
626 {
627 { NULL((void*)0), 0, 0, 0, 0, 0 },
628 { NULL((void*)0), 0, 0, 0, 0, 0 },
629 },
630 0, 0, NULL((void*)0), NULL((void*)0)
631};
632
633/* study flags */
634
635#define SF_BEFORE_SEOL0x0001 0x0001
636#define SF_BEFORE_MEOL0x0002 0x0002
637#define SF_BEFORE_EOL(0x0001|0x0002) (SF_BEFORE_SEOL0x0001|SF_BEFORE_MEOL0x0002)
638
639#define SF_IS_INF0x0040 0x0040
640#define SF_HAS_PAR0x0080 0x0080
641#define SF_IN_PAR0x0100 0x0100
642#define SF_HAS_EVAL0x0200 0x0200
643
644
645/* SCF_DO_SUBSTR is the flag that tells the regexp analyzer to track the
646 * longest substring in the pattern. When it is not set the optimiser keeps
647 * track of position, but does not keep track of the actual strings seen,
648 *
649 * So for instance /foo/ will be parsed with SCF_DO_SUBSTR being true, but
650 * /foo/i will not.
651 *
652 * Similarly, /foo.*(blah|erm|huh).*fnorble/ will have "foo" and "fnorble"
653 * parsed with SCF_DO_SUBSTR on, but while processing the (...) it will be
654 * turned off because of the alternation (BRANCH). */
655#define SCF_DO_SUBSTR0x0400 0x0400
656
657#define SCF_DO_STCLASS_AND0x0800 0x0800
658#define SCF_DO_STCLASS_OR0x1000 0x1000
659#define SCF_DO_STCLASS(0x0800|0x1000) (SCF_DO_STCLASS_AND0x0800|SCF_DO_STCLASS_OR0x1000)
660#define SCF_WHILEM_VISITED_POS0x2000 0x2000
661
662#define SCF_TRIE_RESTUDY0x4000 0x4000 /* Do restudy? */
663#define SCF_SEEN_ACCEPT0x8000 0x8000
664#define SCF_TRIE_DOING_RESTUDY0x10000 0x10000
665#define SCF_IN_DEFINE0x20000 0x20000
666
667
668
669
670#define UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) cBOOL(RExC_utf8)(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
671
672/* The enums for all these are ordered so things work out correctly */
673#define LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) == REGEX_LOCALE_CHARSET)
674#define DEPENDS_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) \
675 == REGEX_DEPENDS_CHARSET)
676#define UNI_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_UNICODE_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) == REGEX_UNICODE_CHARSET)
677#define AT_LEAST_UNI_SEMANTICS(get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) \
678 >= REGEX_UNICODE_CHARSET)
679#define ASCII_RESTRICTED(get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_RESTRICTED_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) \
680 == REGEX_ASCII_RESTRICTED_CHARSET)
681#define AT_LEAST_ASCII_RESTRICTED(get_regex_charset((pRExC_state->flags)) >= REGEX_ASCII_RESTRICTED_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) \
682 >= REGEX_ASCII_RESTRICTED_CHARSET)
683#define ASCII_FOLD_RESTRICTED(get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)
(get_regex_charset(RExC_flags(pRExC_state->flags)) \
684 == REGEX_ASCII_MORE_RESTRICTED_CHARSET)
685
686#define FOLD(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
cBOOL(RExC_flags & RXf_PMf_FOLD)(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
687
688/* For programs that want to be strictly Unicode compatible by dying if any
689 * attempt is made to match a non-Unicode code point against a Unicode
690 * property. */
691#define ALWAYS_WARN_SUPER(PL_curcop && !((PL_curcop->cop_warnings) == ((void
*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL
|| (PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((48 )) & 0xFF))+1) / 8)] & (1 << ((2*((((48 )
) & 0xFF))+1) % 8)))) || (((((48 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((48 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((48 )) >>8) & 0xFF))+1) % 8)))) || (((((48
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((48 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((48 )) >>16) & 0xFF
))+1) % 8)))) || (((((48 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((48 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((48 )) >>
24) & 0xFF))+1) % 8)))))))))))
ckDEAD(packWARN(WARN_NON_UNICODE))(PL_curcop && !((PL_curcop->cop_warnings) == ((void
*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL
|| (PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((48 )) & 0xFF))+1) / 8)] & (1 << ((2*((((48 )
) & 0xFF))+1) % 8)))) || (((((48 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((48 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((48 )) >>8) & 0xFF))+1) % 8)))) || (((((48
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((48 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((48 )) >>16) & 0xFF
))+1) % 8)))) || (((((48 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((48 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((48 )) >>
24) & 0xFF))+1) % 8)))))))))))
692
693#define OOB_NAMEDCLASS-1 -1
694
695/* There is no code point that is out-of-bounds, so this is problematic. But
696 * its only current use is to initialize a variable that is always set before
697 * looked at. */
698#define OOB_UNICODE0xDEADBEEF 0xDEADBEEF
699
700#define CHR_SVLEN(sv)((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? Perl_sv_len_utf8
( sv) : (*({ const SV *const _svcur = (const SV *)(sv); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 700, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 700, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 700, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })))
(UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? sv_len_utf8(sv)Perl_sv_len_utf8( sv) : SvCUR(sv)(*({ const SV *const _svcur = (const SV *)(sv); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 700, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 700, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 700, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
)
701
702
703/* length of regex to show in messages that don't mark a position within */
704#define RegexLengthToShowInErrorMessages127 127
705
706/*
707 * If MARKER[12] are adjusted, be sure to adjust the constants at the top
708 * of t/op/regmesg.t, the tests in t/op/re_tests, and those in
709 * op/pragma/warn/regcomp.
710 */
711#define MARKER1"<-- HERE" "<-- HERE" /* marker as it appears in the description */
712#define MARKER2" <-- HERE " " <-- HERE " /* marker as it appears within the regex */
713
714#define REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
" in regex; marked by " MARKER1"<-- HERE" \
715 " in m/%" UTF8f"d%" "lu" "%4p" MARKER2" <-- HERE " "%" UTF8f"d%" "lu" "%4p" "/"
716
717/* The code in this file in places uses one level of recursion with parsing
718 * rebased to an alternate string constructed by us in memory. This can take
719 * the form of something that is completely different from the input, or
720 * something that uses the input as part of the alternate. In the first case,
721 * there should be no possibility of an error, as we are in complete control of
722 * the alternate string. But in the second case we don't completely control
723 * the input portion, so there may be errors in that. Here's an example:
724 * /[abc\x{DF}def]/ui
725 * is handled specially because \x{df} folds to a sequence of more than one
726 * character: 'ss'. What is done is to create and parse an alternate string,
727 * which looks like this:
728 * /(?:\x{DF}|[abc\x{DF}def])/ui
729 * where it uses the input unchanged in the middle of something it constructs,
730 * which is a branch for the DF outside the character class, and clustering
731 * parens around the whole thing. (It knows enough to skip the DF inside the
732 * class while in this substitute parse.) 'abc' and 'def' may have errors that
733 * need to be reported. The general situation looks like this:
734 *
735 * |<------- identical ------>|
736 * sI tI xI eI
737 * Input: ---------------------------------------------------------------
738 * Constructed: ---------------------------------------------------
739 * sC tC xC eC EC
740 * |<------- identical ------>|
741 *
742 * sI..eI is the portion of the input pattern we are concerned with here.
743 * sC..EC is the constructed substitute parse string.
744 * sC..tC is constructed by us
745 * tC..eC is an exact duplicate of the portion of the input pattern tI..eI.
746 * In the diagram, these are vertically aligned.
747 * eC..EC is also constructed by us.
748 * xC is the position in the substitute parse string where we found a
749 * problem.
750 * xI is the position in the original pattern corresponding to xC.
751 *
752 * We want to display a message showing the real input string. Thus we need to
753 * translate from xC to xI. We know that xC >= tC, since the portion of the
754 * string sC..tC has been constructed by us, and so shouldn't have errors. We
755 * get:
756 * xI = tI + (xC - tC)
757 *
758 * When the substitute parse is constructed, the code needs to set:
759 * RExC_start (sC)
760 * RExC_end (eC)
761 * RExC_copy_start_in_input (tI)
762 * RExC_copy_start_in_constructed (tC)
763 * and restore them when done.
764 *
765 * During normal processing of the input pattern, both
766 * 'RExC_copy_start_in_input' and 'RExC_copy_start_in_constructed' are set to
767 * sI, so that xC equals xI.
768 */
769
770#define sI(pRExC_state->precomp) RExC_precomp(pRExC_state->precomp)
771#define eI(pRExC_state->precomp_end) RExC_precomp_end(pRExC_state->precomp_end)
772#define sC(pRExC_state->start) RExC_start(pRExC_state->start)
773#define eC(pRExC_state->end) RExC_end(pRExC_state->end)
774#define tI(pRExC_state->copy_start_in_input) RExC_copy_start_in_input(pRExC_state->copy_start_in_input)
775#define tC(pRExC_state->copy_start) RExC_copy_start_in_constructed(pRExC_state->copy_start)
776#define xI(xC)((pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start)))
(tI(pRExC_state->copy_start_in_input) + (xC - tC(pRExC_state->copy_start)))
777#define xI_offset(xC)(((pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp))
(xI(xC)((pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start)))
- sI(pRExC_state->precomp))
778
779#define REPORT_LOCATION_ARGS(xC)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 779, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (xC - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (xC - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))))
\
780 UTF8fARG(UTF, \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
781 (xI(xC) > eI) /* Don't run off end */ \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
782 ? eI - sI /* Length before the <--HERE */ \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
783 : ((xI_offset(xC) >= 0) \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
784 ? xI_offset(xC) \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
785 : (Perl_croak(aTHX_ "panic: %s: %d: negative offset: %" \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
786 IVdf " trying to output message for " \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
787 " pattern %.*s", \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
788 __FILE__, __LINE__, (IV) xI_offset(xC), \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
789 ((int) (eC - sC)), sC), 0)), \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
790 sI)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (xC - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 788, (IV) (((pRExC_state->copy_start_in_input) + (xC - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp))
, /* The input pattern printed up to the <--HERE */ \
791 UTF8fARG(UTF, \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (xC - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (xC - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))))
792 (xI(xC) > eI) ? 0 : eI - xI(xC), /* Length after <--HERE */ \(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (xC - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (xC - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))))
793 (xI(xC) > eI) ? eI : xI(xC))(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(xC - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (xC - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (xC - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (xC - (pRExC_state
->copy_start))))
/* pattern after <--HERE */
794
795/* Used to point after bad bytes for an error message, but avoid skipping
796 * past a nul byte. */
797#define SKIP_IF_CHAR(s, e)(!*(s) ? 0 : (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
? ((((e) >= (s)) ? (void)0 : __assert2("re_comp.c", 797, __func__
, "(e) >= (s)")), ((e) - (s)) <= 0 ? 0 : (((((e) - (s))
)<(PL_utf8skip[*(const U8*)(s)]))?(((e) - (s))):(PL_utf8skip
[*(const U8*)(s)]))) : 1)
(!*(s) ? 0 : UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? UTF8_SAFE_SKIP(s, e)((((e) >= (s)) ? (void)0 : __assert2("re_comp.c", 797, __func__
, "(e) >= (s)")), ((e) - (s)) <= 0 ? 0 : (((((e) - (s))
)<(PL_utf8skip[*(const U8*)(s)]))?(((e) - (s))):(PL_utf8skip
[*(const U8*)(s)])))
: 1)
798
799/* Set up to clean up after our imminent demise */
800#define PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
\
801 STMT_STARTdo { \
802 if (RExC_rx_sv(pRExC_state->rx_sv)) \
803 SAVEFREESV(RExC_rx_sv)Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11)
; \
804 if (RExC_open_parens(pRExC_state->open_parens)) \
805 SAVEFREEPV(RExC_open_parens)Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10)
; \
806 if (RExC_close_parens(pRExC_state->close_parens)) \
807 SAVEFREEPV(RExC_close_parens)Perl_save_pushptr( (void *)((char*)((pRExC_state->close_parens
))),10)
; \
808 } STMT_ENDwhile (0)
809
810/*
811 * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given
812 * arg. Show regex, up to a maximum length. If it's too long, chop and add
813 * "...".
814 */
815#define _FAIL(code)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
code; } while (0)
STMT_STARTdo { \
816 const char *ellipses = ""; \
817 IV len = RExC_precomp_end(pRExC_state->precomp_end) - RExC_precomp(pRExC_state->precomp); \
818 \
819 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
820 if (len > RegexLengthToShowInErrorMessages127) { \
821 /* chop 10 shorter than the max, to ensure meaning of "..." */ \
822 len = RegexLengthToShowInErrorMessages127 - 10; \
823 ellipses = "..."; \
824 } \
825 code; \
826} STMT_ENDwhile (0)
827
828#define FAIL(msg)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", msg, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
_FAIL( \do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", msg, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
829 Perl_croak(aTHX_ "%s in regex m/%" UTF8f "%s/", \do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", msg, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
830 msg, UTF8fARG(UTF, len, RExC_precomp), ellipses))do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", msg, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
831
832#define FAIL2(msg,arg)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
_FAIL( \do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
833 Perl_croak(aTHX_ msg " in regex m/%" UTF8f "%s/", \do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
834 arg, UTF8fARG(UTF, len, RExC_precomp), ellipses))do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
835
836#define FAIL3(msg,arg1,arg2)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg1,
arg2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0
)) ? (_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->
precomp)), ellipses); } while (0)
_FAIL( \do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg1,
arg2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0
)) ? (_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->
precomp)), ellipses); } while (0)
837 Perl_croak(aTHX_ msg " in regex m/%" UTF8f "%s/", \do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg1,
arg2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0
)) ? (_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->
precomp)), ellipses); } while (0)
838 arg1, arg2, UTF8fARG(UTF, len, RExC_precomp), ellipses))do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( msg " in regex m/%" "d%" "lu" "%4p" "%s/", arg1,
arg2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0
)) ? (_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->
precomp)), ellipses); } while (0)
839
840/*
841 * Simple_vFAIL -- like FAIL, but marks the current location in the scan
842 */
843#define Simple_vFAIL(m)do { Perl_croak( "%s" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 843, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
STMT_STARTdo { \
844 Perl_croak(aTHX_ "%s" REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, \
845 m, REPORT_LOCATION_ARGS(RExC_parse)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 845, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))
); \
846} STMT_ENDwhile (0)
847
848/*
849 * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL()
850 */
851#define vFAIL(m)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", m, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 851, (IV) (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)), ((int) ((pRExC_state->end) -
(pRExC_state->start))), (pRExC_state->start)), 0))), (
void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
), (void*)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))))); } while (0); } while (0)
STMT_STARTdo { \
852 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
853 Simple_vFAIL(m)do { Perl_croak( "%s" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 853, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
; \
854} STMT_ENDwhile (0)
855
856/*
857 * Like Simple_vFAIL(), but accepts two arguments.
858 */
859#define Simple_vFAIL2(m,a1)do { S_re_croak( (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0), m " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", a1, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 859, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
STMT_STARTdo { \
860 S_re_croak(aTHX_ UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0), m REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, a1, \
861 REPORT_LOCATION_ARGS(RExC_parse)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 861, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))
); \
862} STMT_ENDwhile (0)
863
864/*
865 * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL2().
866 */
867#define vFAIL2(m,a1)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), m " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 867, (IV) (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)), ((int) ((pRExC_state->end) -
(pRExC_state->start))), (pRExC_state->start)), 0))), (
void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
), (void*)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))))); } while (0); } while (0)
STMT_STARTdo { \
868 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
869 Simple_vFAIL2(m, a1)do { S_re_croak( (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0), m " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", a1, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 869, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
; \
870} STMT_ENDwhile (0)
871
872
873/*
874 * Like Simple_vFAIL(), but accepts three arguments.
875 */
876#define Simple_vFAIL3(m, a1, a2)do { S_re_croak( (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0), m " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", a1, a2, (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 876, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
STMT_STARTdo { \
877 S_re_croak(aTHX_ UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0), m REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, a1, a2, \
878 REPORT_LOCATION_ARGS(RExC_parse)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 878, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))
); \
879} STMT_ENDwhile (0)
880
881/*
882 * Calls SAVEDESTRUCTOR_X if needed, then Simple_vFAIL3().
883 */
884#define vFAIL3(m,a1,a2)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), m " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", a1, a2, (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 884, (IV) (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)), ((int) ((pRExC_state->end) -
(pRExC_state->start))), (pRExC_state->start)), 0))), (
void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
), (void*)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))))); } while (0); } while (0)
STMT_STARTdo { \
885 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
886 Simple_vFAIL3(m, a1, a2)do { S_re_croak( (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0), m " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", a1, a2, (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 886, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
; \
887} STMT_ENDwhile (0)
888
889/*
890 * Like Simple_vFAIL(), but accepts four arguments.
891 */
892#define Simple_vFAIL4(m, a1, a2, a3)do { S_re_croak( (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0), m " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", a1, a2, a3, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 892, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
STMT_STARTdo { \
893 S_re_croak(aTHX_ UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0), m REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, a1, a2, a3, \
894 REPORT_LOCATION_ARGS(RExC_parse)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 894, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))
); \
895} STMT_ENDwhile (0)
896
897#define vFAIL4(m,a1,a2,a3)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), m " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", a1, a2, a3, (int)(((((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 897, (IV) (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)), ((int) ((pRExC_state->end) -
(pRExC_state->start))), (pRExC_state->start)), 0))), (
void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
), (void*)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))))); } while (0); } while (0)
STMT_STARTdo { \
898 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
899 Simple_vFAIL4(m, a1, a2, a3)do { S_re_croak( (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0), m " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", a1, a2, a3, (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 899, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
; \
900} STMT_ENDwhile (0)
901
902/* A specialized version of vFAIL2 that works with UTF8f */
903#define vFAIL2utf8f(m, a1)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), m " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 903, (IV) (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)), ((int) ((pRExC_state->end) -
(pRExC_state->start))), (pRExC_state->start)), 0))), (
void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
), (void*)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))))); } while (0)
STMT_STARTdo { \
904 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
905 S_re_croak(aTHX_ UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0), m REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, a1, \
906 REPORT_LOCATION_ARGS(RExC_parse)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 906, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))
); \
907} STMT_ENDwhile (0)
908
909#define vFAIL3utf8f(m, a1, a2)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), m " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", a1, a2, (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 909, (IV) (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)), ((int) ((pRExC_state->end) -
(pRExC_state->start))), (pRExC_state->start)), 0))), (
void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
), (void*)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))))); } while (0)
STMT_STARTdo { \
910 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
911 S_re_croak(aTHX_ UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0), m REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, a1, a2, \
912 REPORT_LOCATION_ARGS(RExC_parse)(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 912, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))
); \
913} STMT_ENDwhile (0)
914
915/* Setting this to NULL is a signal to not output warnings */
916#define TURN_OFF_WARNINGS_IN_SUBSTITUTE_PARSEdo { (pRExC_state->save_copy_start) = (pRExC_state->copy_start
); (pRExC_state->copy_start) = ((void*)0); } while (0)
\
917 STMT_STARTdo { \
918 RExC_save_copy_start_in_constructed(pRExC_state->save_copy_start) = RExC_copy_start_in_constructed(pRExC_state->copy_start);\
919 RExC_copy_start_in_constructed(pRExC_state->copy_start) = NULL((void*)0); \
920 } STMT_ENDwhile (0)
921#define RESTORE_WARNINGS(pRExC_state->copy_start) = (pRExC_state->save_copy_start
)
\
922 RExC_copy_start_in_constructed(pRExC_state->copy_start) = RExC_save_copy_start_in_constructed(pRExC_state->save_copy_start)
923
924/* Since a warning can be generated multiple times as the input is reparsed, we
925 * output it the first time we come to that point in the parse, but suppress it
926 * otherwise. 'RExC_copy_start_in_constructed' being NULL is a flag to not
927 * generate any warnings */
928#define TO_OUTPUT_WARNINGS(loc)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
- (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
\
929 ( RExC_copy_start_in_constructed(pRExC_state->copy_start) \
930 && ((xI(loc)((pRExC_state->copy_start_in_input) + (loc - (pRExC_state->
copy_start)))
) - RExC_precomp(pRExC_state->precomp)) > (Ptrdiff_tptrdiff_t) RExC_latest_warn_offset(pRExC_state->latest_warn_offset ))
931
932/* After we've emitted a warning, we save the position in the input so we don't
933 * output it again */
934#define UPDATE_WARNINGS_LOC(loc)do { if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0)
\
935 STMT_STARTdo { \
936 if (TO_OUTPUT_WARNINGS(loc)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
- (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
) { \
937 RExC_latest_warn_offset(pRExC_state->latest_warn_offset ) = MAX(sI, MIN(eI, xI(loc)))((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))))
\
938 - RExC_precomp(pRExC_state->precomp); \
939 } \
940 } STMT_ENDwhile (0)
941
942/* 'warns' is the output of the packWARNx macro used in 'code' */
943#define _WARN_HELPER(loc, warns, code)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 943, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((warns) & 0xFF))+1) / 8)] & (1 << (
(2*(((warns) & 0xFF))+1) % 8)))) || ((((warns) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((warns) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*((((warns) >>8) & 0xFF))+1) % 8)))) ||
((((warns) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*((((warns) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((warns) >>16) &
0xFF))+1) % 8)))) || ((((warns) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((warns) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((warns) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); code; do { if (( (pRExC_state->copy_start) &&
((((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))))))?((pRExC_state->precomp
)):(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))))))) - (pRExC_state->precomp
); } } while (0); } } while (0)
\
944 STMT_STARTdo { \
945 if (! RExC_copy_start_in_constructed(pRExC_state->copy_start)) { \
946 Perl_croak( aTHX_ "panic! %s: %d: Tried to warn when none" \
947 " expected at '%s'", \
948 __FILE__"re_comp.c", __LINE__948, loc); \
949 } \
950 if (TO_OUTPUT_WARNINGS(loc)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
- (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
) { \
951 if (ckDEAD(warns)(PL_curcop && !((PL_curcop->cop_warnings) == ((void
*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL
|| (PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((warns) & 0xFF))+1) / 8)] & (1 << ((2*(((warns
) & 0xFF))+1) % 8)))) || ((((warns) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((warns) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*((((warns) >>8) & 0xFF))+1) % 8)))) || ((((warns
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((warns) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*((((warns) >>16) & 0xFF
))+1) % 8)))) || ((((warns) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((warns) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((warns) >>
24) & 0xFF))+1) % 8)))))))))))
) \
952 PREPARE_TO_DIEdo { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)
(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11)
; if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0)
; \
953 code; \
954 UPDATE_WARNINGS_LOC(loc)do { if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0)
; \
955 } \
956 } STMT_ENDwhile (0)
957
958/* m is not necessarily a "literal string", in this macro */
959#define warn_non_literal_string(loc, packed_warn, m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 959, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (loc
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (loc - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 959, (IV) (((pRExC_state->copy_start_in_input) + (loc - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
960 _WARN_HELPER(loc, packed_warn, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 963, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (loc
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (loc - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 963, (IV) (((pRExC_state->copy_start_in_input) + (loc - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
961 Perl_warner(aTHX_ packed_warn, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 963, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (loc
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (loc - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 963, (IV) (((pRExC_state->copy_start_in_input) + (loc - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
962 "%s" REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 963, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (loc
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (loc - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 963, (IV) (((pRExC_state->copy_start_in_input) + (loc - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
963 m, REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 963, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", m, (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (loc
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (loc - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 963, (IV) (((pRExC_state->copy_start_in_input) + (loc - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
964#define reg_warn_non_literal_string(loc, m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 964, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), "%s" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", m, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 964, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
965 warn_non_literal_string(loc, packWARN(WARN_REGEXP), m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 965, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), "%s" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", m, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 965, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
966
967#define ckWARN2_non_literal_string(loc, packwarn, m, a1)do { char * format; size_t format_size = strlen(m) + strlen(" in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/")+ 1; (format = ((void)(__builtin_expect((((((
sizeof(size_t) < sizeof(format_size) || sizeof(char) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(format_size))
)) ? (size_t)(format_size) : ((size_t)-1)/sizeof(char)) > (
(size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), (char*)(Perl_safesysmalloc((size_t
)((format_size)*sizeof(char)))))); strlcpy(format, m, format_size
); strlcat(format, " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", format_size
); Perl_save_pushptr( (void *)((char*)(format)),10); do { if (
! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 967, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packwarn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packwarn) & 0xFF))+1) % 8)))) || ((((packwarn) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>8) & 0xFF))+1) % 8
)))) || ((((packwarn) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packwarn) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*((((packwarn)
>>16) & 0xFF))+1) % 8)))) || ((((packwarn) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( packwarn, format, a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 967, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0); } while (0)
\
968 STMT_STARTdo { \
969 char * format; \
970 Size_tsize_t format_size = strlen(m) + strlen(REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
)+ 1;\
971 Newx(format, format_size, char)(format = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(format_size) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(format_size)))) ? (size_t)(format_size) : (
(size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (
_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap()
,0)), (char*)(Perl_safesysmalloc((size_t)((format_size)*sizeof
(char))))))
; \
972 my_strlcpystrlcpy(format, m, format_size); \
973 my_strlcatstrlcat(format, REPORT_LOCATION" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/"
, format_size); \
974 SAVEFREEPV(format)Perl_save_pushptr( (void *)((char*)(format)),10); \
975 _WARN_HELPER(loc, packwarn, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 978, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packwarn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packwarn) & 0xFF))+1) % 8)))) || ((((packwarn) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>8) & 0xFF))+1) % 8
)))) || ((((packwarn) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packwarn) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*((((packwarn)
>>16) & 0xFF))+1) % 8)))) || ((((packwarn) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( packwarn, format, a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 978, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
976 Perl_ck_warner(aTHX_ packwarn, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 978, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packwarn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packwarn) & 0xFF))+1) % 8)))) || ((((packwarn) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>8) & 0xFF))+1) % 8
)))) || ((((packwarn) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packwarn) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*((((packwarn)
>>16) & 0xFF))+1) % 8)))) || ((((packwarn) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( packwarn, format, a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 978, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
977 format, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 978, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packwarn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packwarn) & 0xFF))+1) % 8)))) || ((((packwarn) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>8) & 0xFF))+1) % 8
)))) || ((((packwarn) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packwarn) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*((((packwarn)
>>16) & 0xFF))+1) % 8)))) || ((((packwarn) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( packwarn, format, a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 978, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
978 a1, REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 978, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packwarn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packwarn) & 0xFF))+1) % 8)))) || ((((packwarn) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>8) & 0xFF))+1) % 8
)))) || ((((packwarn) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packwarn) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*((((packwarn)
>>16) & 0xFF))+1) % 8)))) || ((((packwarn) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((packwarn) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*((((packwarn) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( packwarn, format, a1, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 978, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
; \
979 } STMT_ENDwhile (0)
980
981#define ckWARNreg(loc,m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 981, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 981, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
982 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 985, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 985, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
983 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 985, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 985, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
984 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 985, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 985, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
985 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 985, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 985, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
986
987#define vWARN(loc, m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 987, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 987, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
988 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 991, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 991, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
989 Perl_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 991, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 991, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
990 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 991, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 991, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
991 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 991, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 991, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
992
993#define vWARN_dep(loc, m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 993, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 993, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
994 _WARN_HELPER(loc, packWARN(WARN_DEPRECATED), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 997, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 997, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
995 Perl_warner(aTHX_ packWARN(WARN_DEPRECATED), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 997, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 997, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
996 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 997, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 997, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
997 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 997, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 997, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
998
999#define ckWARNdep(loc,m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 999, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 999, (IV) (((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1000 _WARN_HELPER(loc, packWARN(WARN_DEPRECATED), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1003, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1003, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1001 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1003, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1003, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1002 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1003, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1003, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1003 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1003, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((2 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((2 )) & 0xFF))+1) % 8)))) || (((((2 )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*(((((2 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((2 )) >>8) & 0xFF))+1) % 8)))) || (((((2 )
) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((2 )) >>16) & 0xFF))+1) /
8)] & (1 << ((2*(((((2 )) >>16) & 0xFF))
+1) % 8)))) || (((((2 )) >>24) & 0xFF) && (
(((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((2 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((2 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (2 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1003, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1004
1005#define ckWARNregdep(loc,m)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1005, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((2) | ((20)<<8) )) & 0xFF))+1) / 8)]
& (1 << ((2*(((((2) | ((20)<<8) )) & 0xFF
))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((((2) | ((20)<<8) )) >>8) & 0xFF))+1)
/ 8)] & (1 << ((2*((((((2) | ((20)<<8) )) >>
8) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>
16) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((((2) | ((20)<<8) )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((((2) | ((20)<<8) )
) >>16) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<
8) )) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((((2) | ((20)<<8) )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((((2) | ((
20)<<8) )) >>24) & 0xFF))+1) % 8)))))))))))) do
{ if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)((
(SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if
((pRExC_state->open_parens)) Perl_save_pushptr( (void *)(
(char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_ck_warner_d( ((2)
| ((20)<<8) ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1005, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1006 _WARN_HELPER(loc, packWARN2(WARN_DEPRECATED, WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1010, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((2) | ((20)<<8) )) & 0xFF))+1) / 8)]
& (1 << ((2*(((((2) | ((20)<<8) )) & 0xFF
))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((((2) | ((20)<<8) )) >>8) & 0xFF))+1)
/ 8)] & (1 << ((2*((((((2) | ((20)<<8) )) >>
8) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>
16) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((((2) | ((20)<<8) )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((((2) | ((20)<<8) )
) >>16) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<
8) )) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((((2) | ((20)<<8) )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((((2) | ((
20)<<8) )) >>24) & 0xFF))+1) % 8)))))))))))) do
{ if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)((
(SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if
((pRExC_state->open_parens)) Perl_save_pushptr( (void *)(
(char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_ck_warner_d( ((2)
| ((20)<<8) ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1010, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1007 Perl_ck_warner_d(aTHX_ packWARN2(WARN_DEPRECATED, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1010, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((2) | ((20)<<8) )) & 0xFF))+1) / 8)]
& (1 << ((2*(((((2) | ((20)<<8) )) & 0xFF
))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((((2) | ((20)<<8) )) >>8) & 0xFF))+1)
/ 8)] & (1 << ((2*((((((2) | ((20)<<8) )) >>
8) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>
16) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((((2) | ((20)<<8) )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((((2) | ((20)<<8) )
) >>16) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<
8) )) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((((2) | ((20)<<8) )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((((2) | ((
20)<<8) )) >>24) & 0xFF))+1) % 8)))))))))))) do
{ if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)((
(SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if
((pRExC_state->open_parens)) Perl_save_pushptr( (void *)(
(char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_ck_warner_d( ((2)
| ((20)<<8) ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1010, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1008 WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1010, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((2) | ((20)<<8) )) & 0xFF))+1) / 8)]
& (1 << ((2*(((((2) | ((20)<<8) )) & 0xFF
))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((((2) | ((20)<<8) )) >>8) & 0xFF))+1)
/ 8)] & (1 << ((2*((((((2) | ((20)<<8) )) >>
8) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>
16) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((((2) | ((20)<<8) )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((((2) | ((20)<<8) )
) >>16) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<
8) )) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((((2) | ((20)<<8) )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((((2) | ((
20)<<8) )) >>24) & 0xFF))+1) % 8)))))))))))) do
{ if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)((
(SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if
((pRExC_state->open_parens)) Perl_save_pushptr( (void *)(
(char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_ck_warner_d( ((2)
| ((20)<<8) ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1010, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1009 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1010, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((2) | ((20)<<8) )) & 0xFF))+1) / 8)]
& (1 << ((2*(((((2) | ((20)<<8) )) & 0xFF
))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((((2) | ((20)<<8) )) >>8) & 0xFF))+1)
/ 8)] & (1 << ((2*((((((2) | ((20)<<8) )) >>
8) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>
16) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((((2) | ((20)<<8) )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((((2) | ((20)<<8) )
) >>16) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<
8) )) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((((2) | ((20)<<8) )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((((2) | ((
20)<<8) )) >>24) & 0xFF))+1) % 8)))))))))))) do
{ if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)((
(SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if
((pRExC_state->open_parens)) Perl_save_pushptr( (void *)(
(char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_ck_warner_d( ((2)
| ((20)<<8) ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1010, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1010 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1010, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((2) | ((20)<<8) )) & 0xFF))+1) / 8)]
& (1 << ((2*(((((2) | ((20)<<8) )) & 0xFF
))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>8) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((((2) | ((20)<<8) )) >>8) & 0xFF))+1)
/ 8)] & (1 << ((2*((((((2) | ((20)<<8) )) >>
8) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<8) )) >>
16) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((((2) | ((20)<<8) )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*((((((2) | ((20)<<8) )
) >>16) & 0xFF))+1) % 8)))) || ((((((2) | ((20)<<
8) )) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((((2) | ((20)<<8) )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*((((((2) | ((
20)<<8) )) >>24) & 0xFF))+1) % 8)))))))))))) do
{ if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)((
(SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if
((pRExC_state->open_parens)) Perl_save_pushptr( (void *)(
(char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_ck_warner_d( ((2)
| ((20)<<8) ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1010, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1011
1012#define ckWARN2reg_d(loc,m, a1)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1012, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1012, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1013 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1016, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1016, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1014 Perl_ck_warner_d(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1016, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1016, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1015 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1016, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1016, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1016 a1, REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1016, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner_d( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1016, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1017
1018#define ckWARN2reg(loc, m, a1)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1018, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1018, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1019 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1022, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1022, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1020 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1022, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1022, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1021 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1022, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1022, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1022 a1, REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1022, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1022, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1023
1024#define vWARN3(loc, m, a1, a2)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1024, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1024, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1025 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1028, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1028, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1026 Perl_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1028, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1028, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1027 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1028, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1028, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1028 a1, a2, REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1028, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1028, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1029
1030#define ckWARN3reg(loc, m, a1, a2)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1030, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1030, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1031 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1035, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1035, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1032 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1035, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1035, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1033 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1035, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1035, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1034 a1, a2, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1035, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1035, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1035 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1035, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1035, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1036
1037#define vWARN4(loc, m, a1, a2, a3)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1037, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1037, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1038 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1042, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1042, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1039 Perl_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1042, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1042, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1040 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1042, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1042, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1041 a1, a2, a3, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1042, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1042, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1042 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1042, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1042, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1043
1044#define ckWARN4reg(loc, m, a1, a2, a3)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1044, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1044, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1045 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1049, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1049, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1046 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1049, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1049, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1047 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1049, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1049, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1048 a1, a2, a3, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1049, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1049, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1049 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1049, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, (int)(((((pRExC_state->utf8)) ? (_Bool)1
: (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1049, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1050
1051#define vWARN5(loc, m, a1, a2, a3, a4)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1051, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, a4, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1051, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
\
1052 _WARN_HELPER(loc, packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1056, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, a4, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1056, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1053 Perl_warner(aTHX_ packWARN(WARN_REGEXP), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1056, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, a4, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1056, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1054 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1056, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, a4, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1056, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1055 a1, a2, a3, a4, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1056, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, a4, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1056, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1056 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1056, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), m " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", a1, a2, a3, a4, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1056, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1057
1058#define ckWARNexperimental(loc, class, m)do { if (! RExC_warned_class) { RExC_warned_class = 1; do { if
(! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1058, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((class )) & 0xFF))+1) / 8)] & (1 <<
((2*((((class )) & 0xFF))+1) % 8)))) || (((((class )) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>8) & 0xFF))+1) % 8
)))) || (((((class )) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((class )) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*(((((class ))
>>16) & 0xFF))+1) % 8)))) || (((((class )) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (class ), m " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1058, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0); } } while (0)
\
1059 STMT_STARTdo { \
1060 if (! RExC_warned_ ## class) { /* warn once per compilation */ \
1061 RExC_warned_ ## class = 1; \
1062 _WARN_HELPER(loc, packWARN(class), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1065, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((class )) & 0xFF))+1) / 8)] & (1 <<
((2*((((class )) & 0xFF))+1) % 8)))) || (((((class )) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>8) & 0xFF))+1) % 8
)))) || (((((class )) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((class )) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*(((((class ))
>>16) & 0xFF))+1) % 8)))) || (((((class )) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (class ), m " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1065, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1063 Perl_ck_warner_d(aTHX_ packWARN(class), \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1065, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((class )) & 0xFF))+1) / 8)] & (1 <<
((2*((((class )) & 0xFF))+1) % 8)))) || (((((class )) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>8) & 0xFF))+1) % 8
)))) || (((((class )) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((class )) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*(((((class ))
>>16) & 0xFF))+1) % 8)))) || (((((class )) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (class ), m " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1065, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1064 m REPORT_LOCATION, \do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1065, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((class )) & 0xFF))+1) / 8)] & (1 <<
((2*((((class )) & 0xFF))+1) % 8)))) || (((((class )) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>8) & 0xFF))+1) % 8
)))) || (((((class )) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((class )) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*(((((class ))
>>16) & 0xFF))+1) % 8)))) || (((((class )) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (class ), m " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1065, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
1065 REPORT_LOCATION_ARGS(loc)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 1065, loc); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((class )) & 0xFF))+1) / 8)] & (1 <<
((2*((((class )) & 0xFF))+1) % 8)))) || (((((class )) >>
8) & 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>8) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>8) & 0xFF))+1) % 8
)))) || (((((class )) >>16) & 0xFF) && ((((
(U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((class )) >>
16) & 0xFF))+1) / 8)] & (1 << ((2*(((((class ))
>>16) & 0xFF))+1) % 8)))) || (((((class )) >>
24) & 0xFF) && ((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((class )) >>24) & 0xFF))+1) / 8)] &
(1 << ((2*(((((class )) >>24) & 0xFF))+1) % 8
)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (class ), m " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(loc - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start))) - (pRExC_state->precomp)) >=
0) ? (((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 1065, (IV) (((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) -
(pRExC_state->precomp)), ((int) ((pRExC_state->end) - (
pRExC_state->start))), (pRExC_state->start)), 0))), (void
*)((pRExC_state->precomp)), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))), (void*)((((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (loc - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (loc -
(pRExC_state->copy_start)))) - (pRExC_state->precomp))
> (ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (
pRExC_state->latest_warn_offset ) = ((((pRExC_state->precomp
))>(((((pRExC_state->precomp_end))<(((pRExC_state->
copy_start_in_input) + (loc - (pRExC_state->copy_start))))
)?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start)))))))?((pRExC_state->
precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (loc - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (loc - (pRExC_state->copy_start))))))) - (pRExC_state->
precomp); } } while (0); } } while (0)
;\
1066 } \
1067 } STMT_ENDwhile (0)
1068
1069/* Convert between a pointer to a node and its offset from the beginning of the
1070 * program */
1071#define REGNODE_p(offset)((pRExC_state->emit_start) + (offset)) (RExC_emit_start(pRExC_state->emit_start) + (offset))
1072#define REGNODE_OFFSET(node)((node) - (pRExC_state->emit_start)) ((node) - RExC_emit_start(pRExC_state->emit_start))
1073
1074/* Macros for recording node offsets. 20001227 mjd@plover.com
1075 * Nodes are numbered 1, 2, 3, 4. Node #n's position is recorded in
1076 * element 2*n-1 of the array. Element #2n holds the byte length node #n.
1077 * Element 0 holds the number n.
1078 * Position is 1 indexed.
1079 */
1080#ifndef RE_TRACK_PATTERN_OFFSETS
1081#define Set_Node_Offset_To_R(offset,byte)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1081, (int
)(offset), (int)(byte));} while (0); if((offset) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(offset)); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(offset)-1] = (byte
); } } while (0)
1082#define Set_Node_Offset(node,byte)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1082, (int
)(((node) - (pRExC_state->emit_start))), (int)((byte)-(pRExC_state
->start)));} while (0); if((((node) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))-1] = ((byte)-(pRExC_state->start)); } }
while (0)
1083#define Set_Cur_Node_Offsetdo { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1083, (int
)((((pRExC_state->emit)) - (pRExC_state->emit_start))),
(int)(((pRExC_state->parse))-(pRExC_state->start)));} while
(0); if(((((pRExC_state->emit)) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)((((pRExC_state->emit)) - (pRExC_state->emit_start
)))); } else { ((pRExC_state->rxi)->u.offsets)[2*((((pRExC_state
->emit)) - (pRExC_state->emit_start)))-1] = (((pRExC_state
->parse))-(pRExC_state->start)); } } while (0)
1084#define Set_Node_Length_To_R(node,len)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1084, (int)
(node), (int)(len));} while (0); if((node) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(node)); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(node)] = (len); }
} while (0)
1085#define Set_Node_Length(node,len)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1085, (int)
(((node) - (pRExC_state->emit_start))), (int)(len));} while
(0); if((((node) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(((node) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((node) - (pRExC_state->emit_start)))] = (len); } } while
(0)
1086#define Set_Node_Cur_Length(node,start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1086, (int)
(((node) - (pRExC_state->emit_start))), (int)((pRExC_state
->parse) - start));} while (0); if((((node) - (pRExC_state
->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - start); } } while
(0)
1087#define Node_Offset(n)(((pRExC_state->rxi)->u.offsets)[2*(((n) - (pRExC_state
->emit_start)))-1])
1088#define Node_Length(n)(((pRExC_state->rxi)->u.offsets)[2*(((n) - (pRExC_state
->emit_start)))])
1089#define Set_Node_Offset_Length(node,offset,len)do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 1089, (int
)(((node) - (pRExC_state->emit_start))), (int)((offset)));
} while (0); if((((node) - (pRExC_state->emit_start))) <
0) { Perl_croak( "value of node is %d in Offset macro", (int
)(((node) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((node) - (pRExC_state->emit_start
)))-1] = ((offset)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 1089, (int)(((node) - (pRExC_state->emit_start))), (int)
((len)));} while (0); if((((node) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))] = ((len)); } } while (0); } while (0)
1090#define ProgLen(ri)ri->u.offsets[0] ri->u.proglen
1091#define SetProgLen(ri,x)ri->u.offsets[0] = x ri->u.proglen = x
1092#define Track_Code(code)do { code } while (0)
1093#else
1094#define ProgLen(ri)ri->u.offsets[0] ri->u.offsets[0]
1095#define SetProgLen(ri,x)ri->u.offsets[0] = x ri->u.offsets[0] = x
1096#define Set_Node_Offset_To_R(offset,byte)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1096, (int
)(offset), (int)(byte));} while (0); if((offset) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(offset)); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(offset)-1] = (byte
); } } while (0)
STMT_STARTdo { \
1097 MJD_OFFSET_DEBUG(("** (%d) offset of node %d is %d.\n", \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 1098, (int)(offset), (
int)(byte));} while (0)
1098 __LINE__, (int)(offset), (int)(byte)))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 1098, (int)(offset), (
int)(byte));} while (0)
; \
1099 if((offset) < 0) { \
1100 Perl_croak(aTHX_ "value of node is %d in Offset macro", \
1101 (int)(offset)); \
1102 } else { \
1103 RExC_offsets((pRExC_state->rxi)->u.offsets)[2*(offset)-1] = (byte); \
1104 } \
1105} STMT_ENDwhile (0)
1106
1107#define Set_Node_Offset(node,byte)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1107, (int
)(((node) - (pRExC_state->emit_start))), (int)((byte)-(pRExC_state
->start)));} while (0); if((((node) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))-1] = ((byte)-(pRExC_state->start)); } }
while (0)
\
1108 Set_Node_Offset_To_R(REGNODE_OFFSET(node), (byte)-RExC_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1108, (int
)(((node) - (pRExC_state->emit_start))), (int)((byte)-(pRExC_state
->start)));} while (0); if((((node) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))-1] = ((byte)-(pRExC_state->start)); } }
while (0)
1109#define Set_Cur_Node_Offsetdo { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1109, (int
)((((pRExC_state->emit)) - (pRExC_state->emit_start))),
(int)(((pRExC_state->parse))-(pRExC_state->start)));} while
(0); if(((((pRExC_state->emit)) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)((((pRExC_state->emit)) - (pRExC_state->emit_start
)))); } else { ((pRExC_state->rxi)->u.offsets)[2*((((pRExC_state
->emit)) - (pRExC_state->emit_start)))-1] = (((pRExC_state
->parse))-(pRExC_state->start)); } } while (0)
Set_Node_Offset(RExC_emit, RExC_parse)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1109, (int
)((((pRExC_state->emit)) - (pRExC_state->emit_start))),
(int)(((pRExC_state->parse))-(pRExC_state->start)));} while
(0); if(((((pRExC_state->emit)) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)((((pRExC_state->emit)) - (pRExC_state->emit_start
)))); } else { ((pRExC_state->rxi)->u.offsets)[2*((((pRExC_state
->emit)) - (pRExC_state->emit_start)))-1] = (((pRExC_state
->parse))-(pRExC_state->start)); } } while (0)
1110
1111#define Set_Node_Length_To_R(node,len)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1111, (int)
(node), (int)(len));} while (0); if((node) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(node)); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(node)] = (len); }
} while (0)
STMT_STARTdo { \
1112 MJD_OFFSET_DEBUG(("** (%d) size of node %d is %d.\n", \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 1113, (int)(node), (int
)(len));} while (0)
1113 __LINE__, (int)(node), (int)(len)))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 1113, (int)(node), (int
)(len));} while (0)
; \
1114 if((node) < 0) { \
1115 Perl_croak(aTHX_ "value of node is %d in Length macro", \
1116 (int)(node)); \
1117 } else { \
1118 RExC_offsets((pRExC_state->rxi)->u.offsets)[2*(node)] = (len); \
1119 } \
1120} STMT_ENDwhile (0)
1121
1122#define Set_Node_Length(node,len)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1122, (int)
(((node) - (pRExC_state->emit_start))), (int)(len));} while
(0); if((((node) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(((node) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((node) - (pRExC_state->emit_start)))] = (len); } } while
(0)
\
1123 Set_Node_Length_To_R(REGNODE_OFFSET(node), len)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1123, (int)
(((node) - (pRExC_state->emit_start))), (int)(len));} while
(0); if((((node) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(((node) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((node) - (pRExC_state->emit_start)))] = (len); } } while
(0)
1124#define Set_Node_Cur_Length(node, start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1124, (int)
(((node) - (pRExC_state->emit_start))), (int)((pRExC_state
->parse) - start));} while (0); if((((node) - (pRExC_state
->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - start); } } while
(0)
\
1125 Set_Node_Length(node, RExC_parse - start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1125, (int)
(((node) - (pRExC_state->emit_start))), (int)((pRExC_state
->parse) - start));} while (0); if((((node) - (pRExC_state
->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - start); } } while
(0)
1126
1127/* Get offsets and lengths */
1128#define Node_Offset(n)(((pRExC_state->rxi)->u.offsets)[2*(((n) - (pRExC_state
->emit_start)))-1])
(RExC_offsets((pRExC_state->rxi)->u.offsets)[2*(REGNODE_OFFSET(n)((n) - (pRExC_state->emit_start)))-1])
1129#define Node_Length(n)(((pRExC_state->rxi)->u.offsets)[2*(((n) - (pRExC_state
->emit_start)))])
(RExC_offsets((pRExC_state->rxi)->u.offsets)[2*(REGNODE_OFFSET(n)((n) - (pRExC_state->emit_start)))])
1130
1131#define Set_Node_Offset_Length(node,offset,len)do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 1131, (int
)(((node) - (pRExC_state->emit_start))), (int)((offset)));
} while (0); if((((node) - (pRExC_state->emit_start))) <
0) { Perl_croak( "value of node is %d in Offset macro", (int
)(((node) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((node) - (pRExC_state->emit_start
)))-1] = ((offset)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 1131, (int)(((node) - (pRExC_state->emit_start))), (int)
((len)));} while (0); if((((node) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((node) - (pRExC_state->emit_start)))); } else { (
(pRExC_state->rxi)->u.offsets)[2*(((node) - (pRExC_state
->emit_start)))] = ((len)); } } while (0); } while (0)
STMT_STARTdo { \
1132 Set_Node_Offset_To_R(REGNODE_OFFSET(node), (offset))do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 1132, (int
)(((node) - (pRExC_state->emit_start))), (int)((offset)));
} while (0); if((((node) - (pRExC_state->emit_start))) <
0) { Perl_croak( "value of node is %d in Offset macro", (int
)(((node) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((node) - (pRExC_state->emit_start
)))-1] = ((offset)); } } while (0)
; \
1133 Set_Node_Length_To_R(REGNODE_OFFSET(node), (len))do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 1133, (int)
(((node) - (pRExC_state->emit_start))), (int)((len)));} while
(0); if((((node) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(((node) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((node) - (pRExC_state->emit_start)))] = ((len)); } }
while (0)
; \
1134} STMT_ENDwhile (0)
1135
1136#define Track_Code(code)do { code } while (0) STMT_STARTdo { code } STMT_ENDwhile (0)
1137#endif
1138
1139#if PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS0
1140#define EXPERIMENTAL_INPLACESCAN
1141#endif /*PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS*/
1142
1143#ifdef DEBUGGING
1144int
1145Perl_re_printf(pTHX_ const char *fmt, ...)
1146{
1147 va_list ap;
1148 int result;
1149 PerlIOPerlIO *f= Perl_debug_logPerl_PerlIO_stderr();
1150 PERL_ARGS_ASSERT_RE_PRINTF((fmt) ? (void)0 : __assert2("re_comp.c", 1150, __func__, "fmt"
))
;
1151 va_start(ap, fmt)__builtin_va_start(ap, fmt);
1152 result = PerlIO_vprintf(f, fmt, ap);
1153 va_end(ap)__builtin_va_end(ap);
1154 return result;
1155}
1156
1157int
1158Perl_re_indentf(pTHX_ const char *fmt, U32 depth, ...)
1159{
1160 va_list ap;
1161 int result;
1162 PerlIOPerlIO *f= Perl_debug_logPerl_PerlIO_stderr();
1163 PERL_ARGS_ASSERT_RE_INDENTF((fmt) ? (void)0 : __assert2("re_comp.c", 1163, __func__, "fmt"
))
;
1164 va_start(ap, depth)__builtin_va_start(ap, depth);
1165 PerlIO_printf(f, "%*s", ( (int)depth % 20 ) * 2, "");
1166 result = PerlIO_vprintf(f, fmt, ap);
1167 va_end(ap)__builtin_va_end(ap);
1168 return result;
1169}
1170#endif /* DEBUGGING */
1171
1172#define DEBUG_RExC_seen()do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);
\
1173 DEBUG_OPTIMISE_MORE_r({ \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1174 Perl_re_printf( aTHX_ "RExC_seen: "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1175 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1176 if (RExC_seen & REG_ZERO_LEN_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1177 Perl_re_printf( aTHX_ "REG_ZERO_LEN_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1178 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1179 if (RExC_seen & REG_LOOKBEHIND_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1180 Perl_re_printf( aTHX_ "REG_LOOKBEHIND_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1181 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1182 if (RExC_seen & REG_GPOS_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1183 Perl_re_printf( aTHX_ "REG_GPOS_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1184 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1185 if (RExC_seen & REG_RECURSE_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1186 Perl_re_printf( aTHX_ "REG_RECURSE_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1187 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1188 if (RExC_seen & REG_TOP_LEVEL_BRANCHES_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1189 Perl_re_printf( aTHX_ "REG_TOP_LEVEL_BRANCHES_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1190 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1191 if (RExC_seen & REG_VERBARG_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1192 Perl_re_printf( aTHX_ "REG_VERBARG_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1193 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1194 if (RExC_seen & REG_CUTGROUP_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1195 Perl_re_printf( aTHX_ "REG_CUTGROUP_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1196 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1197 if (RExC_seen & REG_RUN_ON_COMMENT_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1198 Perl_re_printf( aTHX_ "REG_RUN_ON_COMMENT_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1199 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1200 if (RExC_seen & REG_UNFOLDED_MULTI_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1201 Perl_re_printf( aTHX_ "REG_UNFOLDED_MULTI_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1202 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1203 if (RExC_seen & REG_UNBOUNDED_QUANTIFIER_SEEN) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1204 Perl_re_printf( aTHX_ "REG_UNBOUNDED_QUANTIFIER_SEEN "); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1205 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1206 Perl_re_printf( aTHX_ "\n"); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
1207 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0)
;
1208
1209#define DEBUG_SHOW_STUDY_FLAG(flags,flag)if ((flags) & flag) Perl_re_printf( "%s ", "flag") \
1210 if ((flags) & flag) Perl_re_printf( aTHX_ "%s ", #flag)
1211
1212
1213#ifdef DEBUGGING
1214static void
1215S_debug_show_study_flags(pTHX_ U32 flags, const char *open_str,
1216 const char *close_str)
1217{
1218 if (!flags)
1219 return;
1220
1221 Perl_re_printf( aTHX_ "%s", open_str);
1222 DEBUG_SHOW_STUDY_FLAG(flags, SF_BEFORE_SEOL)if ((flags) & 0x0001) Perl_re_printf( "%s ", "SF_BEFORE_SEOL"
)
;
1223 DEBUG_SHOW_STUDY_FLAG(flags, SF_BEFORE_MEOL)if ((flags) & 0x0002) Perl_re_printf( "%s ", "SF_BEFORE_MEOL"
)
;
1224 DEBUG_SHOW_STUDY_FLAG(flags, SF_IS_INF)if ((flags) & 0x0040) Perl_re_printf( "%s ", "SF_IS_INF");
1225 DEBUG_SHOW_STUDY_FLAG(flags, SF_HAS_PAR)if ((flags) & 0x0080) Perl_re_printf( "%s ", "SF_HAS_PAR"
)
;
1226 DEBUG_SHOW_STUDY_FLAG(flags, SF_IN_PAR)if ((flags) & 0x0100) Perl_re_printf( "%s ", "SF_IN_PAR");
1227 DEBUG_SHOW_STUDY_FLAG(flags, SF_HAS_EVAL)if ((flags) & 0x0200) Perl_re_printf( "%s ", "SF_HAS_EVAL"
)
;
1228 DEBUG_SHOW_STUDY_FLAG(flags, SCF_DO_SUBSTR)if ((flags) & 0x0400) Perl_re_printf( "%s ", "SCF_DO_SUBSTR"
)
;
1229 DEBUG_SHOW_STUDY_FLAG(flags, SCF_DO_STCLASS_AND)if ((flags) & 0x0800) Perl_re_printf( "%s ", "SCF_DO_STCLASS_AND"
)
;
1230 DEBUG_SHOW_STUDY_FLAG(flags, SCF_DO_STCLASS_OR)if ((flags) & 0x1000) Perl_re_printf( "%s ", "SCF_DO_STCLASS_OR"
)
;
1231 DEBUG_SHOW_STUDY_FLAG(flags, SCF_DO_STCLASS)if ((flags) & (0x0800|0x1000)) Perl_re_printf( "%s ", "SCF_DO_STCLASS"
)
;
1232 DEBUG_SHOW_STUDY_FLAG(flags, SCF_WHILEM_VISITED_POS)if ((flags) & 0x2000) Perl_re_printf( "%s ", "SCF_WHILEM_VISITED_POS"
)
;
1233 DEBUG_SHOW_STUDY_FLAG(flags, SCF_TRIE_RESTUDY)if ((flags) & 0x4000) Perl_re_printf( "%s ", "SCF_TRIE_RESTUDY"
)
;
1234 DEBUG_SHOW_STUDY_FLAG(flags, SCF_SEEN_ACCEPT)if ((flags) & 0x8000) Perl_re_printf( "%s ", "SCF_SEEN_ACCEPT"
)
;
1235 DEBUG_SHOW_STUDY_FLAG(flags, SCF_TRIE_DOING_RESTUDY)if ((flags) & 0x10000) Perl_re_printf( "%s ", "SCF_TRIE_DOING_RESTUDY"
)
;
1236 DEBUG_SHOW_STUDY_FLAG(flags, SCF_IN_DEFINE)if ((flags) & 0x20000) Perl_re_printf( "%s ", "SCF_IN_DEFINE"
)
;
1237 Perl_re_printf( aTHX_ "%s", close_str);
1238}
1239
1240
1241static void
1242S_debug_studydata(pTHX_ const char *where, scan_data_t *data,
1243 U32 depth, int is_inf)
1244{
1245 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 1245, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 1245, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
1246
1247 DEBUG_OPTIMISE_MORE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1248 if (!data)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1249 return;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1250 Perl_re_indentf(aTHX_ "%s: Pos:%" IVdf "/%" IVdf " Flags: 0x%" UVXf,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1251 depth,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1252 where,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1253 (IV)data->pos_min,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1254 (IV)data->pos_delta,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1255 (UV)data->flagsdo {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1256 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1257
1258 S_debug_show_study_flags(aTHX_ data->flags," [","]");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1259
1260 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1261 " Whilem_c: %" IVdf " Lcp: %" IVdf " %s",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1262 (IV)data->whilem_c,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1263 (IV)(data->last_closep ? *((data)->last_closep) : -1),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1264 is_inf ? "INF " : ""do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1265 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1266
1267 if (data->last_found) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1268 int i;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1269 Perl_re_printf(aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1270 "Last:'%s' %" IVdf ":%" IVdf "/%" IVdf,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1271 SvPVX_const(data->last_found),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1272 (IV)data->last_end,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1273 (IV)data->last_start_min,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1274 (IV)data->last_start_maxdo {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1275 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1276
1277 for (i = 0; i < 2; i++) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1278 Perl_re_printf(aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1279 " %s%s: '%s' @ %" IVdf "/%" IVdf,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1280 data->cur_is_floating == i ? "*" : "",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1281 i ? "Float" : "Fixed",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1282 SvPVX_const(data->substrs[i].str),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1283 (IV)data->substrs[i].min_offset,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1284 (IV)data->substrs[i].max_offsetdo {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1285 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1286 S_debug_show_study_flags(aTHX_ data->substrs[i].flags," [","]");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1287 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1288 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1289
1290 Perl_re_printf( aTHX_ "\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
1291 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { if (!data) return; Perl_re_indentf
( "%s: Pos:%" "ld" "/%" "ld" " Flags: 0x%" "lX", depth, where
, (IV)data->pos_min, (IV)data->pos_delta, (UV)data->
flags ); S_debug_show_study_flags( data->flags," [","]"); Perl_re_printf
( " Whilem_c: %" "ld" " Lcp: %" "ld" " %s", (IV)data->whilem_c
, (IV)(data->last_closep ? *((data)->last_closep) : -1)
, is_inf ? "INF " : "" ); if (data->last_found) { int i; Perl_re_printf
( "Last:'%s' %" "ld" ":%" "ld" "/%" "ld", ((const char*)(0 + (
data->last_found)->sv_u.svu_pv)), (IV)data->last_end
, (IV)data->last_start_min, (IV)data->last_start_max );
for (i = 0; i < 2; i++) { Perl_re_printf( " %s%s: '%s' @ %"
"ld" "/%" "ld", data->cur_is_floating == i ? "*" : "", i ?
"Float" : "Fixed", ((const char*)(0 + (data->substrs[i].str
)->sv_u.svu_pv)), (IV)data->substrs[i].min_offset, (IV)
data->substrs[i].max_offset ); S_debug_show_study_flags( data
->substrs[i].flags," [","]"); } } Perl_re_printf( "\n"); }
;} while (0)
;
1292}
1293
1294
1295static void
1296S_debug_peep(pTHX_ const char *str, const RExC_state_t *pRExC_state,
1297 regnode *scan, U32 depth, U32 flags)
1298{
1299 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 1299, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 1299, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
1300
1301 DEBUG_OPTIMISE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1302 regnode *Next;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1303
1304 if (!scan)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1305 return;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1306 Next = regnext(scan);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1307 regprop(RExC_rx, RExC_mysv, scan, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1308 Perl_re_indentf( aTHX_ "%s>%3d: %s (%d)",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1309 depth,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1310 str,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1311 REG_NODE_NUM(scan), SvPV_nolen_const(RExC_mysv),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1312 Next ? (REG_NODE_NUM(Next)) : 0 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1313 S_debug_show_study_flags(aTHX_ flags," [ ","]");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1314 Perl_re_printf( aTHX_ "\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
1315 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { regnode
*Next; if (!scan) return; Next = Perl_regnext( scan); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),scan,((void*)0
),pRExC_state); Perl_re_indentf( "%s>%3d: %s (%d)", depth,
str, ((scan) ? (int)((scan)-(pRExC_state->emit_start)) : -
1), (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), Next ? (((Next) ? (int)((Next)-(pRExC_state
->emit_start)) : -1)) : 0 ); S_debug_show_study_flags( flags
," [ ","]"); Perl_re_printf( "\n"); };} while (0)
;
1316}
1317
1318
1319# define DEBUG_STUDYDATA(where, data, depth, is_inf)S_debug_studydata( where, data, depth, is_inf) \
1320 S_debug_studydata(aTHX_ where, data, depth, is_inf)
1321
1322# define DEBUG_PEEP(str, scan, depth, flags)S_debug_peep( str, pRExC_state, scan, depth, flags) \
1323 S_debug_peep(aTHX_ str, pRExC_state, scan, depth, flags)
1324
1325#else
1326# define DEBUG_STUDYDATA(where, data, depth, is_inf)S_debug_studydata( where, data, depth, is_inf) NOOP(void)0
1327# define DEBUG_PEEP(str, scan, depth, flags)S_debug_peep( str, pRExC_state, scan, depth, flags) NOOP(void)0
1328#endif
1329
1330
1331/* =========================================================
1332 * BEGIN edit_distance stuff.
1333 *
1334 * This calculates how many single character changes of any type are needed to
1335 * transform a string into another one. It is taken from version 3.1 of
1336 *
1337 * https://metacpan.org/pod/Text::Levenshtein::Damerau::XS
1338 */
1339
1340/* Our unsorted dictionary linked list. */
1341/* Note we use UVs, not chars. */
1342
1343struct dictionary{
1344 UV key;
1345 UV value;
1346 struct dictionary* next;
1347};
1348typedef struct dictionary item;
1349
1350
1351PERL_STATIC_INLINEstatic __inline__ item*
1352push(UV key, item* curr)
1353{
1354 item* head;
1355 Newx(head, 1, item)(head = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(1) || sizeof(item) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof(item)) >
((size_t)-1)/sizeof(item))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), (item*)(Perl_safesysmalloc((size_t
)((1)*sizeof(item))))))
;
1356 head->key = key;
1357 head->value = 0;
1358 head->next = curr;
1359 return head;
1360}
1361
1362
1363PERL_STATIC_INLINEstatic __inline__ item*
1364find(item* head, UV key)
1365{
1366 item* iterator = head;
1367 while (iterator){
1368 if (iterator->key == key){
1369 return iterator;
1370 }
1371 iterator = iterator->next;
1372 }
1373
1374 return NULL((void*)0);
1375}
1376
1377PERL_STATIC_INLINEstatic __inline__ item*
1378uniquePush(item* head, UV key)
1379{
1380 item* iterator = head;
1381
1382 while (iterator){
1383 if (iterator->key == key) {
1384 return head;
1385 }
1386 iterator = iterator->next;
1387 }
1388
1389 return push(key, head);
1390}
1391
1392PERL_STATIC_INLINEstatic __inline__ void
1393dict_free(item* head)
1394{
1395 item* iterator = head;
1396
1397 while (iterator) {
1398 item* temp = iterator;
1399 iterator = iterator->next;
1400 Safefree(temp)Perl_safesysfree(((void *)(temp)));
1401 }
1402
1403 head = NULL((void*)0);
1404}
1405
1406/* End of Dictionary Stuff */
1407
1408/* All calculations/work are done here */
1409STATICstatic int
1410S_edit_distance(const UV* src,
1411 const UV* tgt,
1412 const STRLEN x, /* length of src[] */
1413 const STRLEN y, /* length of tgt[] */
1414 const SSize_tssize_t maxDistance
1415)
1416{
1417 item *head = NULL((void*)0);
1418 UV swapCount, swapScore, targetCharCount, i, j;
1419 UV *scores;
1420 UV score_ceil = x + y;
1421
1422 PERL_ARGS_ASSERT_EDIT_DISTANCE((src) ? (void)0 : __assert2("re_comp.c", 1422, __func__, "src"
)); ((tgt) ? (void)0 : __assert2("re_comp.c", 1422, __func__,
"tgt"))
;
1423
1424 /* intialize matrix start values */
1425 Newx(scores, ( (x + 2) * (y + 2)), UV)(scores = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(( (x + 2) * (y + 2))) || sizeof(UV) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(( (x + 2) * (y + 2)))))) ? (size_t
)(( (x + 2) * (y + 2))) : ((size_t)-1)/sizeof(UV)) > ((size_t
)-1)/sizeof(UV))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (UV*)(Perl_safesysmalloc((size_t)((( (x + 2) * (y + 2
)))*sizeof(UV))))))
;
1426 scores[0] = score_ceil;
1427 scores[1 * (y + 2) + 0] = score_ceil;
1428 scores[0 * (y + 2) + 1] = score_ceil;
1429 scores[1 * (y + 2) + 1] = 0;
1430 head = uniquePush(uniquePush(head, src[0]), tgt[0]);
1431
1432 /* work loops */
1433 /* i = src index */
1434 /* j = tgt index */
1435 for (i=1;i<=x;i++) {
1436 if (i < x)
1437 head = uniquePush(head, src[i]);
1438 scores[(i+1) * (y + 2) + 1] = i;
1439 scores[(i+1) * (y + 2) + 0] = score_ceil;
1440 swapCount = 0;
1441
1442 for (j=1;j<=y;j++) {
1443 if (i == 1) {
1444 if(j < y)
1445 head = uniquePush(head, tgt[j]);
1446 scores[1 * (y + 2) + (j + 1)] = j;
1447 scores[0 * (y + 2) + (j + 1)] = score_ceil;
1448 }
1449
1450 targetCharCount = find(head, tgt[j-1])->value;
1451 swapScore = scores[targetCharCount * (y + 2) + swapCount] + i - targetCharCount - 1 + j - swapCount;
1452
1453 if (src[i-1] != tgt[j-1]){
1454 scores[(i+1) * (y + 2) + (j + 1)] = MIN(swapScore,(MIN(scores[i * (y + 2) + j], MIN(scores[(i+1) * (y + 2) + j], scores[i * (y + 2) + (j + 1)])) + 1))(((swapScore)<(((((scores[i * (y + 2) + j])<((((scores[
(i+1) * (y + 2) + j])<(scores[i * (y + 2) + (j + 1)]))?(scores
[(i+1) * (y + 2) + j]):(scores[i * (y + 2) + (j + 1)]))))?(scores
[i * (y + 2) + j]):((((scores[(i+1) * (y + 2) + j])<(scores
[i * (y + 2) + (j + 1)]))?(scores[(i+1) * (y + 2) + j]):(scores
[i * (y + 2) + (j + 1)])))) + 1)))?(swapScore):(((((scores[i *
(y + 2) + j])<((((scores[(i+1) * (y + 2) + j])<(scores
[i * (y + 2) + (j + 1)]))?(scores[(i+1) * (y + 2) + j]):(scores
[i * (y + 2) + (j + 1)]))))?(scores[i * (y + 2) + j]):((((scores
[(i+1) * (y + 2) + j])<(scores[i * (y + 2) + (j + 1)]))?(scores
[(i+1) * (y + 2) + j]):(scores[i * (y + 2) + (j + 1)])))) + 1
)))
;
1455 }
1456 else {
1457 swapCount = j;
1458 scores[(i+1) * (y + 2) + (j + 1)] = MIN(scores[i * (y + 2) + j], swapScore)(((scores[i * (y + 2) + j])<(swapScore))?(scores[i * (y + 2
) + j]):(swapScore))
;
1459 }
1460 }
1461
1462 find(head, src[i-1])->value = i;
1463 }
1464
1465 {
1466 IV score = scores[(x+1) * (y + 2) + (y + 1)];
1467 dict_free(head);
1468 Safefree(scores)Perl_safesysfree(((void *)(scores)));
1469 return (maxDistance != 0 && maxDistance < score)?(-1):score;
1470 }
1471}
1472
1473/* END of edit_distance() stuff
1474 * ========================================================= */
1475
1476/* Mark that we cannot extend a found fixed substring at this point.
1477 Update the longest found anchored substring or the longest found
1478 floating substrings if needed. */
1479
1480STATICstatic void
1481S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, scan_data_t *data,
1482 SSize_tssize_t *minlenp, int is_inf)
1483{
1484 const STRLEN l = CHR_SVLEN(data->last_found)((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? Perl_sv_len_utf8
( data->last_found) : (*({ const SV *const _svcur = (const
SV *)(data->last_found); ((PL_valid_types_PVX[((svtype)((
_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 1484, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 1484, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 1484, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })))
;
1485 SV * const longest_sv = data->substrs[data->cur_is_floating].str;
1486 const STRLEN old_l = CHR_SVLEN(longest_sv)((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? Perl_sv_len_utf8
( longest_sv) : (*({ const SV *const _svcur = (const SV *)(longest_sv
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 1486,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 1486, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 1486, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })))
;
1487 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 1487, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 1487, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
1488
1489 PERL_ARGS_ASSERT_SCAN_COMMIT((pRExC_state) ? (void)0 : __assert2("re_comp.c", 1489, __func__
, "pRExC_state")); ((data) ? (void)0 : __assert2("re_comp.c",
1489, __func__, "data")); ((minlenp) ? (void)0 : __assert2("re_comp.c"
, 1489, __func__, "minlenp"))
;
1490
1491 if ((l >= old_l) && ((l > old_l) || (data->flags & SF_BEFORE_EOL(0x0001|0x0002)))) {
1492 const U8 i = data->cur_is_floating;
1493 SvSetMagicSV(longest_sv, data->last_found)do { if (__builtin_expect((((longest_sv) != (data->last_found
)) ? (_Bool)1 : (_Bool)0),(1))) { Perl_sv_setsv_flags( longest_sv
,data->last_found,2|0); do { if (__builtin_expect(((((longest_sv
)->sv_flags & 0x00400000)) ? (_Bool)1 : (_Bool)0),(0))
) Perl_mg_set( longest_sv); } while (0); } } while (0)
;
1494 data->substrs[i].min_offset = l ? data->last_start_min : data->pos_min;
1495
1496 if (!i) /* fixed */
1497 data->substrs[0].max_offset = data->substrs[0].min_offset;
1498 else { /* float */
1499 data->substrs[1].max_offset =
1500 (is_inf)
1501 ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
1502 : (l
1503 ? data->last_start_max
1504 /* temporary underflow guard for 5.32 */
1505 : data->pos_delta < 0 ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
1506 : (data->pos_delta > OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - data->pos_min
1507 ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
1508 : data->pos_min + data->pos_delta));
1509 }
1510
1511 data->substrs[i].flags &= ~SF_BEFORE_EOL(0x0001|0x0002);
1512 data->substrs[i].flags |= data->flags & SF_BEFORE_EOL(0x0001|0x0002);
1513 data->substrs[i].minlenp = minlenp;
1514 data->substrs[i].lookbehind = 0;
1515 }
1516
1517 SvCUR_set(data->last_found, 0)do { ((PL_valid_types_PVX[((svtype)((data->last_found)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 1517, __func__, "PL_valid_types_PVX[SvTYPE(data->last_found) & SVt_MASK]"
)); ((!((((data->last_found)->sv_flags & (0x00004000
|0x00008000)) == 0x00008000) && (((svtype)((data->
last_found)->sv_flags & 0xff)) == SVt_PVGV || ((svtype
)((data->last_found)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 1517, __func__, "!isGV_with_GP(data->last_found)"
)); ((!(((svtype)((data->last_found)->sv_flags & 0xff
)) == SVt_PVIO && !(((XPVIO*) (data->last_found)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 1517, __func__, "!(SvTYPE(data->last_found) == SVt_PVIO && !(IoFLAGS(data->last_found) & IOf_FAKE_DIRP))"
)); (((XPV*) (data->last_found)->sv_any)->xpv_cur = (
0)); } while (0)
;
1518 {
1519 SV * const sv = data->last_found;
1520 if (SvUTF8(sv)((sv)->sv_flags & 0x20000000) && SvMAGICAL(sv)((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))) {
1521 MAGIC * const mg = mg_findPerl_mg_find(sv, PERL_MAGIC_utf8'w');
1522 if (mg)
1523 mg->mg_len = 0;
1524 }
1525 }
1526 data->last_end = -1;
1527 data->flags &= ~SF_BEFORE_EOL(0x0001|0x0002);
1528 DEBUG_STUDYDATA("commit", data, 0, is_inf)S_debug_studydata( "commit", data, 0, is_inf);
1529}
1530
1531/* An SSC is just a regnode_charclass_posix with an extra field: the inversion
1532 * list that describes which code points it matches */
1533
1534STATICstatic void
1535S_ssc_anything(pTHX_ regnode_ssc *ssc)
1536{
1537 /* Set the SSC 'ssc' to match an empty string or any code point */
1538
1539 PERL_ARGS_ASSERT_SSC_ANYTHING((ssc) ? (void)0 : __assert2("re_comp.c", 1539, __func__, "ssc"
))
;
1540
1541 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 1541, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
1542
1543 /* mortalize so won't leak */
1544 ssc->invlist = sv_2mortal(_add_range_to_invlist(NULL, 0, UV_MAX))Perl_sv_2mortal( Perl__add_range_to_invlist( ((void*)0),0,(~(
UV)0)))
;
1545 ANYOF_FLAGS(ssc)((ssc)->flags) |= SSC_MATCHES_EMPTY_STRING0x01; /* Plus matches empty */
1546}
1547
1548STATICstatic int
1549S_ssc_is_anything(const regnode_ssc *ssc)
1550{
1551 /* Returns TRUE if the SSC 'ssc' can match the empty string and any code
1552 * point; FALSE otherwise. Thus, this is used to see if using 'ssc' buys
1553 * us anything: if the function returns TRUE, 'ssc' hasn't been restricted
1554 * in any way, so there's no point in using it */
1555
1556 UV start, end;
1557 bool_Bool ret;
1558
1559 PERL_ARGS_ASSERT_SSC_IS_ANYTHING((ssc) ? (void)0 : __assert2("re_comp.c", 1559, __func__, "ssc"
))
;
1560
1561 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 1561, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
1562
1563 if (! (ANYOF_FLAGS(ssc)((ssc)->flags) & SSC_MATCHES_EMPTY_STRING0x01)) {
1564 return FALSE(0);
1565 }
1566
1567 /* See if the list consists solely of the range 0 - Infinity */
1568 invlist_iterinitS_invlist_iterinit(ssc->invlist);
1569 ret = invlist_iternextS_invlist_iternext(ssc->invlist, &start, &end)
1570 && start == 0
1571 && end == UV_MAX(~(UV)0);
1572
1573 invlist_iterfinishS_invlist_iterfinish(ssc->invlist);
1574
1575 if (ret) {
1576 return TRUE(1);
1577 }
1578
1579 /* If e.g., both \w and \W are set, matches everything */
1580 if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)((((regnode_ssc*)(ssc))->classflags) ? (_Bool)1 : (_Bool)0
)
) {
1581 int i;
1582 for (i = 0; i < ANYOF_POSIXL_MAX(((15) * 2)); i += 2) {
1583 if (ANYOF_POSIXL_TEST(ssc, i)((((regnode_charclass_posixl*) (ssc))->classflags) & (
1U << ((i))))
&& ANYOF_POSIXL_TEST(ssc, i+1)((((regnode_charclass_posixl*) (ssc))->classflags) & (
1U << ((i+1))))
) {
1584 return TRUE(1);
1585 }
1586 }
1587 }
1588
1589 return FALSE(0);
1590}
1591
1592STATICstatic void
1593S_ssc_init(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc)
1594{
1595 /* Initializes the SSC 'ssc'. This includes setting it to match an empty
1596 * string, any code point, or any posix class under locale */
1597
1598 PERL_ARGS_ASSERT_SSC_INIT((pRExC_state) ? (void)0 : __assert2("re_comp.c", 1598, __func__
, "pRExC_state")); ((ssc) ? (void)0 : __assert2("re_comp.c", 1598
, __func__, "ssc"))
;
1599
1600 Zero(ssc, 1, regnode_ssc)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(1) ||
sizeof(regnode_ssc) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof(regnode_ssc
)) > ((size_t)-1)/sizeof(regnode_ssc))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), ((((void*)
(ssc)) != 0) ? (void)0 : __assert2("re_comp.c", 1600, __func__
, "((void*)(ssc)) != 0")), (void)memset((char*)(ssc),0,(1) * sizeof
(regnode_ssc)))
;
1601 set_ANYOF_SYNTHETIC(ssc)do{ ((ssc)->type) = 18; ((ssc)->next_off) = 1; } while (
0)
;
1602 ARG_SET(ssc, ANYOF_ONLY_HAS_BITMAP)(((((struct regnode_1 *)ssc)->arg1)) = ((((U32) -1))));
1603 ssc_anything(ssc)S_ssc_anything( ssc);
1604
1605 /* If any portion of the regex is to operate under locale rules that aren't
1606 * fully known at compile time, initialization includes it. The reason
1607 * this isn't done for all regexes is that the optimizer was written under
1608 * the assumption that locale was all-or-nothing. Given the complexity and
1609 * lack of documentation in the optimizer, and that there are inadequate
1610 * test cases for locale, many parts of it may not work properly, it is
1611 * safest to avoid locale unless necessary. */
1612 if (RExC_contains_locale(pRExC_state->contains_locale)) {
1613 ANYOF_POSIXL_SETALL(ssc)do { ((regnode_charclass_posixl*) (ssc))->classflags = ((1U
<< (((((15) * 2))) - 1))) - 1; } while (0)
;
1614 }
1615 else {
1616 ANYOF_POSIXL_ZERO(ssc)do { (((regnode_charclass_posixl*) (ssc))->classflags) = 0
; } while (0)
;
1617 }
1618}
1619
1620STATICstatic int
1621S_ssc_is_cp_posixl_init(const RExC_state_t *pRExC_state,
1622 const regnode_ssc *ssc)
1623{
1624 /* Returns TRUE if the SSC 'ssc' is in its initial state with regard only
1625 * to the list of code points matched, and locale posix classes; hence does
1626 * not check its flags) */
1627
1628 UV start, end;
1629 bool_Bool ret;
1630
1631 PERL_ARGS_ASSERT_SSC_IS_CP_POSIXL_INIT((pRExC_state) ? (void)0 : __assert2("re_comp.c", 1631, __func__
, "pRExC_state")); ((ssc) ? (void)0 : __assert2("re_comp.c", 1631
, __func__, "ssc"))
;
1632
1633 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 1633, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
1634
1635 invlist_iterinitS_invlist_iterinit(ssc->invlist);
1636 ret = invlist_iternextS_invlist_iternext(ssc->invlist, &start, &end)
1637 && start == 0
1638 && end == UV_MAX(~(UV)0);
1639
1640 invlist_iterfinishS_invlist_iterfinish(ssc->invlist);
1641
1642 if (! ret) {
1643 return FALSE(0);
1644 }
1645
1646 if (RExC_contains_locale(pRExC_state->contains_locale) && ! ANYOF_POSIXL_SSC_TEST_ALL_SET(ssc)(((regnode_ssc*) (ssc))->classflags == ((1U << (((((
15) * 2))) - 1))) - 1)
) {
1647 return FALSE(0);
1648 }
1649
1650 return TRUE(1);
1651}
1652
1653#define INVLIST_INDEX0 0
1654#define ONLY_LOCALE_MATCHES_INDEX1 1
1655#define DEFERRED_USER_DEFINED_INDEX2 2
1656
1657STATICstatic SV*
1658S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
1659 const regnode_charclass* const node)
1660{
1661 /* Returns a mortal inversion list defining which code points are matched
1662 * by 'node', which is of type ANYOF. Handles complementing the result if
1663 * appropriate. If some code points aren't knowable at this time, the
1664 * returned list must, and will, contain every code point that is a
1665 * possibility. */
1666
1667 dVARstruct Perl___notused_struct;
1668 SV* invlist = NULL((void*)0);
1669 SV* only_utf8_locale_invlist = NULL((void*)0);
1670 unsigned int i;
1671 const U32 n = ARG(node)((((struct regnode_1 *)node)->arg1));
1672 bool_Bool new_node_has_latin1 = FALSE(0);
1673 const U8 flags = (inRANGE(OP(node), ANYOFH, ANYOFRb)((((27) >= (22)) ? (void)0 : __assert2("re_comp.c", 1673, __func__
, "(27) >= (22)")), ( (sizeof(((node)->type)) == sizeof
(U8)) ? ((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 1673, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22
))) >= 0) ? (void)0 : __assert2("re_comp.c", 1673, __func__
, "(NV) (((27) - (22))) >= 0")), (((U64) (((((U8) (((node)
->type))))) - (((22)) | 0))) <= (((U64) ((((27) - (22))
) | 0))))) : (sizeof(((node)->type)) == sizeof(U32)) ? (((
(NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c", 1673,
__func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22))) >=
0) ? (void)0 : __assert2("re_comp.c", 1673, __func__, "(NV) (((27) - (22))) >= 0"
)), (((U64) (((((U32) (((node)->type))))) - (((22)) | 0)))
<= (((U64) ((((27) - (22))) | 0))))) : (((sizeof(((node)->
type)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 1673
, __func__, "sizeof(((node)->type)) == sizeof(U64)")), (((
(NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c", 1673,
__func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22))) >=
0) ? (void)0 : __assert2("re_comp.c", 1673, __func__, "(NV) (((27) - (22))) >= 0"
)), (((U64) (((((U64) (((node)->type))))) - (((22)) | 0)))
<= (((U64) ((((27) - (22))) | 0))))))))
)
1674 ? 0
1675 : ANYOF_FLAGS(node)((node)->flags);
1676
1677 PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC((pRExC_state) ? (void)0 : __assert2("re_comp.c", 1677, __func__
, "pRExC_state")); ((node) ? (void)0 : __assert2("re_comp.c",
1677, __func__, "node"))
;
1678
1679 /* Look at the data structure created by S_set_ANYOF_arg() */
1680 if (n != ANYOF_ONLY_HAS_BITMAP((U32) -1)) {
1681 SV * const rv = MUTABLE_SV(RExC_rxi->data->data[n])((SV *)({ void *_p = ((pRExC_state->rxi)->data->data
[n]); _p; }))
;
1682 AV * const av = MUTABLE_AV(SvRV(rv))((AV *)({ void *_p = ((*({ SV *const _svrv = ((SV *)({ void *
_p = (rv); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 1682, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 1682, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 1682, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); _p; }))
;
1683 SV **const ary = AvARRAY(av)((av)->sv_u.svu_array);
1684 assert(RExC_rxi->data->what[n] == 's')(((pRExC_state->rxi)->data->what[n] == 's') ? (void)
0 : __assert2("re_comp.c", 1684, __func__, "RExC_rxi->data->what[n] == 's'"
))
;
1685
1686 if (av_tindex_skip_len_mg(av)(((((svtype)((av)->sv_flags & 0xff)) == SVt_PVAV) ? (void
)0 : __assert2("re_comp.c", 1686, __func__, "((svtype)((av)->sv_flags & 0xff)) == SVt_PVAV"
)), ((XPVAV*) (av)->sv_any)->xav_fill)
>= DEFERRED_USER_DEFINED_INDEX2) {
1687
1688 /* Here there are things that won't be known until runtime -- we
1689 * have to assume it could be anything */
1690 invlist = sv_2mortal(_new_invlist(1))Perl_sv_2mortal( Perl__new_invlist( 1));
1691 return _add_range_to_invlist(invlist, 0, UV_MAX)Perl__add_range_to_invlist( invlist,0,(~(UV)0));
1692 }
1693 else if (ary[INVLIST_INDEX0]) {
1694
1695 /* Use the node's inversion list */
1696 invlist = sv_2mortal(invlist_clone(ary[INVLIST_INDEX], NULL))Perl_sv_2mortal( Perl_invlist_clone( ary[0],((void*)0)));
1697 }
1698
1699 /* Get the code points valid only under UTF-8 locales */
1700 if ( (flags & ANYOFL_FOLD0x04)
1701 && av_tindex_skip_len_mg(av)(((((svtype)((av)->sv_flags & 0xff)) == SVt_PVAV) ? (void
)0 : __assert2("re_comp.c", 1701, __func__, "((svtype)((av)->sv_flags & 0xff)) == SVt_PVAV"
)), ((XPVAV*) (av)->sv_any)->xav_fill)
>= ONLY_LOCALE_MATCHES_INDEX1)
1702 {
1703 only_utf8_locale_invlist = ary[ONLY_LOCALE_MATCHES_INDEX1];
1704 }
1705 }
1706
1707 if (! invlist) {
1708 invlist = sv_2mortal(_new_invlist(0))Perl_sv_2mortal( Perl__new_invlist( 0));
1709 }
1710
1711 /* An ANYOF node contains a bitmap for the first NUM_ANYOF_CODE_POINTS
1712 * code points, and an inversion list for the others, but if there are code
1713 * points that should match only conditionally on the target string being
1714 * UTF-8, those are placed in the inversion list, and not the bitmap.
1715 * Since there are circumstances under which they could match, they are
1716 * included in the SSC. But if the ANYOF node is to be inverted, we have
1717 * to exclude them here, so that when we invert below, the end result
1718 * actually does include them. (Think about "\xe0" =~ /[^\xc0]/di;). We
1719 * have to do this here before we add the unconditionally matched code
1720 * points */
1721 if (flags & ANYOF_INVERT0x01) {
1722 _invlist_intersection_complement_2nd(invlist,Perl__invlist_intersection_maybe_complement_2nd( invlist,PL_UpperLatin1
,(1),&invlist)
1723 PL_UpperLatin1,Perl__invlist_intersection_maybe_complement_2nd( invlist,PL_UpperLatin1
,(1),&invlist)
1724 &invlist)Perl__invlist_intersection_maybe_complement_2nd( invlist,PL_UpperLatin1
,(1),&invlist)
;
1725 }
1726
1727 /* Add in the points from the bit map */
1728 if (! inRANGE(OP(node), ANYOFH, ANYOFRb)((((27) >= (22)) ? (void)0 : __assert2("re_comp.c", 1728, __func__
, "(27) >= (22)")), ( (sizeof(((node)->type)) == sizeof
(U8)) ? ((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 1728, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22
))) >= 0) ? (void)0 : __assert2("re_comp.c", 1728, __func__
, "(NV) (((27) - (22))) >= 0")), (((U64) (((((U8) (((node)
->type))))) - (((22)) | 0))) <= (((U64) ((((27) - (22))
) | 0))))) : (sizeof(((node)->type)) == sizeof(U32)) ? (((
(NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c", 1728,
__func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22))) >=
0) ? (void)0 : __assert2("re_comp.c", 1728, __func__, "(NV) (((27) - (22))) >= 0"
)), (((U64) (((((U32) (((node)->type))))) - (((22)) | 0)))
<= (((U64) ((((27) - (22))) | 0))))) : (((sizeof(((node)->
type)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 1728
, __func__, "sizeof(((node)->type)) == sizeof(U64)")), (((
(NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c", 1728,
__func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22))) >=
0) ? (void)0 : __assert2("re_comp.c", 1728, __func__, "(NV) (((27) - (22))) >= 0"
)), (((U64) (((((U64) (((node)->type))))) - (((22)) | 0)))
<= (((U64) ((((27) - (22))) | 0))))))))
) {
1729 for (i = 0; i < NUM_ANYOF_CODE_POINTS(1 << 8); i++) {
1730 if (ANYOF_BITMAP_TEST(node, i)(((( (U8*) ((regnode_charclass*)(node))->bitmap) [ ( ( (UV
) (i)) >> 3) ] ) & (1U << ((i) & 7))) ? (
_Bool)1 : (_Bool)0)
) {
1731 unsigned int start = i++;
1732
1733 for (; i < NUM_ANYOF_CODE_POINTS(1 << 8)
1734 && ANYOF_BITMAP_TEST(node, i)(((( (U8*) ((regnode_charclass*)(node))->bitmap) [ ( ( (UV
) (i)) >> 3) ] ) & (1U << ((i) & 7))) ? (
_Bool)1 : (_Bool)0)
; ++i)
1735 {
1736 /* empty */
1737 }
1738 invlist = _add_range_to_invlist(invlist, start, i-1)Perl__add_range_to_invlist( invlist,start,i-1);
1739 new_node_has_latin1 = TRUE(1);
1740 }
1741 }
1742 }
1743
1744 /* If this can match all upper Latin1 code points, have to add them
1745 * as well. But don't add them if inverting, as when that gets done below,
1746 * it would exclude all these characters, including the ones it shouldn't
1747 * that were added just above */
1748 if (! (flags & ANYOF_INVERT0x01) && OP(node)((node)->type) == ANYOFD19
1749 && (flags & ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER0x80))
1750 {
1751 _invlist_union(invlist, PL_UpperLatin1, &invlist)Perl__invlist_union_maybe_complement_2nd( invlist,PL_UpperLatin1
,(0),&invlist)
;
1752 }
1753
1754 /* Similarly for these */
1755 if (flags & ANYOF_MATCHES_ALL_ABOVE_BITMAP0x20) {
1756 _invlist_union_complement_2nd(invlist, PL_InBitmap, &invlist)Perl__invlist_union_maybe_complement_2nd( invlist,PL_InBitmap
,(1),&invlist)
;
1757 }
1758
1759 if (flags & ANYOF_INVERT0x01) {
1760 _invlist_invert(invlist)Perl__invlist_invert( invlist);
1761 }
1762 else if (flags & ANYOFL_FOLD0x04) {
1763 if (new_node_has_latin1) {
1764
1765 /* Under /li, any 0-255 could fold to any other 0-255, depending on
1766 * the locale. We can skip this if there are no 0-255 at all. */
1767 _invlist_union(invlist, PL_Latin1, &invlist)Perl__invlist_union_maybe_complement_2nd( invlist,PL_Latin1,(
0),&invlist)
;
1768
1769 invlist = add_cp_to_invlist(invlist, LATIN_SMALL_LETTER_DOTLESS_I)S_add_cp_to_invlist( invlist,0x131);
1770 invlist = add_cp_to_invlist(invlist, LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE)S_add_cp_to_invlist( invlist,0x130);
1771 }
1772 else {
1773 if (_invlist_contains_cpS__invlist_contains_cp(invlist, LATIN_SMALL_LETTER_DOTLESS_I0x131)) {
1774 invlist = add_cp_to_invlist(invlist, 'I')S_add_cp_to_invlist( invlist,'I');
1775 }
1776 if (_invlist_contains_cpS__invlist_contains_cp(invlist,
1777 LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE0x130))
1778 {
1779 invlist = add_cp_to_invlist(invlist, 'i')S_add_cp_to_invlist( invlist,'i');
1780 }
1781 }
1782 }
1783
1784 /* Similarly add the UTF-8 locale possible matches. These have to be
1785 * deferred until after the non-UTF-8 locale ones are taken care of just
1786 * above, or it leads to wrong results under ANYOF_INVERT */
1787 if (only_utf8_locale_invlist) {
1788 _invlist_union_maybe_complement_2nd(invlist,Perl__invlist_union_maybe_complement_2nd( invlist,only_utf8_locale_invlist
,flags & 0x01,&invlist)
1789 only_utf8_locale_invlist,Perl__invlist_union_maybe_complement_2nd( invlist,only_utf8_locale_invlist
,flags & 0x01,&invlist)
1790 flags & ANYOF_INVERT,Perl__invlist_union_maybe_complement_2nd( invlist,only_utf8_locale_invlist
,flags & 0x01,&invlist)
1791 &invlist)Perl__invlist_union_maybe_complement_2nd( invlist,only_utf8_locale_invlist
,flags & 0x01,&invlist)
;
1792 }
1793
1794 return invlist;
1795}
1796
1797/* These two functions currently do the exact same thing */
1798#define ssc_init_zerossc_init ssc_init
1799
1800#define ssc_add_cp(ssc, cp)S_ssc_add_range( (ssc),(cp),(cp)) ssc_add_range((ssc), (cp), (cp))S_ssc_add_range( (ssc),(cp),(cp))
1801#define ssc_match_all_cp(ssc)S_ssc_add_range( ssc,0,(~(UV)0)) ssc_add_range(ssc, 0, UV_MAX)S_ssc_add_range( ssc,0,(~(UV)0))
1802
1803/* 'AND' a given class with another one. Can create false positives. 'ssc'
1804 * should not be inverted. 'and_with->flags & ANYOF_MATCHES_POSIXL' should be
1805 * 0 if 'and_with' is a regnode_charclass instead of a regnode_ssc. */
1806
1807STATICstatic void
1808S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
1809 const regnode_charclass *and_with)
1810{
1811 /* Accumulate into SSC 'ssc' its 'AND' with 'and_with', which is either
1812 * another SSC or a regular ANYOF class. Can create false positives. */
1813
1814 SV* anded_cp_list;
1815 U8 and_with_flags = inRANGE(OP(and_with), ANYOFH, ANYOFRb)((((27) >= (22)) ? (void)0 : __assert2("re_comp.c", 1815, __func__
, "(27) >= (22)")), ( (sizeof(((and_with)->type)) == sizeof
(U8)) ? ((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 1815, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22
))) >= 0) ? (void)0 : __assert2("re_comp.c", 1815, __func__
, "(NV) (((27) - (22))) >= 0")), (((U64) (((((U8) (((and_with
)->type))))) - (((22)) | 0))) <= (((U64) ((((27) - (22)
)) | 0))))) : (sizeof(((and_with)->type)) == sizeof(U32)) ?
((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c", 1815
, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22))) >=
0) ? (void)0 : __assert2("re_comp.c", 1815, __func__, "(NV) (((27) - (22))) >= 0"
)), (((U64) (((((U32) (((and_with)->type))))) - (((22)) | 0
))) <= (((U64) ((((27) - (22))) | 0))))) : (((sizeof(((and_with
)->type)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 1815, __func__, "sizeof(((and_with)->type)) == sizeof(U64)"
)), ((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 1815, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22
))) >= 0) ? (void)0 : __assert2("re_comp.c", 1815, __func__
, "(NV) (((27) - (22))) >= 0")), (((U64) (((((U64) (((and_with
)->type))))) - (((22)) | 0))) <= (((U64) ((((27) - (22)
)) | 0))))))))
1816 ? 0
1817 : ANYOF_FLAGS(and_with)((and_with)->flags);
1818 U8 anded_flags;
1819
1820 PERL_ARGS_ASSERT_SSC_AND((pRExC_state) ? (void)0 : __assert2("re_comp.c", 1820, __func__
, "pRExC_state")); ((ssc) ? (void)0 : __assert2("re_comp.c", 1820
, __func__, "ssc")); ((and_with) ? (void)0 : __assert2("re_comp.c"
, 1820, __func__, "and_with"))
;
1821
1822 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 1822, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
1823
1824 /* 'and_with' is used as-is if it too is an SSC; otherwise have to extract
1825 * the code point inversion list and just the relevant flags */
1826 if (is_ANYOF_SYNTHETIC(and_with)(PL_regkind[((and_with)->type)] == 18 && ((and_with
)->next_off) == 1)
) {
1827 anded_cp_list = ((regnode_ssc *)and_with)->invlist;
1828 anded_flags = and_with_flags;
1829
1830 /* XXX This is a kludge around what appears to be deficiencies in the
1831 * optimizer. If we make S_ssc_anything() add in the WARN_SUPER flag,
1832 * there are paths through the optimizer where it doesn't get weeded
1833 * out when it should. And if we don't make some extra provision for
1834 * it like the code just below, it doesn't get added when it should.
1835 * This solution is to add it only when AND'ing, which is here, and
1836 * only when what is being AND'ed is the pristine, original node
1837 * matching anything. Thus it is like adding it to ssc_anything() but
1838 * only when the result is to be AND'ed. Probably the same solution
1839 * could be adopted for the same problem we have with /l matching,
1840 * which is solved differently in S_ssc_init(), and that would lead to
1841 * fewer false positives than that solution has. But if this solution
1842 * creates bugs, the consequences are only that a warning isn't raised
1843 * that should be; while the consequences for having /l bugs is
1844 * incorrect matches */
1845 if (ssc_is_anythingS_ssc_is_anything((regnode_ssc *)and_with)) {
1846 anded_flags |= ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER0x80;
1847 }
1848 }
1849 else {
1850 anded_cp_list = get_ANYOF_cp_list_for_ssc(pRExC_state, and_with)S_get_ANYOF_cp_list_for_ssc( pRExC_state,and_with);
1851 if (OP(and_with)((and_with)->type) == ANYOFD19) {
1852 anded_flags = and_with_flags & ANYOF_COMMON_FLAGS0;
1853 }
1854 else {
1855 anded_flags = and_with_flags
1856 &( ANYOF_COMMON_FLAGS0
1857 |ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER0x80
1858 |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP0x40);
1859 if (ANYOFL_UTF8_LOCALE_REQD(and_with_flags)((and_with_flags & ( 0x04 |0x08)) == 0x08)) {
1860 anded_flags &=
1861 ANYOFL_SHARED_UTF8_LOCALE_fold_HAS_MATCHES_nonfold_REQD0x08;
1862 }
1863 }
1864 }
1865
1866 ANYOF_FLAGS(ssc)((ssc)->flags) &= anded_flags;
1867
1868 /* Below, C1 is the list of code points in 'ssc'; P1, its posix classes.
1869 * C2 is the list of code points in 'and-with'; P2, its posix classes.
1870 * 'and_with' may be inverted. When not inverted, we have the situation of
1871 * computing:
1872 * (C1 | P1) & (C2 | P2)
1873 * = (C1 & (C2 | P2)) | (P1 & (C2 | P2))
1874 * = ((C1 & C2) | (C1 & P2)) | ((P1 & C2) | (P1 & P2))
1875 * <= ((C1 & C2) | P2)) | ( P1 | (P1 & P2))
1876 * <= ((C1 & C2) | P1 | P2)
1877 * Alternatively, the last few steps could be:
1878 * = ((C1 & C2) | (C1 & P2)) | ((P1 & C2) | (P1 & P2))
1879 * <= ((C1 & C2) | C1 ) | ( C2 | (P1 & P2))
1880 * <= (C1 | C2 | (P1 & P2))
1881 * We favor the second approach if either P1 or P2 is non-empty. This is
1882 * because these components are a barrier to doing optimizations, as what
1883 * they match cannot be known until the moment of matching as they are
1884 * dependent on the current locale, 'AND"ing them likely will reduce or
1885 * eliminate them.
1886 * But we can do better if we know that C1,P1 are in their initial state (a
1887 * frequent occurrence), each matching everything:
1888 * (<everything>) & (C2 | P2) = C2 | P2
1889 * Similarly, if C2,P2 are in their initial state (again a frequent
1890 * occurrence), the result is a no-op
1891 * (C1 | P1) & (<everything>) = C1 | P1
1892 *
1893 * Inverted, we have
1894 * (C1 | P1) & ~(C2 | P2) = (C1 | P1) & (~C2 & ~P2)
1895 * = (C1 & (~C2 & ~P2)) | (P1 & (~C2 & ~P2))
1896 * <= (C1 & ~C2) | (P1 & ~P2)
1897 * */
1898
1899 if ((and_with_flags & ANYOF_INVERT0x01)
1900 && ! is_ANYOF_SYNTHETIC(and_with)(PL_regkind[((and_with)->type)] == 18 && ((and_with
)->next_off) == 1)
)
1901 {
1902 unsigned int i;
1903
1904 ssc_intersection(ssc,S_ssc_intersection( ssc,anded_cp_list,(0))
1905 anded_cp_list,S_ssc_intersection( ssc,anded_cp_list,(0))
1906 FALSE /* Has already been inverted */S_ssc_intersection( ssc,anded_cp_list,(0))
1907 )S_ssc_intersection( ssc,anded_cp_list,(0));
1908
1909 /* If either P1 or P2 is empty, the intersection will be also; can skip
1910 * the loop */
1911 if (! (and_with_flags & ANYOF_MATCHES_POSIXL0x02)) {
1912 ANYOF_POSIXL_ZERO(ssc)do { (((regnode_charclass_posixl*) (ssc))->classflags) = 0
; } while (0)
;
1913 }
1914 else if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)((((regnode_ssc*)(ssc))->classflags) ? (_Bool)1 : (_Bool)0
)
) {
1915
1916 /* Note that the Posix class component P from 'and_with' actually
1917 * looks like:
1918 * P = Pa | Pb | ... | Pn
1919 * where each component is one posix class, such as in [\w\s].
1920 * Thus
1921 * ~P = ~(Pa | Pb | ... | Pn)
1922 * = ~Pa & ~Pb & ... & ~Pn
1923 * <= ~Pa | ~Pb | ... | ~Pn
1924 * The last is something we can easily calculate, but unfortunately
1925 * is likely to have many false positives. We could do better
1926 * in some (but certainly not all) instances if two classes in
1927 * P have known relationships. For example
1928 * :lower: <= :alpha: <= :alnum: <= \w <= :graph: <= :print:
1929 * So
1930 * :lower: & :print: = :lower:
1931 * And similarly for classes that must be disjoint. For example,
1932 * since \s and \w can have no elements in common based on rules in
1933 * the POSIX standard,
1934 * \w & ^\S = nothing
1935 * Unfortunately, some vendor locales do not meet the Posix
1936 * standard, in particular almost everything by Microsoft.
1937 * The loop below just changes e.g., \w into \W and vice versa */
1938
1939 regnode_charclass_posixl temp;
1940 int add = 1; /* To calculate the index of the complement */
1941
1942 Zero(&temp, 1, regnode_charclass_posixl)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(1) ||
sizeof(regnode_charclass_posixl) > ((size_t)1 << 8*
(sizeof(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof
(regnode_charclass_posixl)) > ((size_t)-1)/sizeof(regnode_charclass_posixl
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(&temp)) != 0) ? (void)0 : __assert2("re_comp.c"
, 1942, __func__, "((void*)(&temp)) != 0")), (void)memset
((char*)(&temp),0,(1) * sizeof(regnode_charclass_posixl))
)
;
1943 ANYOF_POSIXL_ZERO(&temp)do { (((regnode_charclass_posixl*) (&temp))->classflags
) = 0; } while (0)
;
1944 for (i = 0; i < ANYOF_MAX(((15) * 2)); i++) {
1945 assert(i % 2 != 0((i % 2 != 0 || ! ((((regnode_charclass_posixl*) ((regnode_charclass_posixl
*) and_with))->classflags) & (1U << ((i)))) || !
((((regnode_charclass_posixl*) ((regnode_charclass_posixl*) and_with
))->classflags) & (1U << ((i + 1))))) ? (void)0 :
__assert2("re_comp.c", 1947, __func__, "i % 2 != 0 || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i) || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i + 1)"
))
1946 || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i)((i % 2 != 0 || ! ((((regnode_charclass_posixl*) ((regnode_charclass_posixl
*) and_with))->classflags) & (1U << ((i)))) || !
((((regnode_charclass_posixl*) ((regnode_charclass_posixl*) and_with
))->classflags) & (1U << ((i + 1))))) ? (void)0 :
__assert2("re_comp.c", 1947, __func__, "i % 2 != 0 || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i) || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i + 1)"
))
1947 || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i + 1))((i % 2 != 0 || ! ((((regnode_charclass_posixl*) ((regnode_charclass_posixl
*) and_with))->classflags) & (1U << ((i)))) || !
((((regnode_charclass_posixl*) ((regnode_charclass_posixl*) and_with
))->classflags) & (1U << ((i + 1))))) ? (void)0 :
__assert2("re_comp.c", 1947, __func__, "i % 2 != 0 || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i) || ! ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i + 1)"
))
;
1948
1949 if (ANYOF_POSIXL_TEST((regnode_charclass_posixl*) and_with, i)((((regnode_charclass_posixl*) ((regnode_charclass_posixl*) and_with
))->classflags) & (1U << ((i))))
) {
1950 ANYOF_POSIXL_SET(&temp, i + add)((((regnode_charclass_posixl*) (&temp))->classflags) |=
(1U << ((i + add))))
;
1951 }
1952 add = 0 - add; /* 1 goes to -1; -1 goes to 1 */
1953 }
1954 ANYOF_POSIXL_AND(&temp, ssc)do { (ssc)->classflags &= (&temp)->classflags ;
} while (0)
;
1955
1956 } /* else ssc already has no posixes */
1957 } /* else: Not inverted. This routine is a no-op if 'and_with' is an SSC
1958 in its initial state */
1959 else if (! is_ANYOF_SYNTHETIC(and_with)(PL_regkind[((and_with)->type)] == 18 && ((and_with
)->next_off) == 1)
1960 || ! ssc_is_cp_posixl_initS_ssc_is_cp_posixl_init(pRExC_state, (regnode_ssc *)and_with))
1961 {
1962 /* But if 'ssc' is in its initial state, the result is just 'and_with';
1963 * copy it over 'ssc' */
1964 if (ssc_is_cp_posixl_initS_ssc_is_cp_posixl_init(pRExC_state, ssc)) {
1965 if (is_ANYOF_SYNTHETIC(and_with)(PL_regkind[((and_with)->type)] == 18 && ((and_with
)->next_off) == 1)
) {
1966 StructCopy(and_with, ssc, regnode_ssc)(*((regnode_ssc*)(ssc)) = *((regnode_ssc*)(and_with)));
1967 }
1968 else {
1969 ssc->invlist = anded_cp_list;
1970 ANYOF_POSIXL_ZERO(ssc)do { (((regnode_charclass_posixl*) (ssc))->classflags) = 0
; } while (0)
;
1971 if (and_with_flags & ANYOF_MATCHES_POSIXL0x02) {
1972 ANYOF_POSIXL_OR((regnode_charclass_posixl*) and_with, ssc)do { (ssc)->classflags |= ((regnode_charclass_posixl*) and_with
)->classflags ; } while (0)
;
1973 }
1974 }
1975 }
1976 else if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)((((regnode_ssc*)(ssc))->classflags) ? (_Bool)1 : (_Bool)0
)
1977 || (and_with_flags & ANYOF_MATCHES_POSIXL0x02))
1978 {
1979 /* One or the other of P1, P2 is non-empty. */
1980 if (and_with_flags & ANYOF_MATCHES_POSIXL0x02) {
1981 ANYOF_POSIXL_AND((regnode_charclass_posixl*) and_with, ssc)do { (ssc)->classflags &= ((regnode_charclass_posixl*)
and_with)->classflags ; } while (0)
;
1982 }
1983 ssc_union(ssc, anded_cp_list, FALSE)S_ssc_union( ssc,anded_cp_list,(0));
1984 }
1985 else { /* P1 = P2 = empty */
1986 ssc_intersection(ssc, anded_cp_list, FALSE)S_ssc_intersection( ssc,anded_cp_list,(0));
1987 }
1988 }
1989}
1990
1991STATICstatic void
1992S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
1993 const regnode_charclass *or_with)
1994{
1995 /* Accumulate into SSC 'ssc' its 'OR' with 'or_with', which is either
1996 * another SSC or a regular ANYOF class. Can create false positives if
1997 * 'or_with' is to be inverted. */
1998
1999 SV* ored_cp_list;
2000 U8 ored_flags;
2001 U8 or_with_flags = inRANGE(OP(or_with), ANYOFH, ANYOFRb)((((27) >= (22)) ? (void)0 : __assert2("re_comp.c", 2001, __func__
, "(27) >= (22)")), ( (sizeof(((or_with)->type)) == sizeof
(U8)) ? ((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2001, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22
))) >= 0) ? (void)0 : __assert2("re_comp.c", 2001, __func__
, "(NV) (((27) - (22))) >= 0")), (((U64) (((((U8) (((or_with
)->type))))) - (((22)) | 0))) <= (((U64) ((((27) - (22)
)) | 0))))) : (sizeof(((or_with)->type)) == sizeof(U32)) ?
((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c", 2001
, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22))) >=
0) ? (void)0 : __assert2("re_comp.c", 2001, __func__, "(NV) (((27) - (22))) >= 0"
)), (((U64) (((((U32) (((or_with)->type))))) - (((22)) | 0
))) <= (((U64) ((((27) - (22))) | 0))))) : (((sizeof(((or_with
)->type)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2001, __func__, "sizeof(((or_with)->type)) == sizeof(U64)"
)), ((((NV) ((22)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2001, __func__, "(NV) ((22)) >= 0")), (((NV) (((27) - (22
))) >= 0) ? (void)0 : __assert2("re_comp.c", 2001, __func__
, "(NV) (((27) - (22))) >= 0")), (((U64) (((((U64) (((or_with
)->type))))) - (((22)) | 0))) <= (((U64) ((((27) - (22)
)) | 0))))))))
2002 ? 0
2003 : ANYOF_FLAGS(or_with)((or_with)->flags);
2004
2005 PERL_ARGS_ASSERT_SSC_OR((pRExC_state) ? (void)0 : __assert2("re_comp.c", 2005, __func__
, "pRExC_state")); ((ssc) ? (void)0 : __assert2("re_comp.c", 2005
, __func__, "ssc")); ((or_with) ? (void)0 : __assert2("re_comp.c"
, 2005, __func__, "or_with"))
;
2006
2007 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2007, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2008
2009 /* 'or_with' is used as-is if it too is an SSC; otherwise have to extract
2010 * the code point inversion list and just the relevant flags */
2011 if (is_ANYOF_SYNTHETIC(or_with)(PL_regkind[((or_with)->type)] == 18 && ((or_with)
->next_off) == 1)
) {
2012 ored_cp_list = ((regnode_ssc*) or_with)->invlist;
2013 ored_flags = or_with_flags;
2014 }
2015 else {
2016 ored_cp_list = get_ANYOF_cp_list_for_ssc(pRExC_state, or_with)S_get_ANYOF_cp_list_for_ssc( pRExC_state,or_with);
2017 ored_flags = or_with_flags & ANYOF_COMMON_FLAGS0;
2018 if (OP(or_with)((or_with)->type) != ANYOFD19) {
2019 ored_flags
2020 |= or_with_flags
2021 & ( ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER0x80
2022 |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP0x40);
2023 if (ANYOFL_UTF8_LOCALE_REQD(or_with_flags)((or_with_flags & ( 0x04 |0x08)) == 0x08)) {
2024 ored_flags |=
2025 ANYOFL_SHARED_UTF8_LOCALE_fold_HAS_MATCHES_nonfold_REQD0x08;
2026 }
2027 }
2028 }
2029
2030 ANYOF_FLAGS(ssc)((ssc)->flags) |= ored_flags;
2031
2032 /* Below, C1 is the list of code points in 'ssc'; P1, its posix classes.
2033 * C2 is the list of code points in 'or-with'; P2, its posix classes.
2034 * 'or_with' may be inverted. When not inverted, we have the simple
2035 * situation of computing:
2036 * (C1 | P1) | (C2 | P2) = (C1 | C2) | (P1 | P2)
2037 * If P1|P2 yields a situation with both a class and its complement are
2038 * set, like having both \w and \W, this matches all code points, and we
2039 * can delete these from the P component of the ssc going forward. XXX We
2040 * might be able to delete all the P components, but I (khw) am not certain
2041 * about this, and it is better to be safe.
2042 *
2043 * Inverted, we have
2044 * (C1 | P1) | ~(C2 | P2) = (C1 | P1) | (~C2 & ~P2)
2045 * <= (C1 | P1) | ~C2
2046 * <= (C1 | ~C2) | P1
2047 * (which results in actually simpler code than the non-inverted case)
2048 * */
2049
2050 if ((or_with_flags & ANYOF_INVERT0x01)
2051 && ! is_ANYOF_SYNTHETIC(or_with)(PL_regkind[((or_with)->type)] == 18 && ((or_with)
->next_off) == 1)
)
2052 {
2053 /* We ignore P2, leaving P1 going forward */
2054 } /* else Not inverted */
2055 else if (or_with_flags & ANYOF_MATCHES_POSIXL0x02) {
2056 ANYOF_POSIXL_OR((regnode_charclass_posixl*)or_with, ssc)do { (ssc)->classflags |= ((regnode_charclass_posixl*)or_with
)->classflags ; } while (0)
;
2057 if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)((((regnode_ssc*)(ssc))->classflags) ? (_Bool)1 : (_Bool)0
)
) {
2058 unsigned int i;
2059 for (i = 0; i < ANYOF_MAX(((15) * 2)); i += 2) {
2060 if (ANYOF_POSIXL_TEST(ssc, i)((((regnode_charclass_posixl*) (ssc))->classflags) & (
1U << ((i))))
&& ANYOF_POSIXL_TEST(ssc, i + 1)((((regnode_charclass_posixl*) (ssc))->classflags) & (
1U << ((i + 1))))
)
2061 {
2062 ssc_match_all_cp(ssc)S_ssc_add_range( ssc,0,(~(UV)0));
2063 ANYOF_POSIXL_CLEAR(ssc, i)((((regnode_charclass_posixl*) (ssc))->classflags) &= ~
(1U <<((i))))
;
2064 ANYOF_POSIXL_CLEAR(ssc, i+1)((((regnode_charclass_posixl*) (ssc))->classflags) &= ~
(1U <<((i+1))))
;
2065 }
2066 }
2067 }
2068 }
2069
2070 ssc_union(ssc,S_ssc_union( ssc,ored_cp_list,(0))
2071 ored_cp_list,S_ssc_union( ssc,ored_cp_list,(0))
2072 FALSE /* Already has been inverted */S_ssc_union( ssc,ored_cp_list,(0))
2073 )S_ssc_union( ssc,ored_cp_list,(0));
2074}
2075
2076STATICstatic void
2077S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool_Bool invert2nd)
2078{
2079 PERL_ARGS_ASSERT_SSC_UNION((ssc) ? (void)0 : __assert2("re_comp.c", 2079, __func__, "ssc"
)); ((invlist) ? (void)0 : __assert2("re_comp.c", 2079, __func__
, "invlist"))
;
2080
2081 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2081, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2082
2083 _invlist_union_maybe_complement_2nd(ssc->invlist,Perl__invlist_union_maybe_complement_2nd( ssc->invlist,invlist
,invert2nd,&ssc->invlist)
2084 invlist,Perl__invlist_union_maybe_complement_2nd( ssc->invlist,invlist
,invert2nd,&ssc->invlist)
2085 invert2nd,Perl__invlist_union_maybe_complement_2nd( ssc->invlist,invlist
,invert2nd,&ssc->invlist)
2086 &ssc->invlist)Perl__invlist_union_maybe_complement_2nd( ssc->invlist,invlist
,invert2nd,&ssc->invlist)
;
2087}
2088
2089STATICstatic void
2090S_ssc_intersection(pTHX_ regnode_ssc *ssc,
2091 SV* const invlist,
2092 const bool_Bool invert2nd)
2093{
2094 PERL_ARGS_ASSERT_SSC_INTERSECTION((ssc) ? (void)0 : __assert2("re_comp.c", 2094, __func__, "ssc"
)); ((invlist) ? (void)0 : __assert2("re_comp.c", 2094, __func__
, "invlist"))
;
2095
2096 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2096, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2097
2098 _invlist_intersection_maybe_complement_2nd(ssc->invlist,Perl__invlist_intersection_maybe_complement_2nd( ssc->invlist
,invlist,invert2nd,&ssc->invlist)
2099 invlist,Perl__invlist_intersection_maybe_complement_2nd( ssc->invlist
,invlist,invert2nd,&ssc->invlist)
2100 invert2nd,Perl__invlist_intersection_maybe_complement_2nd( ssc->invlist
,invlist,invert2nd,&ssc->invlist)
2101 &ssc->invlist)Perl__invlist_intersection_maybe_complement_2nd( ssc->invlist
,invlist,invert2nd,&ssc->invlist)
;
2102}
2103
2104STATICstatic void
2105S_ssc_add_range(pTHX_ regnode_ssc *ssc, const UV start, const UV end)
2106{
2107 PERL_ARGS_ASSERT_SSC_ADD_RANGE((ssc) ? (void)0 : __assert2("re_comp.c", 2107, __func__, "ssc"
))
;
2108
2109 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2109, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2110
2111 ssc->invlist = _add_range_to_invlist(ssc->invlist, start, end)Perl__add_range_to_invlist( ssc->invlist,start,end);
2112}
2113
2114STATICstatic void
2115S_ssc_cp_and(pTHX_ regnode_ssc *ssc, const UV cp)
2116{
2117 /* AND just the single code point 'cp' into the SSC 'ssc' */
2118
2119 SV* cp_list = _new_invlist(2)Perl__new_invlist( 2);
2120
2121 PERL_ARGS_ASSERT_SSC_CP_AND((ssc) ? (void)0 : __assert2("re_comp.c", 2121, __func__, "ssc"
))
;
2122
2123 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2123, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2124
2125 cp_list = add_cp_to_invlist(cp_list, cp)S_add_cp_to_invlist( cp_list,cp);
2126 ssc_intersection(ssc, cp_list,S_ssc_intersection( ssc,cp_list,(0))
2127 FALSE /* Not inverted */S_ssc_intersection( ssc,cp_list,(0))
2128 )S_ssc_intersection( ssc,cp_list,(0));
2129 SvREFCNT_dec_NN(cp_list)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (cp_list); _p; }))
)
;
2130}
2131
2132STATICstatic void
2133S_ssc_clear_locale(regnode_ssc *ssc)
2134{
2135 /* Set the SSC 'ssc' to not match any locale things */
2136 PERL_ARGS_ASSERT_SSC_CLEAR_LOCALE((ssc) ? (void)0 : __assert2("re_comp.c", 2136, __func__, "ssc"
))
;
2137
2138 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2138, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2139
2140 ANYOF_POSIXL_ZERO(ssc)do { (((regnode_charclass_posixl*) (ssc))->classflags) = 0
; } while (0)
;
2141 ANYOF_FLAGS(ssc)((ssc)->flags) &= ~ANYOF_LOCALE_FLAGS(0x04 | 0x02);
2142}
2143
2144#define NON_OTHER_COUNT143698 NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C143698
2145
2146STATICstatic bool_Bool
2147S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ssc * ssc)
2148{
2149 /* The synthetic start class is used to hopefully quickly winnow down
2150 * places where a pattern could start a match in the target string. If it
2151 * doesn't really narrow things down that much, there isn't much point to
2152 * having the overhead of using it. This function uses some very crude
2153 * heuristics to decide if to use the ssc or not.
2154 *
2155 * It returns TRUE if 'ssc' rules out more than half what it considers to
2156 * be the "likely" possible matches, but of course it doesn't know what the
2157 * actual things being matched are going to be; these are only guesses
2158 *
2159 * For /l matches, it assumes that the only likely matches are going to be
2160 * in the 0-255 range, uniformly distributed, so half of that is 127
2161 * For /a and /d matches, it assumes that the likely matches will be just
2162 * the ASCII range, so half of that is 63
2163 * For /u and there isn't anything matching above the Latin1 range, it
2164 * assumes that that is the only range likely to be matched, and uses
2165 * half that as the cut-off: 127. If anything matches above Latin1,
2166 * it assumes that all of Unicode could match (uniformly), except for
2167 * non-Unicode code points and things in the General Category "Other"
2168 * (unassigned, private use, surrogates, controls and formats). This
2169 * is a much large number. */
2170
2171 U32 count = 0; /* Running total of number of code points matched by
2172 'ssc' */
2173 UV start, end; /* Start and end points of current range in inversion
2174 XXX outdated. UTF-8 locales are common, what about invert? list */
2175 const U32 max_code_points = (LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
)
2176 ? 256
2177 : (( ! UNI_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_UNICODE_CHARSET
)
2178 || invlist_highestS_invlist_highest(ssc->invlist) < 256)
2179 ? 128
2180 : NON_OTHER_COUNT143698);
2181 const U32 max_match = max_code_points / 2;
2182
2183 PERL_ARGS_ASSERT_IS_SSC_WORTH_IT((pRExC_state) ? (void)0 : __assert2("re_comp.c", 2183, __func__
, "pRExC_state")); ((ssc) ? (void)0 : __assert2("re_comp.c", 2183
, __func__, "ssc"))
;
2184
2185 invlist_iterinitS_invlist_iterinit(ssc->invlist);
2186 while (invlist_iternextS_invlist_iternext(ssc->invlist, &start, &end)) {
2187 if (start >= max_code_points) {
2188 break;
2189 }
2190 end = MIN(end, max_code_points - 1)(((end)<(max_code_points - 1))?(end):(max_code_points - 1)
)
;
2191 count += end - start + 1;
2192 if (count >= max_match) {
2193 invlist_iterfinishS_invlist_iterfinish(ssc->invlist);
2194 return FALSE(0);
2195 }
2196 }
2197
2198 return TRUE(1);
2199}
2200
2201
2202STATICstatic void
2203S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc)
2204{
2205 /* The inversion list in the SSC is marked mortal; now we need a more
2206 * permanent copy, which is stored the same way that is done in a regular
2207 * ANYOF node, with the first NUM_ANYOF_CODE_POINTS code points in a bit
2208 * map */
2209
2210 SV* invlist = invlist_clone(ssc->invlist, NULL)Perl_invlist_clone( ssc->invlist,((void*)0));
2211
2212 PERL_ARGS_ASSERT_SSC_FINALIZE((pRExC_state) ? (void)0 : __assert2("re_comp.c", 2212, __func__
, "pRExC_state")); ((ssc) ? (void)0 : __assert2("re_comp.c", 2212
, __func__, "ssc"))
;
2213
2214 assert(is_ANYOF_SYNTHETIC(ssc))(((PL_regkind[((ssc)->type)] == 18 && ((ssc)->next_off
) == 1)) ? (void)0 : __assert2("re_comp.c", 2214, __func__, "is_ANYOF_SYNTHETIC(ssc)"
))
;
2215
2216 /* The code in this file assumes that all but these flags aren't relevant
2217 * to the SSC, except SSC_MATCHES_EMPTY_STRING, which should be cleared
2218 * by the time we reach here */
2219 assert(! (ANYOF_FLAGS(ssc)((! (((ssc)->flags) & ~( 0 |0x80 |0x40))) ? (void)0 : __assert2
("re_comp.c", 2222, __func__, "! (ANYOF_FLAGS(ssc) & ~( ANYOF_COMMON_FLAGS |ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP))"
))
2220 & ~( ANYOF_COMMON_FLAGS((! (((ssc)->flags) & ~( 0 |0x80 |0x40))) ? (void)0 : __assert2
("re_comp.c", 2222, __func__, "! (ANYOF_FLAGS(ssc) & ~( ANYOF_COMMON_FLAGS |ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP))"
))
2221 |ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER((! (((ssc)->flags) & ~( 0 |0x80 |0x40))) ? (void)0 : __assert2
("re_comp.c", 2222, __func__, "! (ANYOF_FLAGS(ssc) & ~( ANYOF_COMMON_FLAGS |ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP))"
))
2222 |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP)))((! (((ssc)->flags) & ~( 0 |0x80 |0x40))) ? (void)0 : __assert2
("re_comp.c", 2222, __func__, "! (ANYOF_FLAGS(ssc) & ~( ANYOF_COMMON_FLAGS |ANYOF_SHARED_d_MATCHES_ALL_NON_UTF8_NON_ASCII_non_d_WARN_SUPER |ANYOF_SHARED_d_UPPER_LATIN1_UTF8_STRING_MATCHES_non_d_RUNTIME_USER_PROP))"
))
;
2223
2224 populate_ANYOF_from_invlist( (regnode *) ssc, &invlist)S_populate_ANYOF_from_invlist( (regnode *) ssc,&invlist);
2225
2226 set_ANYOF_arg(pRExC_state, (regnode *) ssc, invlist, NULL, NULL)S_set_ANYOF_arg( pRExC_state,(regnode *) ssc,invlist,((void*)
0),((void*)0))
;
2227 SvREFCNT_dec(invlist)Perl_SvREFCNT_dec( ((SV *)({ void *_p = (invlist); _p; })));
2228
2229 /* Make sure is clone-safe */
2230 ssc->invlist = NULL((void*)0);
2231
2232 if (ANYOF_POSIXL_SSC_TEST_ANY_SET(ssc)((((regnode_ssc*)(ssc))->classflags) ? (_Bool)1 : (_Bool)0
)
) {
2233 ANYOF_FLAGS(ssc)((ssc)->flags) |= ANYOF_MATCHES_POSIXL0x02;
2234 OP(ssc)((ssc)->type) = ANYOFPOSIXL21;
2235 }
2236 else if (RExC_contains_locale(pRExC_state->contains_locale)) {
2237 OP(ssc)((ssc)->type) = ANYOFL20;
2238 }
2239
2240 assert(! (ANYOF_FLAGS(ssc) & ANYOF_LOCALE_FLAGS) || RExC_contains_locale)((! (((ssc)->flags) & (0x04 | 0x02)) || (pRExC_state->
contains_locale)) ? (void)0 : __assert2("re_comp.c", 2240, __func__
, "! (ANYOF_FLAGS(ssc) & ANYOF_LOCALE_FLAGS) || RExC_contains_locale"
))
;
2241}
2242
2243#define TRIE_LIST_ITEM(state,idx)(trie->states[state].trans.list)[ idx ] (trie->states[state].trans.list)[ idx ]
2244#define TRIE_LIST_CUR(state)( (trie->states[state].trans.list)[ 0 ].forid ) ( TRIE_LIST_ITEM( state, 0 )(trie->states[state].trans.list)[ 0 ].forid )
2245#define TRIE_LIST_LEN(state)( (trie->states[state].trans.list)[ 0 ].newstate ) ( TRIE_LIST_ITEM( state, 0 )(trie->states[state].trans.list)[ 0 ].newstate )
2246#define TRIE_LIST_USED(idx)( trie->states[state].trans.list ? (( (trie->states[idx
].trans.list)[ 0 ].forid ) - 1) : 0 )
( trie->states[state].trans.list \
2247 ? (TRIE_LIST_CUR( idx )( (trie->states[idx].trans.list)[ 0 ].forid ) - 1) \
2248 : 0 )
2249
2250
2251#ifdef DEBUGGING
2252/*
2253 dump_trie(trie,widecharmap,revcharmap)
2254 dump_trie_interim_list(trie,widecharmap,revcharmap,next_alloc)
2255 dump_trie_interim_table(trie,widecharmap,revcharmap,next_alloc)
2256
2257 These routines dump out a trie in a somewhat readable format.
2258 The _interim_ variants are used for debugging the interim
2259 tables that are used to generate the final compressed
2260 representation which is what dump_trie expects.
2261
2262 Part of the reason for their existence is to provide a form
2263 of documentation as to how the different representations function.
2264
2265*/
2266
2267/*
2268 Dumps the final compressed table form of the trie to Perl_debug_log.
2269 Used for debugging make_trie().
2270*/
2271
2272STATICstatic void
2273S_dump_trie(pTHX_ const struct _reg_trie_data *trie, HV *widecharmap,
2274 AV *revcharmap, U32 depth)
2275{
2276 U32 state;
2277 SV *sv=sv_newmortal()Perl_sv_newmortal();
2278 int colwidth= widecharmap ? 6 : 4;
2279 U16 word;
2280 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2280, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 2280, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
2281
2282 PERL_ARGS_ASSERT_DUMP_TRIE((trie) ? (void)0 : __assert2("re_comp.c", 2282, __func__, "trie"
)); ((revcharmap) ? (void)0 : __assert2("re_comp.c", 2282, __func__
, "revcharmap"))
;
2283
2284 Perl_re_indentf( aTHX_ "Char : %-6s%-6s%-4s ",
2285 depth+1, "Match","Base","Ofs" );
2286
2287 for( state = 0 ; state < trie->uniquecharcount ; state++ ) {
2288 SV ** const tmp = av_fetch( revcharmap, state, 0)Perl_av_fetch( revcharmap,state,0);
2289 if ( tmp ) {
2290 Perl_re_printf( aTHX_ "%*s",
2291 colwidth,
2292 pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2292, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2292, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2292, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2293 PL_colors[0], PL_colors[1],Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2292, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2292, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2292, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2294 (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2292, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2292, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2292, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2295 PERL_PV_ESCAPE_FIRSTCHARPerl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2292, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2292, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2292, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2296 )Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2292, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2292, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2292, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2297 );
2298 }
2299 }
2300 Perl_re_printf( aTHX_ "\n");
2301 Perl_re_indentf( aTHX_ "State|-----------------------", depth+1);
2302
2303 for( state = 0 ; state < trie->uniquecharcount ; state++ )
2304 Perl_re_printf( aTHX_ "%.*s", colwidth, "--------");
2305 Perl_re_printf( aTHX_ "\n");
2306
2307 for( state = 1 ; state < trie->statecount ; state++ ) {
2308 const U32 base = trie->states[ state ].trans.base;
2309
2310 Perl_re_indentf( aTHX_ "#%4" UVXf"lX" "|", depth+1, (UV)state);
2311
2312 if ( trie->states[ state ].wordnum ) {
2313 Perl_re_printf( aTHX_ " W%4X", trie->states[ state ].wordnum );
2314 } else {
2315 Perl_re_printf( aTHX_ "%6s", "" );
2316 }
2317
2318 Perl_re_printf( aTHX_ " @%4" UVXf"lX" " ", (UV)base );
2319
2320 if ( base ) {
2321 U32 ofs = 0;
2322
2323 while( ( base + ofs < trie->uniquecharcount ) ||
2324 ( base + ofs - trie->uniquecharcount < trie->lasttrans
2325 && trie->trans[ base + ofs - trie->uniquecharcount ].check
2326 != state))
2327 ofs++;
2328
2329 Perl_re_printf( aTHX_ "+%2" UVXf"lX" "[ ", (UV)ofs);
2330
2331 for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
2332 if ( ( base + ofs >= trie->uniquecharcount )
2333 && ( base + ofs - trie->uniquecharcount
2334 < trie->lasttrans )
2335 && trie->trans[ base + ofs
2336 - trie->uniquecharcount ].check == state )
2337 {
2338 Perl_re_printf( aTHX_ "%*" UVXf"lX", colwidth,
2339 (UV)trie->trans[ base + ofs - trie->uniquecharcount ].next
2340 );
2341 } else {
2342 Perl_re_printf( aTHX_ "%*s", colwidth," ." );
2343 }
2344 }
2345
2346 Perl_re_printf( aTHX_ "]");
2347
2348 }
2349 Perl_re_printf( aTHX_ "\n" );
2350 }
2351 Perl_re_indentf( aTHX_ "word_info N:(prev,len)=",
2352 depth);
2353 for (word=1; word <= trie->wordcount; word++) {
2354 Perl_re_printf( aTHX_ " %d:(%d,%d)",
2355 (int)word, (int)(trie->wordinfo[word].prev),
2356 (int)(trie->wordinfo[word].len));
2357 }
2358 Perl_re_printf( aTHX_ "\n" );
2359}
2360/*
2361 Dumps a fully constructed but uncompressed trie in list form.
2362 List tries normally only are used for construction when the number of
2363 possible chars (trie->uniquecharcount) is very high.
2364 Used for debugging make_trie().
2365*/
2366STATICstatic void
2367S_dump_trie_interim_list(pTHX_ const struct _reg_trie_data *trie,
2368 HV *widecharmap, AV *revcharmap, U32 next_alloc,
2369 U32 depth)
2370{
2371 U32 state;
2372 SV *sv=sv_newmortal()Perl_sv_newmortal();
2373 int colwidth= widecharmap ? 6 : 4;
2374 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2374, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 2374, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
2375
2376 PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST((trie) ? (void)0 : __assert2("re_comp.c", 2376, __func__, "trie"
)); ((revcharmap) ? (void)0 : __assert2("re_comp.c", 2376, __func__
, "revcharmap"))
;
2377
2378 /* print out the table precompression. */
2379 Perl_re_indentf( aTHX_ "State :Word | Transition Data\n",
2380 depth+1 );
2381 Perl_re_indentf( aTHX_ "%s",
2382 depth+1, "------:-----+-----------------\n" );
2383
2384 for( state=1 ; state < next_alloc ; state ++ ) {
2385 U16 charid;
2386
2387 Perl_re_indentf( aTHX_ " %4" UVXf"lX" " :",
2388 depth+1, (UV)state );
2389 if ( ! trie->states[ state ].wordnum ) {
2390 Perl_re_printf( aTHX_ "%5s| ","");
2391 } else {
2392 Perl_re_printf( aTHX_ "W%4x| ",
2393 trie->states[ state ].wordnum
2394 );
2395 }
2396 for( charid = 1 ; charid <= TRIE_LIST_USED( state )( trie->states[state].trans.list ? (( (trie->states[state
].trans.list)[ 0 ].forid ) - 1) : 0 )
; charid++ ) {
2397 SV ** const tmp = av_fetch( revcharmap,Perl_av_fetch( revcharmap,(trie->states[state].trans.list)
[ charid ].forid,0)
2398 TRIE_LIST_ITEM(state, charid).forid, 0)Perl_av_fetch( revcharmap,(trie->states[state].trans.list)
[ charid ].forid,0)
;
2399 if ( tmp ) {
2400 Perl_re_printf( aTHX_ "%*s:%3X=%4" UVXf"lX" " | ",
2401 colwidth,
2402 pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp),Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2402, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2402, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2402, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2403 colwidth,Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2402, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2402, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2402, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2404 PL_colors[0], PL_colors[1],Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2402, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2402, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2402, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2405 (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0)Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2402, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2402, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2402, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2406 | PERL_PV_ESCAPE_FIRSTCHARPerl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2402, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2402, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2402, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2407 )Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2402, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2402, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2402, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
,
2408 TRIE_LIST_ITEM(state, charid)(trie->states[state].trans.list)[ charid ].forid,
2409 (UV)TRIE_LIST_ITEM(state, charid)(trie->states[state].trans.list)[ charid ].newstate
2410 );
2411 if (!(charid % 10))
2412 Perl_re_printf( aTHX_ "\n%*s| ",
2413 (int)((depth * 2) + 14), "");
2414 }
2415 }
2416 Perl_re_printf( aTHX_ "\n");
2417 }
2418}
2419
2420/*
2421 Dumps a fully constructed but uncompressed trie in table form.
2422 This is the normal DFA style state transition table, with a few
2423 twists to facilitate compression later.
2424 Used for debugging make_trie().
2425*/
2426STATICstatic void
2427S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie,
2428 HV *widecharmap, AV *revcharmap, U32 next_alloc,
2429 U32 depth)
2430{
2431 U32 state;
2432 U16 charid;
2433 SV *sv=sv_newmortal()Perl_sv_newmortal();
2434 int colwidth= widecharmap ? 6 : 4;
2435 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2435, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 2435, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
2436
2437 PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE((trie) ? (void)0 : __assert2("re_comp.c", 2437, __func__, "trie"
)); ((revcharmap) ? (void)0 : __assert2("re_comp.c", 2437, __func__
, "revcharmap"))
;
2438
2439 /*
2440 print out the table precompression so that we can do a visual check
2441 that they are identical.
2442 */
2443
2444 Perl_re_indentf( aTHX_ "Char : ", depth+1 );
2445
2446 for( charid = 0 ; charid < trie->uniquecharcount ; charid++ ) {
2447 SV ** const tmp = av_fetch( revcharmap, charid, 0)Perl_av_fetch( revcharmap,charid,0);
2448 if ( tmp ) {
2449 Perl_re_printf( aTHX_ "%*s",
2450 colwidth,
2451 pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), colwidth,Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2451, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2451, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2451, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2452 PL_colors[0], PL_colors[1],Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2451, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2451, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2451, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2453 (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2451, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2451, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2451, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2454 PERL_PV_ESCAPE_FIRSTCHARPerl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2451, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2451, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2451, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2455 )Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv
)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV *const _svcur
= (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2451, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2451, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2451, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),colwidth,PL_colors[0],PL_colors[1],(((*tmp
)->sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800)
2456 );
2457 }
2458 }
2459
2460 Perl_re_printf( aTHX_ "\n");
2461 Perl_re_indentf( aTHX_ "State+-", depth+1 );
2462
2463 for( charid=0 ; charid < trie->uniquecharcount ; charid++ ) {
2464 Perl_re_printf( aTHX_ "%.*s", colwidth,"--------");
2465 }
2466
2467 Perl_re_printf( aTHX_ "\n" );
2468
2469 for( state=1 ; state < next_alloc ; state += trie->uniquecharcount ) {
2470
2471 Perl_re_indentf( aTHX_ "%4" UVXf"lX" " : ",
2472 depth+1,
2473 (UV)TRIE_NODENUM( state )(((state)-1)/(trie->uniquecharcount)+1) );
2474
2475 for( charid = 0 ; charid < trie->uniquecharcount ; charid++ ) {
2476 UV v=(UV)SAFE_TRIE_NODENUM( trie->trans[ state + charid ].next )((trie->trans[ state + charid ].next) ? (((trie->trans[
state + charid ].next)-1)/(trie->uniquecharcount)+1) : (trie
->trans[ state + charid ].next))
;
2477 if (v)
2478 Perl_re_printf( aTHX_ "%*" UVXf"lX", colwidth, v );
2479 else
2480 Perl_re_printf( aTHX_ "%*s", colwidth, "." );
2481 }
2482 if ( ! trie->states[ TRIE_NODENUM( state )(((state)-1)/(trie->uniquecharcount)+1) ].wordnum ) {
2483 Perl_re_printf( aTHX_ " (%4" UVXf"lX" ")\n",
2484 (UV)trie->trans[ state ].check );
2485 } else {
2486 Perl_re_printf( aTHX_ " (%4" UVXf"lX" ") W%4X\n",
2487 (UV)trie->trans[ state ].check,
2488 trie->states[ TRIE_NODENUM( state )(((state)-1)/(trie->uniquecharcount)+1) ].wordnum );
2489 }
2490 }
2491}
2492
2493#endif
2494
2495
2496/* make_trie(startbranch,first,last,tail,word_count,flags,depth)
2497 startbranch: the first branch in the whole branch sequence
2498 first : start branch of sequence of branch-exact nodes.
2499 May be the same as startbranch
2500 last : Thing following the last branch.
2501 May be the same as tail.
2502 tail : item following the branch sequence
2503 count : words in the sequence
2504 flags : currently the OP() type we will be building one of /EXACT(|F|FA|FU|FU_SS|L|FLU8)/
2505 depth : indent depth
2506
2507Inplace optimizes a sequence of 2 or more Branch-Exact nodes into a TRIE node.
2508
2509A trie is an N'ary tree where the branches are determined by digital
2510decomposition of the key. IE, at the root node you look up the 1st character and
2511follow that branch repeat until you find the end of the branches. Nodes can be
2512marked as "accepting" meaning they represent a complete word. Eg:
2513
2514 /he|she|his|hers/
2515
2516would convert into the following structure. Numbers represent states, letters
2517following numbers represent valid transitions on the letter from that state, if
2518the number is in square brackets it represents an accepting state, otherwise it
2519will be in parenthesis.
2520
2521 +-h->+-e->[3]-+-r->(8)-+-s->[9]
2522 | |
2523 | (2)
2524 | |
2525 (1) +-i->(6)-+-s->[7]
2526 |
2527 +-s->(3)-+-h->(4)-+-e->[5]
2528
2529 Accept Word Mapping: 3=>1 (he),5=>2 (she), 7=>3 (his), 9=>4 (hers)
2530
2531This shows that when matching against the string 'hers' we will begin at state 1
2532read 'h' and move to state 2, read 'e' and move to state 3 which is accepting,
2533then read 'r' and go to state 8 followed by 's' which takes us to state 9 which
2534is also accepting. Thus we know that we can match both 'he' and 'hers' with a
2535single traverse. We store a mapping from accepting to state to which word was
2536matched, and then when we have multiple possibilities we try to complete the
2537rest of the regex in the order in which they occurred in the alternation.
2538
2539The only prior NFA like behaviour that would be changed by the TRIE support is
2540the silent ignoring of duplicate alternations which are of the form:
2541
2542 / (DUPE|DUPE) X? (?{ ... }) Y /x
2543
2544Thus EVAL blocks following a trie may be called a different number of times with
2545and without the optimisation. With the optimisations dupes will be silently
2546ignored. This inconsistent behaviour of EVAL type nodes is well established as
2547the following demonstrates:
2548
2549 'words'=~/(word|word|word)(?{ print $1 })[xyz]/
2550
2551which prints out 'word' three times, but
2552
2553 'words'=~/(word|word|word)(?{ print $1 })S/
2554
2555which doesnt print it out at all. This is due to other optimisations kicking in.
2556
2557Example of what happens on a structural level:
2558
2559The regexp /(ac|ad|ab)+/ will produce the following debug output:
2560
2561 1: CURLYM[1] {1,32767}(18)
2562 5: BRANCH(8)
2563 6: EXACT <ac>(16)
2564 8: BRANCH(11)
2565 9: EXACT <ad>(16)
2566 11: BRANCH(14)
2567 12: EXACT <ab>(16)
2568 16: SUCCEED(0)
2569 17: NOTHING(18)
2570 18: END(0)
2571
2572This would be optimizable with startbranch=5, first=5, last=16, tail=16
2573and should turn into:
2574
2575 1: CURLYM[1] {1,32767}(18)
2576 5: TRIE(16)
2577 [Words:3 Chars Stored:6 Unique Chars:4 States:5 NCP:1]
2578 <ac>
2579 <ad>
2580 <ab>
2581 16: SUCCEED(0)
2582 17: NOTHING(18)
2583 18: END(0)
2584
2585Cases where tail != last would be like /(?foo|bar)baz/:
2586
2587 1: BRANCH(4)
2588 2: EXACT <foo>(8)
2589 4: BRANCH(7)
2590 5: EXACT <bar>(8)
2591 7: TAIL(8)
2592 8: EXACT <baz>(10)
2593 10: END(0)
2594
2595which would be optimizable with startbranch=1, first=1, last=7, tail=8
2596and would end up looking like:
2597
2598 1: TRIE(8)
2599 [Words:2 Chars Stored:6 Unique Chars:5 States:7 NCP:1]
2600 <foo>
2601 <bar>
2602 7: TAIL(8)
2603 8: EXACT <baz>(10)
2604 10: END(0)
2605
2606 d = uvchr_to_utf8_flags(d, uv, 0);
2607
2608is the recommended Unicode-aware way of saying
2609
2610 *(d++) = uv;
2611*/
2612
2613#define TRIE_STORE_REVCHAR(val)do { if ((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { SV
*zlopp = Perl_newSV( 13); unsigned char *flrbbbbb = (unsigned
char *) (*({ SV *const _svpvx = ((SV *)({ void *_p = (zlopp)
; _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
2613, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2613, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2613, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })); unsigned char *const
kapow = Perl_uvoffuni_to_utf8_flags_msgs( flrbbbbb,((UV) ((val
) | 0)),0,0); *kapow = '\0'; do { ((PL_valid_types_PVX[((svtype
)((zlopp)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2613, __func__, "PL_valid_types_PVX[SvTYPE(zlopp) & SVt_MASK]"
)); ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2613, __func__
, "!isGV_with_GP(zlopp)")); ((!(((svtype)((zlopp)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (zlopp)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2613, __func__, "!(SvTYPE(zlopp) == SVt_PVIO && !(IoFLAGS(zlopp) & IOf_FAKE_DIRP))"
)); (((XPV*) (zlopp)->sv_any)->xpv_cur = (kapow - flrbbbbb
)); } while (0); (((!((zlopp)->sv_flags & 0x00000800) ||
!(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })
); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2613, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 2613, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 2613, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 2613, __func__, "!((zlopp)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 2613, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 2613, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 2613, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2613, __func__
, "!((((zlopp)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVLV))"
)), (zlopp)->sv_flags |= (0x00000400|0x00004000)); ((zlopp
)->sv_flags |= (0x20000000)); Perl_av_push( revcharmap,zlopp
); } else { char ooooff = (char)val; Perl_av_push( revcharmap
,Perl_newSVpvn( &ooooff,1)); } } while (0)
\
2614 STMT_STARTdo { \
2615 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { \
2616 SV *zlopp = newSV(UTF8_MAXBYTES)Perl_newSV( 13); \
2617 unsigned char *flrbbbbb = (unsigned char *) SvPVX(zlopp)(*({ SV *const _svpvx = ((SV *)({ void *_p = (zlopp); _p; }))
; ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2617, __func__
, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]")); ((!(
(((_svpvx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svpvx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 2617, __func__, "!isGV_with_GP(_svpvx)"
)); ((!(((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svpvx)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 2617, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
; \
2618 unsigned char *const kapow = uvchr_to_utf8(flrbbbbb, val)Perl_uvoffuni_to_utf8_flags_msgs( flrbbbbb,((UV) ((val) | 0))
,0,0)
; \
2619 *kapow = '\0'; \
2620 SvCUR_set(zlopp, kapow - flrbbbbb)do { ((PL_valid_types_PVX[((svtype)((zlopp)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2620,
__func__, "PL_valid_types_PVX[SvTYPE(zlopp) & SVt_MASK]"
)); ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2620, __func__
, "!isGV_with_GP(zlopp)")); ((!(((svtype)((zlopp)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (zlopp)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2620, __func__, "!(SvTYPE(zlopp) == SVt_PVIO && !(IoFLAGS(zlopp) & IOf_FAKE_DIRP))"
)); (((XPV*) (zlopp)->sv_any)->xpv_cur = (kapow - flrbbbbb
)); } while (0)
; \
2621 SvPOK_on(zlopp)(((!((zlopp)->sv_flags & 0x00000800) || !(*({ SV *const
_svrv = ((SV *)({ void *_p = (zlopp); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 2621, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2621, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2621, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 2621, __func__, "!((zlopp)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 2621, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 2621, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 2621, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2621, __func__
, "!((((zlopp)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVLV))"
)), (zlopp)->sv_flags |= (0x00000400|0x00004000))
; \
2622 SvUTF8_on(zlopp)((zlopp)->sv_flags |= (0x20000000)); \
2623 av_push(revcharmap, zlopp)Perl_av_push( revcharmap,zlopp); \
2624 } else { \
2625 char ooooff = (char)val; \
2626 av_push(revcharmap, newSVpvn(&ooooff, 1))Perl_av_push( revcharmap,Perl_newSVpvn( &ooooff,1)); \
2627 } \
2628 } STMT_ENDwhile (0)
2629
2630/* This gets the next character from the input, folding it if not already
2631 * folded. */
2632#define TRIE_READ_CHARdo { wordlen++; if ( (((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0) ) { uvc = Perl_valid_utf8_to_uvchr( (const U8*) uc, &
len); } else if (folder == PL_fold_latin1) { ((*uc != 0xDF) ?
(void)0 : __assert2("re_comp.c", 2632, __func__, "*uc != LATIN_SMALL_LETTER_SHARP_S"
)); uvc = ((! ( (sizeof(*uc) == 1) || !(((U64)((*uc) | 0)) &
~0xFF))) ? (*uc) : PL_latin1_lc[ (U8) (*uc) ]); if (__builtin_expect
(((uvc == 0xB5) ? (_Bool)1 : (_Bool)0),(0))) uvc = 0x03BC; len
= 1; } else { uvc = (U32)*uc; len = 1; } } while (0)
STMT_STARTdo { \
2633 wordlen++; \
2634 if ( UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ) { \
2635 /* if it is UTF then it is either already folded, or does not need \
2636 * folding */ \
2637 uvc = valid_utf8_to_uvchrPerl_valid_utf8_to_uvchr( (const U8*) uc, &len); \
2638 } \
2639 else if (folder == PL_fold_latin1) { \
2640 /* This folder implies Unicode rules, which in the range expressible \
2641 * by not UTF is the lower case, with the two exceptions, one of \
2642 * which should have been taken care of before calling this */ \
2643 assert(*uc != LATIN_SMALL_LETTER_SHARP_S)((*uc != 0xDF) ? (void)0 : __assert2("re_comp.c", 2643, __func__
, "*uc != LATIN_SMALL_LETTER_SHARP_S"))
; \
2644 uvc = toLOWER_L1(*uc)((! ( (sizeof(*uc) == 1) || !(((U64)((*uc) | 0)) & ~0xFF)
)) ? (*uc) : PL_latin1_lc[ (U8) (*uc) ])
; \
2645 if (UNLIKELY(uvc == MICRO_SIGN)__builtin_expect(((uvc == 0xB5) ? (_Bool)1 : (_Bool)0),(0))) uvc = GREEK_SMALL_LETTER_MU0x03BC; \
2646 len = 1; \
2647 } else { \
2648 /* raw data, will be folded later if needed */ \
2649 uvc = (U32)*uc; \
2650 len = 1; \
2651 } \
2652} STMT_ENDwhile (0)
2653
2654
2655
2656#define TRIE_LIST_PUSH(state,fid,ns)do { if ( ( (trie->states[state].trans.list)[ 0 ].forid ) >=
( (trie->states[state].trans.list)[ 0 ].newstate ) ) { U32
ging = ( (trie->states[state].trans.list)[ 0 ].newstate )
* 2; (trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(ging) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(ging)))
) ? (size_t)(ging) : ((size_t)-1)/sizeof(reg_trie_trans_le)) >
((size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysrealloc((void *)(trie->states[ state ].trans
.list),(size_t)((ging)*sizeof(reg_trie_trans_le)))))); ( (trie
->states[state].trans.list)[ 0 ].newstate ) = ging; } (trie
->states[state].trans.list)[ ( (trie->states[state].trans
.list)[ 0 ].forid ) ].forid = fid; (trie->states[state].trans
.list)[ ( (trie->states[state].trans.list)[ 0 ].forid ) ].
newstate = ns; ( (trie->states[state].trans.list)[ 0 ].forid
)++; } while (0)
STMT_STARTdo { \
2657 if ( TRIE_LIST_CUR( state )( (trie->states[state].trans.list)[ 0 ].forid ) >=TRIE_LIST_LEN( state )( (trie->states[state].trans.list)[ 0 ].newstate ) ) { \
2658 U32 ging = TRIE_LIST_LEN( state )( (trie->states[state].trans.list)[ 0 ].newstate ) * 2; \
2659 Renew( trie->states[ state ].trans.list, ging, reg_trie_trans_le )(trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(ging) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(ging)))
) ? (size_t)(ging) : ((size_t)-1)/sizeof(reg_trie_trans_le)) >
((size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysrealloc((void *)(trie->states[ state ].trans
.list),(size_t)((ging)*sizeof(reg_trie_trans_le))))))
; \
2660 TRIE_LIST_LEN( state )( (trie->states[state].trans.list)[ 0 ].newstate ) = ging; \
2661 } \
2662 TRIE_LIST_ITEM( state, TRIE_LIST_CUR( state ) )(trie->states[state].trans.list)[ ( (trie->states[state
].trans.list)[ 0 ].forid ) ]
.forid = fid; \
2663 TRIE_LIST_ITEM( state, TRIE_LIST_CUR( state ) )(trie->states[state].trans.list)[ ( (trie->states[state
].trans.list)[ 0 ].forid ) ]
.newstate = ns; \
2664 TRIE_LIST_CUR( state )( (trie->states[state].trans.list)[ 0 ].forid )++; \
2665} STMT_ENDwhile (0)
2666
2667#define TRIE_LIST_NEW(state)do { (trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(4) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(4)))) ?
(size_t)(4) : ((size_t)-1)/sizeof(reg_trie_trans_le)) > (
(size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool)0
),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysmalloc((size_t)((4)*sizeof(reg_trie_trans_le))
)))); ( (trie->states[state].trans.list)[ 0 ].forid ) = 1;
( (trie->states[state].trans.list)[ 0 ].newstate ) = 4; }
while (0)
STMT_STARTdo { \
2668 Newx( trie->states[ state ].trans.list, \(trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(4) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(4)))) ?
(size_t)(4) : ((size_t)-1)/sizeof(reg_trie_trans_le)) > (
(size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool)0
),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysmalloc((size_t)((4)*sizeof(reg_trie_trans_le))
))))
2669 4, reg_trie_trans_le )(trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(4) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(4)))) ?
(size_t)(4) : ((size_t)-1)/sizeof(reg_trie_trans_le)) > (
(size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool)0
),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysmalloc((size_t)((4)*sizeof(reg_trie_trans_le))
))))
; \
2670 TRIE_LIST_CUR( state )( (trie->states[state].trans.list)[ 0 ].forid ) = 1; \
2671 TRIE_LIST_LEN( state )( (trie->states[state].trans.list)[ 0 ].newstate ) = 4; \
2672} STMT_ENDwhile (0)
2673
2674#define TRIE_HANDLE_WORD(state)do { U16 dupe= trie->states[ state ].wordnum; regnode * const
noper_next = Perl_regnext( noper); do {{ SV* tmp; if (((noper
)->type) != 54) tmp = Perl_newSVpvn_flags( (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (((((noper)->type
) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 2674, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2674, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2674, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2674, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0); curword++; trie->wordinfo[curword].prev
= 0; trie->wordinfo[curword].len = wordlen; trie->wordinfo
[curword].accept = state; if ( noper_next < tail ) { if (!
trie->jump) trie->jump = (U16 *) calloc((word_count + 1
), (sizeof(U16))); trie->jump[curword] = (U16)(noper_next -
convert); if (!jumper) jumper = noper_next; if (!nextbranch)
nextbranch= Perl_regnext( cur); } if ( dupe ) { trie->wordinfo
[curword].prev = trie->wordinfo[dupe].prev; trie->wordinfo
[dupe].prev = curword; } else { trie->states[ state ].wordnum
= curword; } } while (0)
STMT_STARTdo { \
2675 U16 dupe= trie->states[ state ].wordnum; \
2676 regnode * const noper_next = regnext( noper )Perl_regnext( noper); \
2677 \
2678 DEBUG_r({ \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2679 /* store the word for dumping */ \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2680 SV* tmp; \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2681 if (OP(noper) != NOTHING) \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2682 tmp = newSVpvn_utf8(STRING(noper), STR_LEN(noper), UTF); \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2683 else \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2684 tmp = newSVpvn_utf8( "", 0, UTF ); \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2685 av_push( trie_words, tmp ); \do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
2686 })do {{ SV* tmp; if (((noper)->type) != 54) tmp = Perl_newSVpvn_flags
( (((((noper)->type) == 41 || ((noper)->type) == 51) ? (
((((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 2682, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2682, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0)
; \
2687 \
2688 curword++; \
2689 trie->wordinfo[curword].prev = 0; \
2690 trie->wordinfo[curword].len = wordlen; \
2691 trie->wordinfo[curword].accept = state; \
2692 \
2693 if ( noper_next < tail ) { \
2694 if (!trie->jump) \
2695 trie->jump = (U16 *) PerlMemShared_calloc( word_count + 1, \calloc((word_count + 1), (sizeof(U16)))
2696 sizeof(U16) )calloc((word_count + 1), (sizeof(U16))); \
2697 trie->jump[curword] = (U16)(noper_next - convert); \
2698 if (!jumper) \
2699 jumper = noper_next; \
2700 if (!nextbranch) \
2701 nextbranch= regnext(cur)Perl_regnext( cur); \
2702 } \
2703 \
2704 if ( dupe ) { \
2705 /* It's a dupe. Pre-insert into the wordinfo[].prev */\
2706 /* chain, so that when the bits of chain are later */\
2707 /* linked together, the dups appear in the chain */\
2708 trie->wordinfo[curword].prev = trie->wordinfo[dupe].prev; \
2709 trie->wordinfo[dupe].prev = curword; \
2710 } else { \
2711 /* we haven't inserted this word yet. */ \
2712 trie->states[ state ].wordnum = curword; \
2713 } \
2714} STMT_ENDwhile (0)
2715
2716
2717#define TRIE_TRANS_STATE(state,base,ucharcount,charid,special)( ( base + charid >= ucharcount && base + charid <
ubound && state == trie->trans[ base - ucharcount
+ charid ].check && trie->trans[ base - ucharcount
+ charid ].next ) ? trie->trans[ base - ucharcount + charid
].next : ( state==1 ? special : 0 ) )
\
2718 ( ( base + charid >= ucharcount \
2719 && base + charid < ubound \
2720 && state == trie->trans[ base - ucharcount + charid ].check \
2721 && trie->trans[ base - ucharcount + charid ].next ) \
2722 ? trie->trans[ base - ucharcount + charid ].next \
2723 : ( state==1 ? special : 0 ) \
2724 )
2725
2726#define TRIE_BITMAP_SET_FOLDED(trie, uvc, folder)do { ((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (
UV) (uvc)) >> 3) ] ) |= (1U << (((U8)uvc) & 7
))); if ( folder ) ((( (U8*) (((reg_trie_data *)(trie))->bitmap
)) [ ( ( (UV) (folder[(U8) uvc ])) >> 3) ] ) |= (1U <<
(((U8)folder[(U8) uvc ]) & 7))); if ( !(((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0) ) { if (! ((((U64)(((UV) ((uvc)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0)))) { ((( (
U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (((((
sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U <<
6) - 1))) ? (void)0 : __assert2("re_comp.c", 2726, __func__,
"(sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 2726, __func__
, "! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 2726, __func__, "( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0)))))))) >>
3) ] ) |= (1U << (((U8)((((sizeof(uvc) == 1) || !(((U64
)(uvc)) & ~(32 * (1U << 6) - 1))) ? (void)0 : __assert2
("re_comp.c", 2726, __func__, "(sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 2726, __func__
, "! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 2726, __func__, "( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0))))))) & 7))
); } } } while (0)
\do
2727STMT_STARTdo { \
2728 TRIE_BITMAP_SET(trie, uvc)((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (
uvc)) >> 3) ] ) |= (1U << (((U8)uvc) & 7)))
; \
2729 /* store the folded codepoint */ \
2730 if ( folder ) \
2731 TRIE_BITMAP_SET(trie, folder[(U8) uvc ])((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (
folder[(U8) uvc ])) >> 3) ] ) |= (1U << (((U8)folder
[(U8) uvc ]) & 7)))
; \
2732 \
2733 if ( !UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ) { \
2734 /* store first byte of utf8 representation of */ \
2735 /* variant codepoints */ \
2736 if (! UVCHR_IS_INVARIANT(uvc)((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) &
0xB0)))
) { \
2737 TRIE_BITMAP_SET(trie, UTF8_TWO_BYTE_HI(uvc))((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (
((((sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U <<
6) - 1))) ? (void)0 : __assert2("re_comp.c", 2737, __func__,
"(sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 2737, __func__
, "! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 2737, __func__, "( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0)))))))) >>
3) ] ) |= (1U << (((U8)((((sizeof(uvc) == 1) || !(((U64
)(uvc)) & ~(32 * (1U << 6) - 1))) ? (void)0 : __assert2
("re_comp.c", 2737, __func__, "(sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 2737, __func__
, "! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 2737, __func__, "( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0))))))) & 7))
)
; \
2738 } \
2739 } \
2740} STMT_ENDwhile (0)
2741#define MADE_TRIE1 1
2742#define MADE_JUMP_TRIE2 2
2743#define MADE_EXACT_TRIE4 4
2744
2745STATICstatic I32
2746S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
2747 regnode *first, regnode *last, regnode *tail,
2748 U32 word_count, U32 flags, U32 depth)
2749{
2750 /* first pass, loop through and scan words */
2751 reg_trie_data *trie;
2752 HV *widecharmap = NULL((void*)0);
2753 AV *revcharmap = newAV()((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV)); _p; }));
2754 regnode *cur;
2755 STRLEN len = 0;
2756 UV uvc = 0;
2757 U16 curword = 0;
2758 U32 next_alloc = 0;
2759 regnode *jumper = NULL((void*)0);
2760 regnode *nextbranch = NULL((void*)0);
2761 regnode *convert = NULL((void*)0);
2762 U32 *prev_states; /* temp array mapping each state to previous one */
2763 /* we just use folder as a flag in utf8 */
2764 const U8 * folder = NULL((void*)0);
2765
2766 /* in the below add_data call we are storing either 'tu' or 'tuaa'
2767 * which stands for one trie structure, one hash, optionally followed
2768 * by two arrays */
2769#ifdef DEBUGGING
2770 const U32 data_slot = add_dataS_add_data( pRExC_state, STR_WITH_LEN("tuaa")("" "tuaa" ""), (sizeof("tuaa")-1));
2771 AV *trie_words = NULL((void*)0);
2772 /* along with revcharmap, this only used during construction but both are
2773 * useful during debugging so we store them in the struct when debugging.
2774 */
2775#else
2776 const U32 data_slot = add_dataS_add_data( pRExC_state, STR_WITH_LEN("tu")("" "tu" ""), (sizeof("tu")-1));
2777 STRLEN trie_charcount=0;
2778#endif
2779 SV *re_trie_maxbuff;
2780 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2780, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 2780, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
2781
2782 PERL_ARGS_ASSERT_MAKE_TRIE((pRExC_state) ? (void)0 : __assert2("re_comp.c", 2782, __func__
, "pRExC_state")); ((startbranch) ? (void)0 : __assert2("re_comp.c"
, 2782, __func__, "startbranch")); ((first) ? (void)0 : __assert2
("re_comp.c", 2782, __func__, "first")); ((last) ? (void)0 : __assert2
("re_comp.c", 2782, __func__, "last")); ((tail) ? (void)0 : __assert2
("re_comp.c", 2782, __func__, "tail"))
;
2783#ifndef DEBUGGING
2784 PERL_UNUSED_ARG(depth)((void)sizeof(depth));
2785#endif
2786
2787 switch (flags) {
2788 case EXACT40: case EXACT_REQ850: case EXACTL42: break;
2789 case EXACTFAA46:
2790 case EXACTFUP47:
2791 case EXACTFU45:
2792 case EXACTFLU848: folder = PL_fold_latin1; break;
2793 case EXACTF43: folder = PL_fold; break;
2794 default: Perl_croak( aTHX_ "panic! In trie construction, unknown node type %u %s", (unsigned) flags, PL_reg_name[flags] );
2795 }
2796
2797 trie = (reg_trie_data *) PerlMemShared_calloc( 1, sizeof(reg_trie_data) )calloc((1), (sizeof(reg_trie_data)));
2798 trie->refcount = 1;
2799 trie->startstate = 1;
2800 trie->wordcount = word_count;
2801 RExC_rxi(pRExC_state->rxi)->data->data[ data_slot ] = (void*)trie;
2802 trie->charmap = (U16 *) PerlMemShared_calloc( 256, sizeof(U16) )calloc((256), (sizeof(U16)));
2803 if (flags == EXACT40 || flags == EXACT_REQ850 || flags == EXACTL42)
2804 trie->bitmap = (char *) PerlMemShared_calloc( ANYOF_BITMAP_SIZE, 1 )calloc((((1 << 8) / 8)), (1));
2805 trie->wordinfo = (reg_trie_wordinfo *) PerlMemShared_calloc(calloc((trie->wordcount+1), (sizeof(reg_trie_wordinfo)))
2806 trie->wordcount+1, sizeof(reg_trie_wordinfo))calloc((trie->wordcount+1), (sizeof(reg_trie_wordinfo)));
2807
2808 DEBUG_r({do {{ trie_words = ((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV
)); _p; })); };} while (0)
2809 trie_words = newAV();do {{ trie_words = ((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV
)); _p; })); };} while (0)
2810 })do {{ trie_words = ((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV
)); _p; })); };} while (0)
;
2811
2812 re_trie_maxbuff = get_sv(RE_TRIE_MAXBUF_NAME, GV_ADD)Perl_get_sv( "\022E_TRIE_MAXBUF",0x01);
2813 assert(re_trie_maxbuff)((re_trie_maxbuff) ? (void)0 : __assert2("re_comp.c", 2813, __func__
, "re_trie_maxbuff"))
;
2814 if (!SvIOK(re_trie_maxbuff)((re_trie_maxbuff)->sv_flags & 0x00000100)) {
2815 sv_setiv(re_trie_maxbuff, RE_TRIE_MAXBUF_INIT)Perl_sv_setiv( re_trie_maxbuff,65536);
2816 }
2817 DEBUG_TRIE_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
2818 Perl_re_indentf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
2819 "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
2820 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
2821 REG_NODE_NUM(startbranch), REG_NODE_NUM(first),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
2822 REG_NODE_NUM(last), REG_NODE_NUM(tail), (int)depth);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
2823 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "make_trie start==%d, first==%d, last==%d, tail==%d depth=%d\n"
, depth+1, ((startbranch) ? (int)((startbranch)-(pRExC_state->
emit_start)) : -1), ((first) ? (int)((first)-(pRExC_state->
emit_start)) : -1), ((last) ? (int)((last)-(pRExC_state->emit_start
)) : -1), ((tail) ? (int)((tail)-(pRExC_state->emit_start)
) : -1), (int)depth); };} while (0)
;
2824
2825 /* Find the node we are going to overwrite */
2826 if ( first == startbranch && OP( last )((last)->type) != BRANCH39 ) {
2827 /* whole branch chain */
2828 convert = first;
2829 } else {
2830 /* branch sub-chain */
2831 convert = NEXTOPER( first )((first) + 1);
2832 }
2833
2834 /* -- First loop and Setup --
2835
2836 We first traverse the branches and scan each word to determine if it
2837 contains widechars, and how many unique chars there are, this is
2838 important as we have to build a table with at least as many columns as we
2839 have unique chars.
2840
2841 We use an array of integers to represent the character codes 0..255
2842 (trie->charmap) and we use a an HV* to store Unicode characters. We use
2843 the native representation of the character value as the key and IV's for
2844 the coded index.
2845
2846 *TODO* If we keep track of how many times each character is used we can
2847 remap the columns so that the table compression later on is more
2848 efficient in terms of memory by ensuring the most common value is in the
2849 middle and the least common are on the outside. IMO this would be better
2850 than a most to least common mapping as theres a decent chance the most
2851 common letter will share a node with the least common, meaning the node
2852 will not be compressible. With a middle is most common approach the worst
2853 case is when we have the least common nodes twice.
2854
2855 */
2856
2857 for ( cur = first ; cur < last ; cur = regnext( cur )Perl_regnext( cur) ) {
2858 regnode *noper = NEXTOPER( cur )((cur) + 1);
2859 const U8 *uc;
2860 const U8 *e;
2861 int foldlen = 0;
2862 U32 wordlen = 0; /* required init */
2863 STRLEN minchars = 0;
2864 STRLEN maxchars = 0;
2865 bool_Bool set_bit = trie->bitmap ? 1 : 0; /*store the first char in the
2866 bitmap?*/
2867
2868 if (OP(noper)((noper)->type) == NOTHING54) {
2869 /* skip past a NOTHING at the start of an alternation
2870 * eg, /(?:)a|(?:b)/ should be the same as /a|b/
2871 *
2872 * If the next node is not something we are supposed to process
2873 * we will just ignore it due to the condition guarding the
2874 * next block.
2875 */
2876
2877 regnode *noper_next= regnext(noper)Perl_regnext( noper);
2878 if (noper_next < tail)
2879 noper= noper_next;
2880 }
2881
2882 if ( noper < tail
2883 && ( OP(noper)((noper)->type) == flags
2884 || (flags == EXACT40 && OP(noper)((noper)->type) == EXACT_REQ850)
2885 || (flags == EXACTFU45 && ( OP(noper)((noper)->type) == EXACTFU_REQ852
2886 || OP(noper)((noper)->type) == EXACTFUP47))))
2887 {
2888 uc= (U8*)STRING(noper)((((noper)->type) == 41 || ((noper)->type) == 51) ? (((
((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2888, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2888, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))
;
2889 e= uc + STR_LEN(noper)((((noper)->type) == 41 || ((noper)->type) == 51) ? (((
((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 2889, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 2889, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))
;
2890 } else {
2891 trie->minlen= 0;
2892 continue;
2893 }
2894
2895
2896 if ( set_bit ) { /* bitmap only alloced when !(UTF&&Folding) */
2897 TRIE_BITMAP_SET(trie,*uc)((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (
*uc)) >> 3) ] ) |= (1U << (((U8)*uc) & 7)))
; /* store the raw first byte
2898 regardless of encoding */
2899 if (OP( noper )((noper)->type) == EXACTFUP47) {
2900 /* false positives are ok, so just set this */
2901 TRIE_BITMAP_SET(trie, LATIN_SMALL_LETTER_SHARP_S)((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (
0xDF)) >> 3) ] ) |= (1U << (((U8)0xDF) & 7)))
;
2902 }
2903 }
2904
2905 for ( ; uc < e ; uc += len ) { /* Look at each char in the current
2906 branch */
2907 TRIE_CHARCOUNT(trie)((trie)->charcount)++;
2908 TRIE_READ_CHARdo { wordlen++; if ( (((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0) ) { uvc = Perl_valid_utf8_to_uvchr( (const U8*) uc, &
len); } else if (folder == PL_fold_latin1) { ((*uc != 0xDF) ?
(void)0 : __assert2("re_comp.c", 2908, __func__, "*uc != LATIN_SMALL_LETTER_SHARP_S"
)); uvc = ((! ( (sizeof(*uc) == 1) || !(((U64)((*uc) | 0)) &
~0xFF))) ? (*uc) : PL_latin1_lc[ (U8) (*uc) ]); if (__builtin_expect
(((uvc == 0xB5) ? (_Bool)1 : (_Bool)0),(0))) uvc = 0x03BC; len
= 1; } else { uvc = (U32)*uc; len = 1; } } while (0)
;
2909
2910 /* TRIE_READ_CHAR returns the current character, or its fold if /i
2911 * is in effect. Under /i, this character can match itself, or
2912 * anything that folds to it. If not under /i, it can match just
2913 * itself. Most folds are 1-1, for example k, K, and KELVIN SIGN
2914 * all fold to k, and all are single characters. But some folds
2915 * expand to more than one character, so for example LATIN SMALL
2916 * LIGATURE FFI folds to the three character sequence 'ffi'. If
2917 * the string beginning at 'uc' is 'ffi', it could be matched by
2918 * three characters, or just by the one ligature character. (It
2919 * could also be matched by two characters: LATIN SMALL LIGATURE FF
2920 * followed by 'i', or by 'f' followed by LATIN SMALL LIGATURE FI).
2921 * (Of course 'I' and/or 'F' instead of 'i' and 'f' can also
2922 * match.) The trie needs to know the minimum and maximum number
2923 * of characters that could match so that it can use size alone to
2924 * quickly reject many match attempts. The max is simple: it is
2925 * the number of folded characters in this branch (since a fold is
2926 * never shorter than what folds to it. */
2927
2928 maxchars++;
2929
2930 /* And the min is equal to the max if not under /i (indicated by
2931 * 'folder' being NULL), or there are no multi-character folds. If
2932 * there is a multi-character fold, the min is incremented just
2933 * once, for the character that folds to the sequence. Each
2934 * character in the sequence needs to be added to the list below of
2935 * characters in the trie, but we count only the first towards the
2936 * min number of characters needed. This is done through the
2937 * variable 'foldlen', which is returned by the macros that look
2938 * for these sequences as the number of bytes the sequence
2939 * occupies. Each time through the loop, we decrement 'foldlen' by
2940 * how many bytes the current char occupies. Only when it reaches
2941 * 0 do we increment 'minchars' or look for another multi-character
2942 * sequence. */
2943 if (folder == NULL((void*)0)) {
2944 minchars++;
2945 }
2946 else if (foldlen > 0) {
2947 foldlen -= (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? UTF8SKIP(uc)PL_utf8skip[*(const U8*)(uc)] : 1;
2948 }
2949 else {
2950 minchars++;
2951
2952 /* See if *uc is the beginning of a multi-character fold. If
2953 * so, we decrement the length remaining to look at, to account
2954 * for the current character this iteration. (We can use 'uc'
2955 * instead of the fold returned by TRIE_READ_CHAR because for
2956 * non-UTF, the latin1_safe macro is smart enough to account
2957 * for all the unfolded characters, and because for UTF, the
2958 * string will already have been folded earlier in the
2959 * compilation process */
2960 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
2961 if ((foldlen = is_MULTI_CHAR_FOLD_utf8_safe(uc, e)( ((e)-(uc) > 5) ? ( ( 0x61 == ((const U8*)uc)[0] ) ? ( ( (
0xCA == ((const U8*)uc)[1] ) && ( 0xBE == ((const U8
*)uc)[2] ) ) ? 3 : 0 ) : ( 0x66 == ((const U8*)uc)[0] ) ? ( (
0x66 == ((const U8*)uc)[1] ) ? ( ( 0x69 == ((const U8*)uc)[2
] || 0x6C == ((const U8*)uc)[2] ) ? 3 : 2 ) : ( 0x69 == ((const
U8*)uc)[1] || 0x6C == ((const U8*)uc)[1] ) ? 2 : 0 ) : ( 0x68
== ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] )
&& ( 0xB1 == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x69
== ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] )
&& ( 0x87 == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x6A
== ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] )
&& ( 0x8C == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x73
== ((const U8*)uc)[0] ) ? ( ( ((((0x74) >= (0x73)) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((
0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) && ( 0x88
== ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)
uc)[0] || 0x79 == ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const
U8*)uc)[1] ) && ( 0x8A == ((const U8*)uc)[2] ) ) ? 3
: 0 ) : ( 0xC5 == ((const U8*)uc)[0] ) ? ( ( ( ( 0xBF == ((const
U8*)uc)[1] ) && ( 0xC5 == ((const U8*)uc)[2] ) ) &&
( 0xBF == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)uc)[0] ) ? ( ( ( 0xBC == ((const U8*)uc)[1] ) &&
( 0x6E == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const
U8*)uc)[0] ) ? ( ( ( ((const U8*)uc)[1] & 0xFD ) == 0xAC
) ? ( ( ( 0xCE == ((const U8*)uc)[2] ) && ( 0xB9 == (
(const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)uc)[1
] || 0xB7 == ((const U8*)uc)[1] ) ? ( ( 0xCD == ((const U8*)uc
)[2] ) ? ( ( 0x82 == ((const U8*)uc)[3] ) ? ( ( ( 0xCE == ((const
U8*)uc)[4] ) && ( 0xB9 == ((const U8*)uc)[5] ) ) ? 6
: 4 ) : 0 ) : ( ( 0xCE == ((const U8*)uc)[2] ) && ( 0xB9
== ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xB9 == ((const U8*)
uc)[1] ) ? ( ( 0xCC == ((const U8*)uc)[2] ) ? ( ( 0x88 == ((const
U8*)uc)[3] ) ? ( ( 0xCC == ((const U8*)uc)[4] ) ? ( ( ((((0x81
) >= (0x80)) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(0x81) >= (0x80)")), ( (sizeof(((const U8*)uc)[5]) == sizeof
(U8)) ? ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U8) (((const
U8*)uc)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81) - (
0x80))) | 0))))) : (sizeof(((const U8*)uc)[5]) == sizeof(U32)
) ? ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U32) (((
const U8*)uc)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0))))) : (((sizeof(((const U8*)uc)[5]) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "sizeof(((const U8*)uc)[5]) == sizeof(U64)"
)), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0)))))))) ) ? 6 : 0 ) : ( ( 0xCD == ((const U8
*)uc)[4] ) && ( 0x82 == ((const U8*)uc)[5] ) ) ? 6 : 0
) : 0 ) : ( ( 0xCD == ((const U8*)uc)[2] ) && ( 0x82
== ((const U8*)uc)[3] ) ) ? 4 : 0 ) : 0 ) : ( 0xCF == ((const
U8*)uc)[0] ) ? ( ( 0x81 == ((const U8*)uc)[1] ) ? ( ( ( 0xCC
== ((const U8*)uc)[2] ) && ( 0x93 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( 0x85 == ((const U8*)uc)[1] ) ? ( ( 0xCC
== ((const U8*)uc)[2] ) ? ( ( 0x88 == ((const U8*)uc)[3] ) ?
( ( 0xCC == ((const U8*)uc)[4] ) ? ( ( ((((0x81) >= (0x80
)) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(0x81) >= (0x80)"
)), ( (sizeof(((const U8*)uc)[5]) == sizeof(U8)) ? ((((NV) ((
0x80)) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) - (0x80))) >=
0) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)uc)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[5])))) - (((0x80)) | 0
))) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof((
(const U8*)uc)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[5]) == sizeof(U64)"
)), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0)))))))) ) ? 6 : 0 ) : ( ( 0xCD == ((const U8
*)uc)[4] ) && ( 0x82 == ((const U8*)uc)[5] ) ) ? 6 : 0
) : ( 0x93 == ((const U8*)uc)[3] ) ? ( ( 0xCC == ((const U8*
)uc)[4] ) ? ( ( ((((0x81) >= (0x80)) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(0x81) >= (0x80)")), ( (sizeof
(((const U8*)uc)[5]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0
) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)uc)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[5])))) - (((0x80)) | 0
))) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof((
(const U8*)uc)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[5]) == sizeof(U64)"
)), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0)))))))) ) ? 6 : 4 ) : ( ( 0xCD == ((const U8
*)uc)[4] ) && ( 0x82 == ((const U8*)uc)[5] ) ) ? 6 : 4
) : 0 ) : ( ( 0xCD == ((const U8*)uc)[2] ) && ( 0x82
== ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0x89 == ((const U8*)
uc)[1] ) ? ( ( 0xCD == ((const U8*)uc)[2] ) ? ( ( 0x82 == ((const
U8*)uc)[3] ) ? ( ( ( 0xCE == ((const U8*)uc)[4] ) &&
( 0xB9 == ((const U8*)uc)[5] ) ) ? 6 : 4 ) : 0 ) : ( ( 0xCE ==
((const U8*)uc)[2] ) && ( 0xB9 == ((const U8*)uc)[3]
) ) ? 4 : 0 ) : ( ( ( 0x8E == ((const U8*)uc)[1] ) &&
( 0xCE == ((const U8*)uc)[2] ) ) && ( 0xB9 == ((const
U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)uc)[0] ) ? (
( 0xA5 == ((const U8*)uc)[1] ) ? ( ( ( 0xD6 == ((const U8*)uc
)[2] ) && ( 0x82 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) :
( 0xB4 == ((const U8*)uc)[1] ) ? ( ( ( 0xD5 == ((const U8*)uc
)[2] ) && ( ( ( ((const U8*)uc)[3] & 0xF7 ) == 0xA5
) || ((const U8*)uc)[3] == 0xAB || ((const U8*)uc)[3] == 0xB6
) ) ? 4 : 0 ) : ( ( ( 0xBE == ((const U8*)uc)[1] ) &&
( 0xD5 == ((const U8*)uc)[2] ) ) && ( 0xB6 == ((const
U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xE1 == ((const U8*)uc)[0] ) ? (
( 0xBC == ((const U8*)uc)[1] ) ? ( ( ( ( ( ((const U8*)uc)[2
] & 0xD8 ) == 0x80 ) && ( 0xCE == ((const U8*)uc)
[3] ) ) && ( 0xB9 == ((const U8*)uc)[4] ) ) ? 5 : 0 )
: ( ( ( ( 0xBD == ((const U8*)uc)[1] ) && ( ( ( ((const
U8*)uc)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const U8*)uc)[2] &
0xFB ) == 0xB0 ) || ((const U8*)uc)[2] == 0xBC ) ) &&
( 0xCE == ((const U8*)uc)[3] ) ) && ( 0xB9 == ((const
U8*)uc)[4] ) ) ? 5 : 0 ) : 0 ) : ((e)-(uc) > 4) ? ( ( 0x61
== ((const U8*)uc)[0] ) ? ( ( ( 0xCA == ((const U8*)uc)[1] )
&& ( 0xBE == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x66
== ((const U8*)uc)[0] ) ? ( ( 0x66 == ((const U8*)uc)[1] ) ?
( ( 0x69 == ((const U8*)uc)[2] || 0x6C == ((const U8*)uc)[2]
) ? 3 : 2 ) : ( 0x69 == ((const U8*)uc)[1] || 0x6C == ((const
U8*)uc)[1] ) ? 2 : 0 ) : ( 0x68 == ((const U8*)uc)[0] ) ? ( (
( 0xCC == ((const U8*)uc)[1] ) && ( 0xB1 == ((const U8
*)uc)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8*)uc)[0] ) ? ( (
( 0xCC == ((const U8*)uc)[1] ) && ( 0x87 == ((const U8
*)uc)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)uc)[0] ) ? ( (
( 0xCC == ((const U8*)uc)[1] ) && ( 0x8C == ((const U8
*)uc)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)uc)[0] ) ? ( (
((((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c", 2961
, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const U8*)uc
)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0")), (((NV
) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0))) <= (
((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const U8*)uc
)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void)0 :
__assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) && ( 0x88
== ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)
uc)[0] || 0x79 == ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const
U8*)uc)[1] ) && ( 0x8A == ((const U8*)uc)[2] ) ) ? 3
: 0 ) : ( 0xC5 == ((const U8*)uc)[0] ) ? ( ( ( ( 0xBF == ((const
U8*)uc)[1] ) && ( 0xC5 == ((const U8*)uc)[2] ) ) &&
( 0xBF == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)uc)[0] ) ? ( ( ( 0xBC == ((const U8*)uc)[1] ) &&
( 0x6E == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const
U8*)uc)[0] ) ? ( ( ( ((const U8*)uc)[1] & 0xFD ) == 0xAC
) ? ( ( ( 0xCE == ((const U8*)uc)[2] ) && ( 0xB9 == (
(const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)uc)[1
] || 0xB7 == ((const U8*)uc)[1] ) ? ( ( 0xCD == ((const U8*)uc
)[2] ) ? ( ( 0x82 == ((const U8*)uc)[3] ) ? 4 : 0 ) : ( ( 0xCE
== ((const U8*)uc)[2] ) && ( 0xB9 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( ( ( 0xB9 == ((const U8*)uc)[1] ) &&
( 0xCD == ((const U8*)uc)[2] ) ) && ( 0x82 == ((const
U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xCF == ((const U8*)uc)[0] ) ? (
( 0x81 == ((const U8*)uc)[1] ) ? ( ( ( 0xCC == ((const U8*)uc
)[2] ) && ( 0x93 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) :
( 0x85 == ((const U8*)uc)[1] ) ? ( ( 0xCC == ((const U8*)uc)
[2] ) ? ( ( 0x93 == ((const U8*)uc)[3] ) ? 4 : 0 ) : ( ( 0xCD
== ((const U8*)uc)[2] ) && ( 0x82 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( 0x89 == ((const U8*)uc)[1] ) ? ( ( 0xCD
== ((const U8*)uc)[2] ) ? ( ( 0x82 == ((const U8*)uc)[3] ) ?
4 : 0 ) : ( ( 0xCE == ((const U8*)uc)[2] ) && ( 0xB9
== ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( ( ( 0x8E == ((const U8
*)uc)[1] ) && ( 0xCE == ((const U8*)uc)[2] ) ) &&
( 0xB9 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xD5 == ((const
U8*)uc)[0] ) ? ( ( 0xA5 == ((const U8*)uc)[1] ) ? ( ( ( 0xD6
== ((const U8*)uc)[2] ) && ( 0x82 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const U8*)uc)[1] ) ? ( ( ( 0xD5
== ((const U8*)uc)[2] ) && ( ( ( ((const U8*)uc)[3] &
0xF7 ) == 0xA5 ) || ((const U8*)uc)[3] == 0xAB || ((const U8
*)uc)[3] == 0xB6 ) ) ? 4 : 0 ) : ( ( ( 0xBE == ((const U8*)uc
)[1] ) && ( 0xD5 == ((const U8*)uc)[2] ) ) &&
( 0xB6 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xE1 == ((const
U8*)uc)[0] ) ? ( ( 0xBC == ((const U8*)uc)[1] ) ? ( ( ( ( ( (
(const U8*)uc)[2] & 0xD8 ) == 0x80 ) && ( 0xCE ==
((const U8*)uc)[3] ) ) && ( 0xB9 == ((const U8*)uc)[
4] ) ) ? 5 : 0 ) : ( ( ( ( 0xBD == ((const U8*)uc)[1] ) &&
( ( ( ((const U8*)uc)[2] & 0xF8 ) == 0xA0 ) || ( ( ((const
U8*)uc)[2] & 0xFB ) == 0xB0 ) || ((const U8*)uc)[2] == 0xBC
) ) && ( 0xCE == ((const U8*)uc)[3] ) ) && (
0xB9 == ((const U8*)uc)[4] ) ) ? 5 : 0 ) : 0 ) : ( ((e)-(uc)
> 3) ? ( ( 0x61 == ((const U8*)uc)[0] ) ? ( ( ( 0xCA == (
(const U8*)uc)[1] ) && ( 0xBE == ((const U8*)uc)[2] )
) ? 3 : 0 ) : ( 0x66 == ((const U8*)uc)[0] ) ? ( ( 0x66 == (
(const U8*)uc)[1] ) ? ( ( 0x69 == ((const U8*)uc)[2] || 0x6C ==
((const U8*)uc)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)uc)[1
] || 0x6C == ((const U8*)uc)[1] ) ? 2 : 0 ) : ( 0x68 == ((const
U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) &&
( 0xB1 == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const
U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) &&
( 0x87 == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const
U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) &&
( 0x8C == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const
U8*)uc)[0] ) ? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(0x74) >= (0x73)")), ( (sizeof
(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0
) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) && ( 0x88
== ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)
uc)[0] || 0x79 == ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const
U8*)uc)[1] ) && ( 0x8A == ((const U8*)uc)[2] ) ) ? 3
: 0 ) : ( 0xC5 == ((const U8*)uc)[0] ) ? ( ( ( ( 0xBF == ((const
U8*)uc)[1] ) && ( 0xC5 == ((const U8*)uc)[2] ) ) &&
( 0xBF == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)uc)[0] ) ? ( ( ( 0xBC == ((const U8*)uc)[1] ) &&
( 0x6E == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const
U8*)uc)[0] ) ? ( ( ( ((const U8*)uc)[1] & 0xFD ) == 0xAC
) ? ( ( ( 0xCE == ((const U8*)uc)[2] ) && ( 0xB9 == (
(const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)uc)[1
] || 0xB7 == ((const U8*)uc)[1] ) ? ( ( 0xCD == ((const U8*)uc
)[2] ) ? ( ( 0x82 == ((const U8*)uc)[3] ) ? 4 : 0 ) : ( ( 0xCE
== ((const U8*)uc)[2] ) && ( 0xB9 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( ( ( 0xB9 == ((const U8*)uc)[1] ) &&
( 0xCD == ((const U8*)uc)[2] ) ) && ( 0x82 == ((const
U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xCF == ((const U8*)uc)[0] ) ? (
( 0x81 == ((const U8*)uc)[1] ) ? ( ( ( 0xCC == ((const U8*)uc
)[2] ) && ( 0x93 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) :
( 0x85 == ((const U8*)uc)[1] ) ? ( ( 0xCC == ((const U8*)uc)
[2] ) ? ( ( 0x93 == ((const U8*)uc)[3] ) ? 4 : 0 ) : ( ( 0xCD
== ((const U8*)uc)[2] ) && ( 0x82 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( 0x89 == ((const U8*)uc)[1] ) ? ( ( 0xCD
== ((const U8*)uc)[2] ) ? ( ( 0x82 == ((const U8*)uc)[3] ) ?
4 : 0 ) : ( ( 0xCE == ((const U8*)uc)[2] ) && ( 0xB9
== ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( ( ( 0x8E == ((const U8
*)uc)[1] ) && ( 0xCE == ((const U8*)uc)[2] ) ) &&
( 0xB9 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : ( 0xD5 == ((const
U8*)uc)[0] ) ? ( ( 0xA5 == ((const U8*)uc)[1] ) ? ( ( ( 0xD6
== ((const U8*)uc)[2] ) && ( 0x82 == ((const U8*)uc)
[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const U8*)uc)[1] ) ? ( ( ( 0xD5
== ((const U8*)uc)[2] ) && ( ( ( ((const U8*)uc)[3] &
0xF7 ) == 0xA5 ) || ((const U8*)uc)[3] == 0xAB || ((const U8
*)uc)[3] == 0xB6 ) ) ? 4 : 0 ) : ( ( ( 0xBE == ((const U8*)uc
)[1] ) && ( 0xD5 == ((const U8*)uc)[2] ) ) &&
( 0xB6 == ((const U8*)uc)[3] ) ) ? 4 : 0 ) : 0 ) : ((e)-(uc)
> 2) ? ( ( 0x61 == ((const U8*)uc)[0] ) ? ( ( ( 0xCA == (
(const U8*)uc)[1] ) && ( 0xBE == ((const U8*)uc)[2] )
) ? 3 : 0 ) : ( 0x66 == ((const U8*)uc)[0] ) ? ( ( 0x66 == (
(const U8*)uc)[1] ) ? ( ( 0x69 == ((const U8*)uc)[2] || 0x6C ==
((const U8*)uc)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)uc)[1
] || 0x6C == ((const U8*)uc)[1] ) ? 2 : 0 ) : ( 0x68 == ((const
U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) &&
( 0xB1 == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const
U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) &&
( 0x87 == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const
U8*)uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) &&
( 0x8C == ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const
U8*)uc)[0] ) ? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(0x74) >= (0x73)")), ( (sizeof
(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0
) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
uc)[0] ) ? ( ( ( 0xCC == ((const U8*)uc)[1] ) && ( 0x88
== ((const U8*)uc)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)
uc)[0] || 0x79 == ((const U8*)uc)[0] ) ? ( ( ( 0xCC == ((const
U8*)uc)[1] ) && ( 0x8A == ((const U8*)uc)[2] ) ) ? 3
: 0 ) : ( ( ( 0xCA == ((const U8*)uc)[0] ) && ( 0xBC
== ((const U8*)uc)[1] ) ) && ( 0x6E == ((const U8*)uc
)[2] ) ) ? 3 : 0 ): ((e)-(uc) > 1) ? ( ( 0x66 == ((const U8
*)uc)[0] ) ? ( ( 0x66 == ((const U8*)uc)[1] || 0x69 == ((const
U8*)uc)[1] || 0x6C == ((const U8*)uc)[1] ) ? 2 : 0 ) : ( ( 0x73
== ((const U8*)uc)[0] ) && ( ((((0x74) >= (0x73))
? (void)0 : __assert2("re_comp.c", 2961, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((
0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2961, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2961, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2961, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2961, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): 0 ) )
)) {
2962 foldlen -= UTF8SKIP(uc)PL_utf8skip[*(const U8*)(uc)];
2963 }
2964 }
2965 else if ((foldlen = is_MULTI_CHAR_FOLD_latin1_safe(uc, e)( ((e)-(uc) > 2) ? ( ( ( ((const U8*)uc)[0] & 0xDF ) ==
0x46 ) ? ( ( ( ((const U8*)uc)[1] & 0xDF ) == 0x46 ) ? (
( ( ( ((const U8*)uc)[2] & 0xDF ) == 0x49 ) || ( ( ((const
U8*)uc)[2] & 0xDF ) == 0x4C ) ) ? 3 : 2 ) : ( ( ( ((const
U8*)uc)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)uc)[1] &
0xDF ) == 0x4C ) ) ? 2 : 0 ) : ( ( ( ((const U8*)uc)[0] &
0xDF ) == 0x53 ) && ( ((((0x54) >= (0x53)) ? (void
)0 : __assert2("re_comp.c", 2965, __func__, "(0x54) >= (0x53)"
)), ( (sizeof(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((
0x53)) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) - (0x53))) >=
0) ? (void)0 : __assert2("re_comp.c", 2965, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x53)) | 0)
)) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x53)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2965, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2965, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x53)) | 0
))) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x53)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) -
(0x53))) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) (((0x54) - (0x53))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x53)) | 0))) <= (((U64) ((((0x54
) - (0x53))) | 0)))))))) || ((((0x74) >= (0x73)) ? (void)0
: __assert2("re_comp.c", 2965, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((
0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 2965, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2965, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2965, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): ((e)-(uc) > 1) ? (
( ( ((const U8*)uc)[0] & 0xDF ) == 0x46 ) ? ( ( ( ( ((const
U8*)uc)[1] & 0xDF ) == 0x46 ) || ( ( ((const U8*)uc)[1] &
0xDF ) == 0x49 ) || ( ( ((const U8*)uc)[1] & 0xDF ) == 0x4C
) ) ? 2 : 0 ) : ( ( ( ((const U8*)uc)[0] & 0xDF ) == 0x53
) && ( ((((0x54) >= (0x53)) ? (void)0 : __assert2
("re_comp.c", 2965, __func__, "(0x54) >= (0x53)")), ( (sizeof
(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((0x53)) >= 0
) ? (void)0 : __assert2("re_comp.c", 2965, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2965, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x53)) | 0)
)) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x53)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2965, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2965, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x53)) | 0
))) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x53)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) -
(0x53))) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) (((0x54) - (0x53))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x53)) | 0))) <= (((U64) ((((0x54
) - (0x53))) | 0)))))))) || ((((0x74) >= (0x73)) ? (void)0
: __assert2("re_comp.c", 2965, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)uc)[1]) == sizeof(U8)) ? ((((NV) ((
0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 2965, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)uc)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)uc)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 2965, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 2965, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)uc)[1])))) - (((0x73)) | 0
))) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof((
(const U8*)uc)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "sizeof(((const U8*)uc)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 2965, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 2965, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)uc)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): 0 )
)) {
2966 foldlen--;
2967 }
2968 }
2969
2970 /* The current character (and any potential folds) should be added
2971 * to the possible matching characters for this position in this
2972 * branch */
2973 if ( uvc < 256 ) {
2974 if ( folder ) {
2975 U8 folded= folder[ (U8) uvc ];
2976 if ( !trie->charmap[ folded ] ) {
2977 trie->charmap[ folded ]=( ++trie->uniquecharcount );
2978 TRIE_STORE_REVCHAR( folded )do { if ((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { SV
*zlopp = Perl_newSV( 13); unsigned char *flrbbbbb = (unsigned
char *) (*({ SV *const _svpvx = ((SV *)({ void *_p = (zlopp)
; _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
2978, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2978, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2978, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })); unsigned char *const
kapow = Perl_uvoffuni_to_utf8_flags_msgs( flrbbbbb,((UV) ((folded
) | 0)),0,0); *kapow = '\0'; do { ((PL_valid_types_PVX[((svtype
)((zlopp)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2978, __func__, "PL_valid_types_PVX[SvTYPE(zlopp) & SVt_MASK]"
)); ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2978, __func__
, "!isGV_with_GP(zlopp)")); ((!(((svtype)((zlopp)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (zlopp)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2978, __func__, "!(SvTYPE(zlopp) == SVt_PVIO && !(IoFLAGS(zlopp) & IOf_FAKE_DIRP))"
)); (((XPV*) (zlopp)->sv_any)->xpv_cur = (kapow - flrbbbbb
)); } while (0); (((!((zlopp)->sv_flags & 0x00000800) ||
!(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })
); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2978, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 2978, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 2978, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 2978, __func__, "!((zlopp)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 2978, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 2978, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 2978, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2978, __func__
, "!((((zlopp)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVLV))"
)), (zlopp)->sv_flags |= (0x00000400|0x00004000)); ((zlopp
)->sv_flags |= (0x20000000)); Perl_av_push( revcharmap,zlopp
); } else { char ooooff = (char)folded; Perl_av_push( revcharmap
,Perl_newSVpvn( &ooooff,1)); } } while (0)
;
2979 }
2980 }
2981 if ( !trie->charmap[ uvc ] ) {
2982 trie->charmap[ uvc ]=( ++trie->uniquecharcount );
2983 TRIE_STORE_REVCHAR( uvc )do { if ((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { SV
*zlopp = Perl_newSV( 13); unsigned char *flrbbbbb = (unsigned
char *) (*({ SV *const _svpvx = ((SV *)({ void *_p = (zlopp)
; _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
2983, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2983, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2983, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })); unsigned char *const
kapow = Perl_uvoffuni_to_utf8_flags_msgs( flrbbbbb,((UV) ((uvc
) | 0)),0,0); *kapow = '\0'; do { ((PL_valid_types_PVX[((svtype
)((zlopp)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 2983, __func__, "PL_valid_types_PVX[SvTYPE(zlopp) & SVt_MASK]"
)); ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2983, __func__
, "!isGV_with_GP(zlopp)")); ((!(((svtype)((zlopp)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (zlopp)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 2983, __func__, "!(SvTYPE(zlopp) == SVt_PVIO && !(IoFLAGS(zlopp) & IOf_FAKE_DIRP))"
)); (((XPV*) (zlopp)->sv_any)->xpv_cur = (kapow - flrbbbbb
)); } while (0); (((!((zlopp)->sv_flags & 0x00000800) ||
!(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })
); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 2983, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 2983, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 2983, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 2983, __func__, "!((zlopp)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 2983, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 2983, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 2983, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 2983, __func__
, "!((((zlopp)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVLV))"
)), (zlopp)->sv_flags |= (0x00000400|0x00004000)); ((zlopp
)->sv_flags |= (0x20000000)); Perl_av_push( revcharmap,zlopp
); } else { char ooooff = (char)uvc; Perl_av_push( revcharmap
,Perl_newSVpvn( &ooooff,1)); } } while (0)
;
2984 }
2985 if ( set_bit ) {
2986 /* store the codepoint in the bitmap, and its folded
2987 * equivalent. */
2988 TRIE_BITMAP_SET_FOLDED(trie, uvc, folder)do { ((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (
UV) (uvc)) >> 3) ] ) |= (1U << (((U8)uvc) & 7
))); if ( folder ) ((( (U8*) (((reg_trie_data *)(trie))->bitmap
)) [ ( ( (UV) (folder[(U8) uvc ])) >> 3) ] ) |= (1U <<
(((U8)folder[(U8) uvc ]) & 7))); if ( !(((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0) ) { if (! ((((U64)(((UV) ((uvc)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0)))) { ((( (
U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (((((
sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U <<
6) - 1))) ? (void)0 : __assert2("re_comp.c", 2988, __func__,
"(sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 2988, __func__
, "! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 2988, __func__, "( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0)))))))) >>
3) ] ) |= (1U << (((U8)((((sizeof(uvc) == 1) || !(((U64
)(uvc)) & ~(32 * (1U << 6) - 1))) ? (void)0 : __assert2
("re_comp.c", 2988, __func__, "(sizeof(uvc) == 1) || !(((U64)(uvc)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 2988, __func__
, "! ((((U64)(((UV) ((uvc) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 2988, __func__, "( (sizeof((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((uvc) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0))))))) & 7))
); } } } while (0)
;
2989 set_bit = 0; /* We've done our bit :-) */
2990 }
2991 } else {
2992
2993 /* XXX We could come up with the list of code points that fold
2994 * to this using PL_utf8_foldclosures, except not for
2995 * multi-char folds, as there may be multiple combinations
2996 * there that could work, which needs to wait until runtime to
2997 * resolve (The comment about LIGATURE FFI above is such an
2998 * example */
2999
3000 SV** svpp;
3001 if ( !widecharmap )
3002 widecharmap = newHV()((HV *)({ void *_p = (Perl_newSV_type( SVt_PVHV)); _p; }));
3003
3004 svpp = hv_fetch( widecharmap, (char*)&uvc, sizeof( UV ), 1 )((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(1) ? (0x20 | 0x10) : 0x20,((void*)0),0))
;
3005
3006 if ( !svpp )
3007 Perl_croak( aTHX_ "error creating/fetching widecharmap entry for 0x%" UVXf"lX", uvc );
3008
3009 if ( !SvTRUE( *svpp )Perl_SvTRUE( *svpp) ) {
3010 sv_setiv( *svpp, ++trie->uniquecharcount )Perl_sv_setiv( *svpp,++trie->uniquecharcount);
3011 TRIE_STORE_REVCHAR(uvc)do { if ((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { SV
*zlopp = Perl_newSV( 13); unsigned char *flrbbbbb = (unsigned
char *) (*({ SV *const _svpvx = ((SV *)({ void *_p = (zlopp)
; _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
3011, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3011, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3011, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })); unsigned char *const
kapow = Perl_uvoffuni_to_utf8_flags_msgs( flrbbbbb,((UV) ((uvc
) | 0)),0,0); *kapow = '\0'; do { ((PL_valid_types_PVX[((svtype
)((zlopp)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 3011, __func__, "PL_valid_types_PVX[SvTYPE(zlopp) & SVt_MASK]"
)); ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3011, __func__
, "!isGV_with_GP(zlopp)")); ((!(((svtype)((zlopp)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (zlopp)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3011, __func__, "!(SvTYPE(zlopp) == SVt_PVIO && !(IoFLAGS(zlopp) & IOf_FAKE_DIRP))"
)); (((XPV*) (zlopp)->sv_any)->xpv_cur = (kapow - flrbbbbb
)); } while (0); (((!((zlopp)->sv_flags & 0x00000800) ||
!(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })
); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 3011, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 3011, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 3011, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 3011, __func__, "!((zlopp)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (zlopp); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 3011, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 3011, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 3011, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((zlopp)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((zlopp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3011, __func__
, "!((((zlopp)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((zlopp)->sv_flags & 0xff)) == SVt_PVLV))"
)), (zlopp)->sv_flags |= (0x00000400|0x00004000)); ((zlopp
)->sv_flags |= (0x20000000)); Perl_av_push( revcharmap,zlopp
); } else { char ooooff = (char)uvc; Perl_av_push( revcharmap
,Perl_newSVpvn( &ooooff,1)); } } while (0)
;
3012 }
3013 }
3014 } /* end loop through characters in this branch of the trie */
3015
3016 /* We take the min and max for this branch and combine to find the min
3017 * and max for all branches processed so far */
3018 if( cur == first ) {
3019 trie->minlen = minchars;
3020 trie->maxlen = maxchars;
3021 } else if (minchars < trie->minlen) {
3022 trie->minlen = minchars;
3023 } else if (maxchars > trie->maxlen) {
3024 trie->maxlen = maxchars;
3025 }
3026 } /* end first pass */
3027 DEBUG_TRIE_COMPILE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3028 Perl_re_indentf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3029 "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3030 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3031 ( widecharmap ? "UTF8" : "NATIVE" ), (int)word_count,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3032 (int)TRIE_CHARCOUNT(trie), trie->uniquecharcount,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3033 (int)trie->minlen, (int)trie->maxlen )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
3034 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) Perl_re_indentf
( "TRIE(%s): W:%d C:%d Uq:%d Min:%d Max:%d\n", depth+1, ( widecharmap
? "UTF8" : "NATIVE" ), (int)word_count, (int)((trie)->charcount
), trie->uniquecharcount, (int)trie->minlen, (int)trie->
maxlen );} while (0)
;
3035
3036 /*
3037 We now know what we are dealing with in terms of unique chars and
3038 string sizes so we can calculate how much memory a naive
3039 representation using a flat table will take. If it's over a reasonable
3040 limit (as specified by ${^RE_TRIE_MAXBUF}) we use a more memory
3041 conservative but potentially much slower representation using an array
3042 of lists.
3043
3044 At the end we convert both representations into the same compressed
3045 form that will be used in regexec.c for matching with. The latter
3046 is a form that cannot be used to construct with but has memory
3047 properties similar to the list form and access properties similar
3048 to the table form making it both suitable for fast searches and
3049 small enough that its feasable to store for the duration of a program.
3050
3051 See the comment in the code where the compressed table is produced
3052 inplace from the flat tabe representation for an explanation of how
3053 the compression works.
3054
3055 */
3056
3057
3058 Newx(prev_states, TRIE_CHARCOUNT(trie) + 2, U32)(prev_states = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(((trie)->charcount) + 2) || sizeof(U32) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof(((trie)->charcount)
+ 2)))) ? (size_t)(((trie)->charcount) + 2) : ((size_t)-1
)/sizeof(U32)) > ((size_t)-1)/sizeof(U32))) ? (_Bool)1 : (
_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (U32*
)(Perl_safesysmalloc((size_t)((((trie)->charcount) + 2)*sizeof
(U32))))))
;
3059 prev_states[1] = 0;
3060
3061 if ( (IV)( ( TRIE_CHARCOUNT(trie)((trie)->charcount) + 1 ) * trie->uniquecharcount + 1)
3062 > SvIV(re_trie_maxbuff)((((re_trie_maxbuff)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_trie_maxbuff); ((PL_valid_types_IVX[((svtype)((_svivx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 3062, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3062, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_trie_maxbuff,2))
)
3063 {
3064 /*
3065 Second Pass -- Array Of Lists Representation
3066
3067 Each state will be represented by a list of charid:state records
3068 (reg_trie_trans_le) the first such element holds the CUR and LEN
3069 points of the allocated array. (See defines above).
3070
3071 We build the initial structure using the lists, and then convert
3072 it into the compressed table form which allows faster lookups
3073 (but cant be modified once converted).
3074 */
3075
3076 STRLEN transcount = 1;
3077
3078 DEBUG_TRIE_COMPILE_MORE_r( Perl_re_indentf( aTHX_ "Compiling trie using list compiler\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Compiling trie using list compiler\n", depth+1);} while (0
)
3079 depth+1))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Compiling trie using list compiler\n", depth+1);} while (0
)
;
3080
3081 trie->states = (reg_trie_state *)
3082 PerlMemShared_calloc( TRIE_CHARCOUNT(trie) + 2,calloc((((trie)->charcount) + 2), (sizeof(reg_trie_state))
)
3083 sizeof(reg_trie_state) )calloc((((trie)->charcount) + 2), (sizeof(reg_trie_state))
)
;
3084 TRIE_LIST_NEW(1)do { (trie->states[ 1 ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(4) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(4)))) ?
(size_t)(4) : ((size_t)-1)/sizeof(reg_trie_trans_le)) > (
(size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool)0
),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysmalloc((size_t)((4)*sizeof(reg_trie_trans_le))
)))); ( (trie->states[1].trans.list)[ 0 ].forid ) = 1; ( (
trie->states[1].trans.list)[ 0 ].newstate ) = 4; } while (
0)
;
3085 next_alloc = 2;
3086
3087 for ( cur = first ; cur < last ; cur = regnext( cur )Perl_regnext( cur) ) {
3088
3089 regnode *noper = NEXTOPER( cur )((cur) + 1);
3090 U32 state = 1; /* required init */
3091 U16 charid = 0; /* sanity init */
3092 U32 wordlen = 0; /* required init */
3093
3094 if (OP(noper)((noper)->type) == NOTHING54) {
3095 regnode *noper_next= regnext(noper)Perl_regnext( noper);
3096 if (noper_next < tail)
3097 noper= noper_next;
3098 /* we will undo this assignment if noper does not
3099 * point at a trieable type in the else clause of
3100 * the following statement. */
3101 }
3102
3103 if ( noper < tail
3104 && ( OP(noper)((noper)->type) == flags
3105 || (flags == EXACT40 && OP(noper)((noper)->type) == EXACT_REQ850)
3106 || (flags == EXACTFU45 && ( OP(noper)((noper)->type) == EXACTFU_REQ852
3107 || OP(noper)((noper)->type) == EXACTFUP47))))
3108 {
3109 const U8 *uc= (U8*)STRING(noper)((((noper)->type) == 41 || ((noper)->type) == 51) ? (((
((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 3109, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3109, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))
;
3110 const U8 *e= uc + STR_LEN(noper)((((noper)->type) == 41 || ((noper)->type) == 51) ? (((
((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 3110, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3110, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))
;
3111
3112 for ( ; uc < e ; uc += len ) {
3113
3114 TRIE_READ_CHARdo { wordlen++; if ( (((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0) ) { uvc = Perl_valid_utf8_to_uvchr( (const U8*) uc, &
len); } else if (folder == PL_fold_latin1) { ((*uc != 0xDF) ?
(void)0 : __assert2("re_comp.c", 3114, __func__, "*uc != LATIN_SMALL_LETTER_SHARP_S"
)); uvc = ((! ( (sizeof(*uc) == 1) || !(((U64)((*uc) | 0)) &
~0xFF))) ? (*uc) : PL_latin1_lc[ (U8) (*uc) ]); if (__builtin_expect
(((uvc == 0xB5) ? (_Bool)1 : (_Bool)0),(0))) uvc = 0x03BC; len
= 1; } else { uvc = (U32)*uc; len = 1; } } while (0)
;
3115
3116 if ( uvc < 256 ) {
3117 charid = trie->charmap[ uvc ];
3118 } else {
3119 SV** const svpp = hv_fetch( widecharmap,((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
3120 (char*)&uvc,((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
3121 sizeof( UV ),((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
3122 0)((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
;
3123 if ( !svpp ) {
3124 charid = 0;
3125 } else {
3126 charid=(U16)SvIV( *svpp )((((*svpp)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? (*({ const SV *const _svivx = (const SV *)(*svpp); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 3126, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3126, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( *svpp,2))
;
3127 }
3128 }
3129 /* charid is now 0 if we dont know the char read, or
3130 * nonzero if we do */
3131 if ( charid ) {
3132
3133 U16 check;
3134 U32 newstate = 0;
3135
3136 charid--;
3137 if ( !trie->states[ state ].trans.list ) {
3138 TRIE_LIST_NEW( state )do { (trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(4) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(4)))) ?
(size_t)(4) : ((size_t)-1)/sizeof(reg_trie_trans_le)) > (
(size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool)0
),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysmalloc((size_t)((4)*sizeof(reg_trie_trans_le))
)))); ( (trie->states[state].trans.list)[ 0 ].forid ) = 1;
( (trie->states[state].trans.list)[ 0 ].newstate ) = 4; }
while (0)
;
3139 }
3140 for ( check = 1;
3141 check <= TRIE_LIST_USED( state )( trie->states[state].trans.list ? (( (trie->states[state
].trans.list)[ 0 ].forid ) - 1) : 0 )
;
3142 check++ )
3143 {
3144 if ( TRIE_LIST_ITEM( state, check )(trie->states[state].trans.list)[ check ].forid
3145 == charid )
3146 {
3147 newstate = TRIE_LIST_ITEM( state, check )(trie->states[state].trans.list)[ check ].newstate;
3148 break;
3149 }
3150 }
3151 if ( ! newstate ) {
3152 newstate = next_alloc++;
3153 prev_states[newstate] = state;
3154 TRIE_LIST_PUSH( state, charid, newstate )do { if ( ( (trie->states[state].trans.list)[ 0 ].forid ) >=
( (trie->states[state].trans.list)[ 0 ].newstate ) ) { U32
ging = ( (trie->states[state].trans.list)[ 0 ].newstate )
* 2; (trie->states[ state ].trans.list = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(ging) || sizeof(reg_trie_trans_le
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(ging)))
) ? (size_t)(ging) : ((size_t)-1)/sizeof(reg_trie_trans_le)) >
((size_t)-1)/sizeof(reg_trie_trans_le))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (reg_trie_trans_le
*)(Perl_safesysrealloc((void *)(trie->states[ state ].trans
.list),(size_t)((ging)*sizeof(reg_trie_trans_le)))))); ( (trie
->states[state].trans.list)[ 0 ].newstate ) = ging; } (trie
->states[state].trans.list)[ ( (trie->states[state].trans
.list)[ 0 ].forid ) ].forid = charid; (trie->states[state]
.trans.list)[ ( (trie->states[state].trans.list)[ 0 ].forid
) ].newstate = newstate; ( (trie->states[state].trans.list
)[ 0 ].forid )++; } while (0)
;
3155 transcount++;
3156 }
3157 state = newstate;
3158 } else {
3159 Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %" IVdf"ld", uvc );
3160 }
3161 }
3162 } else {
3163 /* If we end up here it is because we skipped past a NOTHING, but did not end up
3164 * on a trieable type. So we need to reset noper back to point at the first regop
3165 * in the branch before we call TRIE_HANDLE_WORD()
3166 */
3167 noper= NEXTOPER(cur)((cur) + 1);
3168 }
3169 TRIE_HANDLE_WORD(state)do { U16 dupe= trie->states[ state ].wordnum; regnode * const
noper_next = Perl_regnext( noper); do {{ SV* tmp; if (((noper
)->type) != 54) tmp = Perl_newSVpvn_flags( (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (((((noper)->type
) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 3169, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3169, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 3169, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3169, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0); curword++; trie->wordinfo[curword].prev
= 0; trie->wordinfo[curword].len = wordlen; trie->wordinfo
[curword].accept = state; if ( noper_next < tail ) { if (!
trie->jump) trie->jump = (U16 *) calloc((word_count + 1
), (sizeof(U16))); trie->jump[curword] = (U16)(noper_next -
convert); if (!jumper) jumper = noper_next; if (!nextbranch)
nextbranch= Perl_regnext( cur); } if ( dupe ) { trie->wordinfo
[curword].prev = trie->wordinfo[dupe].prev; trie->wordinfo
[dupe].prev = curword; } else { trie->states[ state ].wordnum
= curword; } } while (0)
;
3170
3171 } /* end second pass */
3172
3173 /* next alloc is the NEXT state to be allocated */
3174 trie->statecount = next_alloc;
3175 trie->states = (reg_trie_state *)
3176 PerlMemShared_realloc( trie->states,realloc((trie->states), (next_alloc * sizeof(reg_trie_state
)))
3177 next_allocrealloc((trie->states), (next_alloc * sizeof(reg_trie_state
)))
3178 * sizeof(reg_trie_state) )realloc((trie->states), (next_alloc * sizeof(reg_trie_state
)))
;
3179
3180 /* and now dump it out before we compress it */
3181 DEBUG_TRIE_COMPILE_MORE_r(dump_trie_interim_list(trie, widecharmap,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_list
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
3182 revcharmap, next_alloc,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_list
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
3183 depth+1)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_list
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
3184 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_list
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
;
3185
3186 trie->trans = (reg_trie_trans *)
3187 PerlMemShared_calloc( transcount, sizeof(reg_trie_trans) )calloc((transcount), (sizeof(reg_trie_trans)));
3188 {
3189 U32 state;
3190 U32 tp = 0;
3191 U32 zp = 0;
3192
3193
3194 for( state=1 ; state < next_alloc ; state ++ ) {
3195 U32 base=0;
3196
3197 /*
3198 DEBUG_TRIE_COMPILE_MORE_r(
3199 Perl_re_printf( aTHX_ "tp: %d zp: %d ",tp,zp)
3200 );
3201 */
3202
3203 if (trie->states[state].trans.list) {
3204 U16 minid=TRIE_LIST_ITEM( state, 1)(trie->states[state].trans.list)[ 1 ].forid;
3205 U16 maxid=minid;
3206 U16 idx;
3207
3208 for( idx = 2 ; idx <= TRIE_LIST_USED( state )( trie->states[state].trans.list ? (( (trie->states[state
].trans.list)[ 0 ].forid ) - 1) : 0 )
; idx++ ) {
3209 const U16 forid = TRIE_LIST_ITEM( state, idx)(trie->states[state].trans.list)[ idx ].forid;
3210 if ( forid < minid ) {
3211 minid=forid;
3212 } else if ( forid > maxid ) {
3213 maxid=forid;
3214 }
3215 }
3216 if ( transcount < tp + maxid - minid + 1) {
3217 transcount *= 2;
3218 trie->trans = (reg_trie_trans *)
3219 PerlMemShared_realloc( trie->trans,realloc((trie->trans), (transcount * sizeof(reg_trie_trans
)))
3220 transcountrealloc((trie->trans), (transcount * sizeof(reg_trie_trans
)))
3221 * sizeof(reg_trie_trans) )realloc((trie->trans), (transcount * sizeof(reg_trie_trans
)))
;
3222 Zero( trie->trans + (transcount / 2),((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(transcount
/ 2) || sizeof(reg_trie_trans) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(transcount / 2)))) ? (size_t)(transcount / 2
) : ((size_t)-1)/sizeof(reg_trie_trans)) > ((size_t)-1)/sizeof
(reg_trie_trans))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(trie->trans + (transcount / 2))) != 0) ?
(void)0 : __assert2("re_comp.c", 3224, __func__, "((void*)(trie->trans + (transcount / 2))) != 0"
)), (void)memset((char*)(trie->trans + (transcount / 2)),0
,(transcount / 2) * sizeof(reg_trie_trans)))
3223 transcount / 2,((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(transcount
/ 2) || sizeof(reg_trie_trans) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(transcount / 2)))) ? (size_t)(transcount / 2
) : ((size_t)-1)/sizeof(reg_trie_trans)) > ((size_t)-1)/sizeof
(reg_trie_trans))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(trie->trans + (transcount / 2))) != 0) ?
(void)0 : __assert2("re_comp.c", 3224, __func__, "((void*)(trie->trans + (transcount / 2))) != 0"
)), (void)memset((char*)(trie->trans + (transcount / 2)),0
,(transcount / 2) * sizeof(reg_trie_trans)))
3224 reg_trie_trans )((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(transcount
/ 2) || sizeof(reg_trie_trans) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(transcount / 2)))) ? (size_t)(transcount / 2
) : ((size_t)-1)/sizeof(reg_trie_trans)) > ((size_t)-1)/sizeof
(reg_trie_trans))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(trie->trans + (transcount / 2))) != 0) ?
(void)0 : __assert2("re_comp.c", 3224, __func__, "((void*)(trie->trans + (transcount / 2))) != 0"
)), (void)memset((char*)(trie->trans + (transcount / 2)),0
,(transcount / 2) * sizeof(reg_trie_trans)))
;
3225 }
3226 base = trie->uniquecharcount + tp - minid;
3227 if ( maxid == minid ) {
3228 U32 set = 0;
3229 for ( ; zp < tp ; zp++ ) {
3230 if ( ! trie->trans[ zp ].next ) {
3231 base = trie->uniquecharcount + zp - minid;
3232 trie->trans[ zp ].next = TRIE_LIST_ITEM( state,(trie->states[state].trans.list)[ 1 ]
3233 1)(trie->states[state].trans.list)[ 1 ].newstate;
3234 trie->trans[ zp ].check = state;
3235 set = 1;
3236 break;
3237 }
3238 }
3239 if ( !set ) {
3240 trie->trans[ tp ].next = TRIE_LIST_ITEM( state,(trie->states[state].trans.list)[ 1 ]
3241 1)(trie->states[state].trans.list)[ 1 ].newstate;
3242 trie->trans[ tp ].check = state;
3243 tp++;
3244 zp = tp;
3245 }
3246 } else {
3247 for ( idx=1; idx <= TRIE_LIST_USED( state )( trie->states[state].trans.list ? (( (trie->states[state
].trans.list)[ 0 ].forid ) - 1) : 0 )
; idx++ ) {
3248 const U32 tid = base
3249 - trie->uniquecharcount
3250 + TRIE_LIST_ITEM( state, idx )(trie->states[state].trans.list)[ idx ].forid;
3251 trie->trans[ tid ].next = TRIE_LIST_ITEM( state,(trie->states[state].trans.list)[ idx ]
3252 idx )(trie->states[state].trans.list)[ idx ].newstate;
3253 trie->trans[ tid ].check = state;
3254 }
3255 tp += ( maxid - minid + 1 );
3256 }
3257 Safefree(trie->states[ state ].trans.list)Perl_safesysfree(((void *)(trie->states[ state ].trans.list
)))
;
3258 }
3259 /*
3260 DEBUG_TRIE_COMPILE_MORE_r(
3261 Perl_re_printf( aTHX_ " base: %d\n",base);
3262 );
3263 */
3264 trie->states[ state ].trans.base=base;
3265 }
3266 trie->lasttrans = tp + 1;
3267 }
3268 } else {
3269 /*
3270 Second Pass -- Flat Table Representation.
3271
3272 we dont use the 0 slot of either trans[] or states[] so we add 1 to
3273 each. We know that we will need Charcount+1 trans at most to store
3274 the data (one row per char at worst case) So we preallocate both
3275 structures assuming worst case.
3276
3277 We then construct the trie using only the .next slots of the entry
3278 structs.
3279
3280 We use the .check field of the first entry of the node temporarily
3281 to make compression both faster and easier by keeping track of how
3282 many non zero fields are in the node.
3283
3284 Since trans are numbered from 1 any 0 pointer in the table is a FAIL
3285 transition.
3286
3287 There are two terms at use here: state as a TRIE_NODEIDX() which is
3288 a number representing the first entry of the node, and state as a
3289 TRIE_NODENUM() which is the trans number. state 1 is TRIE_NODEIDX(1)
3290 and TRIE_NODENUM(1), state 2 is TRIE_NODEIDX(2) and TRIE_NODENUM(3)
3291 if there are 2 entrys per node. eg:
3292
3293 A B A B
3294 1. 2 4 1. 3 7
3295 2. 0 3 3. 0 5
3296 3. 0 0 5. 0 0
3297 4. 0 0 7. 0 0
3298
3299 The table is internally in the right hand, idx form. However as we
3300 also have to deal with the states array which is indexed by nodenum
3301 we have to use TRIE_NODENUM() to convert.
3302
3303 */
3304 DEBUG_TRIE_COMPILE_MORE_r( Perl_re_indentf( aTHX_ "Compiling trie using table compiler\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Compiling trie using table compiler\n", depth+1);} while (
0)
3305 depth+1))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Compiling trie using table compiler\n", depth+1);} while (
0)
;
3306
3307 trie->trans = (reg_trie_trans *)
3308 PerlMemShared_calloc( ( TRIE_CHARCOUNT(trie) + 1 )calloc((( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1), (sizeof(reg_trie_trans)))
3309 * trie->uniquecharcount + 1,calloc((( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1), (sizeof(reg_trie_trans)))
3310 sizeof(reg_trie_trans) )calloc((( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1), (sizeof(reg_trie_trans)))
;
3311 trie->states = (reg_trie_state *)
3312 PerlMemShared_calloc( TRIE_CHARCOUNT(trie) + 2,calloc((((trie)->charcount) + 2), (sizeof(reg_trie_state))
)
3313 sizeof(reg_trie_state) )calloc((((trie)->charcount) + 2), (sizeof(reg_trie_state))
)
;
3314 next_alloc = trie->uniquecharcount + 1;
3315
3316
3317 for ( cur = first ; cur < last ; cur = regnext( cur )Perl_regnext( cur) ) {
3318
3319 regnode *noper = NEXTOPER( cur )((cur) + 1);
3320
3321 U32 state = 1; /* required init */
3322
3323 U16 charid = 0; /* sanity init */
3324 U32 accept_state = 0; /* sanity init */
3325
3326 U32 wordlen = 0; /* required init */
3327
3328 if (OP(noper)((noper)->type) == NOTHING54) {
3329 regnode *noper_next= regnext(noper)Perl_regnext( noper);
3330 if (noper_next < tail)
3331 noper= noper_next;
3332 /* we will undo this assignment if noper does not
3333 * point at a trieable type in the else clause of
3334 * the following statement. */
3335 }
3336
3337 if ( noper < tail
3338 && ( OP(noper)((noper)->type) == flags
3339 || (flags == EXACT40 && OP(noper)((noper)->type) == EXACT_REQ850)
3340 || (flags == EXACTFU45 && ( OP(noper)((noper)->type) == EXACTFU_REQ852
3341 || OP(noper)((noper)->type) == EXACTFUP47))))
3342 {
3343 const U8 *uc= (U8*)STRING(noper)((((noper)->type) == 41 || ((noper)->type) == 51) ? (((
((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 3343, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3343, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))
;
3344 const U8 *e= uc + STR_LEN(noper)((((noper)->type) == 41 || ((noper)->type) == 51) ? (((
((noper)->type) == 41 || ((noper)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 3344, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3344, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))
;
3345
3346 for ( ; uc < e ; uc += len ) {
3347
3348 TRIE_READ_CHARdo { wordlen++; if ( (((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0) ) { uvc = Perl_valid_utf8_to_uvchr( (const U8*) uc, &
len); } else if (folder == PL_fold_latin1) { ((*uc != 0xDF) ?
(void)0 : __assert2("re_comp.c", 3348, __func__, "*uc != LATIN_SMALL_LETTER_SHARP_S"
)); uvc = ((! ( (sizeof(*uc) == 1) || !(((U64)((*uc) | 0)) &
~0xFF))) ? (*uc) : PL_latin1_lc[ (U8) (*uc) ]); if (__builtin_expect
(((uvc == 0xB5) ? (_Bool)1 : (_Bool)0),(0))) uvc = 0x03BC; len
= 1; } else { uvc = (U32)*uc; len = 1; } } while (0)
;
3349
3350 if ( uvc < 256 ) {
3351 charid = trie->charmap[ uvc ];
3352 } else {
3353 SV* const * const svpp = hv_fetch( widecharmap,((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
3354 (char*)&uvc,((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
3355 sizeof( UV ),((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
3356 0)((SV**) Perl_hv_common_key_len( (widecharmap),((char*)&uvc
),(sizeof( UV )),(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
;
3357 charid = svpp ? (U16)SvIV(*svpp)((((*svpp)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? (*({ const SV *const _svivx = (const SV *)(*svpp); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 3357, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3357, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( *svpp,2))
: 0;
3358 }
3359 if ( charid ) {
3360 charid--;
3361 if ( !trie->trans[ state + charid ].next ) {
3362 trie->trans[ state + charid ].next = next_alloc;
3363 trie->trans[ state ].check++;
3364 prev_states[TRIE_NODENUM(next_alloc)(((next_alloc)-1)/(trie->uniquecharcount)+1)]
3365 = TRIE_NODENUM(state)(((state)-1)/(trie->uniquecharcount)+1);
3366 next_alloc += trie->uniquecharcount;
3367 }
3368 state = trie->trans[ state + charid ].next;
3369 } else {
3370 Perl_croak( aTHX_ "panic! In trie construction, no char mapping for %" IVdf"ld", uvc );
3371 }
3372 /* charid is now 0 if we dont know the char read, or
3373 * nonzero if we do */
3374 }
3375 } else {
3376 /* If we end up here it is because we skipped past a NOTHING, but did not end up
3377 * on a trieable type. So we need to reset noper back to point at the first regop
3378 * in the branch before we call TRIE_HANDLE_WORD().
3379 */
3380 noper= NEXTOPER(cur)((cur) + 1);
3381 }
3382 accept_state = TRIE_NODENUM( state )(((state)-1)/(trie->uniquecharcount)+1);
3383 TRIE_HANDLE_WORD(accept_state)do { U16 dupe= trie->states[ accept_state ].wordnum; regnode
* const noper_next = Perl_regnext( noper); do {{ SV* tmp; if
(((noper)->type) != 54) tmp = Perl_newSVpvn_flags( (((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 3383, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->string)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3383, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->string))),(((((noper
)->type) == 41 || ((noper)->type) == 51) ? (((((noper)->
type) == 41 || ((noper)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 3383, __func__, "((noper)->type) == 41 || ((noper)->type) == 51"
)), (((struct regnode_lstring *)noper)->str_len)) : (((((noper
)->type) != 41 && ((noper)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 3383, __func__, "((noper)->type) != 41 && ((noper)->type) != 51"
)), ((struct regnode_string *)noper)->str_len))),((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); else tmp
= Perl_newSVpvn_flags( (""),(0),((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? 0x20000000 : 0); Perl_av_push( trie_words
,tmp); };} while (0); curword++; trie->wordinfo[curword].prev
= 0; trie->wordinfo[curword].len = wordlen; trie->wordinfo
[curword].accept = accept_state; if ( noper_next < tail ) {
if (!trie->jump) trie->jump = (U16 *) calloc((word_count
+ 1), (sizeof(U16))); trie->jump[curword] = (U16)(noper_next
- convert); if (!jumper) jumper = noper_next; if (!nextbranch
) nextbranch= Perl_regnext( cur); } if ( dupe ) { trie->wordinfo
[curword].prev = trie->wordinfo[dupe].prev; trie->wordinfo
[dupe].prev = curword; } else { trie->states[ accept_state
].wordnum = curword; } } while (0)
;
3384
3385 } /* end second pass */
3386
3387 /* and now dump it out before we compress it */
3388 DEBUG_TRIE_COMPILE_MORE_r(dump_trie_interim_table(trie, widecharmap,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_table
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
3389 revcharmap,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_table
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
3390 next_alloc, depth+1))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) S_dump_trie_interim_table
( trie,widecharmap,revcharmap,next_alloc,depth+1);} while (0)
;
3391
3392 {
3393 /*
3394 * Inplace compress the table.*
3395
3396 For sparse data sets the table constructed by the trie algorithm will
3397 be mostly 0/FAIL transitions or to put it another way mostly empty.
3398 (Note that leaf nodes will not contain any transitions.)
3399
3400 This algorithm compresses the tables by eliminating most such
3401 transitions, at the cost of a modest bit of extra work during lookup:
3402
3403 - Each states[] entry contains a .base field which indicates the
3404 index in the state[] array wheres its transition data is stored.
3405
3406 - If .base is 0 there are no valid transitions from that node.
3407
3408 - If .base is nonzero then charid is added to it to find an entry in
3409 the trans array.
3410
3411 -If trans[states[state].base+charid].check!=state then the
3412 transition is taken to be a 0/Fail transition. Thus if there are fail
3413 transitions at the front of the node then the .base offset will point
3414 somewhere inside the previous nodes data (or maybe even into a node
3415 even earlier), but the .check field determines if the transition is
3416 valid.
3417
3418 XXX - wrong maybe?
3419 The following process inplace converts the table to the compressed
3420 table: We first do not compress the root node 1,and mark all its
3421 .check pointers as 1 and set its .base pointer as 1 as well. This
3422 allows us to do a DFA construction from the compressed table later,
3423 and ensures that any .base pointers we calculate later are greater
3424 than 0.
3425
3426 - We set 'pos' to indicate the first entry of the second node.
3427
3428 - We then iterate over the columns of the node, finding the first and
3429 last used entry at l and m. We then copy l..m into pos..(pos+m-l),
3430 and set the .check pointers accordingly, and advance pos
3431 appropriately and repreat for the next node. Note that when we copy
3432 the next pointers we have to convert them from the original
3433 NODEIDX form to NODENUM form as the former is not valid post
3434 compression.
3435
3436 - If a node has no transitions used we mark its base as 0 and do not
3437 advance the pos pointer.
3438
3439 - If a node only has one transition we use a second pointer into the
3440 structure to fill in allocated fail transitions from other states.
3441 This pointer is independent of the main pointer and scans forward
3442 looking for null transitions that are allocated to a state. When it
3443 finds one it writes the single transition into the "hole". If the
3444 pointer doesnt find one the single transition is appended as normal.
3445
3446 - Once compressed we can Renew/realloc the structures to release the
3447 excess space.
3448
3449 See "Table-Compression Methods" in sec 3.9 of the Red Dragon,
3450 specifically Fig 3.47 and the associated pseudocode.
3451
3452 demq
3453 */
3454 const U32 laststate = TRIE_NODENUM( next_alloc )(((next_alloc)-1)/(trie->uniquecharcount)+1);
3455 U32 state, charid;
3456 U32 pos = 0, zp=0;
3457 trie->statecount = laststate;
3458
3459 for ( state = 1 ; state < laststate ; state++ ) {
3460 U8 flag = 0;
3461 const U32 stateidx = TRIE_NODEIDX( state )((state) ? (((state)-1)*(trie->uniquecharcount)+1) : (state
))
;
3462 const U32 o_used = trie->trans[ stateidx ].check;
3463 U32 used = trie->trans[ stateidx ].check;
3464 trie->trans[ stateidx ].check = 0;
3465
3466 for ( charid = 0;
3467 used && charid < trie->uniquecharcount;
3468 charid++ )
3469 {
3470 if ( flag || trie->trans[ stateidx + charid ].next ) {
3471 if ( trie->trans[ stateidx + charid ].next ) {
3472 if (o_used == 1) {
3473 for ( ; zp < pos ; zp++ ) {
3474 if ( ! trie->trans[ zp ].next ) {
3475 break;
3476 }
3477 }
3478 trie->states[ state ].trans.base
3479 = zp
3480 + trie->uniquecharcount
3481 - charid ;
3482 trie->trans[ zp ].next
3483 = SAFE_TRIE_NODENUM( trie->trans[ stateidx((trie->trans[ stateidx + charid ].next) ? (((trie->trans
[ stateidx + charid ].next)-1)/(trie->uniquecharcount)+1) :
(trie->trans[ stateidx + charid ].next))
3484 + charid ].next )((trie->trans[ stateidx + charid ].next) ? (((trie->trans
[ stateidx + charid ].next)-1)/(trie->uniquecharcount)+1) :
(trie->trans[ stateidx + charid ].next))
;
3485 trie->trans[ zp ].check = state;
3486 if ( ++zp > pos ) pos = zp;
3487 break;
3488 }
3489 used--;
3490 }
3491 if ( !flag ) {
3492 flag = 1;
3493 trie->states[ state ].trans.base
3494 = pos + trie->uniquecharcount - charid ;
3495 }
3496 trie->trans[ pos ].next
3497 = SAFE_TRIE_NODENUM(((trie->trans[ stateidx + charid ].next) ? (((trie->trans
[ stateidx + charid ].next)-1)/(trie->uniquecharcount)+1) :
(trie->trans[ stateidx + charid ].next))
3498 trie->trans[ stateidx + charid ].next )((trie->trans[ stateidx + charid ].next) ? (((trie->trans
[ stateidx + charid ].next)-1)/(trie->uniquecharcount)+1) :
(trie->trans[ stateidx + charid ].next))
;
3499 trie->trans[ pos ].check = state;
3500 pos++;
3501 }
3502 }
3503 }
3504 trie->lasttrans = pos + 1;
3505 trie->states = (reg_trie_state *)
3506 PerlMemShared_realloc( trie->states, laststaterealloc((trie->states), (laststate * sizeof(reg_trie_state
)))
3507 * sizeof(reg_trie_state) )realloc((trie->states), (laststate * sizeof(reg_trie_state
)))
;
3508 DEBUG_TRIE_COMPILE_MORE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3509 Perl_re_indentf( aTHX_ "Alloc: %d Orig: %" IVdf " elements, Final:%" IVdf ". Savings of %%%5.2f\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3510 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3511 (int)( ( TRIE_CHARCOUNT(trie) + 1 ) * trie->uniquecharcountdo {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3512 + 1 ),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3513 (IV)next_alloc,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3514 (IV)pos,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3515 ( ( next_alloc - pos ) * 100 ) / (double)next_alloc );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
3516 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Alloc: %d Orig: %" "ld" " elements, Final:%" "ld" ". Savings of %%%5.2f\n"
, depth+1, (int)( ( ((trie)->charcount) + 1 ) * trie->uniquecharcount
+ 1 ), (IV)next_alloc, (IV)pos, ( ( next_alloc - pos ) * 100
) / (double)next_alloc );;} while (0)
;
3517
3518 } /* end table compress */
3519 }
3520 DEBUG_TRIE_COMPILE_MORE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Statecount:%" "lx" " Lasttrans:%" "lx" "\n", depth+1, (UV)
trie->statecount, (UV)trie->lasttrans);} while (0)
3521 Perl_re_indentf( aTHX_ "Statecount:%" UVxf " Lasttrans:%" UVxf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Statecount:%" "lx" " Lasttrans:%" "lx" "\n", depth+1, (UV)
trie->statecount, (UV)trie->lasttrans);} while (0)
3522 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Statecount:%" "lx" " Lasttrans:%" "lx" "\n", depth+1, (UV)
trie->statecount, (UV)trie->lasttrans);} while (0)
3523 (UV)trie->statecount,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Statecount:%" "lx" " Lasttrans:%" "lx" "\n", depth+1, (UV)
trie->statecount, (UV)trie->lasttrans);} while (0)
3524 (UV)trie->lasttrans)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Statecount:%" "lx" " Lasttrans:%" "lx" "\n", depth+1, (UV)
trie->statecount, (UV)trie->lasttrans);} while (0)
3525 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) if (
__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool
)0),(0)) || (re_debug_flags & (0x0010000))) Perl_re_indentf
( "Statecount:%" "lx" " Lasttrans:%" "lx" "\n", depth+1, (UV)
trie->statecount, (UV)trie->lasttrans);} while (0)
;
3526 /* resize the trans array to remove unused space */
3527 trie->trans = (reg_trie_trans *)
3528 PerlMemShared_realloc( trie->trans, trie->lasttransrealloc((trie->trans), (trie->lasttrans * sizeof(reg_trie_trans
)))
3529 * sizeof(reg_trie_trans) )realloc((trie->trans), (trie->lasttrans * sizeof(reg_trie_trans
)))
;
3530
3531 { /* Modify the program and insert the new TRIE node */
3532 U8 nodetype =(U8)(flags & 0xFF);
3533 char *str=NULL((void*)0);
3534
3535#ifdef DEBUGGING
3536 regnode *optimize = NULL((void*)0);
3537#ifdef RE_TRACK_PATTERN_OFFSETS
3538
3539 U32 mjd_offset = 0;
3540 U32 mjd_nodelen = 0;
3541#endif /* RE_TRACK_PATTERN_OFFSETS */
3542#endif /* DEBUGGING */
3543 /*
3544 This means we convert either the first branch or the first Exact,
3545 depending on whether the thing following (in 'last') is a branch
3546 or not and whther first is the startbranch (ie is it a sub part of
3547 the alternation or is it the whole thing.)
3548 Assuming its a sub part we convert the EXACT otherwise we convert
3549 the whole branch sequence, including the first.
3550 */
3551 /* Find the node we are going to overwrite */
3552 if ( first != startbranch || OP( last )((last)->type) == BRANCH39 ) {
3553 /* branch sub-chain */
3554 NEXT_OFF( first )((first)->next_off) = (U16)(last - first);
3555#ifdef RE_TRACK_PATTERN_OFFSETS
3556 DEBUG_r({do {{ mjd_offset= (((pRExC_state->rxi)->u.offsets)[2*((
((convert)) - (pRExC_state->emit_start)))-1]); mjd_nodelen
= (((pRExC_state->rxi)->u.offsets)[2*((((convert)) - (pRExC_state
->emit_start)))]); };} while (0)
3557 mjd_offset= Node_Offset((convert));do {{ mjd_offset= (((pRExC_state->rxi)->u.offsets)[2*((
((convert)) - (pRExC_state->emit_start)))-1]); mjd_nodelen
= (((pRExC_state->rxi)->u.offsets)[2*((((convert)) - (pRExC_state
->emit_start)))]); };} while (0)
3558 mjd_nodelen= Node_Length((convert));do {{ mjd_offset= (((pRExC_state->rxi)->u.offsets)[2*((
((convert)) - (pRExC_state->emit_start)))-1]); mjd_nodelen
= (((pRExC_state->rxi)->u.offsets)[2*((((convert)) - (pRExC_state
->emit_start)))]); };} while (0)
3559 })do {{ mjd_offset= (((pRExC_state->rxi)->u.offsets)[2*((
((convert)) - (pRExC_state->emit_start)))-1]); mjd_nodelen
= (((pRExC_state->rxi)->u.offsets)[2*((((convert)) - (pRExC_state
->emit_start)))]); };} while (0)
;
3560#endif
3561 /* whole branch chain */
3562 }
3563#ifdef RE_TRACK_PATTERN_OFFSETS
3564 else {
3565 DEBUG_r({do {{ const regnode *nop = ((convert) + 1); mjd_offset= (((pRExC_state
->rxi)->u.offsets)[2*((((nop)) - (pRExC_state->emit_start
)))-1]); mjd_nodelen= (((pRExC_state->rxi)->u.offsets)[
2*((((nop)) - (pRExC_state->emit_start)))]); };} while (0)
3566 const regnode *nop = NEXTOPER( convert );do {{ const regnode *nop = ((convert) + 1); mjd_offset= (((pRExC_state
->rxi)->u.offsets)[2*((((nop)) - (pRExC_state->emit_start
)))-1]); mjd_nodelen= (((pRExC_state->rxi)->u.offsets)[
2*((((nop)) - (pRExC_state->emit_start)))]); };} while (0)
3567 mjd_offset= Node_Offset((nop));do {{ const regnode *nop = ((convert) + 1); mjd_offset= (((pRExC_state
->rxi)->u.offsets)[2*((((nop)) - (pRExC_state->emit_start
)))-1]); mjd_nodelen= (((pRExC_state->rxi)->u.offsets)[
2*((((nop)) - (pRExC_state->emit_start)))]); };} while (0)
3568 mjd_nodelen= Node_Length((nop));do {{ const regnode *nop = ((convert) + 1); mjd_offset= (((pRExC_state
->rxi)->u.offsets)[2*((((nop)) - (pRExC_state->emit_start
)))-1]); mjd_nodelen= (((pRExC_state->rxi)->u.offsets)[
2*((((nop)) - (pRExC_state->emit_start)))]); };} while (0)
3569 })do {{ const regnode *nop = ((convert) + 1); mjd_offset= (((pRExC_state
->rxi)->u.offsets)[2*((((nop)) - (pRExC_state->emit_start
)))-1]); mjd_nodelen= (((pRExC_state->rxi)->u.offsets)[
2*((((nop)) - (pRExC_state->emit_start)))]); };} while (0)
;
3570 }
3571 DEBUG_OPTIMISE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "MJD offset:%" "lu" " MJD length:%" "lu" "\n", depth+1, (UV
)mjd_offset, (UV)mjd_nodelen);} while (0)
3572 Perl_re_indentf( aTHX_ "MJD offset:%" UVuf " MJD length:%" UVuf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "MJD offset:%" "lu" " MJD length:%" "lu" "\n", depth+1, (UV
)mjd_offset, (UV)mjd_nodelen);} while (0)
3573 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "MJD offset:%" "lu" " MJD length:%" "lu" "\n", depth+1, (UV
)mjd_offset, (UV)mjd_nodelen);} while (0)
3574 (UV)mjd_offset, (UV)mjd_nodelen)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "MJD offset:%" "lu" " MJD length:%" "lu" "\n", depth+1, (UV
)mjd_offset, (UV)mjd_nodelen);} while (0)
3575 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "MJD offset:%" "lu" " MJD length:%" "lu" "\n", depth+1, (UV
)mjd_offset, (UV)mjd_nodelen);} while (0)
;
3576#endif
3577 /* But first we check to see if there is a common prefix we can
3578 split out as an EXACT and put in front of the TRIE node. */
3579 trie->startstate= 1;
3580 if ( trie->bitmap && !widecharmap && !trie->jump ) {
3581 /* we want to find the first state that has more than
3582 * one transition, if that state is not the first state
3583 * then we have a common prefix which we can remove.
3584 */
3585 U32 state;
3586 for ( state = 1 ; state < trie->statecount-1 ; state++ ) {
3587 U32 ofs = 0;
3588 I32 first_ofs = -1; /* keeps track of the ofs of the first
3589 transition, -1 means none */
3590 U32 count = 0;
3591 const U32 base = trie->states[ state ].trans.base;
3592
3593 /* does this state terminate an alternation? */
3594 if ( trie->states[state].wordnum )
3595 count = 1;
3596
3597 for ( ofs = 0 ; ofs < trie->uniquecharcount ; ofs++ ) {
3598 if ( ( base + ofs >= trie->uniquecharcount ) &&
3599 ( base + ofs - trie->uniquecharcount < trie->lasttrans ) &&
3600 trie->trans[ base + ofs - trie->uniquecharcount ].check == state )
3601 {
3602 if ( ++count > 1 ) {
3603 /* we have more than one transition */
3604 SV **tmp;
3605 U8 *ch;
3606 /* if this is the first state there is no common prefix
3607 * to extract, so we can exit */
3608 if ( state == 1 ) break;
3609 tmp = av_fetch( revcharmap, ofs, 0)Perl_av_fetch( revcharmap,ofs,0);
3610 ch = (U8*)SvPV_nolen_const( *tmp )((((*tmp)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv)) : Perl_sv_2pv_flags
( *tmp,0,2|32))
;
3611
3612 /* if we are on count 2 then we need to initialize the
3613 * bitmap, and store the previous char if there was one
3614 * in it*/
3615 if ( count == 2 ) {
3616 /* clear the bitmap */
3617 Zero(trie->bitmap, ANYOF_BITMAP_SIZE, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(((1
<< 8) / 8)) || sizeof(char) > ((size_t)1 << 8
*(sizeof(size_t) - sizeof(((1 << 8) / 8))))) ? (size_t)
(((1 << 8) / 8)) : ((size_t)-1)/sizeof(char)) > ((size_t
)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(trie->bitmap)) != 0) ? (void)0 : __assert2
("re_comp.c", 3617, __func__, "((void*)(trie->bitmap)) != 0"
)), (void)memset((char*)(trie->bitmap),0,(((1 << 8) /
8)) * sizeof(char)))
;
3618 DEBUG_OPTIMISE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "New Start State=%" "lu" " Class: [", depth+1, (UV)state);}
while (0)
3619 Perl_re_indentf( aTHX_ "New Start State=%" UVuf " Class: [",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "New Start State=%" "lu" " Class: [", depth+1, (UV)state);}
while (0)
3620 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "New Start State=%" "lu" " Class: [", depth+1, (UV)state);}
while (0)
3621 (UV)state))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_indentf
( "New Start State=%" "lu" " Class: [", depth+1, (UV)state);}
while (0)
;
3622 if (first_ofs >= 0) {
3623 SV ** const tmp = av_fetch( revcharmap, first_ofs, 0)Perl_av_fetch( revcharmap,first_ofs,0);
3624 const U8 * const ch = (U8*)SvPV_nolen_const( *tmp )((((*tmp)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + (*tmp)->sv_u.svu_pv)) : Perl_sv_2pv_flags
( *tmp,0,2|32))
;
3625
3626 TRIE_BITMAP_SET_FOLDED(trie,*ch, folder)do { ((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (
UV) (*ch)) >> 3) ] ) |= (1U << (((U8)*ch) & 7
))); if ( folder ) ((( (U8*) (((reg_trie_data *)(trie))->bitmap
)) [ ( ( (UV) (folder[(U8) *ch ])) >> 3) ] ) |= (1U <<
(((U8)folder[(U8) *ch ]) & 7))); if ( !(((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0) ) { if (! ((((U64)(((UV) ((*ch)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0)))) { ((( (
U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (((((
sizeof(*ch) == 1) || !(((U64)(*ch)) & ~(32 * (1U <<
6) - 1))) ? (void)0 : __assert2("re_comp.c", 3626, __func__,
"(sizeof(*ch) == 1) || !(((U64)(*ch)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 3626, __func__
, "! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 3626, __func__, "( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0)))))))) >>
3) ] ) |= (1U << (((U8)((((sizeof(*ch) == 1) || !(((U64
)(*ch)) & ~(32 * (1U << 6) - 1))) ? (void)0 : __assert2
("re_comp.c", 3626, __func__, "(sizeof(*ch) == 1) || !(((U64)(*ch)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 3626, __func__
, "! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 3626, __func__, "( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0))))))) & 7))
); } } } while (0)
;
3627 DEBUG_OPTIMISE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "%s", (char*)ch);} while (0)
3628 Perl_re_printf( aTHX_ "%s", (char*)ch)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "%s", (char*)ch);} while (0)
3629 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "%s", (char*)ch);} while (0)
;
3630 }
3631 }
3632 /* store the current firstchar in the bitmap */
3633 TRIE_BITMAP_SET_FOLDED(trie,*ch, folder)do { ((( (U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (
UV) (*ch)) >> 3) ] ) |= (1U << (((U8)*ch) & 7
))); if ( folder ) ((( (U8*) (((reg_trie_data *)(trie))->bitmap
)) [ ( ( (UV) (folder[(U8) *ch ])) >> 3) ] ) |= (1U <<
(((U8)folder[(U8) *ch ]) & 7))); if ( !(((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0) ) { if (! ((((U64)(((UV) ((*ch)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0)))) { ((( (
U8*) (((reg_trie_data *)(trie))->bitmap)) [ ( ( (UV) (((((
sizeof(*ch) == 1) || !(((U64)(*ch)) & ~(32 * (1U <<
6) - 1))) ? (void)0 : __assert2("re_comp.c", 3633, __func__,
"(sizeof(*ch) == 1) || !(((U64)(*ch)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 3633, __func__
, "! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 3633, __func__, "( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0)))))))) >>
3) ] ) |= (1U << (((U8)((((sizeof(*ch) == 1) || !(((U64
)(*ch)) & ~(32 * (1U << 6) - 1))) ? (void)0 : __assert2
("re_comp.c", 3633, __func__, "(sizeof(*ch) == 1) || !(((U64)(*ch)) & ~(32 * (1U << 6) - 1))"
)), ((((! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? (void)0 : __assert2("re_comp.c", 3633, __func__
, "! ((((U64)(((UV) ((*ch) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))"
)), (((( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64
)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : (
(U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 3633, __func__, "( (sizeof((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) == 1) || !(((U64)(((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) | 0)) & ~0xFF))"
)), ((U8) (((((UV) ((*ch) | 0)) >> 6) | (((2) > 7) ?
0xFF : ((U8) (0xFE << (7-(2)))))) | 0))))))) & 7))
); } } } while (0)
;
3634 DEBUG_OPTIMISE_r(Perl_re_printf( aTHX_ "%s", ch))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "%s", ch);} while (0)
;
3635 }
3636 first_ofs = ofs;
3637 }
3638 }
3639 if ( count == 1 ) {
3640 /* This state has only one transition, its transition is part
3641 * of a common prefix - we need to concatenate the char it
3642 * represents to what we have so far. */
3643 SV **tmp = av_fetch( revcharmap, first_ofs, 0)Perl_av_fetch( revcharmap,first_ofs,0);
3644 STRLEN len;
3645 char *ch = SvPV( *tmp, len )((((*tmp)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((len = (*({ const SV *const _svcur = (const SV *)(*tmp);
((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 3645, __func__
, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]")); ((!(
(((_svcur)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svcur)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 3645, __func__, "!isGV_with_GP(_svcur)"
)); ((!(((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svcur)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 3645, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))), (*({ SV *const _svpvx = ((SV *)({ void *
_p = (*tmp); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 3645, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3645, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3645, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))) : Perl_sv_2pv_flags
( *tmp,&len,2))
;
3646 DEBUG_OPTIMISE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3647 SV *sv=sv_newmortal();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3648 Perl_re_indentf( aTHX_ "Prefix State: %" UVuf " Ofs:%" UVuf " Char='%s'\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3649 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3650 (UV)state, (UV)first_ofs,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3651 pv_pretty(sv, SvPV_nolen_const(*tmp), SvCUR(*tmp), 6,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3652 PL_colors[0], PL_colors[1],do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3653 (SvUTF8(*tmp) ? PERL_PV_ESCAPE_UNI : 0) |do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3654 PERL_PV_ESCAPE_FIRSTCHARdo {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3655 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3656 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
3657 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { SV
*sv=Perl_sv_newmortal(); Perl_re_indentf( "Prefix State: %" "lu"
" Ofs:%" "lu" " Char='%s'\n", depth+1, (UV)state, (UV)first_ofs
, Perl_pv_pretty( sv,((((*tmp)->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + (*tmp)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( *tmp,0,2|32)),(*({ const SV
*const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 3651, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3651, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3651, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })),6,PL_colors[0],PL_colors[1],(((*tmp)->
sv_flags & 0x20000000) ? 0x000100 : 0) | 0x000800) ); };}
while (0)
;
3658 if ( state==1 ) {
3659 OP( convert )((convert)->type) = nodetype;
3660 str=STRING(convert)((((convert)->type) == 41 || ((convert)->type) == 51) ?
(((((convert)->type) == 41 || ((convert)->type) == 51)
? (void)0 : __assert2("re_comp.c", 3660, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->string)) : (((((
convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3660, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->string))
;
3661 setSTR_LEN(convert, 0)do{ if (((convert)->type) == 41 || ((convert)->type) ==
51) ((struct regnode_lstring *)(convert))->str_len = (0);
else ((struct regnode_string *)(convert))->str_len = (0);
} while (0)
;
3662 }
3663 assert( ( STR_LEN(convert) + len ) < 256 )((( ((((convert)->type) == 41 || ((convert)->type) == 51
) ? (((((convert)->type) == 41 || ((convert)->type) == 51
) ? (void)0 : __assert2("re_comp.c", 3663, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3663, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len)) + len ) <
256) ? (void)0 : __assert2("re_comp.c", 3663, __func__, "( STR_LEN(convert) + len ) < 256"
))
;
3664 setSTR_LEN(convert, (U8)(STR_LEN(convert) + len))do{ if (((convert)->type) == 41 || ((convert)->type) ==
51) ((struct regnode_lstring *)(convert))->str_len = ((U8
)(((((convert)->type) == 41 || ((convert)->type) == 51)
? (((((convert)->type) == 41 || ((convert)->type) == 51
) ? (void)0 : __assert2("re_comp.c", 3664, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3664, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len)) + len));
else ((struct regnode_string *)(convert))->str_len = ((U8
)(((((convert)->type) == 41 || ((convert)->type) == 51)
? (((((convert)->type) == 41 || ((convert)->type) == 51
) ? (void)0 : __assert2("re_comp.c", 3664, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3664, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len)) + len));
} while (0)
;
3665 while (len--)
3666 *str++ = *ch++;
3667 } else {
3668#ifdef DEBUGGING
3669 if (state>1)
3670 DEBUG_OPTIMISE_r(Perl_re_printf( aTHX_ "]\n"))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "]\n");} while (0)
;
3671#endif
3672 break;
3673 }
3674 }
3675 trie->prefixlen = (state-1);
3676 if (str) {
3677 regnode *n = convert+NODE_SZ_STR(convert)((((((((convert)->type) == 41 || ((convert)->type) == 51
) ? (((((convert)->type) == 41 || ((convert)->type) == 51
) ? (void)0 : __assert2("re_comp.c", 3677, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3677, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len))) + sizeof
(regnode) - 1) / sizeof(regnode)) + 1 + regarglen[(convert)->
type])
;
3678 assert( NODE_SZ_STR(convert) <= U16_MAX )((((((((((convert)->type) == 41 || ((convert)->type) ==
51) ? (((((convert)->type) == 41 || ((convert)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 3678, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3678, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len))) + sizeof
(regnode) - 1) / sizeof(regnode)) + 1 + regarglen[(convert)->
type]) <= 0xffff) ? (void)0 : __assert2("re_comp.c", 3678,
__func__, "NODE_SZ_STR(convert) <= U16_MAX"))
;
3679 NEXT_OFF(convert)((convert)->next_off) = (U16)(NODE_SZ_STR(convert)((((((((convert)->type) == 41 || ((convert)->type) == 51
) ? (((((convert)->type) == 41 || ((convert)->type) == 51
) ? (void)0 : __assert2("re_comp.c", 3679, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3679, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len))) + sizeof
(regnode) - 1) / sizeof(regnode)) + 1 + regarglen[(convert)->
type])
);
3680 trie->startstate = state;
3681 trie->minlen -= (state - 1);
3682 trie->maxlen -= (state - 1);
3683#ifdef DEBUGGING
3684 /* At least the UNICOS C compiler choked on this
3685 * being argument to DEBUG_r(), so let's just have
3686 * it right here. */
3687 if (
3688#ifdef PERL_EXT_RE_BUILD1
3689 1
3690#else
3691 DEBUG_r_TEST__builtin_expect(((PL_debug & 0x00000200) ? (_Bool)1 : (_Bool
)0),(0))
3692#endif
3693 ) {
3694 regnode *fix = convert;
3695 U32 word = trie->wordcount;
3696#ifdef RE_TRACK_PATTERN_OFFSETS
3697 mjd_nodelen++;
3698#endif
3699 Set_Node_Offset_Length(convert, mjd_offset, state - 1)do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3699, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3699, (int)(((convert) -
(pRExC_state->emit_start))), (int)((state - 1)));} while (
0); if((((convert) - (pRExC_state->emit_start))) < 0) {
Perl_croak( "value of node is %d in Length macro", (int)(((convert
) - (pRExC_state->emit_start)))); } else { ((pRExC_state->
rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((state - 1)); } } while (0); } while (0)
;
3700 while( ++fix < n ) {
3701 Set_Node_Offset_Length(fix, 0, 0)do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3701, (int
)(((fix) - (pRExC_state->emit_start))), (int)((0)));} while
(0); if((((fix) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((fix) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((fix) - (pRExC_state->emit_start)))-1] = ((0)); } } while
(0); do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) size of node %d is %d.\n", 3701, (int
)(((fix) - (pRExC_state->emit_start))), (int)((0)));} while
(0); if((((fix) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Length macro", (int)(((fix) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((fix) - (pRExC_state->emit_start)))] = ((0)); } } while
(0); } while (0)
;
3702 }
3703 while (word--) {
3704 SV ** const tmp = av_fetch( trie_words, word, 0 )Perl_av_fetch( trie_words,word,0);
3705 if (tmp) {
3706 if ( STR_LEN(convert)((((convert)->type) == 41 || ((convert)->type) == 51) ?
(((((convert)->type) == 41 || ((convert)->type) == 51)
? (void)0 : __assert2("re_comp.c", 3706, __func__, "((convert)->type) == 41 || ((convert)->type) == 51"
)), (((struct regnode_lstring *)convert)->str_len)) : ((((
(convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3706, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len))
<= SvCUR(*tmp)(*({ const SV *const _svcur = (const SV *)(*tmp); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 3706, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3706, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3706, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
)
3707 sv_chop(*tmp, SvPV_nolen(*tmp) + STR_LEN(convert))Perl_sv_chop( *tmp,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? (*({ SV *const _svpvx = ((SV *)({ void *_p
= (*tmp); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 3707, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3707, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3707, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })) : Perl_sv_2pv_flags(
*tmp,0,2)) + ((((convert)->type) == 41 || ((convert)->
type) == 51) ? (((((convert)->type) == 41 || ((convert)->
type) == 51) ? (void)0 : __assert2("re_comp.c", 3707, __func__
, "((convert)->type) == 41 || ((convert)->type) == 51")
), (((struct regnode_lstring *)convert)->str_len)) : (((((
convert)->type) != 41 && ((convert)->type) != 51
) ? (void)0 : __assert2("re_comp.c", 3707, __func__, "((convert)->type) != 41 && ((convert)->type) != 51"
)), ((struct regnode_string *)convert)->str_len)))
;
3708 else
3709 sv_chop(*tmp, SvPV_nolen(*tmp) + SvCUR(*tmp))Perl_sv_chop( *tmp,((((*tmp)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? (*({ SV *const _svpvx = ((SV *)({ void *_p
= (*tmp); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 3709, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3709, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3709, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })) : Perl_sv_2pv_flags(
*tmp,0,2)) + (*({ const SV *const _svcur = (const SV *)(*tmp
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 3709,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 3709, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 3709, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })))
;
3710 }
3711 }
3712 }
3713#endif
3714 if (trie->maxlen) {
3715 convert = n;
3716 } else {
3717 NEXT_OFF(convert)((convert)->next_off) = (U16)(tail - convert);
3718 DEBUG_r(optimize= n)do {optimize= n;} while (0);
3719 }
3720 }
3721 }
3722 if (!jumper)
3723 jumper = last;
3724 if ( trie->maxlen ) {
3725 NEXT_OFF( convert )((convert)->next_off) = (U16)(tail - convert);
3726 ARG_SET( convert, data_slot )(((((struct regnode_1 *)convert)->arg1)) = ((data_slot)));
3727 /* Store the offset to the first unabsorbed branch in
3728 jump[0], which is otherwise unused by the jump logic.
3729 We use this when dumping a trie and during optimisation. */
3730 if (trie->jump)
3731 trie->jump[0] = (U16)(nextbranch - convert);
3732
3733 /* If the start state is not accepting (meaning there is no empty string/NOTHING)
3734 * and there is a bitmap
3735 * and the first "jump target" node we found leaves enough room
3736 * then convert the TRIE node into a TRIEC node, with the bitmap
3737 * embedded inline in the opcode - this is hypothetically faster.
3738 */
3739 if ( !trie->states[trie->startstate].wordnum
3740 && trie->bitmap
3741 && ( (char *)jumper - (char *)convert) >= (int)sizeof(struct regnode_charclass) )
3742 {
3743 OP( convert )((convert)->type) = TRIEC89;
3744 Copy(trie->bitmap, ((struct regnode_charclass *)convert)->bitmap, ANYOF_BITMAP_SIZE, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(((1
<< 8) / 8)) || sizeof(char) > ((size_t)1 << 8
*(sizeof(size_t) - sizeof(((1 << 8) / 8))))) ? (size_t)
(((1 << 8) / 8)) : ((size_t)-1)/sizeof(char)) > ((size_t
)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(((struct regnode_charclass *)convert)->
bitmap)) != 0) ? (void)0 : __assert2("re_comp.c", 3744, __func__
, "((void*)(((struct regnode_charclass *)convert)->bitmap)) != 0"
)), ((((void*)(trie->bitmap)) != 0) ? (void)0 : __assert2(
"re_comp.c", 3744, __func__, "((void*)(trie->bitmap)) != 0"
)), (void)memcpy((char*)(((struct regnode_charclass *)convert
)->bitmap),(const char*)(trie->bitmap), (((1 << 8
) / 8)) * sizeof(char)))
;
3745 PerlMemShared_free(trie->bitmap)free((trie->bitmap));
3746 trie->bitmap= NULL((void*)0);
3747 } else
3748 OP( convert )((convert)->type) = TRIE88;
3749
3750 /* store the type in the flags */
3751 convert->flags = nodetype;
3752 DEBUG_r({do {{ optimize = convert + 1 + regarglen[ ((convert)->type
) ]; };} while (0)
3753 optimize = convertdo {{ optimize = convert + 1 + regarglen[ ((convert)->type
) ]; };} while (0)
3754 + NODE_STEP_REGNODEdo {{ optimize = convert + 1 + regarglen[ ((convert)->type
) ]; };} while (0)
3755 + regarglen[ OP( convert ) ];do {{ optimize = convert + 1 + regarglen[ ((convert)->type
) ]; };} while (0)
3756 })do {{ optimize = convert + 1 + regarglen[ ((convert)->type
) ]; };} while (0)
;
3757 /* XXX We really should free up the resource in trie now,
3758 as we won't use them - (which resources?) dmq */
3759 }
3760 /* needed for dumping*/
3761 DEBUG_r(if (optimize) {do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3762 regnode *opt = convert;do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3763
3764 while ( ++opt < optimize) {do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3765 Set_Node_Offset_Length(opt, 0, 0);do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3766 }do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3767 /*do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3768 Try to clean up some of the debris left after thedo {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3769 optimisation.do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3770 */do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3771 while( optimize < jumper ) {do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3772 Track_Code( mjd_nodelen += Node_Length((optimize)); );do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3773 OP( optimize ) = OPTIMIZED;do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3774 Set_Node_Offset_Length(optimize, 0, 0);do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3775 optimize++;do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3776 }do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3777 Set_Node_Offset_Length(convert, mjd_offset, mjd_nodelen);do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
3778 })do {if (optimize) { regnode *opt = convert; while ( ++opt <
optimize) { do { do { do {if (__builtin_expect(((PL_debug &
0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags &
(0x0040000))) Perl_warn ("** (%d) offset of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3765, (int)(((opt) - (pRExC_state->emit_start))), (int)(
(0)));} while (0); if((((opt) - (pRExC_state->emit_start))
) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((opt) - (pRExC_state->emit_start)))); } else { ((
pRExC_state->rxi)->u.offsets)[2*(((opt) - (pRExC_state->
emit_start)))] = ((0)); } } while (0); } while (0); } while( optimize
< jumper ) { do { mjd_nodelen += (((pRExC_state->rxi)->
u.offsets)[2*((((optimize)) - (pRExC_state->emit_start)))]
); } while (0); ((optimize)->type) = 107; do { do { do {if
(__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)1 : (
_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) offset of node %d is %d.\n", 3774, (int)(((optimize
) - (pRExC_state->emit_start))), (int)((0)));} while (0); if
((((optimize) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((optimize) - (
pRExC_state->emit_start)))); } else { ((pRExC_state->rxi
)->u.offsets)[2*(((optimize) - (pRExC_state->emit_start
)))-1] = ((0)); } } while (0); do { do {if (__builtin_expect(
((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
re_debug_flags & (0x0040000))) Perl_warn ("** (%d) size of node %d is %d.\n"
, 3774, (int)(((optimize) - (pRExC_state->emit_start))), (
int)((0)));} while (0); if((((optimize) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((optimize) - (pRExC_state->emit_start)))); } else
{ ((pRExC_state->rxi)->u.offsets)[2*(((optimize) - (pRExC_state
->emit_start)))] = ((0)); } } while (0); } while (0); optimize
++; } do { do { do {if (__builtin_expect(((PL_debug & 0x00100000
) ? (_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000
))) Perl_warn ("** (%d) offset of node %d is %d.\n", 3777, (int
)(((convert) - (pRExC_state->emit_start))), (int)((mjd_offset
)));} while (0); if((((convert) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((convert) - (pRExC_state->emit_start)))); } else {
((pRExC_state->rxi)->u.offsets)[2*(((convert) - (pRExC_state
->emit_start)))-1] = ((mjd_offset)); } } while (0); do { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000))) Perl_warn
("** (%d) size of node %d is %d.\n", 3777, (int)(((convert) -
(pRExC_state->emit_start))), (int)((mjd_nodelen)));} while
(0); if((((convert) - (pRExC_state->emit_start))) < 0)
{ Perl_croak( "value of node is %d in Length macro", (int)((
(convert) - (pRExC_state->emit_start)))); } else { ((pRExC_state
->rxi)->u.offsets)[2*(((convert) - (pRExC_state->emit_start
)))] = ((mjd_nodelen)); } } while (0); } while (0); };} while
(0)
;
3779 } /* end node insert */
3780
3781 /* Finish populating the prev field of the wordinfo array. Walk back
3782 * from each accept state until we find another accept state, and if
3783 * so, point the first word's .prev field at the second word. If the
3784 * second already has a .prev field set, stop now. This will be the
3785 * case either if we've already processed that word's accept state,
3786 * or that state had multiple words, and the overspill words were
3787 * already linked up earlier.
3788 */
3789 {
3790 U16 word;
3791 U32 state;
3792 U16 prev;
3793
3794 for (word=1; word <= trie->wordcount; word++) {
3795 prev = 0;
3796 if (trie->wordinfo[word].prev)
3797 continue;
3798 state = trie->wordinfo[word].accept;
3799 while (state) {
3800 state = prev_states[state];
3801 if (!state)
3802 break;
3803 prev = trie->states[state].wordnum;
3804 if (prev)
3805 break;
3806 }
3807 trie->wordinfo[word].prev = prev;
3808 }
3809 Safefree(prev_states)Perl_safesysfree(((void *)(prev_states)));
3810 }
3811
3812
3813 /* and now dump out the compressed format */
3814 DEBUG_TRIE_COMPILE_r(dump_trie(trie, widecharmap, revcharmap, depth+1))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) S_dump_trie
( trie,widecharmap,revcharmap,depth+1);} while (0)
;
3815
3816 RExC_rxi(pRExC_state->rxi)->data->data[ data_slot + 1 ] = (void*)widecharmap;
3817#ifdef DEBUGGING
3818 RExC_rxi(pRExC_state->rxi)->data->data[ data_slot + TRIE_WORDS_OFFSET2 ] = (void*)trie_words;
3819 RExC_rxi(pRExC_state->rxi)->data->data[ data_slot + 3 ] = (void*)revcharmap;
3820#else
3821 SvREFCNT_dec_NN(revcharmap)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (revcharmap); _p; }
)))
;
3822#endif
3823 return trie->jump
3824 ? MADE_JUMP_TRIE2
3825 : trie->startstate>1
3826 ? MADE_EXACT_TRIE4
3827 : MADE_TRIE1;
3828}
3829
3830STATICstatic regnode *
3831S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *source, U32 depth)
3832{
3833/* The Trie is constructed and compressed now so we can build a fail array if
3834 * it's needed
3835
3836 This is basically the Aho-Corasick algorithm. Its from exercise 3.31 and
3837 3.32 in the
3838 "Red Dragon" -- Compilers, principles, techniques, and tools. Aho, Sethi,
3839 Ullman 1985/88
3840 ISBN 0-201-10088-6
3841
3842 We find the fail state for each state in the trie, this state is the longest
3843 proper suffix of the current state's 'word' that is also a proper prefix of
3844 another word in our trie. State 1 represents the word '' and is thus the
3845 default fail state. This allows the DFA not to have to restart after its
3846 tried and failed a word at a given point, it simply continues as though it
3847 had been matching the other word in the first place.
3848 Consider
3849 'abcdgu'=~/abcdefg|cdgu/
3850 When we get to 'd' we are still matching the first word, we would encounter
3851 'g' which would fail, which would bring us to the state representing 'd' in
3852 the second word where we would try 'g' and succeed, proceeding to match
3853 'cdgu'.
3854 */
3855 /* add a fail transition */
3856 const U32 trie_offset = ARG(source)((((struct regnode_1 *)source)->arg1));
3857 reg_trie_data *trie=(reg_trie_data *)RExC_rxi(pRExC_state->rxi)->data->data[trie_offset];
3858 U32 *q;
3859 const U32 ucharcount = trie->uniquecharcount;
3860 const U32 numstates = trie->statecount;
3861 const U32 ubound = trie->lasttrans + ucharcount;
3862 U32 q_read = 0;
3863 U32 q_write = 0;
3864 U32 charid;
3865 U32 base = trie->states[ 1 ].trans.base;
3866 U32 *fail;
3867 reg_ac_data *aho;
3868 const U32 data_slot = add_dataS_add_data( pRExC_state, STR_WITH_LEN("T")("" "T" ""), (sizeof("T")-1));
3869 regnode *stclass;
3870 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 3870, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 3870, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
3871
3872 PERL_ARGS_ASSERT_CONSTRUCT_AHOCORASICK_FROM_TRIE((pRExC_state) ? (void)0 : __assert2("re_comp.c", 3872, __func__
, "pRExC_state")); ((source) ? (void)0 : __assert2("re_comp.c"
, 3872, __func__, "source"))
;
3873 PERL_UNUSED_CONTEXT;
3874#ifndef DEBUGGING
3875 PERL_UNUSED_ARG(depth)((void)sizeof(depth));
3876#endif
3877
3878 if ( OP(source)((source)->type) == TRIE88 ) {
3879 struct regnode_1 *op = (struct regnode_1 *)
3880 PerlMemShared_calloc(1, sizeof(struct regnode_1))calloc((1), (sizeof(struct regnode_1)));
3881 StructCopy(source, op, struct regnode_1)(*((struct regnode_1*)(op)) = *((struct regnode_1*)(source)));
3882 stclass = (regnode *)op;
3883 } else {
3884 struct regnode_charclass *op = (struct regnode_charclass *)
3885 PerlMemShared_calloc(1, sizeof(struct regnode_charclass))calloc((1), (sizeof(struct regnode_charclass)));
3886 StructCopy(source, op, struct regnode_charclass)(*((struct regnode_charclass*)(op)) = *((struct regnode_charclass
*)(source)))
;
3887 stclass = (regnode *)op;
3888 }
3889 OP(stclass)((stclass)->type)+=2; /* convert the TRIE type to its AHO-CORASICK equivalent */
3890
3891 ARG_SET( stclass, data_slot )(((((struct regnode_1 *)stclass)->arg1)) = ((data_slot)));
3892 aho = (reg_ac_data *) PerlMemShared_calloc( 1, sizeof(reg_ac_data) )calloc((1), (sizeof(reg_ac_data)));
3893 RExC_rxi(pRExC_state->rxi)->data->data[ data_slot ] = (void*)aho;
3894 aho->trie=trie_offset;
3895 aho->states=(reg_trie_state *)PerlMemShared_malloc( numstates * sizeof(reg_trie_state) )malloc((numstates * sizeof(reg_trie_state)));
3896 Copy( trie->states, aho->states, numstates, reg_trie_state )((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(numstates
) || sizeof(reg_trie_state) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(numstates)))) ? (size_t)(numstates) : ((size_t
)-1)/sizeof(reg_trie_state)) > ((size_t)-1)/sizeof(reg_trie_state
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(aho->states)) != 0) ? (void)0 : __assert2
("re_comp.c", 3896, __func__, "((void*)(aho->states)) != 0"
)), ((((void*)(trie->states)) != 0) ? (void)0 : __assert2(
"re_comp.c", 3896, __func__, "((void*)(trie->states)) != 0"
)), (void)memcpy((char*)(aho->states),(const char*)(trie->
states), (numstates) * sizeof(reg_trie_state)))
;
3897 Newx( q, numstates, U32)(q = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(numstates) || sizeof(U32) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(numstates)))) ? (size_t)(numstates) : ((size_t
)-1)/sizeof(U32)) > ((size_t)-1)/sizeof(U32))) ? (_Bool)1 :
(_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (U32
*)(Perl_safesysmalloc((size_t)((numstates)*sizeof(U32))))))
;
3898 aho->fail = (U32 *) PerlMemShared_calloc( numstates, sizeof(U32) )calloc((numstates), (sizeof(U32)));
3899 aho->refcount = 1;
3900 fail = aho->fail;
3901 /* initialize fail[0..1] to be 1 so that we always have
3902 a valid final fail state */
3903 fail[ 0 ] = fail[ 1 ] = 1;
3904
3905 for ( charid = 0; charid < ucharcount ; charid++ ) {
3906 const U32 newstate = TRIE_TRANS_STATE( 1, base, ucharcount, charid, 0 )( ( base + charid >= ucharcount && base + charid <
ubound && 1 == trie->trans[ base - ucharcount + charid
].check && trie->trans[ base - ucharcount + charid
].next ) ? trie->trans[ base - ucharcount + charid ].next
: ( 1==1 ? 0 : 0 ) )
;
3907 if ( newstate ) {
3908 q[ q_write ] = newstate;
3909 /* set to point at the root */
3910 fail[ q[ q_write++ ] ]=1;
3911 }
3912 }
3913 while ( q_read < q_write) {
3914 const U32 cur = q[ q_read++ % numstates ];
3915 base = trie->states[ cur ].trans.base;
3916
3917 for ( charid = 0 ; charid < ucharcount ; charid++ ) {
3918 const U32 ch_state = TRIE_TRANS_STATE( cur, base, ucharcount, charid, 1 )( ( base + charid >= ucharcount && base + charid <
ubound && cur == trie->trans[ base - ucharcount +
charid ].check && trie->trans[ base - ucharcount +
charid ].next ) ? trie->trans[ base - ucharcount + charid
].next : ( cur==1 ? 1 : 0 ) )
;
3919 if (ch_state) {
3920 U32 fail_state = cur;
3921 U32 fail_base;
3922 do {
3923 fail_state = fail[ fail_state ];
3924 fail_base = aho->states[ fail_state ].trans.base;
3925 } while ( !TRIE_TRANS_STATE( fail_state, fail_base, ucharcount, charid, 1 )( ( fail_base + charid >= ucharcount && fail_base +
charid < ubound && fail_state == trie->trans[ fail_base
- ucharcount + charid ].check && trie->trans[ fail_base
- ucharcount + charid ].next ) ? trie->trans[ fail_base -
ucharcount + charid ].next : ( fail_state==1 ? 1 : 0 ) )
);
3926
3927 fail_state = TRIE_TRANS_STATE( fail_state, fail_base, ucharcount, charid, 1 )( ( fail_base + charid >= ucharcount && fail_base +
charid < ubound && fail_state == trie->trans[ fail_base
- ucharcount + charid ].check && trie->trans[ fail_base
- ucharcount + charid ].next ) ? trie->trans[ fail_base -
ucharcount + charid ].next : ( fail_state==1 ? 1 : 0 ) )
;
3928 fail[ ch_state ] = fail_state;
3929 if ( !aho->states[ ch_state ].wordnum && aho->states[ fail_state ].wordnum )
3930 {
3931 aho->states[ ch_state ].wordnum = aho->states[ fail_state ].wordnum;
3932 }
3933 q[ q_write++ % numstates] = ch_state;
3934 }
3935 }
3936 }
3937 /* restore fail[0..1] to 0 so that we "fall out" of the AC loop
3938 when we fail in state 1, this allows us to use the
3939 charclass scan to find a valid start char. This is based on the principle
3940 that theres a good chance the string being searched contains lots of stuff
3941 that cant be a start char.
3942 */
3943 fail[ 0 ] = fail[ 1 ] = 0;
3944 DEBUG_TRIE_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3945 Perl_re_indentf( aTHX_ "Stclass Failtable (%" UVuf " states): 0",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3946 depth, (UV)numstatesdo {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3947 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3948 for( q_read=1; q_read<numstates; q_read++ ) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3949 Perl_re_printf( aTHX_ ", %" UVuf, (UV)fail[q_read]);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3950 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3951 Perl_re_printf( aTHX_ "\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
3952 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { Perl_re_indentf
( "Stclass Failtable (%" "lu" " states): 0", depth, (UV)numstates
); for( q_read=1; q_read<numstates; q_read++ ) { Perl_re_printf
( ", %" "lu", (UV)fail[q_read]); } Perl_re_printf( "\n"); };}
while (0)
;
3953 Safefree(q)Perl_safesysfree(((void *)(q)));
3954 /*RExC_seen |= REG_TRIEDFA_SEEN;*/
3955 return stclass;
3956}
3957
3958
3959/* The below joins as many adjacent EXACTish nodes as possible into a single
3960 * one. The regop may be changed if the node(s) contain certain sequences that
3961 * require special handling. The joining is only done if:
3962 * 1) there is room in the current conglomerated node to entirely contain the
3963 * next one.
3964 * 2) they are compatible node types
3965 *
3966 * The adjacent nodes actually may be separated by NOTHING-kind nodes, and
3967 * these get optimized out
3968 *
3969 * XXX khw thinks this should be enhanced to fill EXACT (at least) nodes as full
3970 * as possible, even if that means splitting an existing node so that its first
3971 * part is moved to the preceeding node. This would maximise the efficiency of
3972 * memEQ during matching.
3973 *
3974 * If a node is to match under /i (folded), the number of characters it matches
3975 * can be different than its character length if it contains a multi-character
3976 * fold. *min_subtract is set to the total delta number of characters of the
3977 * input nodes.
3978 *
3979 * And *unfolded_multi_char is set to indicate whether or not the node contains
3980 * an unfolded multi-char fold. This happens when it won't be known until
3981 * runtime whether the fold is valid or not; namely
3982 * 1) for EXACTF nodes that contain LATIN SMALL LETTER SHARP S, as only if the
3983 * target string being matched against turns out to be UTF-8 is that fold
3984 * valid; or
3985 * 2) for EXACTFL nodes whose folding rules depend on the locale in force at
3986 * runtime.
3987 * (Multi-char folds whose components are all above the Latin1 range are not
3988 * run-time locale dependent, and have already been folded by the time this
3989 * function is called.)
3990 *
3991 * This is as good a place as any to discuss the design of handling these
3992 * multi-character fold sequences. It's been wrong in Perl for a very long
3993 * time. There are three code points in Unicode whose multi-character folds
3994 * were long ago discovered to mess things up. The previous designs for
3995 * dealing with these involved assigning a special node for them. This
3996 * approach doesn't always work, as evidenced by this example:
3997 * "\xDFs" =~ /s\xDF/ui # Used to fail before these patches
3998 * Both sides fold to "sss", but if the pattern is parsed to create a node that
3999 * would match just the \xDF, it won't be able to handle the case where a
4000 * successful match would have to cross the node's boundary. The new approach
4001 * that hopefully generally solves the problem generates an EXACTFUP node
4002 * that is "sss" in this case.
4003 *
4004 * It turns out that there are problems with all multi-character folds, and not
4005 * just these three. Now the code is general, for all such cases. The
4006 * approach taken is:
4007 * 1) This routine examines each EXACTFish node that could contain multi-
4008 * character folded sequences. Since a single character can fold into
4009 * such a sequence, the minimum match length for this node is less than
4010 * the number of characters in the node. This routine returns in
4011 * *min_subtract how many characters to subtract from the actual
4012 * length of the string to get a real minimum match length; it is 0 if
4013 * there are no multi-char foldeds. This delta is used by the caller to
4014 * adjust the min length of the match, and the delta between min and max,
4015 * so that the optimizer doesn't reject these possibilities based on size
4016 * constraints.
4017 *
4018 * 2) For the sequence involving the LATIN SMALL LETTER SHARP S (U+00DF)
4019 * under /u, we fold it to 'ss' in regatom(), and in this routine, after
4020 * joining, we scan for occurrences of the sequence 'ss' in non-UTF-8
4021 * EXACTFU nodes. The node type of such nodes is then changed to
4022 * EXACTFUP, indicating it is problematic, and needs careful handling.
4023 * (The procedures in step 1) above are sufficient to handle this case in
4024 * UTF-8 encoded nodes.) The reason this is problematic is that this is
4025 * the only case where there is a possible fold length change in non-UTF-8
4026 * patterns. By reserving a special node type for problematic cases, the
4027 * far more common regular EXACTFU nodes can be processed faster.
4028 * regexec.c takes advantage of this.
4029 *
4030 * EXACTFUP has been created as a grab-bag for (hopefully uncommon)
4031 * problematic cases. These all only occur when the pattern is not
4032 * UTF-8. In addition to the 'ss' sequence where there is a possible fold
4033 * length change, it handles the situation where the string cannot be
4034 * entirely folded. The strings in an EXACTFish node are folded as much
4035 * as possible during compilation in regcomp.c. This saves effort in
4036 * regex matching. By using an EXACTFUP node when it is not possible to
4037 * fully fold at compile time, regexec.c can know that everything in an
4038 * EXACTFU node is folded, so folding can be skipped at runtime. The only
4039 * case where folding in EXACTFU nodes can't be done at compile time is
4040 * the presumably uncommon MICRO SIGN, when the pattern isn't UTF-8. This
4041 * is because its fold requires UTF-8 to represent. Thus EXACTFUP nodes
4042 * handle two very different cases. Alternatively, there could have been
4043 * a node type where there are length changes, one for unfolded, and one
4044 * for both. If yet another special case needed to be created, the number
4045 * of required node types would have to go to 7. khw figures that even
4046 * though there are plenty of node types to spare, that the maintenance
4047 * cost wasn't worth the small speedup of doing it that way, especially
4048 * since he thinks the MICRO SIGN is rarely encountered in practice.
4049 *
4050 * There are other cases where folding isn't done at compile time, but
4051 * none of them are under /u, and hence not for EXACTFU nodes. The folds
4052 * in EXACTFL nodes aren't known until runtime, and vary as the locale
4053 * changes. Some folds in EXACTF depend on if the runtime target string
4054 * is UTF-8 or not. (regatom() will create an EXACTFU node even under /di
4055 * when no fold in it depends on the UTF-8ness of the target string.)
4056 *
4057 * 3) A problem remains for unfolded multi-char folds. (These occur when the
4058 * validity of the fold won't be known until runtime, and so must remain
4059 * unfolded for now. This happens for the sharp s in EXACTF and EXACTFAA
4060 * nodes when the pattern isn't in UTF-8. (Note, BTW, that there cannot
4061 * be an EXACTF node with a UTF-8 pattern.) They also occur for various
4062 * folds in EXACTFL nodes, regardless of the UTF-ness of the pattern.)
4063 * The reason this is a problem is that the optimizer part of regexec.c
4064 * (probably unwittingly, in Perl_regexec_flags()) makes an assumption
4065 * that a character in the pattern corresponds to at most a single
4066 * character in the target string. (And I do mean character, and not byte
4067 * here, unlike other parts of the documentation that have never been
4068 * updated to account for multibyte Unicode.) Sharp s in EXACTF and
4069 * EXACTFL nodes can match the two character string 'ss'; in EXACTFAA
4070 * nodes it can match "\x{17F}\x{17F}". These, along with other ones in
4071 * EXACTFL nodes, violate the assumption, and they are the only instances
4072 * where it is violated. I'm reluctant to try to change the assumption,
4073 * as the code involved is impenetrable to me (khw), so instead the code
4074 * here punts. This routine examines EXACTFL nodes, and (when the pattern
4075 * isn't UTF-8) EXACTF and EXACTFAA for such unfolded folds, and returns a
4076 * boolean indicating whether or not the node contains such a fold. When
4077 * it is true, the caller sets a flag that later causes the optimizer in
4078 * this file to not set values for the floating and fixed string lengths,
4079 * and thus avoids the optimizer code in regexec.c that makes the invalid
4080 * assumption. Thus, there is no optimization based on string lengths for
4081 * EXACTFL nodes that contain these few folds, nor for non-UTF8-pattern
4082 * EXACTF and EXACTFAA nodes that contain the sharp s. (The reason the
4083 * assumption is wrong only in these cases is that all other non-UTF-8
4084 * folds are 1-1; and, for UTF-8 patterns, we pre-fold all other folds to
4085 * their expanded versions. (Again, we can't prefold sharp s to 'ss' in
4086 * EXACTF nodes because we don't know at compile time if it actually
4087 * matches 'ss' or not. For EXACTF nodes it will match iff the target
4088 * string is in UTF-8. This is in contrast to EXACTFU nodes, where it
4089 * always matches; and EXACTFAA where it never does. In an EXACTFAA node
4090 * in a UTF-8 pattern, sharp s is folded to "\x{17F}\x{17F}, avoiding the
4091 * problem; but in a non-UTF8 pattern, folding it to that above-Latin1
4092 * string would require the pattern to be forced into UTF-8, the overhead
4093 * of which we want to avoid. Similarly the unfolded multi-char folds in
4094 * EXACTFL nodes will match iff the locale at the time of match is a UTF-8
4095 * locale.)
4096 *
4097 * Similarly, the code that generates tries doesn't currently handle
4098 * not-already-folded multi-char folds, and it looks like a pain to change
4099 * that. Therefore, trie generation of EXACTFAA nodes with the sharp s
4100 * doesn't work. Instead, such an EXACTFAA is turned into a new regnode,
4101 * EXACTFAA_NO_TRIE, which the trie code knows not to handle. Most people
4102 * using /iaa matching will be doing so almost entirely with ASCII
4103 * strings, so this should rarely be encountered in practice */
4104
4105STATICstatic U32
4106S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
4107 UV *min_subtract, bool_Bool *unfolded_multi_char,
4108 U32 flags, regnode *val, U32 depth)
4109{
4110 /* Merge several consecutive EXACTish nodes into one. */
4111
4112 regnode *n = regnext(scan)Perl_regnext( scan);
4113 U32 stringok = 1;
4114 regnode *next = scan + NODE_SZ_STR(scan)((((((((scan)->type) == 41 || ((scan)->type) == 51) ? (
((((scan)->type) == 41 || ((scan)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 4114, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4114, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))) + sizeof(regnode
) - 1) / sizeof(regnode)) + 1 + regarglen[(scan)->type])
;
4115 U32 merged = 0;
4116 U32 stopnow = 0;
4117#ifdef DEBUGGING
4118 regnode *stop = scan;
4119 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 4119, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 4119, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
4120#else
4121 PERL_UNUSED_ARG(depth)((void)sizeof(depth));
4122#endif
4123
4124 PERL_ARGS_ASSERT_JOIN_EXACT((pRExC_state) ? (void)0 : __assert2("re_comp.c", 4124, __func__
, "pRExC_state")); ((scan) ? (void)0 : __assert2("re_comp.c",
4124, __func__, "scan")); ((min_subtract) ? (void)0 : __assert2
("re_comp.c", 4124, __func__, "min_subtract")); ((unfolded_multi_char
) ? (void)0 : __assert2("re_comp.c", 4124, __func__, "unfolded_multi_char"
))
;
4125#ifndef EXPERIMENTAL_INPLACESCAN
4126 PERL_UNUSED_ARG(flags)((void)sizeof(flags));
4127 PERL_UNUSED_ARG(val)((void)sizeof(val));
4128#endif
4129 DEBUG_PEEP("join", scan, depth, 0)S_debug_peep( "join", pRExC_state, scan, depth, 0);
4130
4131 assert(PL_regkind[OP(scan)] == EXACT)((PL_regkind[((scan)->type)] == 40) ? (void)0 : __assert2(
"re_comp.c", 4131, __func__, "PL_regkind[OP(scan)] == EXACT")
)
;
4132
4133 /* Look through the subsequent nodes in the chain. Skip NOTHING, merge
4134 * EXACT ones that are mergeable to the current one. */
4135 while ( n
4136 && ( PL_regkind[OP(n)((n)->type)] == NOTHING54
4137 || (stringok && PL_regkind[OP(n)((n)->type)] == EXACT40))
4138 && NEXT_OFF(n)((n)->next_off)
4139 && NEXT_OFF(scan)((scan)->next_off) + NEXT_OFF(n)((n)->next_off) < I16_MAX0x7fff)
4140 {
4141
4142 if (OP(n)((n)->type) == TAIL55 || n > next)
4143 stringok = 0;
4144 if (PL_regkind[OP(n)((n)->type)] == NOTHING54) {
4145 DEBUG_PEEP("skip:", n, depth, 0)S_debug_peep( "skip:", pRExC_state, n, depth, 0);
4146 NEXT_OFF(scan)((scan)->next_off) += NEXT_OFF(n)((n)->next_off);
4147 next = n + NODE_STEP_REGNODE1;
4148#ifdef DEBUGGING
4149 if (stringok)
4150 stop = n;
4151#endif
4152 n = regnext(n)Perl_regnext( n);
4153 }
4154 else if (stringok) {
4155 const unsigned int oldl = STR_LEN(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 4155, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4155, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))
;
4156 regnode * const nnext = regnext(n)Perl_regnext( n);
4157
4158 /* XXX I (khw) kind of doubt that this works on platforms (should
4159 * Perl ever run on one) where U8_MAX is above 255 because of lots
4160 * of other assumptions */
4161 /* Don't join if the sum can't fit into a single node */
4162 if (oldl + STR_LEN(n)((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->
type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4162, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->str_len)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4162, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len))
> U8_MAX0xff)
4163 break;
4164
4165 /* Joining something that requires UTF-8 with something that
4166 * doesn't, means the result requires UTF-8. */
4167 if (OP(scan)((scan)->type) == EXACT40 && (OP(n)((n)->type) == EXACT_REQ850)) {
4168 OP(scan)((scan)->type) = EXACT_REQ850;
4169 }
4170 else if (OP(scan)((scan)->type) == EXACT_REQ850 && (OP(n)((n)->type) == EXACT40)) {
4171 ; /* join is compatible, no need to change OP */
4172 }
4173 else if ((OP(scan)((scan)->type) == EXACTFU45) && (OP(n)((n)->type) == EXACTFU_REQ852)) {
4174 OP(scan)((scan)->type) = EXACTFU_REQ852;
4175 }
4176 else if ((OP(scan)((scan)->type) == EXACTFU_REQ852) && (OP(n)((n)->type) == EXACTFU45)) {
4177 ; /* join is compatible, no need to change OP */
4178 }
4179 else if (OP(scan)((scan)->type) == EXACTFU45 && OP(n)((n)->type) == EXACTFU45) {
4180 ; /* join is compatible, no need to change OP */
4181 }
4182 else if (OP(scan)((scan)->type) == EXACTFU45 && OP(n)((n)->type) == EXACTFU_S_EDGE53) {
4183
4184 /* Under /di, temporary EXACTFU_S_EDGE nodes are generated,
4185 * which can join with EXACTFU ones. We check for this case
4186 * here. These need to be resolved to either EXACTFU or
4187 * EXACTF at joining time. They have nothing in them that
4188 * would forbid them from being the more desirable EXACTFU
4189 * nodes except that they begin and/or end with a single [Ss].
4190 * The reason this is problematic is because they could be
4191 * joined in this loop with an adjacent node that ends and/or
4192 * begins with [Ss] which would then form the sequence 'ss',
4193 * which matches differently under /di than /ui, in which case
4194 * EXACTFU can't be used. If the 'ss' sequence doesn't get
4195 * formed, the nodes get absorbed into any adjacent EXACTFU
4196 * node. And if the only adjacent node is EXACTF, they get
4197 * absorbed into that, under the theory that a longer node is
4198 * better than two shorter ones, even if one is EXACTFU. Note
4199 * that EXACTFU_REQ8 is generated only for UTF-8 patterns,
4200 * and the EXACTFU_S_EDGE ones only for non-UTF-8. */
4201
4202 if (STRING(n)((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->
type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4202, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->string)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4202, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->string))
[STR_LEN(n)((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->
type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4202, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->str_len)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4202, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len))
-1] == 's') {
4203
4204 /* Here the joined node would end with 's'. If the node
4205 * following the combination is an EXACTF one, it's better to
4206 * join this trailing edge 's' node with that one, leaving the
4207 * current one in 'scan' be the more desirable EXACTFU */
4208 if (OP(nnext)((nnext)->type) == EXACTF43) {
4209 break;
4210 }
4211
4212 OP(scan)((scan)->type) = EXACTFU_S_EDGE53;
4213
4214 } /* Otherwise, the beginning 's' of the 2nd node just
4215 becomes an interior 's' in 'scan' */
4216 }
4217 else if (OP(scan)((scan)->type) == EXACTF43 && OP(n)((n)->type) == EXACTF43) {
4218 ; /* join is compatible, no need to change OP */
4219 }
4220 else if (OP(scan)((scan)->type) == EXACTF43 && OP(n)((n)->type) == EXACTFU_S_EDGE53) {
4221
4222 /* EXACTF nodes are compatible for joining with EXACTFU_S_EDGE
4223 * nodes. But the latter nodes can be also joined with EXACTFU
4224 * ones, and that is a better outcome, so if the node following
4225 * 'n' is EXACTFU, quit now so that those two can be joined
4226 * later */
4227 if (OP(nnext)((nnext)->type) == EXACTFU45) {
4228 break;
4229 }
4230
4231 /* The join is compatible, and the combined node will be
4232 * EXACTF. (These don't care if they begin or end with 's' */
4233 }
4234 else if (OP(scan)((scan)->type) == EXACTFU_S_EDGE53 && OP(n)((n)->type) == EXACTFU_S_EDGE53) {
4235 if ( STRING(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 4235, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4235, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string))
[STR_LEN(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 4235, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4235, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))
-1] == 's'
4236 && STRING(n)((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->
type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4236, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->string)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4236, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->string))
[0] == 's')
4237 {
4238 /* When combined, we have the sequence 'ss', which means we
4239 * have to remain /di */
4240 OP(scan)((scan)->type) = EXACTF43;
4241 }
4242 }
4243 else if (OP(scan)((scan)->type) == EXACTFU_S_EDGE53 && OP(n)((n)->type) == EXACTFU45) {
4244 if (STRING(n)((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->
type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4244, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->string)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4244, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->string))
[0] == 's') {
4245 ; /* Here the join is compatible and the combined node
4246 starts with 's', no need to change OP */
4247 }
4248 else { /* Now the trailing 's' is in the interior */
4249 OP(scan)((scan)->type) = EXACTFU45;
4250 }
4251 }
4252 else if (OP(scan)((scan)->type) == EXACTFU_S_EDGE53 && OP(n)((n)->type) == EXACTF43) {
4253
4254 /* The join is compatible, and the combined node will be
4255 * EXACTF. (These don't care if they begin or end with 's' */
4256 OP(scan)((scan)->type) = EXACTF43;
4257 }
4258 else if (OP(scan)((scan)->type) != OP(n)((n)->type)) {
4259
4260 /* The only other compatible joinings are the same node type */
4261 break;
4262 }
4263
4264 DEBUG_PEEP("merg", n, depth, 0)S_debug_peep( "merg", pRExC_state, n, depth, 0);
4265 merged++;
4266
4267 NEXT_OFF(scan)((scan)->next_off) += NEXT_OFF(n)((n)->next_off);
4268 assert( ( STR_LEN(scan) + STR_LEN(n) ) < 256 )((( ((((scan)->type) == 41 || ((scan)->type) == 51) ? (
((((scan)->type) == 41 || ((scan)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 4268, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4268, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + ((((n)->
type) == 41 || ((n)->type) == 51) ? (((((n)->type) == 41
|| ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c", 4268
, __func__, "((n)->type) == 41 || ((n)->type) == 51")),
(((struct regnode_lstring *)n)->str_len)) : (((((n)->type
) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4268, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len)) ) < 256) ? (
void)0 : __assert2("re_comp.c", 4268, __func__, "( STR_LEN(scan) + STR_LEN(n) ) < 256"
))
;
4269 setSTR_LEN(scan, (U8)(STR_LEN(scan) + STR_LEN(n)))do{ if (((scan)->type) == 41 || ((scan)->type) == 51) (
(struct regnode_lstring *)(scan))->str_len = ((U8)(((((scan
)->type) == 41 || ((scan)->type) == 51) ? (((((scan)->
type) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 4269, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4269, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + ((((n)->
type) == 41 || ((n)->type) == 51) ? (((((n)->type) == 41
|| ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c", 4269
, __func__, "((n)->type) == 41 || ((n)->type) == 51")),
(((struct regnode_lstring *)n)->str_len)) : (((((n)->type
) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4269, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len)))); else ((struct
regnode_string *)(scan))->str_len = ((U8)(((((scan)->type
) == 41 || ((scan)->type) == 51) ? (((((scan)->type) ==
41 || ((scan)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4269, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4269, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + ((((n)->
type) == 41 || ((n)->type) == 51) ? (((((n)->type) == 41
|| ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c", 4269
, __func__, "((n)->type) == 41 || ((n)->type) == 51")),
(((struct regnode_lstring *)n)->str_len)) : (((((n)->type
) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4269, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len)))); } while (0)
;
4270 next = n + NODE_SZ_STR(n)((((((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)
->type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 4270, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->str_len)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4270, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len))) + sizeof(regnode
) - 1) / sizeof(regnode)) + 1 + regarglen[(n)->type])
;
4271 /* Now we can overwrite *n : */
4272 Move(STRING(n), STRING(scan) + oldl, STR_LEN(n), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((((
(n)->type) == 41 || ((n)->type) == 51) ? (((((n)->type
) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4272, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->str_len)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len))) || sizeof(char
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(((((n)->
type) == 41 || ((n)->type) == 51) ? (((((n)->type) == 41
|| ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c", 4272
, __func__, "((n)->type) == 41 || ((n)->type) == 51")),
(((struct regnode_lstring *)n)->str_len)) : (((((n)->type
) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len)))))) ? (size_t)
(((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->
type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4272, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->str_len)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len))) : ((size_t)-1
)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 :
(_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (((
(void*)(((((scan)->type) == 41 || ((scan)->type) == 51)
? (((((scan)->type) == 41 || ((scan)->type) == 51) ? (
void)0 : __assert2("re_comp.c", 4272, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4272, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)) + oldl)) != 0
) ? (void)0 : __assert2("re_comp.c", 4272, __func__, "((void*)(((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2(\"re_comp.c\", 4272, __func__, \"((scan)->type) == 41 || ((scan)->type) == 51\")), (((struct regnode_lstring *)scan)->string)) : (((((scan)->type) != 41 && ((scan)->type) != 51) ? (void)0 : __assert2(\"re_comp.c\", 4272, __func__, \"((scan)->type) != 41 && ((scan)->type) != 51\")), ((struct regnode_string *)scan)->string)) + oldl)) != 0"
)), ((((void*)(((((n)->type) == 41 || ((n)->type) == 51
) ? (((((n)->type) == 41 || ((n)->type) == 51) ? (void)
0 : __assert2("re_comp.c", 4272, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->string)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->string)))) != 0) ? (void
)0 : __assert2("re_comp.c", 4272, __func__, "((void*)(((((n)->type) == 41 || ((n)->type) == 51) ? (((((n)->type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2(\"re_comp.c\", 4272, __func__, \"((n)->type) == 41 || ((n)->type) == 51\")), (((struct regnode_lstring *)n)->string)) : (((((n)->type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2(\"re_comp.c\", 4272, __func__, \"((n)->type) != 41 && ((n)->type) != 51\")), ((struct regnode_string *)n)->string)))) != 0"
)), (void)memmove((char*)(((((scan)->type) == 41 || ((scan
)->type) == 51) ? (((((scan)->type) == 41 || ((scan)->
type) == 51) ? (void)0 : __assert2("re_comp.c", 4272, __func__
, "((scan)->type) == 41 || ((scan)->type) == 51")), (((
struct regnode_lstring *)scan)->string)) : (((((scan)->
type) != 41 && ((scan)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)) + oldl),(const
char*)(((((n)->type) == 41 || ((n)->type) == 51) ? (((
((n)->type) == 41 || ((n)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) == 41 || ((n)->type) == 51"
)), (((struct regnode_lstring *)n)->string)) : (((((n)->
type) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->string))), (((((n)->type
) == 41 || ((n)->type) == 51) ? (((((n)->type) == 41 ||
((n)->type) == 51) ? (void)0 : __assert2("re_comp.c", 4272
, __func__, "((n)->type) == 41 || ((n)->type) == 51")),
(((struct regnode_lstring *)n)->str_len)) : (((((n)->type
) != 41 && ((n)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4272, __func__, "((n)->type) != 41 && ((n)->type) != 51"
)), ((struct regnode_string *)n)->str_len))) * sizeof(char
)))
;
4273#ifdef DEBUGGING
4274 stop = next - 1;
4275#endif
4276 n = nnext;
4277 if (stopnow) break;
4278 }
4279
4280#ifdef EXPERIMENTAL_INPLACESCAN
4281 if (flags && !NEXT_OFF(n)((n)->next_off)) {
4282 DEBUG_PEEP("atch", val, depth, 0)S_debug_peep( "atch", pRExC_state, val, depth, 0);
4283 if (reg_off_by_arg[OP(n)((n)->type)]) {
4284 ARG_SET(n, val - n)(((((struct regnode_1 *)n)->arg1)) = ((val - n)));
4285 }
4286 else {
4287 NEXT_OFF(n)((n)->next_off) = val - n;
4288 }
4289 stopnow = 1;
4290 }
4291#endif
4292 }
4293
4294 /* This temporary node can now be turned into EXACTFU, and must, as
4295 * regexec.c doesn't handle it */
4296 if (OP(scan)((scan)->type) == EXACTFU_S_EDGE53) {
4297 OP(scan)((scan)->type) = EXACTFU45;
4298 }
4299
4300 *min_subtract = 0;
4301 *unfolded_multi_char = FALSE(0);
4302
4303 /* Here, all the adjacent mergeable EXACTish nodes have been merged. We
4304 * can now analyze for sequences of problematic code points. (Prior to
4305 * this final joining, sequences could have been split over boundaries, and
4306 * hence missed). The sequences only happen in folding, hence for any
4307 * non-EXACT EXACTish node */
4308 if (OP(scan)((scan)->type) != EXACT40 && OP(scan)((scan)->type) != EXACT_REQ850 && OP(scan)((scan)->type) != EXACTL42) {
4309 U8* s0 = (U8*) STRING(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 4309, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4309, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string))
;
4310 U8* s = s0;
4311 U8* s_end = s0 + STR_LEN(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 4311, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4311, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))
;
4312
4313 int total_count_delta = 0; /* Total delta number of characters that
4314 multi-char folds expand to */
4315
4316 /* One pass is made over the node's string looking for all the
4317 * possibilities. To avoid some tests in the loop, there are two main
4318 * cases, for UTF-8 patterns (which can't have EXACTF nodes) and
4319 * non-UTF-8 */
4320 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
4321 U8* folded = NULL((void*)0);
4322
4323 if (OP(scan)((scan)->type) == EXACTFL44) {
4324 U8 *d;
4325
4326 /* An EXACTFL node would already have been changed to another
4327 * node type unless there is at least one character in it that
4328 * is problematic; likely a character whose fold definition
4329 * won't be known until runtime, and so has yet to be folded.
4330 * For all but the UTF-8 locale, folds are 1-1 in length, but
4331 * to handle the UTF-8 case, we need to create a temporary
4332 * folded copy using UTF-8 locale rules in order to analyze it.
4333 * This is because our macros that look to see if a sequence is
4334 * a multi-char fold assume everything is folded (otherwise the
4335 * tests in those macros would be too complicated and slow).
4336 * Note that here, the non-problematic folds will have already
4337 * been done, so we can just copy such characters. We actually
4338 * don't completely fold the EXACTFL string. We skip the
4339 * unfolded multi-char folds, as that would just create work
4340 * below to figure out the size they already are */
4341
4342 Newx(folded, UTF8_MAX_FOLD_CHAR_EXPAND * STR_LEN(scan) + 1, U8)(folded = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(3 * ((((scan)->type) == 41 || ((scan)->type) == 51) ? (
((((scan)->type) == 41 || ((scan)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 4342, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4342, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + 1) || sizeof
(U8) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(3 * (
(((scan)->type) == 41 || ((scan)->type) == 51) ? (((((scan
)->type) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 4342, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4342, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + 1)))) ? (
size_t)(3 * ((((scan)->type) == 41 || ((scan)->type) ==
51) ? (((((scan)->type) == 41 || ((scan)->type) == 51)
? (void)0 : __assert2("re_comp.c", 4342, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4342, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + 1) : ((size_t
)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ? (_Bool)1 : (
_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (U8*)
(Perl_safesysmalloc((size_t)((3 * ((((scan)->type) == 41 ||
((scan)->type) == 51) ? (((((scan)->type) == 41 || ((scan
)->type) == 51) ? (void)0 : __assert2("re_comp.c", 4342, __func__
, "((scan)->type) == 41 || ((scan)->type) == 51")), (((
struct regnode_lstring *)scan)->str_len)) : (((((scan)->
type) != 41 && ((scan)->type) != 51) ? (void)0 : __assert2
("re_comp.c", 4342, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)) + 1)*sizeof
(U8))))))
;
4343 d = folded;
4344 while (s < s_end) {
4345 STRLEN s_len = UTF8SKIP(s)PL_utf8skip[*(const U8*)(s)];
4346 if (! is_PROBLEMATIC_LOCALE_FOLD_utf8(s)( ( ((const U8*)s)[0] <= 0x7F ) ? 1 : ( ((((0xC3) >= (0xC2
)) ? (void)0 : __assert2("re_comp.c", 4346, __func__, "(0xC3) >= (0xC2)"
)), ( (sizeof(((const U8*)s)[0]) == sizeof(U8)) ? ((((NV) ((0xC2
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) ((0xC2)) >= 0")), (((NV) (((0xC3) - (0xC2))) >=
0) ? (void)0 : __assert2("re_comp.c", 4346, __func__, "(NV) (((0xC3) - (0xC2))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[0])))) - (((0xC2)) | 0))
) <= (((U64) ((((0xC3) - (0xC2))) | 0))))) : (sizeof(((const
U8*)s)[0]) == sizeof(U32)) ? ((((NV) ((0xC2)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4346, __func__, "(NV) ((0xC2)) >= 0"
)), (((NV) (((0xC3) - (0xC2))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) (((0xC3) - (0xC2))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[0])))) - (((0xC2)) | 0)
)) <= (((U64) ((((0xC3) - (0xC2))) | 0))))) : (((sizeof(((
const U8*)s)[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "sizeof(((const U8*)s)[0]) == sizeof(U64)")
), ((((NV) ((0xC2)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(NV) ((0xC2)) >= 0")), (((NV) (((0xC3) -
(0xC2))) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) (((0xC3) - (0xC2))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[0])))) - (((0xC2)) | 0))) <= (((U64) ((((0xC3
) - (0xC2))) | 0)))))))) ) ? 2 : ( 0xC4 == ((const U8*)s)[0] )
? ( ( ((((0xB1) >= (0xB0)) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(0xB1) >= (0xB0)")), ( (sizeof(((const U8
*)s)[1]) == sizeof(U8)) ? ((((NV) ((0xB0)) >= 0) ? (void)0
: __assert2("re_comp.c", 4346, __func__, "(NV) ((0xB0)) >= 0"
)), (((NV) (((0xB1) - (0xB0))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) (((0xB1) - (0xB0))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0xB0)) | 0))
) <= (((U64) ((((0xB1) - (0xB0))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0xB0)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4346, __func__, "(NV) ((0xB0)) >= 0"
)), (((NV) (((0xB1) - (0xB0))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) (((0xB1) - (0xB0))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0xB0)) | 0)
)) <= (((U64) ((((0xB1) - (0xB0))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0xB0)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(NV) ((0xB0)) >= 0")), (((NV) (((0xB1) -
(0xB0))) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) (((0xB1) - (0xB0))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0xB0)) | 0))) <= (((U64) ((((0xB1
) - (0xB0))) | 0)))))))) ) ? 2 : 0 ) : ( 0xC5 == ((const U8*)
s)[0] ) ? ( ( 0x89 == ((const U8*)s)[1] || 0xB8 == ((const U8
*)s)[1] || 0xBF == ((const U8*)s)[1] ) ? 2 : 0 ): ( 0xC7 == (
(const U8*)s)[0] ) ? ( ( 0xB0 == ((const U8*)s)[1] ) ? 2 : 0 )
: ( 0xCC == ((const U8*)s)[0] ) ? ( ( 0x87 == ((const U8*)s)
[1] ) ? 2 : 0 ) : ( 0xCE == ((const U8*)s)[0] ) ? ( ( ( ((const
U8*)s)[1] & 0xDF ) == 0x9C ) ? 2 : 0 ) : ( 0xE1 == ((const
U8*)s)[0] ) ? ( ( ( 0xBA == ((const U8*)s)[1] ) && (
((((0x9A) >= (0x96)) ? (void)0 : __assert2("re_comp.c", 4346
, __func__, "(0x9A) >= (0x96)")), ( (sizeof(((const U8*)s)
[2]) == sizeof(U8)) ? ((((NV) ((0x96)) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) ((0x96)) >= 0")), (((NV
) (((0x9A) - (0x96))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(NV) (((0x9A) - (0x96))) >= 0")), (((U64
) (((((U8) (((const U8*)s)[2])))) - (((0x96)) | 0))) <= ((
(U64) ((((0x9A) - (0x96))) | 0))))) : (sizeof(((const U8*)s)[
2]) == sizeof(U32)) ? ((((NV) ((0x96)) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) ((0x96)) >= 0")), (((NV
) (((0x9A) - (0x96))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(NV) (((0x9A) - (0x96))) >= 0")), (((U64
) (((((U32) (((const U8*)s)[2])))) - (((0x96)) | 0))) <= (
((U64) ((((0x9A) - (0x96))) | 0))))) : (((sizeof(((const U8*)
s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 4346
, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")), (((
(NV) ((0x96)) >= 0) ? (void)0 : __assert2("re_comp.c", 4346
, __func__, "(NV) ((0x96)) >= 0")), (((NV) (((0x9A) - (0x96
))) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) (((0x9A) - (0x96))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0x96)) | 0))) <= (((U64) ((((0x9A
) - (0x96))) | 0)))))))) || 0x9E == ((const U8*)s)[2] ) ) ? 3
: 0 ): ( 0xE2 == ((const U8*)s)[0] ) ? ( ( ( 0x84 == ((const
U8*)s)[1] ) && ( ((((0xAB) >= (0xAA)) ? (void)0 :
__assert2("re_comp.c", 4346, __func__, "(0xAB) >= (0xAA)"
)), ( (sizeof(((const U8*)s)[2]) == sizeof(U8)) ? ((((NV) ((0xAA
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) ((0xAA)) >= 0")), (((NV) (((0xAB) - (0xAA))) >=
0) ? (void)0 : __assert2("re_comp.c", 4346, __func__, "(NV) (((0xAB) - (0xAA))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0xAA)) | 0))
) <= (((U64) ((((0xAB) - (0xAA))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0xAA)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4346, __func__, "(NV) ((0xAA)) >= 0"
)), (((NV) (((0xAB) - (0xAA))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) (((0xAB) - (0xAA))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0xAA)) | 0)
)) <= (((U64) ((((0xAB) - (0xAA))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0xAA)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(NV) ((0xAA)) >= 0")), (((NV) (((0xAB) -
(0xAA))) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) (((0xAB) - (0xAA))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0xAA)) | 0))) <= (((U64) ((((0xAB
) - (0xAA))) | 0)))))))) ) ) ? 3 : 0 ): ( ( ( 0xEF == ((const
U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] ) ) &&
( ((((0x86) >= (0x80)) ? (void)0 : __assert2("re_comp.c",
4346, __func__, "(0x86) >= (0x80)")), ( (sizeof(((const U8
*)s)[2]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0) ? (void)0
: __assert2("re_comp.c", 4346, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x86) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) (((0x86) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0x80)) | 0))
) <= (((U64) ((((0x86) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4346, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x86) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4346, __func__, "(NV) (((0x86) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x86) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4346, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x86) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 4346, __func__
, "(NV) (((0x86) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0x80)) | 0))) <= (((U64) ((((0x86
) - (0x80))) | 0)))))))) ) ) ? 3 : 0 )
) {
4347 Copy(s, d, s_len, U8)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(s_len
) || sizeof(U8) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(s_len)))) ? (size_t)(s_len) : ((size_t)-1)/sizeof(U8)) > (
(size_t)-1)/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)(d)) != 0) ? (void)
0 : __assert2("re_comp.c", 4347, __func__, "((void*)(d)) != 0"
)), ((((void*)(s)) != 0) ? (void)0 : __assert2("re_comp.c", 4347
, __func__, "((void*)(s)) != 0")), (void)memcpy((char*)(d),(const
char*)(s), (s_len) * sizeof(U8)))
;
4348 d += s_len;
4349 }
4350 else if (is_FOLDS_TO_MULTI_utf8(s)( ( 0xC3 == ((const U8*)s)[0] ) ? ( ( 0x9F == ((const U8*)s)[
1] ) ? 2 : 0 ) : ( 0xC4 == ((const U8*)s)[0] || 0xC7 == ((const
U8*)s)[0] ) ? ( ( 0xB0 == ((const U8*)s)[1] ) ? 2 : 0 ) : ( 0xC5
== ((const U8*)s)[0] ) ? ( ( 0x89 == ((const U8*)s)[1] ) ? 2
: 0 ) : ( 0xCE == ((const U8*)s)[0] ) ? ( ( ( ((const U8*)s)
[1] & 0xDF ) == 0x90 ) ? 2 : 0 ) : ( 0xD6 == ((const U8*)
s)[0] ) ? ( ( 0x87 == ((const U8*)s)[1] ) ? 2 : 0 ) : ( 0xE1 ==
((const U8*)s)[0] ) ? ( ( 0xBA == ((const U8*)s)[1] ) ? ( ( (
(((0x9A) >= (0x96)) ? (void)0 : __assert2("re_comp.c", 4350
, __func__, "(0x9A) >= (0x96)")), ( (sizeof(((const U8*)s)
[2]) == sizeof(U8)) ? ((((NV) ((0x96)) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) ((0x96)) >= 0")), (((NV
) (((0x9A) - (0x96))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) (((0x9A) - (0x96))) >= 0")), (((U64
) (((((U8) (((const U8*)s)[2])))) - (((0x96)) | 0))) <= ((
(U64) ((((0x9A) - (0x96))) | 0))))) : (sizeof(((const U8*)s)[
2]) == sizeof(U32)) ? ((((NV) ((0x96)) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) ((0x96)) >= 0")), (((NV
) (((0x9A) - (0x96))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) (((0x9A) - (0x96))) >= 0")), (((U64
) (((((U32) (((const U8*)s)[2])))) - (((0x96)) | 0))) <= (
((U64) ((((0x9A) - (0x96))) | 0))))) : (((sizeof(((const U8*)
s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 4350
, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")), (((
(NV) ((0x96)) >= 0) ? (void)0 : __assert2("re_comp.c", 4350
, __func__, "(NV) ((0x96)) >= 0")), (((NV) (((0x9A) - (0x96
))) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) (((0x9A) - (0x96))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0x96)) | 0))) <= (((U64) ((((0x9A
) - (0x96))) | 0)))))))) || 0x9E == ((const U8*)s)[2] ) ? 3 :
0 ) : ( 0xBD == ((const U8*)s)[1] ) ? ( ( ( ((const U8*)s)[2
] & 0xF9 ) == 0x90 ) ? 3 : 0 ) : ( 0xBE == ((const U8*)s)
[1] ) ? ( ( ((((0xAF) >= (0x80)) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(0xAF) >= (0x80)")), ( (sizeof(((const U8
*)s)[2]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0) ? (void)0
: __assert2("re_comp.c", 4350, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0xAF) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0xAF) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0x80)) | 0))
) <= (((U64) ((((0xAF) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4350, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0xAF) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0xAF) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0x80)) | 0)
)) <= (((U64) ((((0xAF) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0xAF) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) (((0xAF) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0x80)) | 0))) <= (((U64) ((((0xAF
) - (0x80))) | 0)))))))) || ((((0xB4) >= (0xB2)) ? (void)0
: __assert2("re_comp.c", 4350, __func__, "(0xB4) >= (0xB2)"
)), ( (sizeof(((const U8*)s)[2]) == sizeof(U8)) ? ((((NV) ((0xB2
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) ((0xB2)) >= 0")), (((NV) (((0xB4) - (0xB2))) >=
0) ? (void)0 : __assert2("re_comp.c", 4350, __func__, "(NV) (((0xB4) - (0xB2))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0xB2)) | 0))
) <= (((U64) ((((0xB4) - (0xB2))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0xB2)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4350, __func__, "(NV) ((0xB2)) >= 0"
)), (((NV) (((0xB4) - (0xB2))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0xB4) - (0xB2))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0xB2)) | 0)
)) <= (((U64) ((((0xB4) - (0xB2))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0xB2)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) ((0xB2)) >= 0")), (((NV) (((0xB4) -
(0xB2))) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) (((0xB4) - (0xB2))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0xB2)) | 0))) <= (((U64) ((((0xB4
) - (0xB2))) | 0)))))))) || ((((0xB7) >= (0xB6)) ? (void)0
: __assert2("re_comp.c", 4350, __func__, "(0xB7) >= (0xB6)"
)), ( (sizeof(((const U8*)s)[2]) == sizeof(U8)) ? ((((NV) ((0xB6
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) ((0xB6)) >= 0")), (((NV) (((0xB7) - (0xB6))) >=
0) ? (void)0 : __assert2("re_comp.c", 4350, __func__, "(NV) (((0xB7) - (0xB6))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0xB6)) | 0))
) <= (((U64) ((((0xB7) - (0xB6))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0xB6)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4350, __func__, "(NV) ((0xB6)) >= 0"
)), (((NV) (((0xB7) - (0xB6))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0xB7) - (0xB6))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0xB6)) | 0)
)) <= (((U64) ((((0xB7) - (0xB6))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0xB6)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) ((0xB6)) >= 0")), (((NV) (((0xB7) -
(0xB6))) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) (((0xB7) - (0xB6))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0xB6)) | 0))) <= (((U64) ((((0xB7
) - (0xB6))) | 0)))))))) || 0xBC == ((const U8*)s)[2] ) ? 3 :
0 ) : ( ( 0xBF == ((const U8*)s)[1] ) && ( ( ( ((const
U8*)s)[2] & 0xCA ) == 0x82 ) || ( ( ((const U8*)s)[2] &
0xF7 ) == 0x84 ) || ((const U8*)s)[2] == 0xA4 || ( ( ((const
U8*)s)[2] & 0xF7 ) == 0xB4 ) ) ) ? 3 : 0 ): ( ( ( 0xEF ==
((const U8*)s)[0] ) && ( 0xAC == ((const U8*)s)[1] )
) && ( ((((0x86) >= (0x80)) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(0x86) >= (0x80)")), ( (sizeof
(((const U8*)s)[2]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0
) ? (void)0 : __assert2("re_comp.c", 4350, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x86) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0x86) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0x80)) | 0))
) <= (((U64) ((((0x86) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4350, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x86) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0x86) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x86) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x86) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) (((0x86) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0x80)) | 0))) <= (((U64) ((((0x86
) - (0x80))) | 0)))))))) || ((((0x97) >= (0x93)) ? (void)0
: __assert2("re_comp.c", 4350, __func__, "(0x97) >= (0x93)"
)), ( (sizeof(((const U8*)s)[2]) == sizeof(U8)) ? ((((NV) ((0x93
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) ((0x93)) >= 0")), (((NV) (((0x97) - (0x93))) >=
0) ? (void)0 : __assert2("re_comp.c", 4350, __func__, "(NV) (((0x97) - (0x93))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[2])))) - (((0x93)) | 0))
) <= (((U64) ((((0x97) - (0x93))) | 0))))) : (sizeof(((const
U8*)s)[2]) == sizeof(U32)) ? ((((NV) ((0x93)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4350, __func__, "(NV) ((0x93)) >= 0"
)), (((NV) (((0x97) - (0x93))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4350, __func__, "(NV) (((0x97) - (0x93))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[2])))) - (((0x93)) | 0)
)) <= (((U64) ((((0x97) - (0x93))) | 0))))) : (((sizeof(((
const U8*)s)[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "sizeof(((const U8*)s)[2]) == sizeof(U64)")
), ((((NV) ((0x93)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4350, __func__, "(NV) ((0x93)) >= 0")), (((NV) (((0x97) -
(0x93))) >= 0) ? (void)0 : __assert2("re_comp.c", 4350, __func__
, "(NV) (((0x97) - (0x93))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[2])))) - (((0x93)) | 0))) <= (((U64) ((((0x97
) - (0x93))) | 0)))))))) ) ) ? 3 : 0 )
) {
4351 *unfolded_multi_char = TRUE(1);
4352 Copy(s, d, s_len, U8)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(s_len
) || sizeof(U8) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(s_len)))) ? (size_t)(s_len) : ((size_t)-1)/sizeof(U8)) > (
(size_t)-1)/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)(d)) != 0) ? (void)
0 : __assert2("re_comp.c", 4352, __func__, "((void*)(d)) != 0"
)), ((((void*)(s)) != 0) ? (void)0 : __assert2("re_comp.c", 4352
, __func__, "((void*)(s)) != 0")), (void)memcpy((char*)(d),(const
char*)(s), (s_len) * sizeof(U8)))
;
4353 d += s_len;
4354 }
4355 else if (isASCII(*s)((U64)((*s) | 0) < 128)) {
4356 *(d++) = toFOLD(*s)((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 4356
, __func__, "('Z') >= ('A')")), ( (sizeof(*s) == sizeof(U8
)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4356, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 4356, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) (*s)))
) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))
: (sizeof(*s) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (
void)0 : __assert2("re_comp.c", 4356, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4356, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U32) (*s)))) - ((('A')) | 0))) <= (((U64) (((('Z') -
('A'))) | 0))))) : (((sizeof(*s) == sizeof(U64)) ? (void)0 :
__assert2("re_comp.c", 4356, __func__, "sizeof(*s) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4356, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 4356, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) (*s))
)) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))
)))) ? (U8)((*s) + ('a' - 'A')) : (*s))
;
4357 }
4358 else {
4359 STRLEN len;
4360 _toFOLD_utf8_flags(s, s_end, d, &len, FOLD_FLAGS_FULL)Perl__to_utf8_fold_flags( s,s_end,d,&len,0x2);
4361 d += len;
4362 }
4363 s += s_len;
4364 }
4365
4366 /* Point the remainder of the routine to look at our temporary
4367 * folded copy */
4368 s = folded;
4369 s_end = d;
4370 } /* End of creating folded copy of EXACTFL string */
4371
4372 /* Examine the string for a multi-character fold sequence. UTF-8
4373 * patterns have all characters pre-folded by the time this code is
4374 * executed */
4375 while (s < s_end - 1) /* Can stop 1 before the end, as minimum
4376 length sequence we are looking for is 2 */
4377 {
4378 int count = 0; /* How many characters in a multi-char fold */
4379 int len = is_MULTI_CHAR_FOLD_utf8_safe(s, s_end)( ((s_end)-(s) > 5) ? ( ( 0x61 == ((const U8*)s)[0] ) ? ( (
( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8
*)s)[2] ) ) ? 3 : 0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( ( 0x66
== ((const U8*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] || 0x6C
== ((const U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)s)[
1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == ((const
U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && (
0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8
*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)s
)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C ==
((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s)[0
] ) ? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const U8
*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void)0
: __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)s
)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8
*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )
: ( 0xC5 == ((const U8*)s)[0] ) ? ( ( ( ( 0xBF == ((const U8
*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) &&
( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)s)[0] ) ? ( ( ( 0xBC == ((const U8*)s)[1] ) && (
0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const U8
*)s)[0] ) ? ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? (
( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)s)[1] || 0xB7
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? ( ( ( 0xCE == ((const U8*)s)
[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 ) : 0
) : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB9 == ((const U8*)s)[1] ) ? ( (
0xCC == ((const U8*)s)[2] ) ? ( ( 0x88 == ((const U8*)s)[3] )
? ( ( 0xCC == ((const U8*)s)[4] ) ? ( ( ((((0x81) >= (0x80
)) ? (void)0 : __assert2("re_comp.c", 4379, __func__, "(0x81) >= (0x80)"
)), ( (sizeof(((const U8*)s)[5]) == sizeof(U8)) ? ((((NV) ((0x80
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) - (0x80))) >=
0) ? (void)0 : __assert2("re_comp.c", 4379, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[5])))) - (((0x80)) | 0))
) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[5]) == sizeof(U64)")
), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0)))))))) ) ? 6 : 0 ) : ( ( 0xCD == ((const U8
*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )
: 0 ) : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 ==
((const U8*)s)[3] ) ) ? 4 : 0 ) : 0 ) : ( 0xCF == ((const U8
*)s)[0] ) ? ( ( 0x81 == ((const U8*)s)[1] ) ? ( ( ( 0xCC == (
(const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) )
? 4 : 0 ) : ( 0x85 == ((const U8*)s)[1] ) ? ( ( 0xCC == ((const
U8*)s)[2] ) ? ( ( 0x88 == ((const U8*)s)[3] ) ? ( ( 0xCC == (
(const U8*)s)[4] ) ? ( ( ((((0x81) >= (0x80)) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(0x81) >= (0x80)")), ( (sizeof
(((const U8*)s)[5]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0
) ? (void)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[5])))) - (((0x80)) | 0))
) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[5]) == sizeof(U64)")
), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0)))))))) ) ? 6 : 0 ) : ( ( 0xCD == ((const U8
*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 0 )
: ( 0x93 == ((const U8*)s)[3] ) ? ( ( 0xCC == ((const U8*)s)
[4] ) ? ( ( ((((0x81) >= (0x80)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(0x81) >= (0x80)")), ( (sizeof(((const U8
*)s)[5]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0) ? (void)0
: __assert2("re_comp.c", 4379, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[5])))) - (((0x80)) | 0))
) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[5]) == sizeof(U64)")
), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) -
(0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[5])))) - (((0x80)) | 0))) <= (((U64) ((((0x81
) - (0x80))) | 0)))))))) ) ? 6 : 4 ) : ( ( 0xCD == ((const U8
*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 6 : 4 )
: 0 ) : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 ==
((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x89 == ((const U8*)s)[1
] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? ( ( 0x82 == ((const U8
*)s)[3] ) ? ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9
== ((const U8*)s)[5] ) ) ? 6 : 4 ) : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE ==
((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)s)[0] ) ? ( ( 0xA5 == (
(const U8*)s)[1] ) ? ( ( ( 0xD6 == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const
U8*)s)[1] ) ? ( ( ( 0xD5 == ((const U8*)s)[2] ) && (
( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)
s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 ) : ( (
( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8
*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0
) : ( 0xE1 == ((const U8*)s)[0] ) ? ( ( 0xBC == ((const U8*)
s)[1] ) ? ( ( ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) &&
( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const
U8*)s)[4] ) ) ? 5 : 0 ) : ( ( ( ( 0xBD == ((const U8*)s)[1] )
&& ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) ||
( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)
s)[2] == 0xBC ) ) && ( 0xCE == ((const U8*)s)[3] ) ) &&
( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 ) : 0 ) : ((s_end)-(
s) > 4) ? ( ( 0x61 == ((const U8*)s)[0] ) ? ( ( ( 0xCA == (
(const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) )
? 3 : 0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( ( 0x66 == ((const
U8*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const
U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)s)[1] || 0x6C ==
((const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == ((const U8*)s)[0] )
? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const
U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8*)s)[0] ) ? ( (
( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8
*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)s)[0] ) ? ( ( (
0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*
)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s)[0] ) ? ( ( ((
((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c", 4379
, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const U8*)s)
[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0")), (((NV
) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= ((
(U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const U8*)s)[
1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0")), (((NV
) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (
((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((const U8*)
s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 4379
, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")), (((
(NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 4379
, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73
))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)s
)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8
*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )
: ( 0xC5 == ((const U8*)s)[0] ) ? ( ( ( ( 0xBF == ((const U8
*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) &&
( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)s)[0] ) ? ( ( ( 0xBC == ((const U8*)s)[1] ) && (
0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const U8
*)s)[0] ) ? ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? (
( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)s)[1] || 0xB7
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD ==
((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xCF == ((const U8*)s)[0] ) ? ( ( 0x81 == (
(const U8*)s)[1] ) ? ( ( ( 0xCC == ((const U8*)s)[2] ) &&
( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x85 == ((const
U8*)s)[1] ) ? ( ( 0xCC == ((const U8*)s)[2] ) ? ( ( 0x93 == (
(const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCD == ((const U8*)s)[2] )
&& ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x89
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE ==
((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)s)[0] ) ? ( ( 0xA5 == (
(const U8*)s)[1] ) ? ( ( ( 0xD6 == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const
U8*)s)[1] ) ? ( ( ( 0xD5 == ((const U8*)s)[2] ) && (
( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)
s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 ) : ( (
( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8
*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0
) : ( 0xE1 == ((const U8*)s)[0] ) ? ( ( 0xBC == ((const U8*)
s)[1] ) ? ( ( ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) &&
( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const
U8*)s)[4] ) ) ? 5 : 0 ) : ( ( ( ( 0xBD == ((const U8*)s)[1] )
&& ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) ||
( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)
s)[2] == 0xBC ) ) && ( 0xCE == ((const U8*)s)[3] ) ) &&
( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 ) : 0 ) : ( ((s_end)
-(s) > 3) ? ( ( 0x61 == ((const U8*)s)[0] ) ? ( ( ( 0xCA ==
((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] )
) ? 3 : 0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( ( 0x66 == ((
const U8*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] || 0x6C == (
(const U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)s)[1] ||
0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == ((const U8
*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8*)s
)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 ==
((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)s)[0
] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == (
(const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s)[0] )
? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const U8
*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void)0
: __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)s
)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8
*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )
: ( 0xC5 == ((const U8*)s)[0] ) ? ( ( ( ( 0xBF == ((const U8
*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) &&
( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)s)[0] ) ? ( ( ( 0xBC == ((const U8*)s)[1] ) && (
0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const U8
*)s)[0] ) ? ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? (
( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)s)[1] || 0xB7
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD ==
((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xCF == ((const U8*)s)[0] ) ? ( ( 0x81 == (
(const U8*)s)[1] ) ? ( ( ( 0xCC == ((const U8*)s)[2] ) &&
( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x85 == ((const
U8*)s)[1] ) ? ( ( 0xCC == ((const U8*)s)[2] ) ? ( ( 0x93 == (
(const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCD == ((const U8*)s)[2] )
&& ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x89
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE ==
((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)s)[0] ) ? ( ( 0xA5 == (
(const U8*)s)[1] ) ? ( ( ( 0xD6 == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const
U8*)s)[1] ) ? ( ( ( 0xD5 == ((const U8*)s)[2] ) && (
( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)
s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 ) : ( (
( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8
*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0
) : 0 ) : ((s_end)-(s) > 2) ? ( ( 0x61 == ((const U8*)s)[
0] ) ? ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE ==
((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x66 == ((const U8*)s)[0
] ) ? ( ( 0x66 == ((const U8*)s)[1] ) ? ( ( 0x69 == ((const U8
*)s)[2] || 0x6C == ((const U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == (
(const U8*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : (
0x68 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1
] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69
== ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) &&
( 0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const
U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && (
0x8C == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8
*)s)[0] ) ? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(0x74) >= (0x73)")), ( (sizeof
(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0
) ? (void)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)s
)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8
*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )
: ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const
U8*)s)[1] ) ) && ( 0x6E == ((const U8*)s)[2] ) ) ? 3
: 0 ): ((s_end)-(s) > 1) ? ( ( 0x66 == ((const U8*)s)[0] )
? ( ( 0x66 == ((const U8*)s)[1] || 0x69 == ((const U8*)s)[1]
|| 0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : ( ( 0x73 == ((const
U8*)s)[0] ) && ( ((((0x74) >= (0x73)) ? (void)0 :
__assert2("re_comp.c", 4379, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4379, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4379, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4379, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 4379, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): 0 ) )
;
4380 if (! len) { /* Not a multi-char fold: get next char */
4381 s += UTF8SKIP(s)PL_utf8skip[*(const U8*)(s)];
4382 continue;
4383 }
4384
4385 { /* Here is a generic multi-char fold. */
4386 U8* multi_end = s + len;
4387
4388 /* Count how many characters are in it. In the case of
4389 * /aa, no folds which contain ASCII code points are
4390 * allowed, so check for those, and skip if found. */
4391 if (OP(scan)((scan)->type) != EXACTFAA46 && OP(scan)((scan)->type) != EXACTFAA_NO_TRIE49) {
4392 count = utf8_length(s, multi_end)Perl_utf8_length( s,multi_end);
4393 s = multi_end;
4394 }
4395 else {
4396 while (s < multi_end) {
4397 if (isASCII(*s)((U64)((*s) | 0) < 128)) {
4398 s++;
4399 goto next_iteration;
4400 }
4401 else {
4402 s += UTF8SKIP(s)PL_utf8skip[*(const U8*)(s)];
4403 }
4404 count++;
4405 }
4406 }
4407 }
4408
4409 /* The delta is how long the sequence is minus 1 (1 is how long
4410 * the character that folds to the sequence is) */
4411 total_count_delta += count - 1;
4412 next_iteration: ;
4413 }
4414
4415 /* We created a temporary folded copy of the string in EXACTFL
4416 * nodes. Therefore we need to be sure it doesn't go below zero,
4417 * as the real string could be shorter */
4418 if (OP(scan)((scan)->type) == EXACTFL44) {
4419 int total_chars = utf8_length((U8*) STRING(scan),Perl_utf8_length( (U8*) ((((scan)->type) == 41 || ((scan)->
type) == 51) ? (((((scan)->type) == 41 || ((scan)->type
) == 51) ? (void)0 : __assert2("re_comp.c", 4419, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4419, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)),(U8*) ((((scan
)->type) == 41 || ((scan)->type) == 51) ? (((((scan)->
type) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 4420, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4420, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)) + ((((scan)->
type) == 41 || ((scan)->type) == 51) ? (((((scan)->type
) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4420, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4420, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)))
4420 (U8*) STRING(scan) + STR_LEN(scan))Perl_utf8_length( (U8*) ((((scan)->type) == 41 || ((scan)->
type) == 51) ? (((((scan)->type) == 41 || ((scan)->type
) == 51) ? (void)0 : __assert2("re_comp.c", 4419, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4419, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)),(U8*) ((((scan
)->type) == 41 || ((scan)->type) == 51) ? (((((scan)->
type) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 4420, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4420, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)) + ((((scan)->
type) == 41 || ((scan)->type) == 51) ? (((((scan)->type
) == 41 || ((scan)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 4420, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4420, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len)))
;
4421 if (total_count_delta > total_chars) {
4422 total_count_delta = total_chars;
4423 }
4424 }
4425
4426 *min_subtract += total_count_delta;
4427 Safefree(folded)Perl_safesysfree(((void *)(folded)));
4428 }
4429 else if (OP(scan)((scan)->type) == EXACTFAA46) {
4430
4431 /* Non-UTF-8 pattern, EXACTFAA node. There can't be a multi-char
4432 * fold to the ASCII range (and there are no existing ones in the
4433 * upper latin1 range). But, as outlined in the comments preceding
4434 * this function, we need to flag any occurrences of the sharp s.
4435 * This character forbids trie formation (because of added
4436 * complexity) */
4437#if UNICODE_MAJOR_VERSION13 > 3 /* no multifolds in early Unicode */ \
4438 || (UNICODE_MAJOR_VERSION13 == 3 && ( UNICODE_DOT_VERSION0 > 0) \
4439 || UNICODE_DOT_DOT_VERSION0 > 0)
4440 while (s < s_end) {
4441 if (*s == LATIN_SMALL_LETTER_SHARP_S0xDF) {
4442 OP(scan)((scan)->type) = EXACTFAA_NO_TRIE49;
4443 *unfolded_multi_char = TRUE(1);
4444 break;
4445 }
4446 s++;
4447 }
4448 }
4449 else if (OP(scan)((scan)->type) != EXACTFAA_NO_TRIE49) {
4450
4451 /* Non-UTF-8 pattern, not EXACTFAA node. Look for the multi-char
4452 * folds that are all Latin1. As explained in the comments
4453 * preceding this function, we look also for the sharp s in EXACTF
4454 * and EXACTFL nodes; it can be in the final position. Otherwise
4455 * we can stop looking 1 byte earlier because have to find at least
4456 * two characters for a multi-fold */
4457 const U8* upper = (OP(scan)((scan)->type) == EXACTF43 || OP(scan)((scan)->type) == EXACTFL44)
4458 ? s_end
4459 : s_end -1;
4460
4461 while (s < upper) {
4462 int len = is_MULTI_CHAR_FOLD_latin1_safe(s, s_end)( ((s_end)-(s) > 2) ? ( ( ( ((const U8*)s)[0] & 0xDF )
== 0x46 ) ? ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) ?
( ( ( ( ((const U8*)s)[2] & 0xDF ) == 0x49 ) || ( ( ((const
U8*)s)[2] & 0xDF ) == 0x4C ) ) ? 3 : 2 ) : ( ( ( ((const
U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[1] &
0xDF ) == 0x4C ) ) ? 2 : 0 ) : ( ( ( ((const U8*)s)[0] &
0xDF ) == 0x53 ) && ( ((((0x54) >= (0x53)) ? (void
)0 : __assert2("re_comp.c", 4462, __func__, "(0x54) >= (0x53)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x53
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) - (0x53))) >=
0) ? (void)0 : __assert2("re_comp.c", 4462, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x53)) | 0))
) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x53)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4462, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4462, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x53)) | 0)
)) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x53)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) -
(0x53))) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) (((0x54) - (0x53))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x53)) | 0))) <= (((U64) ((((0x54
) - (0x53))) | 0)))))))) || ((((0x74) >= (0x73)) ? (void)0
: __assert2("re_comp.c", 4462, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 4462, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4462, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4462, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): ((s_end)-(s) > 1) ?
( ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 ) ? ( ( ( ( ((const
U8*)s)[1] & 0xDF ) == 0x46 ) || ( ( ((const U8*)s)[1] &
0xDF ) == 0x49 ) || ( ( ((const U8*)s)[1] & 0xDF ) == 0x4C
) ) ? 2 : 0 ) : ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x53
) && ( ((((0x54) >= (0x53)) ? (void)0 : __assert2
("re_comp.c", 4462, __func__, "(0x54) >= (0x53)")), ( (sizeof
(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x53)) >= 0
) ? (void)0 : __assert2("re_comp.c", 4462, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4462, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x53)) | 0))
) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x53)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4462, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4462, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x53)) | 0)
)) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x53)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) -
(0x53))) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) (((0x54) - (0x53))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x53)) | 0))) <= (((U64) ((((0x54
) - (0x53))) | 0)))))))) || ((((0x74) >= (0x73)) ? (void)0
: __assert2("re_comp.c", 4462, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73
)) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 4462, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 4462, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 4462, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")
), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4462, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) -
(0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 4462, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): 0 )
;
4463 if (! len) { /* Not a multi-char fold. */
4464 if (*s == LATIN_SMALL_LETTER_SHARP_S0xDF
4465 && (OP(scan)((scan)->type) == EXACTF43 || OP(scan)((scan)->type) == EXACTFL44))
4466 {
4467 *unfolded_multi_char = TRUE(1);
4468 }
4469 s++;
4470 continue;
4471 }
4472
4473 if (len == 2
4474 && isALPHA_FOLD_EQ(*s, 's')((((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 4474
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(*s))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 4474, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U8) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') &
(*s))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 4474, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U32) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a'
) & (*s))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "sizeof((~('A' ^ 'a') & (*s))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 4474, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*s)))))) - ((('A')) | 0))) <= (((U64) (((('Z'
) - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2
("re_comp.c", 4474, __func__, "('Z') >= ('A')")), ( (sizeof
((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((((NV) (('A'))
>= 0) ? (void)0 : __assert2("re_comp.c", 4474, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U8) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') &
('s'))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0
: __assert2("re_comp.c", 4474, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a'
) & ('s'))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 4474, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))))))) ? (void)0 : __assert2("re_comp.c"
, 4474, __func__, "(((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & (*s))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & (*s))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & (*s))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"sizeof((~('A' ^ 'a') & (*s))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4474, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))"
)), ((*s) & ~('A' ^ 'a')) == (('s') & ~('A' ^ 'a')))
4475 && isALPHA_FOLD_EQ(*(s+1), 's')((((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 4475
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(*(s+1)))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void
)0 : __assert2("re_comp.c", 4475, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U8) ((~('A' ^ 'a') & (*(s+1))))))) - ((('A')) | 0))
) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^
'a') & (*(s+1)))) == sizeof(U32)) ? ((((NV) (('A')) >=
0) ? (void)0 : __assert2("re_comp.c", 4475, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U32) ((~('A' ^ 'a') & (*(s+1))))))) - ((('A')) | 0)
)) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A'
^ 'a') & (*(s+1)))) == sizeof(U64)) ? (void)0 : __assert2
("re_comp.c", 4475, __func__, "sizeof((~('A' ^ 'a') & (*(s+1)))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 4475, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*(s+1))))))) - ((('A')) | 0))) <= (((U64) (
((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void
)0 : __assert2("re_comp.c", 4475, __func__, "('Z') >= ('A')"
)), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((
((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c", 4475
, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))
) >= 0) ? (void)0 : __assert2("re_comp.c", 4475, __func__,
"(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s')))
== sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2
("re_comp.c", 4475, __func__, "(NV) (('A')) >= 0")), (((NV
) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a'
) & ('s'))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 4475, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))))))) ? (void)0 : __assert2("re_comp.c"
, 4475, __func__, "(((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & (*(s+1)))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & (*(s+1))))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & (*(s+1)))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & (*(s+1))))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & (*(s+1)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"sizeof((~('A' ^ 'a') & (*(s+1)))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & (*(s+1))))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 4475, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))"
)), ((*(s+1)) & ~('A' ^ 'a')) == (('s') & ~('A' ^ 'a'
)))
)
4476 {
4477
4478 /* EXACTF nodes need to know that the minimum length
4479 * changed so that a sharp s in the string can match this
4480 * ss in the pattern, but they remain EXACTF nodes, as they
4481 * won't match this unless the target string is in UTF-8,
4482 * which we don't know until runtime. EXACTFL nodes can't
4483 * transform into EXACTFU nodes */
4484 if (OP(scan)((scan)->type) != EXACTF43 && OP(scan)((scan)->type) != EXACTFL44) {
4485 OP(scan)((scan)->type) = EXACTFUP47;
4486 }
4487 }
4488
4489 *min_subtract += len - 1;
4490 s += len;
4491 }
4492#endif
4493 }
4494 }
4495
4496#ifdef DEBUGGING
4497 /* Allow dumping but overwriting the collection of skipped
4498 * ops and/or strings with fake optimized ops */
4499 n = scan + NODE_SZ_STR(scan)((((((((scan)->type) == 41 || ((scan)->type) == 51) ? (
((((scan)->type) == 41 || ((scan)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 4499, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 4499, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))) + sizeof(regnode
) - 1) / sizeof(regnode)) + 1 + regarglen[(scan)->type])
;
4500 while (n <= stop) {
4501 OP(n)((n)->type) = OPTIMIZED107;
4502 FLAGS(n)((n)->flags) = 0;
4503 NEXT_OFF(n)((n)->next_off) = 0;
4504 n++;
4505 }
4506#endif
4507 DEBUG_OPTIMISE_r(if (merged){DEBUG_PEEP("finl", scan, depth, 0);})do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) if (
merged){S_debug_peep( "finl", pRExC_state, scan, depth, 0);};
} while (0)
;
4508 return stopnow;
4509}
4510
4511/* REx optimizer. Converts nodes into quicker variants "in place".
4512 Finds fixed substrings. */
4513
4514/* Stops at toplevel WHILEM as well as at "last". At end *scanp is set
4515 to the position after last scanned or to NULL. */
4516
4517#define INIT_AND_WITHP((!and_withp) ? (void)0 : __assert2("re_comp.c", 4517, __func__
, "!and_withp")); (and_withp = ((void)(__builtin_expect((((((
sizeof(size_t) < sizeof(1) || sizeof(regnode_ssc) > ((
size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ? (size_t)
(1) : ((size_t)-1)/sizeof(regnode_ssc)) > ((size_t)-1)/sizeof
(regnode_ssc))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof
(regnode_ssc)))))); Perl_save_pushptr( (void *)((char*)(and_withp
)),10)
\
4518 assert(!and_withp)((!and_withp) ? (void)0 : __assert2("re_comp.c", 4518, __func__
, "!and_withp"))
; \
4519 Newx(and_withp, 1, regnode_ssc)(and_withp = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(1) || sizeof(regnode_ssc) > ((size_t)1 << 8*
(sizeof(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof
(regnode_ssc)) > ((size_t)-1)/sizeof(regnode_ssc))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof(regnode_ssc
))))))
; \
4520 SAVEFREEPV(and_withp)Perl_save_pushptr( (void *)((char*)(and_withp)),10)
4521
4522
4523static void
4524S_unwind_scan_frames(pTHX_ const void *p)
4525{
4526 scan_frame *f= (scan_frame *)p;
4527 do {
4528 scan_frame *n= f->next_frame;
4529 Safefree(f)Perl_safesysfree(((void *)(f)));
4530 f= n;
4531 } while (f);
4532}
4533
4534/* Follow the next-chain of the current node and optimize away
4535 all the NOTHINGs from it.
4536 */
4537STATICstatic void
4538S_rck_elide_nothing(pTHX_ regnode *node)
4539{
4540 dVARstruct Perl___notused_struct;
4541
4542 PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING((node) ? (void)0 : __assert2("re_comp.c", 4542, __func__, "node"
))
;
4543
4544 if (OP(node)((node)->type) != CURLYX61) {
4545 const int max = (reg_off_by_arg[OP(node)((node)->type)]
4546 ? I32_MAX0x7fffffff
4547 /* I32 may be smaller than U16 on CRAYs! */
4548 : (I32_MAX0x7fffffff < U16_MAX0xffff ? I32_MAX0x7fffffff : U16_MAX0xffff));
4549 int off = (reg_off_by_arg[OP(node)((node)->type)] ? ARG(node)((((struct regnode_1 *)node)->arg1)) : NEXT_OFF(node)((node)->next_off));
4550 int noff;
4551 regnode *n = node;
4552
4553 /* Skip NOTHING and LONGJMP. */
4554 while (
4555 (n = regnext(n)Perl_regnext( n))
4556 && (
4557 (PL_regkind[OP(n)((n)->type)] == NOTHING54 && (noff = NEXT_OFF(n)((n)->next_off)))
4558 || ((OP(n)((n)->type) == LONGJMP77) && (noff = ARG(n)((((struct regnode_1 *)n)->arg1))))
4559 )
4560 && off + noff < max
4561 ) {
4562 off += noff;
4563 }
4564 if (reg_off_by_arg[OP(node)((node)->type)])
4565 ARG(node)((((struct regnode_1 *)node)->arg1)) = off;
4566 else
4567 NEXT_OFF(node)((node)->next_off) = off;
4568 }
4569 return;
4570}
4571
4572/* the return from this sub is the minimum length that could possibly match */
4573STATICstatic SSize_tssize_t
4574S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
4575 SSize_tssize_t *minlenp, SSize_tssize_t *deltap,
4576 regnode *last,
4577 scan_data_t *data,
4578 I32 stopparen,
4579 U32 recursed_depth,
4580 regnode_ssc *and_withp,
4581 U32 flags, U32 depth, bool_Bool was_mutate_ok)
4582 /* scanp: Start here (read-write). */
4583 /* deltap: Write maxlen-minlen here. */
4584 /* last: Stop before this one. */
4585 /* data: string data about the pattern */
4586 /* stopparen: treat close N as END */
4587 /* recursed: which subroutines have we recursed into */
4588 /* and_withp: Valid if flags & SCF_DO_STCLASS_OR */
4589{
4590 dVARstruct Perl___notused_struct;
4591 SSize_tssize_t final_minlen;
4592 /* There must be at least this number of characters to match */
4593 SSize_tssize_t min = 0;
4594 I32 pars = 0, code;
4595 regnode *scan = *scanp, *next;
4596 SSize_tssize_t delta = 0;
4597 int is_inf = (flags & SCF_DO_SUBSTR0x0400) && (data->flags & SF_IS_INF0x0040);
4598 int is_inf_internal = 0; /* The studied chunk is infinite */
4599 I32 is_par = OP(scan)((scan)->type) == OPEN63 ? ARG(scan)((((struct regnode_1 *)scan)->arg1)) : 0;
4600 scan_data_t data_fake;
4601 SV *re_trie_maxbuff = NULL((void*)0);
4602 regnode *first_non_open = scan;
4603 SSize_tssize_t stopmin = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
4604 scan_frame *frame = NULL((void*)0);
4605 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 4605, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 4605, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
4606
4607 PERL_ARGS_ASSERT_STUDY_CHUNK((pRExC_state) ? (void)0 : __assert2("re_comp.c", 4607, __func__
, "pRExC_state")); ((scanp) ? (void)0 : __assert2("re_comp.c"
, 4607, __func__, "scanp")); ((minlenp) ? (void)0 : __assert2
("re_comp.c", 4607, __func__, "minlenp")); ((deltap) ? (void)
0 : __assert2("re_comp.c", 4607, __func__, "deltap")); ((last
) ? (void)0 : __assert2("re_comp.c", 4607, __func__, "last"))
;
4608 RExC_study_started(pRExC_state->study_started)= 1;
4609
4610 Zero(&data_fake, 1, scan_data_t)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(1) ||
sizeof(scan_data_t) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof(scan_data_t
)) > ((size_t)-1)/sizeof(scan_data_t))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), ((((void*)
(&data_fake)) != 0) ? (void)0 : __assert2("re_comp.c", 4610
, __func__, "((void*)(&data_fake)) != 0")), (void)memset(
(char*)(&data_fake),0,(1) * sizeof(scan_data_t)))
;
4611
4612 if ( depth == 0 ) {
4613 while (first_non_open && OP(first_non_open)((first_non_open)->type) == OPEN63)
4614 first_non_open=regnext(first_non_open)Perl_regnext( first_non_open);
4615 }
4616
4617
4618 fake_study_recurse:
4619 DEBUG_r(do {(pRExC_state->study_chunk_recursed_count)++;;} while (
0)
4620 RExC_study_chunk_recursed_count++;do {(pRExC_state->study_chunk_recursed_count)++;;} while (
0)
4621 )do {(pRExC_state->study_chunk_recursed_count)++;;} while (
0)
;
4622 DEBUG_OPTIMISE_MORE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4623 {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4624 Perl_re_indentf( aTHX_ "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4625 depth, (long)stopparen,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4626 (unsigned long)RExC_study_chunk_recursed_count,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4627 (unsigned long)depth, (unsigned long)recursed_depth,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4628 scan,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4629 last);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4630 if (recursed_depth) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4631 U32 i;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4632 U32 j;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4633 for ( j = 0 ; j < recursed_depth ; j++ ) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4634 for ( i = 0 ; i < (U32)RExC_total_parens ; i++ ) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4635 if (PAREN_TEST(j, i) && (!j || !PAREN_TEST(j - 1, i))) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4636 Perl_re_printf( aTHX_ " %d",(int)i);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4637 break;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4638 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4639 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4640 if ( j + 1 < recursed_depth ) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4641 Perl_re_printf( aTHX_ ",");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4642 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4643 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4644 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4645 Perl_re_printf( aTHX_ "\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4646 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
4647 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_indentf( "study_chunk stopparen=%ld recursed_count=%lu depth=%lu recursed_depth=%lu scan=%p last=%p"
, depth, (long)stopparen, (unsigned long)(pRExC_state->study_chunk_recursed_count
), (unsigned long)depth, (unsigned long)recursed_depth, scan,
last); if (recursed_depth) { U32 i; U32 j; for ( j = 0 ; j <
recursed_depth ; j++ ) { for ( i = 0 ; i < (U32)(pRExC_state
->total_par) ; i++ ) { if ((((U8*)(((pRExC_state->study_chunk_recursed
) + (j) * (pRExC_state->study_chunk_recursed_bytes))))[(i)
>> 3] & (1 << ((i) & 7))) && (!j
|| !(((U8*)(((pRExC_state->study_chunk_recursed) + (j - 1
) * (pRExC_state->study_chunk_recursed_bytes))))[(i) >>
3] & (1 << ((i) & 7))))) { Perl_re_printf( " %d"
,(int)i); break; } } if ( j + 1 < recursed_depth ) { Perl_re_printf
( ","); } } } Perl_re_printf( "\n"); };} while (0)
;
4648 while ( scan && OP(scan)((scan)->type) != END0 && scan < last ){
4649 UV min_subtract = 0; /* How mmany chars to subtract from the minimum
4650 node length to get a real minimum (because
4651 the folded version may be shorter) */
4652 bool_Bool unfolded_multi_char = FALSE(0);
4653 /* avoid mutating ops if we are anywhere within the recursed or
4654 * enframed handling for a GOSUB: the outermost level will handle it.
4655 */
4656 bool_Bool mutate_ok = was_mutate_ok && !(frame && frame->in_gosub);
4657 /* Peephole optimizer: */
4658 DEBUG_STUDYDATA("Peep", data, depth, is_inf)S_debug_studydata( "Peep", data, depth, is_inf);
4659 DEBUG_PEEP("Peep", scan, depth, flags)S_debug_peep( "Peep", pRExC_state, scan, depth, flags);
4660
4661
4662 /* The reason we do this here is that we need to deal with things like
4663 * /(?:f)(?:o)(?:o)/ which cant be dealt with by the normal EXACT
4664 * parsing code, as each (?:..) is handled by a different invocation of
4665 * reg() -- Yves
4666 */
4667 if (PL_regkind[OP(scan)((scan)->type)] == EXACT40
4668 && OP(scan)((scan)->type) != LEXACT41
4669 && OP(scan)((scan)->type) != LEXACT_REQ851
4670 && mutate_ok
4671 ) {
4672 join_exact(pRExC_state, scan, &min_subtract, &unfolded_multi_char,S_join_exact( pRExC_state,scan,&min_subtract,&unfolded_multi_char
,0,((void*)0),depth + 1)
4673 0, NULL, depth + 1)S_join_exact( pRExC_state,scan,&min_subtract,&unfolded_multi_char
,0,((void*)0),depth + 1)
;
4674 }
4675
4676 /* Follow the next-chain of the current node and optimize
4677 away all the NOTHINGs from it.
4678 */
4679 rck_elide_nothing(scan)S_rck_elide_nothing( scan);
4680
4681 /* The principal pseudo-switch. Cannot be a switch, since we look into
4682 * several different things. */
4683 if ( OP(scan)((scan)->type) == DEFINEP95 ) {
4684 SSize_tssize_t minlen = 0;
4685 SSize_tssize_t deltanext = 0;
4686 SSize_tssize_t fake_last_close = 0;
4687 I32 f = SCF_IN_DEFINE0x20000;
4688
4689 StructCopy(&zero_scan_data, &data_fake, scan_data_t)(*((scan_data_t*)(&data_fake)) = *((scan_data_t*)(&zero_scan_data
)))
;
4690 scan = regnext(scan)Perl_regnext( scan);
4691 assert( OP(scan) == IFTHEN )((((scan)->type) == 82) ? (void)0 : __assert2("re_comp.c",
4691, __func__, "OP(scan) == IFTHEN"))
;
4692 DEBUG_PEEP("expect IFTHEN", scan, depth, flags)S_debug_peep( "expect IFTHEN", pRExC_state, scan, depth, flags
)
;
4693
4694 data_fake.last_closep= &fake_last_close;
4695 minlen = *minlenp;
4696 next = regnext(scan)Perl_regnext( scan);
4697 scan = NEXTOPER(NEXTOPER(scan))((((scan) + 1)) + 1);
4698 DEBUG_PEEP("scan", scan, depth, flags)S_debug_peep( "scan", pRExC_state, scan, depth, flags);
4699 DEBUG_PEEP("next", next, depth, flags)S_debug_peep( "next", pRExC_state, next, depth, flags);
4700
4701 /* we suppose the run is continuous, last=next...
4702 * NOTE we dont use the return here! */
4703 /* DEFINEP study_chunk() recursion */
4704 (void)study_chunk(pRExC_state, &scan, &minlen,S_study_chunk( pRExC_state,&scan,&minlen,&deltanext
,next,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
4705 &deltanext, next, &data_fake, stopparen,S_study_chunk( pRExC_state,&scan,&minlen,&deltanext
,next,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
4706 recursed_depth, NULL, f, depth+1, mutate_ok)S_study_chunk( pRExC_state,&scan,&minlen,&deltanext
,next,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
;
4707
4708 scan = next;
4709 } else
4710 if (
4711 OP(scan)((scan)->type) == BRANCH39 ||
4712 OP(scan)((scan)->type) == BRANCHJ78 ||
4713 OP(scan)((scan)->type) == IFTHEN82
4714 ) {
4715 next = regnext(scan)Perl_regnext( scan);
4716 code = OP(scan)((scan)->type);
4717
4718 /* The op(next)==code check below is to see if we
4719 * have "BRANCH-BRANCH", "BRANCHJ-BRANCHJ", "IFTHEN-IFTHEN"
4720 * IFTHEN is special as it might not appear in pairs.
4721 * Not sure whether BRANCH-BRANCHJ is possible, regardless
4722 * we dont handle it cleanly. */
4723 if (OP(next)((next)->type) == code || code == IFTHEN82) {
4724 /* NOTE - There is similar code to this block below for
4725 * handling TRIE nodes on a re-study. If you change stuff here
4726 * check there too. */
4727 SSize_tssize_t max1 = 0, min1 = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1), num = 0;
4728 regnode_ssc accum;
4729 regnode * const startbranch=scan;
4730
4731 if (flags & SCF_DO_SUBSTR0x0400) {
4732 /* Cannot merge strings after this. */
4733 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
4734 }
4735
4736 if (flags & SCF_DO_STCLASS(0x0800|0x1000))
4737 ssc_init_zero(pRExC_state, &accum)S_ssc_init( pRExC_state,&accum);
4738
4739 while (OP(scan)((scan)->type) == code) {
4740 SSize_tssize_t deltanext, minnext, fake;
4741 I32 f = 0;
4742 regnode_ssc this_class;
4743
4744 DEBUG_PEEP("Branch", scan, depth, flags)S_debug_peep( "Branch", pRExC_state, scan, depth, flags);
4745
4746 num++;
4747 StructCopy(&zero_scan_data, &data_fake, scan_data_t)(*((scan_data_t*)(&data_fake)) = *((scan_data_t*)(&zero_scan_data
)))
;
4748 if (data) {
4749 data_fake.whilem_c = data->whilem_c;
4750 data_fake.last_closep = data->last_closep;
4751 }
4752 else
4753 data_fake.last_closep = &fake;
4754
4755 data_fake.pos_delta = delta;
4756 next = regnext(scan)Perl_regnext( scan);
4757
4758 scan = NEXTOPER(scan)((scan) + 1); /* everything */
4759 if (code != BRANCH39) /* everything but BRANCH */
4760 scan = NEXTOPER(scan)((scan) + 1);
4761
4762 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
4763 ssc_init(pRExC_state, &this_class)S_ssc_init( pRExC_state,&this_class);
4764 data_fake.start_class = &this_class;
4765 f = SCF_DO_STCLASS_AND0x0800;
4766 }
4767 if (flags & SCF_WHILEM_VISITED_POS0x2000)
4768 f |= SCF_WHILEM_VISITED_POS0x2000;
4769
4770 /* we suppose the run is continuous, last=next...*/
4771 /* recurse study_chunk() for each BRANCH in an alternation */
4772 minnext = study_chunk(pRExC_state, &scan, minlenp,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,next
,&data_fake,stopparen,recursed_depth,((void*)0),f,depth+1
,mutate_ok)
4773 &deltanext, next, &data_fake, stopparen,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,next
,&data_fake,stopparen,recursed_depth,((void*)0),f,depth+1
,mutate_ok)
4774 recursed_depth, NULL, f, depth+1,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,next
,&data_fake,stopparen,recursed_depth,((void*)0),f,depth+1
,mutate_ok)
4775 mutate_ok)S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,next
,&data_fake,stopparen,recursed_depth,((void*)0),f,depth+1
,mutate_ok)
;
4776
4777 if (min1 > minnext)
4778 min1 = minnext;
4779 if (deltanext == OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)) {
4780 is_inf = is_inf_internal = 1;
4781 max1 = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
4782 } else if (max1 < minnext + deltanext)
4783 max1 = minnext + deltanext;
4784 scan = next;
4785 if (data_fake.flags & (SF_HAS_PAR0x0080|SF_IN_PAR0x0100))
4786 pars++;
4787 if (data_fake.flags & SCF_SEEN_ACCEPT0x8000) {
4788 if ( stopmin > minnext)
4789 stopmin = min + min1;
4790 flags &= ~SCF_DO_SUBSTR0x0400;
4791 if (data)
4792 data->flags |= SCF_SEEN_ACCEPT0x8000;
4793 }
4794 if (data) {
4795 if (data_fake.flags & SF_HAS_EVAL0x0200)
4796 data->flags |= SF_HAS_EVAL0x0200;
4797 data->whilem_c = data_fake.whilem_c;
4798 }
4799 if (flags & SCF_DO_STCLASS(0x0800|0x1000))
4800 ssc_or(pRExC_state, &accum, (regnode_charclass*)&this_class)S_ssc_or( pRExC_state,&accum,(regnode_charclass*)&this_class
)
;
4801 }
4802 if (code == IFTHEN82 && num < 2) /* Empty ELSE branch */
4803 min1 = 0;
4804 if (flags & SCF_DO_SUBSTR0x0400) {
4805 data->pos_min += min1;
4806 if (data->pos_delta >= OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - (max1 - min1))
4807 data->pos_delta = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
4808 else
4809 data->pos_delta += max1 - min1;
4810 if (max1 != min1 || is_inf)
4811 data->cur_is_floating = 1;
4812 }
4813 min += min1;
4814 if (delta == OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
4815 || OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - delta - (max1 - min1) < 0)
4816 delta = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
4817 else
4818 delta += max1 - min1;
4819 if (flags & SCF_DO_STCLASS_OR0x1000) {
4820 ssc_or(pRExC_state, data->start_class, (regnode_charclass*) &accum)S_ssc_or( pRExC_state,data->start_class,(regnode_charclass
*) &accum)
;
4821 if (min1) {
4822 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
4823 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
4824 }
4825 }
4826 else if (flags & SCF_DO_STCLASS_AND0x0800) {
4827 if (min1) {
4828 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &accum)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) &accum)
;
4829 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
4830 }
4831 else {
4832 /* Switch to OR mode: cache the old value of
4833 * data->start_class */
4834 INIT_AND_WITHP((!and_withp) ? (void)0 : __assert2("re_comp.c", 4834, __func__
, "!and_withp")); (and_withp = ((void)(__builtin_expect((((((
sizeof(size_t) < sizeof(1) || sizeof(regnode_ssc) > ((
size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ? (size_t)
(1) : ((size_t)-1)/sizeof(regnode_ssc)) > ((size_t)-1)/sizeof
(regnode_ssc))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof
(regnode_ssc)))))); Perl_save_pushptr( (void *)((char*)(and_withp
)),10)
;
4835 StructCopy(data->start_class, and_withp, regnode_ssc)(*((regnode_ssc*)(and_withp)) = *((regnode_ssc*)(data->start_class
)))
;
4836 flags &= ~SCF_DO_STCLASS_AND0x0800;
4837 StructCopy(&accum, data->start_class, regnode_ssc)(*((regnode_ssc*)(data->start_class)) = *((regnode_ssc*)(&
accum)))
;
4838 flags |= SCF_DO_STCLASS_OR0x1000;
4839 }
4840 }
4841
4842 if (PERL_ENABLE_TRIE_OPTIMISATION1
4843 && OP(startbranch)((startbranch)->type) == BRANCH39
4844 && mutate_ok
4845 ) {
4846 /* demq.
4847
4848 Assuming this was/is a branch we are dealing with: 'scan'
4849 now points at the item that follows the branch sequence,
4850 whatever it is. We now start at the beginning of the
4851 sequence and look for subsequences of
4852
4853 BRANCH->EXACT=>x1
4854 BRANCH->EXACT=>x2
4855 tail
4856
4857 which would be constructed from a pattern like
4858 /A|LIST|OF|WORDS/
4859
4860 If we can find such a subsequence we need to turn the first
4861 element into a trie and then add the subsequent branch exact
4862 strings to the trie.
4863
4864 We have two cases
4865
4866 1. patterns where the whole set of branches can be
4867 converted.
4868
4869 2. patterns where only a subset can be converted.
4870
4871 In case 1 we can replace the whole set with a single regop
4872 for the trie. In case 2 we need to keep the start and end
4873 branches so
4874
4875 'BRANCH EXACT; BRANCH EXACT; BRANCH X'
4876 becomes BRANCH TRIE; BRANCH X;
4877
4878 There is an additional case, that being where there is a
4879 common prefix, which gets split out into an EXACT like node
4880 preceding the TRIE node.
4881
4882 If x(1..n)==tail then we can do a simple trie, if not we make
4883 a "jump" trie, such that when we match the appropriate word
4884 we "jump" to the appropriate tail node. Essentially we turn
4885 a nested if into a case structure of sorts.
4886
4887 */
4888
4889 int made=0;
4890 if (!re_trie_maxbuff) {
4891 re_trie_maxbuff = get_sv(RE_TRIE_MAXBUF_NAME, 1)Perl_get_sv( "\022E_TRIE_MAXBUF",1);
4892 if (!SvIOK(re_trie_maxbuff)((re_trie_maxbuff)->sv_flags & 0x00000100))
4893 sv_setiv(re_trie_maxbuff, RE_TRIE_MAXBUF_INIT)Perl_sv_setiv( re_trie_maxbuff,65536);
4894 }
4895 if ( SvIV(re_trie_maxbuff)((((re_trie_maxbuff)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_trie_maxbuff); ((PL_valid_types_IVX[((svtype)((_svivx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 4895, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 4895, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_trie_maxbuff,2))
>=0 ) {
4896 regnode *cur;
4897 regnode *first = (regnode *)NULL((void*)0);
4898 regnode *prev = (regnode *)NULL((void*)0);
4899 regnode *tail = scan;
4900 U8 trietype = 0;
4901 U32 count=0;
4902
4903 /* var tail is used because there may be a TAIL
4904 regop in the way. Ie, the exacts will point to the
4905 thing following the TAIL, but the last branch will
4906 point at the TAIL. So we advance tail. If we
4907 have nested (?:) we may have to move through several
4908 tails.
4909 */
4910
4911 while ( OP( tail )((tail)->type) == TAIL55 ) {
4912 /* this is the TAIL generated by (?:) */
4913 tail = regnext( tail )Perl_regnext( tail);
4914 }
4915
4916
4917 DEBUG_TRIE_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4918 regprop(RExC_rx, RExC_mysv, tail, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4919 Perl_re_indentf( aTHX_ "%s %" UVuf ":%s\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4920 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4921 "Looking for TRIE'able sequences. Tail node is ",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4922 (UV) REGNODE_OFFSET(tail),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4923 SvPV_nolen_const( RExC_mysv )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4924 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
4925 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),tail,((void*)0
),pRExC_state); Perl_re_indentf( "%s %" "lu" ":%s\n", depth+1
, "Looking for TRIE'able sequences. Tail node is ", (UV) ((tail
) - (pRExC_state->emit_start)), (((((pRExC_state->mysv1
))->sv_flags & (0x00000400|0x00200000)) == 0x00000400)
? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)) ); }
;} while (0)
;
4926
4927 /*
4928
4929 Step through the branches
4930 cur represents each branch,
4931 noper is the first thing to be matched as part
4932 of that branch
4933 noper_next is the regnext() of that node.
4934
4935 We normally handle a case like this
4936 /FOO[xyz]|BAR[pqr]/ via a "jump trie" but we also
4937 support building with NOJUMPTRIE, which restricts
4938 the trie logic to structures like /FOO|BAR/.
4939
4940 If noper is a trieable nodetype then the branch is
4941 a possible optimization target. If we are building
4942 under NOJUMPTRIE then we require that noper_next is
4943 the same as scan (our current position in the regex
4944 program).
4945
4946 Once we have two or more consecutive such branches
4947 we can create a trie of the EXACT's contents and
4948 stitch it in place into the program.
4949
4950 If the sequence represents all of the branches in
4951 the alternation we replace the entire thing with a
4952 single TRIE node.
4953
4954 Otherwise when it is a subsequence we need to
4955 stitch it in place and replace only the relevant
4956 branches. This means the first branch has to remain
4957 as it is used by the alternation logic, and its
4958 next pointer, and needs to be repointed at the item
4959 on the branch chain following the last branch we
4960 have optimized away.
4961
4962 This could be either a BRANCH, in which case the
4963 subsequence is internal, or it could be the item
4964 following the branch sequence in which case the
4965 subsequence is at the end (which does not
4966 necessarily mean the first node is the start of the
4967 alternation).
4968
4969 TRIE_TYPE(X) is a define which maps the optype to a
4970 trietype.
4971
4972 optype | trietype
4973 ----------------+-----------
4974 NOTHING | NOTHING
4975 EXACT | EXACT
4976 EXACT_REQ8 | EXACT
4977 EXACTFU | EXACTFU
4978 EXACTFU_REQ8 | EXACTFU
4979 EXACTFUP | EXACTFU
4980 EXACTFAA | EXACTFAA
4981 EXACTL | EXACTL
4982 EXACTFLU8 | EXACTFLU8
4983
4984
4985 */
4986#define TRIE_TYPE(X)( ( 54 == (X) ) ? 54 : ( 40 == (X) || 50 == (X) ) ? 40 : ( 45
== (X) || 52 == (X) || 47 == (X) ) ? 45 : ( 46 == (X) ) ? 46
: ( 42 == (X) ) ? 42 : ( 48 == (X) ) ? 48 : 0 )
( ( NOTHING54 == (X) ) \
4987 ? NOTHING54 \
4988 : ( EXACT40 == (X) || EXACT_REQ850 == (X) ) \
4989 ? EXACT40 \
4990 : ( EXACTFU45 == (X) \
4991 || EXACTFU_REQ852 == (X) \
4992 || EXACTFUP47 == (X) ) \
4993 ? EXACTFU45 \
4994 : ( EXACTFAA46 == (X) ) \
4995 ? EXACTFAA46 \
4996 : ( EXACTL42 == (X) ) \
4997 ? EXACTL42 \
4998 : ( EXACTFLU848 == (X) ) \
4999 ? EXACTFLU848 \
5000 : 0 )
5001
5002 /* dont use tail as the end marker for this traverse */
5003 for ( cur = startbranch ; cur != scan ; cur = regnext( cur )Perl_regnext( cur) ) {
5004 regnode * const noper = NEXTOPER( cur )((cur) + 1);
5005 U8 noper_type = OP( noper )((noper)->type);
5006 U8 noper_trietype = TRIE_TYPE( noper_type )( ( 54 == (noper_type) ) ? 54 : ( 40 == (noper_type) || 50 ==
(noper_type) ) ? 40 : ( 45 == (noper_type) || 52 == (noper_type
) || 47 == (noper_type) ) ? 45 : ( 46 == (noper_type) ) ? 46 :
( 42 == (noper_type) ) ? 42 : ( 48 == (noper_type) ) ? 48 : 0
)
;
5007#if defined(DEBUGGING) || defined(NOJUMPTRIE)
5008 regnode * const noper_next = regnext( noper )Perl_regnext( noper);
5009 U8 noper_next_type = (noper_next && noper_next < tail) ? OP(noper_next)((noper_next)->type) : 0;
5010 U8 noper_next_trietype = (noper_next && noper_next < tail) ? TRIE_TYPE( noper_next_type )( ( 54 == (noper_next_type) ) ? 54 : ( 40 == (noper_next_type
) || 50 == (noper_next_type) ) ? 40 : ( 45 == (noper_next_type
) || 52 == (noper_next_type) || 47 == (noper_next_type) ) ? 45
: ( 46 == (noper_next_type) ) ? 46 : ( 42 == (noper_next_type
) ) ? 42 : ( 48 == (noper_next_type) ) ? 48 : 0 )
:0;
5011#endif
5012
5013 DEBUG_TRIE_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5014 regprop(RExC_rx, RExC_mysv, cur, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5015 Perl_re_indentf( aTHX_ "- %d:%s (%d)",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5016 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5017 REG_NODE_NUM(cur), SvPV_nolen_const( RExC_mysv ), REG_NODE_NUM(cur) );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5018
5019 regprop(RExC_rx, RExC_mysv, noper, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5020 Perl_re_printf( aTHX_ " -> %d:%s",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5021 REG_NODE_NUM(noper), SvPV_nolen_const(RExC_mysv));do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5022
5023 if ( noper_next ) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5024 regprop(RExC_rx, RExC_mysv, noper_next, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5025 Perl_re_printf( aTHX_ "\t=> %d:%s\t",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5026 REG_NODE_NUM(noper_next), SvPV_nolen_const(RExC_mysv));do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5027 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5028 Perl_re_printf( aTHX_ "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5029 REG_NODE_NUM(first), REG_NODE_NUM(prev), REG_NODE_NUM(cur),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5030 PL_reg_name[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype]do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5031 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
5032 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %d:%s (%d)", depth+1, ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), ((cur
) ? (int)((cur)-(pRExC_state->emit_start)) : -1) ); my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),noper,((void*)
0),pRExC_state); Perl_re_printf( " -> %d:%s", ((noper) ? (
int)((noper)-(pRExC_state->emit_start)) : -1), (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32))); if
( noper_next ) { my_regprop( (pRExC_state->rx),(pRExC_state
->mysv1),noper_next,((void*)0),pRExC_state); Perl_re_printf
( "\t=> %d:%s\t", ((noper_next) ? (int)((noper_next)-(pRExC_state
->emit_start)) : -1), (((((pRExC_state->mysv1))->sv_flags
& (0x00000400|0x00200000)) == 0x00000400) ? ((const char
*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32))); } Perl_re_printf( "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype
] ); };} while (0)
;
5033
5034 /* Is noper a trieable nodetype that can be merged
5035 * with the current trie (if there is one)? */
5036 if ( noper_trietype
5037 &&
5038 (
5039 ( noper_trietype == NOTHING54 )
5040 || ( trietype == NOTHING54 )
5041 || ( trietype == noper_trietype )
5042 )
5043#ifdef NOJUMPTRIE
5044 && noper_next >= tail
5045#endif
5046 && count < U16_MAX0xffff)
5047 {
5048 /* Handle mergable triable node Either we are
5049 * the first node in a new trieable sequence,
5050 * in which case we do some bookkeeping,
5051 * otherwise we update the end pointer. */
5052 if ( !first ) {
5053 first = cur;
5054 if ( noper_trietype == NOTHING54 ) {
5055#if !defined(DEBUGGING) && !defined(NOJUMPTRIE)
5056 regnode * const noper_next = regnext( noper )Perl_regnext( noper);
5057 U8 noper_next_type = (noper_next && noper_next < tail) ? OP(noper_next)((noper_next)->type) : 0;
5058 U8 noper_next_trietype = noper_next_type ? TRIE_TYPE( noper_next_type )( ( 54 == (noper_next_type) ) ? 54 : ( 40 == (noper_next_type
) || 50 == (noper_next_type) ) ? 40 : ( 45 == (noper_next_type
) || 52 == (noper_next_type) || 47 == (noper_next_type) ) ? 45
: ( 46 == (noper_next_type) ) ? 46 : ( 42 == (noper_next_type
) ) ? 42 : ( 48 == (noper_next_type) ) ? 48 : 0 )
:0;
5059#endif
5060
5061 if ( noper_next_trietype ) {
5062 trietype = noper_next_trietype;
5063 } else if (noper_next_type) {
5064 /* a NOTHING regop is 1 regop wide.
5065 * We need at least two for a trie
5066 * so we can't merge this in */
5067 first = NULL((void*)0);
5068 }
5069 } else {
5070 trietype = noper_trietype;
5071 }
5072 } else {
5073 if ( trietype == NOTHING54 )
5074 trietype = noper_trietype;
5075 prev = cur;
5076 }
5077 if (first)
5078 count++;
5079 } /* end handle mergable triable node */
5080 else {
5081 /* handle unmergable node -
5082 * noper may either be a triable node which can
5083 * not be tried together with the current trie,
5084 * or a non triable node */
5085 if ( prev ) {
5086 /* If last is set and trietype is not
5087 * NOTHING then we have found at least two
5088 * triable branch sequences in a row of a
5089 * similar trietype so we can turn them
5090 * into a trie. If/when we allow NOTHING to
5091 * start a trie sequence this condition
5092 * will be required, and it isn't expensive
5093 * so we leave it in for now. */
5094 if ( trietype && trietype != NOTHING54 )
5095 make_trie( pRExC_state,S_make_trie( pRExC_state,startbranch,first,cur,tail,count,trietype
,depth+1)
5096 startbranch, first, cur, tail,S_make_trie( pRExC_state,startbranch,first,cur,tail,count,trietype
,depth+1)
5097 count, trietype, depth+1 )S_make_trie( pRExC_state,startbranch,first,cur,tail,count,trietype
,depth+1)
;
5098 prev = NULL((void*)0); /* note: we clear/update
5099 first, trietype etc below,
5100 so we dont do it here */
5101 }
5102 if ( noper_trietype
5103#ifdef NOJUMPTRIE
5104 && noper_next >= tail
5105#endif
5106 ){
5107 /* noper is triable, so we can start a new
5108 * trie sequence */
5109 count = 1;
5110 first = cur;
5111 trietype = noper_trietype;
5112 } else if (first) {
5113 /* if we already saw a first but the
5114 * current node is not triable then we have
5115 * to reset the first information. */
5116 count = 0;
5117 first = NULL((void*)0);
5118 trietype = 0;
5119 }
5120 } /* end handle unmergable node */
5121 } /* loop over branches */
5122 DEBUG_TRIE_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5123 regprop(RExC_rx, RExC_mysv, cur, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5124 Perl_re_indentf( aTHX_ "- %s (%d) <SCAN FINISHED> ",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5125 depth+1, SvPV_nolen_const( RExC_mysv ), REG_NODE_NUM(cur));do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5126 Perl_re_printf( aTHX_ "(First==%d, Last==%d, Cur==%d, tt==%s)\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5127 REG_NODE_NUM(first), REG_NODE_NUM(prev), REG_NODE_NUM(cur),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5128 PL_reg_name[trietype]do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5129 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
5130
5131 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <SCAN FINISHED> "
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); Perl_re_printf( "(First==%d, Last==%d, Cur==%d, tt==%s)\n"
, ((first) ? (int)((first)-(pRExC_state->emit_start)) : -1
), ((prev) ? (int)((prev)-(pRExC_state->emit_start)) : -1)
, ((cur) ? (int)((cur)-(pRExC_state->emit_start)) : -1), PL_reg_name
[trietype] ); };} while (0)
;
5132 if ( prev && trietype ) {
5133 if ( trietype != NOTHING54 ) {
5134 /* the last branch of the sequence was part of
5135 * a trie, so we have to construct it here
5136 * outside of the loop */
5137 made= make_trie( pRExC_state, startbranch,S_make_trie( pRExC_state,startbranch,first,scan,tail,count,trietype
,depth+1)
5138 first, scan, tail, count,S_make_trie( pRExC_state,startbranch,first,scan,tail,count,trietype
,depth+1)
5139 trietype, depth+1 )S_make_trie( pRExC_state,startbranch,first,scan,tail,count,trietype
,depth+1)
;
5140#ifdef TRIE_STUDY_OPT
5141 if ( ((made == MADE_EXACT_TRIE4 &&
5142 startbranch == first)
5143 || ( first_non_open == first )) &&
5144 depth==0 ) {
5145 flags |= SCF_TRIE_RESTUDY0x4000;
5146 if ( startbranch == first
5147 && scan >= tail )
5148 {
5149 RExC_seen(pRExC_state->seen) &=~REG_TOP_LEVEL_BRANCHES_SEEN0x00000040;
5150 }
5151 }
5152#endif
5153 } else {
5154 /* at this point we know whatever we have is a
5155 * NOTHING sequence/branch AND if 'startbranch'
5156 * is 'first' then we can turn the whole thing
5157 * into a NOTHING
5158 */
5159 if ( startbranch == first ) {
5160 regnode *opt;
5161 /* the entire thing is a NOTHING sequence,
5162 * something like this: (?:|) So we can
5163 * turn it into a plain NOTHING op. */
5164 DEBUG_TRIE_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <NOTHING BRANCH SEQUENCE>\n"
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); };} while (0)
5165 regprop(RExC_rx, RExC_mysv, cur, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <NOTHING BRANCH SEQUENCE>\n"
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); };} while (0)
5166 Perl_re_indentf( aTHX_ "- %s (%d) <NOTHING BRANCH SEQUENCE>\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <NOTHING BRANCH SEQUENCE>\n"
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); };} while (0)
5167 depth+1,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <NOTHING BRANCH SEQUENCE>\n"
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); };} while (0)
5168 SvPV_nolen_const( RExC_mysv ), REG_NODE_NUM(cur));do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <NOTHING BRANCH SEQUENCE>\n"
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); };} while (0)
5169
5170 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000004))) { my_regprop
( (pRExC_state->rx),(pRExC_state->mysv1),cur,((void*)0)
,pRExC_state); Perl_re_indentf( "- %s (%d) <NOTHING BRANCH SEQUENCE>\n"
, depth+1, (((((pRExC_state->mysv1))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv1),0,2|32)), ((cur) ? (int)((cur)-(pRExC_state->emit_start
)) : -1)); };} while (0)
;
5171 OP(startbranch)((startbranch)->type)= NOTHING54;
5172 NEXT_OFF(startbranch)((startbranch)->next_off)= tail - startbranch;
5173 for ( opt= startbranch + 1; opt < tail ; opt++ )
5174 OP(opt)((opt)->type)= OPTIMIZED107;
5175 }
5176 }
5177 } /* end if ( prev) */
5178 } /* TRIE_MAXBUF is non zero */
5179 } /* do trie */
5180
5181 }
5182 else if ( code == BRANCHJ78 ) { /* single branch is optimized. */
5183 scan = NEXTOPER(NEXTOPER(scan))((((scan) + 1)) + 1);
5184 } else /* single branch is optimized. */
5185 scan = NEXTOPER(scan)((scan) + 1);
5186 continue;
5187 } else if (OP(scan)((scan)->type) == SUSPEND81 || OP(scan)((scan)->type) == GOSUB92) {
5188 I32 paren = 0;
5189 regnode *start = NULL((void*)0);
5190 regnode *end = NULL((void*)0);
5191 U32 my_recursed_depth= recursed_depth;
5192
5193 if (OP(scan)((scan)->type) != SUSPEND81) { /* GOSUB */
5194 /* Do setup, note this code has side effects beyond
5195 * the rest of this block. Specifically setting
5196 * RExC_recurse[] must happen at least once during
5197 * study_chunk(). */
5198 paren = ARG(scan)((((struct regnode_1 *)scan)->arg1));
5199 RExC_recurse(pRExC_state->recurse)[ARG2L(scan)((((struct regnode_2L *)scan)->arg2))] = scan;
5200 start = REGNODE_p(RExC_open_parens[paren])((pRExC_state->emit_start) + ((pRExC_state->open_parens
)[paren]))
;
5201 end = REGNODE_p(RExC_close_parens[paren])((pRExC_state->emit_start) + ((pRExC_state->close_parens
)[paren]))
;
5202
5203 /* NOTE we MUST always execute the above code, even
5204 * if we do nothing with a GOSUB */
5205 if (
5206 ( flags & SCF_IN_DEFINE0x20000 )
5207 ||
5208 (
5209 (is_inf_internal || is_inf || (data && data->flags & SF_IS_INF0x0040))
5210 &&
5211 ( (flags & (SCF_DO_STCLASS(0x0800|0x1000) | SCF_DO_SUBSTR0x0400)) == 0 )
5212 )
5213 ) {
5214 /* no need to do anything here if we are in a define. */
5215 /* or we are after some kind of infinite construct
5216 * so we can skip recursing into this item.
5217 * Since it is infinite we will not change the maxlen
5218 * or delta, and if we miss something that might raise
5219 * the minlen it will merely pessimise a little.
5220 *
5221 * Iow /(?(DEFINE)(?<foo>foo|food))a+(?&foo)/
5222 * might result in a minlen of 1 and not of 4,
5223 * but this doesn't make us mismatch, just try a bit
5224 * harder than we should.
5225 *
5226 * However we must assume this GOSUB is infinite, to
5227 * avoid wrongly applying other optimizations in the
5228 * enclosing scope - see GH 18096, for example.
5229 */
5230 is_inf = is_inf_internal = 1;
5231 scan= regnext(scan)Perl_regnext( scan);
5232 continue;
5233 }
5234
5235 if (
5236 !recursed_depth
5237 || !PAREN_TEST(recursed_depth - 1, paren)(((U8*)(((pRExC_state->study_chunk_recursed) + (recursed_depth
- 1) * (pRExC_state->study_chunk_recursed_bytes))))[(paren
) >> 3] & (1 << ((paren) & 7)))
5238 ) {
5239 /* it is quite possible that there are more efficient ways
5240 * to do this. We maintain a bitmap per level of recursion
5241 * of which patterns we have entered so we can detect if a
5242 * pattern creates a possible infinite loop. When we
5243 * recurse down a level we copy the previous levels bitmap
5244 * down. When we are at recursion level 0 we zero the top
5245 * level bitmap. It would be nice to implement a different
5246 * more efficient way of doing this. In particular the top
5247 * level bitmap may be unnecessary.
5248 */
5249 if (!recursed_depth) {
5250 Zero(RExC_study_chunk_recursed, RExC_study_chunk_recursed_bytes, U8)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->study_chunk_recursed_bytes)) || sizeof(U8) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->study_chunk_recursed_bytes
))))) ? (size_t)((pRExC_state->study_chunk_recursed_bytes)
) : ((size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ?
(_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)((pRExC_state->study_chunk_recursed))) !=
0) ? (void)0 : __assert2("re_comp.c", 5250, __func__, "((void*)((pRExC_state->study_chunk_recursed))) != 0"
)), (void)memset((char*)((pRExC_state->study_chunk_recursed
)),0,((pRExC_state->study_chunk_recursed_bytes)) * sizeof(
U8)))
;
5251 } else {
5252 Copy(PAREN_OFFSET(recursed_depth - 1),((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->study_chunk_recursed_bytes)) || sizeof(U8) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->study_chunk_recursed_bytes
))))) ? (size_t)((pRExC_state->study_chunk_recursed_bytes)
) : ((size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ?
(_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(((pRExC_state->study_chunk_recursed) + (
recursed_depth) * (pRExC_state->study_chunk_recursed_bytes
)))) != 0) ? (void)0 : __assert2("re_comp.c", 5254, __func__,
"((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth) * (pRExC_state->study_chunk_recursed_bytes)))) != 0"
)), ((((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth
- 1) * (pRExC_state->study_chunk_recursed_bytes)))) != 0)
? (void)0 : __assert2("re_comp.c", 5254, __func__, "((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth - 1) * (pRExC_state->study_chunk_recursed_bytes)))) != 0"
)), (void)memcpy((char*)(((pRExC_state->study_chunk_recursed
) + (recursed_depth) * (pRExC_state->study_chunk_recursed_bytes
))),(const char*)(((pRExC_state->study_chunk_recursed) + (
recursed_depth - 1) * (pRExC_state->study_chunk_recursed_bytes
))), ((pRExC_state->study_chunk_recursed_bytes)) * sizeof(
U8)))
5253 PAREN_OFFSET(recursed_depth),((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->study_chunk_recursed_bytes)) || sizeof(U8) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->study_chunk_recursed_bytes
))))) ? (size_t)((pRExC_state->study_chunk_recursed_bytes)
) : ((size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ?
(_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(((pRExC_state->study_chunk_recursed) + (
recursed_depth) * (pRExC_state->study_chunk_recursed_bytes
)))) != 0) ? (void)0 : __assert2("re_comp.c", 5254, __func__,
"((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth) * (pRExC_state->study_chunk_recursed_bytes)))) != 0"
)), ((((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth
- 1) * (pRExC_state->study_chunk_recursed_bytes)))) != 0)
? (void)0 : __assert2("re_comp.c", 5254, __func__, "((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth - 1) * (pRExC_state->study_chunk_recursed_bytes)))) != 0"
)), (void)memcpy((char*)(((pRExC_state->study_chunk_recursed
) + (recursed_depth) * (pRExC_state->study_chunk_recursed_bytes
))),(const char*)(((pRExC_state->study_chunk_recursed) + (
recursed_depth - 1) * (pRExC_state->study_chunk_recursed_bytes
))), ((pRExC_state->study_chunk_recursed_bytes)) * sizeof(
U8)))
5254 RExC_study_chunk_recursed_bytes, U8)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->study_chunk_recursed_bytes)) || sizeof(U8) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->study_chunk_recursed_bytes
))))) ? (size_t)((pRExC_state->study_chunk_recursed_bytes)
) : ((size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ?
(_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)(((pRExC_state->study_chunk_recursed) + (
recursed_depth) * (pRExC_state->study_chunk_recursed_bytes
)))) != 0) ? (void)0 : __assert2("re_comp.c", 5254, __func__,
"((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth) * (pRExC_state->study_chunk_recursed_bytes)))) != 0"
)), ((((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth
- 1) * (pRExC_state->study_chunk_recursed_bytes)))) != 0)
? (void)0 : __assert2("re_comp.c", 5254, __func__, "((void*)(((pRExC_state->study_chunk_recursed) + (recursed_depth - 1) * (pRExC_state->study_chunk_recursed_bytes)))) != 0"
)), (void)memcpy((char*)(((pRExC_state->study_chunk_recursed
) + (recursed_depth) * (pRExC_state->study_chunk_recursed_bytes
))),(const char*)(((pRExC_state->study_chunk_recursed) + (
recursed_depth - 1) * (pRExC_state->study_chunk_recursed_bytes
))), ((pRExC_state->study_chunk_recursed_bytes)) * sizeof(
U8)))
;
5255 }
5256 /* we havent recursed into this paren yet, so recurse into it */
5257 DEBUG_STUDYDATA("gosub-set", data, depth, is_inf)S_debug_studydata( "gosub-set", data, depth, is_inf);
5258 PAREN_SET(recursed_depth, paren)(((U8*)(((pRExC_state->study_chunk_recursed) + (recursed_depth
) * (pRExC_state->study_chunk_recursed_bytes))))[(paren) >>
3] |= (1 << ((paren) & 7)))
;
5259 my_recursed_depth= recursed_depth + 1;
5260 } else {
5261 DEBUG_STUDYDATA("gosub-inf", data, depth, is_inf)S_debug_studydata( "gosub-inf", data, depth, is_inf);
5262 /* some form of infinite recursion, assume infinite length
5263 * */
5264 if (flags & SCF_DO_SUBSTR0x0400) {
5265 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5266 data->cur_is_floating = 1;
5267 }
5268 is_inf = is_inf_internal = 1;
5269 if (flags & SCF_DO_STCLASS_OR0x1000) /* Allow everything */
5270 ssc_anything(data->start_class)S_ssc_anything( data->start_class);
5271 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
5272
5273 start= NULL((void*)0); /* reset start so we dont recurse later on. */
5274 }
5275 } else {
5276 paren = stopparen;
5277 start = scan + 2;
5278 end = regnext(scan)Perl_regnext( scan);
5279 }
5280 if (start) {
5281 scan_frame *newframe;
5282 assert(end)((end) ? (void)0 : __assert2("re_comp.c", 5282, __func__, "end"
))
;
5283 if (!RExC_frame_last(pRExC_state->frame_last)) {
5284 Newxz(newframe, 1, scan_frame)(newframe = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(1) || sizeof(scan_frame) > ((size_t)1 << 8*(
sizeof(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof
(scan_frame)) > ((size_t)-1)/sizeof(scan_frame))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(scan_frame*)(Perl_safesyscalloc((1),sizeof(scan_frame)))))
;
5285 SAVEDESTRUCTOR_X(S_unwind_scan_frames, newframe)Perl_save_destructor_x( (DESTRUCTORFUNC_t)(S_unwind_scan_frames
),(void*)(newframe))
;
5286 RExC_frame_head(pRExC_state->frame_head)= newframe;
5287 RExC_frame_count(pRExC_state->frame_count)++;
5288 } else if (!RExC_frame_last(pRExC_state->frame_last)->next_frame) {
5289 Newxz(newframe, 1, scan_frame)(newframe = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(1) || sizeof(scan_frame) > ((size_t)1 << 8*(
sizeof(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof
(scan_frame)) > ((size_t)-1)/sizeof(scan_frame))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(scan_frame*)(Perl_safesyscalloc((1),sizeof(scan_frame)))))
;
5290 RExC_frame_last(pRExC_state->frame_last)->next_frame= newframe;
5291 newframe->prev_frame= RExC_frame_last(pRExC_state->frame_last);
5292 RExC_frame_count(pRExC_state->frame_count)++;
5293 } else {
5294 newframe= RExC_frame_last(pRExC_state->frame_last)->next_frame;
5295 }
5296 RExC_frame_last(pRExC_state->frame_last)= newframe;
5297
5298 newframe->next_regnode = regnext(scan)Perl_regnext( scan);
5299 newframe->last_regnode = last;
5300 newframe->stopparen = stopparen;
5301 newframe->prev_recursed_depth = recursed_depth;
5302 newframe->this_prev_frame= frame;
5303 newframe->in_gosub = (
5304 (frame && frame->in_gosub) || OP(scan)((scan)->type) == GOSUB92
5305 );
5306
5307 DEBUG_STUDYDATA("frame-new", data, depth, is_inf)S_debug_studydata( "frame-new", data, depth, is_inf);
5308 DEBUG_PEEP("fnew", scan, depth, flags)S_debug_peep( "fnew", pRExC_state, scan, depth, flags);
5309
5310 frame = newframe;
5311 scan = start;
5312 stopparen = paren;
5313 last = end;
5314 depth = depth + 1;
5315 recursed_depth= my_recursed_depth;
5316
5317 continue;
5318 }
5319 }
5320 else if ( OP(scan)((scan)->type) == EXACT40
5321 || OP(scan)((scan)->type) == LEXACT41
5322 || OP(scan)((scan)->type) == EXACT_REQ850
5323 || OP(scan)((scan)->type) == LEXACT_REQ851
5324 || OP(scan)((scan)->type) == EXACTL42)
5325 {
5326 SSize_tssize_t bytelen = STR_LEN(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 5326, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5326, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))
, charlen;
5327 UV uc;
5328 assert(bytelen)((bytelen) ? (void)0 : __assert2("re_comp.c", 5328, __func__,
"bytelen"))
;
5329 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
5330 const U8 * const s = (U8*)STRING(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 5330, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5330, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string))
;
5331 uc = utf8_to_uvchr_buf(s, s + bytelen, NULL)Perl_utf8_to_uvchr_buf_helper( (const U8 *) (s),(const U8 *) s
+ bytelen,((void*)0))
;
5332 charlen = utf8_length(s, s + bytelen)Perl_utf8_length( s,s + bytelen);
5333 } else {
5334 uc = *((U8*)STRING(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 5334, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5334, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string))
);
5335 charlen = bytelen;
5336 }
5337 min += charlen;
5338 if (flags & SCF_DO_SUBSTR0x0400) { /* Update longest substr. */
5339 /* The code below prefers earlier match for fixed
5340 offset, later match for variable offset. */
5341 if (data->last_end == -1) { /* Update the start info. */
5342 data->last_start_min = data->pos_min;
5343 data->last_start_max =
5344 is_inf ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
5345 : (data->pos_delta > OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - data->pos_min)
5346 ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) : data->pos_min + data->pos_delta;
5347 }
5348 sv_catpvn(data->last_found, STRING(scan), bytelen)Perl_sv_catpvn_flags( data->last_found,((((scan)->type)
== 41 || ((scan)->type) == 51) ? (((((scan)->type) == 41
|| ((scan)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 5348, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5348, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string)),bytelen,2)
;
5349 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
5350 SvUTF8_on(data->last_found)((data->last_found)->sv_flags |= (0x20000000));
5351 {
5352 SV * const sv = data->last_found;
5353 MAGIC * const mg = SvUTF8(sv)((sv)->sv_flags & 0x20000000) && SvMAGICAL(sv)((sv)->sv_flags & (0x00200000|0x00400000|0x00800000)) ?
5354 mg_findPerl_mg_find(sv, PERL_MAGIC_utf8'w') : NULL((void*)0);
5355 if (mg && mg->mg_len >= 0)
5356 mg->mg_len += charlen;
5357 }
5358 data->last_end = data->pos_min + charlen;
5359 data->pos_min += charlen; /* As in the first entry. */
5360 data->flags &= ~SF_BEFORE_EOL(0x0001|0x0002);
5361 }
5362
5363 /* ANDing the code point leaves at most it, and not in locale, and
5364 * can't match null string */
5365 if (flags & SCF_DO_STCLASS_AND0x0800) {
5366 ssc_cp_and(data->start_class, uc)S_ssc_cp_and( data->start_class,uc);
5367 ANYOF_FLAGS(data->start_class)((data->start_class)->flags) &= ~SSC_MATCHES_EMPTY_STRING0x01;
5368 ssc_clear_localeS_ssc_clear_locale(data->start_class);
5369 }
5370 else if (flags & SCF_DO_STCLASS_OR0x1000) {
5371 ssc_add_cp(data->start_class, uc)S_ssc_add_range( (data->start_class),(uc),(uc));
5372 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
5373
5374 /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
5375 ANYOF_FLAGS(data->start_class)((data->start_class)->flags) &= ~SSC_MATCHES_EMPTY_STRING0x01;
5376 }
5377 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
5378 }
5379 else if (PL_regkind[OP(scan)((scan)->type)] == EXACT40) {
5380 /* But OP != EXACT!, so is EXACTFish */
5381 SSize_tssize_t bytelen = STR_LEN(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 5381, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->str_len)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5381, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->str_len))
, charlen;
5382 const U8 * s = (U8*)STRING(scan)((((scan)->type) == 41 || ((scan)->type) == 51) ? (((((
scan)->type) == 41 || ((scan)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 5382, __func__, "((scan)->type) == 41 || ((scan)->type) == 51"
)), (((struct regnode_lstring *)scan)->string)) : (((((scan
)->type) != 41 && ((scan)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5382, __func__, "((scan)->type) != 41 && ((scan)->type) != 51"
)), ((struct regnode_string *)scan)->string))
;
5383
5384 /* Replace a length 1 ASCII fold pair node with an ANYOFM node,
5385 * with the mask set to the complement of the bit that differs
5386 * between upper and lower case, and the lowest code point of the
5387 * pair (which the '&' forces) */
5388 if ( bytelen == 1
5389 && isALPHA_A(*s)(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 5389
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(*s))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 5389, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5389, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U8) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') &
(*s))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 5389, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5389, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64)
(((((U32) ((~('A' ^ 'a') & (*s)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a'
) & (*s))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 5389, __func__, "sizeof((~('A' ^ 'a') & (*s))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5389, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5389, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*s)))))) - ((('A')) | 0))) <= (((U64) (((('Z'
) - ('A'))) | 0))))))))
5390 && ( OP(scan)((scan)->type) == EXACTFAA46
5391 || ( OP(scan)((scan)->type) == EXACTFU45
5392 && ! HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(*s)((! ((( (sizeof(*s) == 1) || !(((U64)((*s) | 0)) & ~0xFF)
)) ? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (*s)] & (
1U << (19))))
))
5393 && mutate_ok
5394 ) {
5395 U8 mask = ~ ('A' ^ 'a'); /* These differ in just one bit */
5396
5397 OP(scan)((scan)->type) = ANYOFM28;
5398 ARG_SET(scan, *s & mask)(((((struct regnode_1 *)scan)->arg1)) = ((*s & mask)));
5399 FLAGS(scan)((scan)->flags) = mask;
5400 /* we're not EXACTFish any more, so restudy */
5401 continue;
5402 }
5403
5404 /* Search for fixed substrings supports EXACT only. */
5405 if (flags & SCF_DO_SUBSTR0x0400) {
5406 assert(data)((data) ? (void)0 : __assert2("re_comp.c", 5406, __func__, "data"
))
;
5407 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5408 }
5409 charlen = UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? (SSize_tssize_t) utf8_length(s, s + bytelen)Perl_utf8_length( s,s + bytelen) : bytelen;
5410 if (unfolded_multi_char) {
5411 RExC_seen(pRExC_state->seen) |= REG_UNFOLDED_MULTI_SEEN0x00000400;
5412 }
5413 min += charlen - min_subtract;
5414 assert (min >= 0)((min >= 0) ? (void)0 : __assert2("re_comp.c", 5414, __func__
, "min >= 0"))
;
5415 delta += min_subtract;
5416 if (flags & SCF_DO_SUBSTR0x0400) {
5417 data->pos_min += charlen - min_subtract;
5418 if (data->pos_min < 0) {
5419 data->pos_min = 0;
5420 }
5421 data->pos_delta += min_subtract;
5422 if (min_subtract) {
5423 data->cur_is_floating = 1; /* float */
5424 }
5425 }
5426
5427 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
5428 SV* EXACTF_invlist = make_exactf_invlist(pRExC_state, scan)S_make_exactf_invlist( pRExC_state,scan);
5429
5430 assert(EXACTF_invlist)((EXACTF_invlist) ? (void)0 : __assert2("re_comp.c", 5430, __func__
, "EXACTF_invlist"))
;
5431 if (flags & SCF_DO_STCLASS_AND0x0800) {
5432 if (OP(scan)((scan)->type) != EXACTFL44)
5433 ssc_clear_localeS_ssc_clear_locale(data->start_class);
5434 ANYOF_FLAGS(data->start_class)((data->start_class)->flags) &= ~SSC_MATCHES_EMPTY_STRING0x01;
5435 ANYOF_POSIXL_ZERO(data->start_class)do { (((regnode_charclass_posixl*) (data->start_class))->
classflags) = 0; } while (0)
;
5436 ssc_intersection(data->start_class, EXACTF_invlist, FALSE)S_ssc_intersection( data->start_class,EXACTF_invlist,(0));
5437 }
5438 else { /* SCF_DO_STCLASS_OR */
5439 ssc_union(data->start_class, EXACTF_invlist, FALSE)S_ssc_union( data->start_class,EXACTF_invlist,(0));
5440 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
5441
5442 /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
5443 ANYOF_FLAGS(data->start_class)((data->start_class)->flags) &= ~SSC_MATCHES_EMPTY_STRING0x01;
5444 }
5445 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
5446 SvREFCNT_dec(EXACTF_invlist)Perl_SvREFCNT_dec( ((SV *)({ void *_p = (EXACTF_invlist); _p;
})))
;
5447 }
5448 }
5449 else if (REGNODE_VARIES(OP(scan))(PL_varies_bitmask[(((scan)->type)) >> 3] & (1 <<
((((scan)->type)) & 7)))
) {
5450 SSize_tssize_t mincount, maxcount, minnext, deltanext, pos_before = 0;
5451 I32 fl = 0, f = flags;
5452 regnode * const oscan = scan;
5453 regnode_ssc this_class;
5454 regnode_ssc *oclass = NULL((void*)0);
5455 I32 next_is_eval = 0;
5456
5457 switch (PL_regkind[OP(scan)((scan)->type)]) {
5458 case WHILEM62: /* End of (?:...)* . */
5459 scan = NEXTOPER(scan)((scan) + 1);
5460 goto finish;
5461 case PLUS57:
5462 if (flags & (SCF_DO_SUBSTR0x0400 | SCF_DO_STCLASS(0x0800|0x1000))) {
5463 next = NEXTOPER(scan)((scan) + 1);
5464 if ( OP(next)((next)->type) == EXACT40
5465 || OP(next)((next)->type) == LEXACT41
5466 || OP(next)((next)->type) == EXACT_REQ850
5467 || OP(next)((next)->type) == LEXACT_REQ851
5468 || OP(next)((next)->type) == EXACTL42
5469 || (flags & SCF_DO_STCLASS(0x0800|0x1000)))
5470 {
5471 mincount = 1;
5472 maxcount = REG_INFTY0xffff;
5473 next = regnext(scan)Perl_regnext( scan);
5474 scan = NEXTOPER(scan)((scan) + 1);
5475 goto do_curly;
5476 }
5477 }
5478 if (flags & SCF_DO_SUBSTR0x0400)
5479 data->pos_min++;
5480 min++;
5481 /* FALLTHROUGH */
5482 case STAR56:
5483 next = NEXTOPER(scan)((scan) + 1);
5484
5485 /* This temporary node can now be turned into EXACTFU, and
5486 * must, as regexec.c doesn't handle it */
5487 if (OP(next)((next)->type) == EXACTFU_S_EDGE53 && mutate_ok) {
5488 OP(next)((next)->type) = EXACTFU45;
5489 }
5490
5491 if ( STR_LEN(next)((((next)->type) == 41 || ((next)->type) == 51) ? (((((
next)->type) == 41 || ((next)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 5491, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->str_len)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5491, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->str_len))
== 1
5492 && isALPHA_A(* STRING(next))(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 5492
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(* ((((next)->type) == 41 || ((next)->type) == 51) ? (
((((next)->type) == 41 || ((next)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))))) == sizeof
(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5492, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5492, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) ((~('A'
^ 'a') & (* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof
((~('A' ^ 'a') & (* ((((next)->type) == 41 || ((next)->
type) == 51) ? (((((next)->type) == 41 || ((next)->type
) == 51) ? (void)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))))) == sizeof
(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5492, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5492, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U32) ((~('A'
^ 'a') & (* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof
((~('A' ^ 'a') & (* ((((next)->type) == 41 || ((next)->
type) == 51) ? (((((next)->type) == 41 || ((next)->type
) == 51) ? (void)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 5492, __func__, "sizeof((~('A' ^ 'a') & (* ((((next)->type) == 41 || ((next)->type) == 51) ? (((((next)->type) == 41 || ((next)->type) == 51) ? (void)0 : __assert2(\"re_comp.c\", 5492, __func__, \"((next)->type) == 41 || ((next)->type) == 51\")), (((struct regnode_lstring *)next)->string)) : (((((next)->type) != 41 && ((next)->type) != 51) ? (void)0 : __assert2(\"re_comp.c\", 5492, __func__, \"((next)->type) != 41 && ((next)->type) != 51\")), ((struct regnode_string *)next)->string))))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5492, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5492, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5492, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))
5493 && ( OP(next)((next)->type) == EXACTFAA46
5494 || ( OP(next)((next)->type) == EXACTFU45
5495 && ! HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(* STRING(next))((! ((( (sizeof(* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5495, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5495, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))) == 1) || !(
((U64)((* ((((next)->type) == 41 || ((next)->type) == 51
) ? (((((next)->type) == 41 || ((next)->type) == 51) ? (
void)0 : __assert2("re_comp.c", 5495, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5495, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))) | 0)) &
~0xFF))) ? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (* ((
((next)->type) == 41 || ((next)->type) == 51) ? (((((next
)->type) == 41 || ((next)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 5495, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5495, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))] & (1U <<
(19))))
))
5496 && mutate_ok
5497 ) {
5498 /* These differ in just one bit */
5499 U8 mask = ~ ('A' ^ 'a');
5500
5501 assert(isALPHA_A(* STRING(next)))(((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 5501
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(* ((((next)->type) == 41 || ((next)->type) == 51) ? (
((((next)->type) == 41 || ((next)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))))) == sizeof
(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5501, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5501, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) ((~('A'
^ 'a') & (* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof
((~('A' ^ 'a') & (* ((((next)->type) == 41 || ((next)->
type) == 51) ? (((((next)->type) == 41 || ((next)->type
) == 51) ? (void)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))))) == sizeof
(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5501, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5501, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U32) ((~('A'
^ 'a') & (* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof
((~('A' ^ 'a') & (* ((((next)->type) == 41 || ((next)->
type) == 51) ? (((((next)->type) == 41 || ((next)->type
) == 51) ? (void)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string))))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 5501, __func__, "sizeof((~('A' ^ 'a') & (* ((((next)->type) == 41 || ((next)->type) == 51) ? (((((next)->type) == 41 || ((next)->type) == 51) ? (void)0 : __assert2(\"re_comp.c\", 5501, __func__, \"((next)->type) == 41 || ((next)->type) == 51\")), (((struct regnode_lstring *)next)->string)) : (((((next)->type) != 41 && ((next)->type) != 51) ? (void)0 : __assert2(\"re_comp.c\", 5501, __func__, \"((next)->type) != 41 && ((next)->type) != 51\")), ((struct regnode_string *)next)->string))))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 5501, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - (
'A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 5501, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (* ((((next)->type) == 41 || ((next)->type
) == 51) ? (((((next)->type) == 41 || ((next)->type) ==
51) ? (void)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)))))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))) ? (void
)0 : __assert2("re_comp.c", 5501, __func__, "isALPHA_A(* STRING(next))"
))
;
5502
5503 /* Then replace it by an ANYOFM node, with
5504 * the mask set to the complement of the
5505 * bit that differs between upper and lower
5506 * case, and the lowest code point of the
5507 * pair (which the '&' forces) */
5508 OP(next)((next)->type) = ANYOFM28;
5509 ARG_SET(next, *STRING(next) & mask)(((((struct regnode_1 *)next)->arg1)) = ((*((((next)->type
) == 41 || ((next)->type) == 51) ? (((((next)->type) ==
41 || ((next)->type) == 51) ? (void)0 : __assert2("re_comp.c"
, 5509, __func__, "((next)->type) == 41 || ((next)->type) == 51"
)), (((struct regnode_lstring *)next)->string)) : (((((next
)->type) != 41 && ((next)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 5509, __func__, "((next)->type) != 41 && ((next)->type) != 51"
)), ((struct regnode_string *)next)->string)) & mask))
)
;
5510 FLAGS(next)((next)->flags) = mask;
5511 }
5512
5513 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
5514 mincount = 0;
5515 maxcount = REG_INFTY0xffff;
5516 next = regnext(scan)Perl_regnext( scan);
5517 scan = NEXTOPER(scan)((scan) + 1);
5518 goto do_curly;
5519 }
5520 if (flags & SCF_DO_SUBSTR0x0400) {
5521 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5522 /* Cannot extend fixed substrings */
5523 data->cur_is_floating = 1; /* float */
5524 }
5525 is_inf = is_inf_internal = 1;
5526 scan = regnext(scan)Perl_regnext( scan);
5527 goto optimize_curly_tail;
5528 case CURLY58:
5529 if (stopparen>0 && (OP(scan)((scan)->type)==CURLYN59 || OP(scan)((scan)->type)==CURLYM60)
5530 && (scan->flags == stopparen))
5531 {
5532 mincount = 1;
5533 maxcount = 1;
5534 } else {
5535 mincount = ARG1(scan)((((struct regnode_2 *)scan)->arg1));
5536 maxcount = ARG2(scan)((((struct regnode_2 *)scan)->arg2));
5537 }
5538 next = regnext(scan)Perl_regnext( scan);
5539 if (OP(scan)((scan)->type) == CURLYX61) {
5540 I32 lp = (data ? *(data->last_closep) : 0);
5541 scan->flags = ((lp <= (I32)U8_MAX0xff) ? (U8)lp : U8_MAX0xff);
5542 }
5543 scan = NEXTOPER(scan)((scan) + 1) + EXTRA_STEP_2ARGS((sizeof(struct regnode_2)-1)/sizeof(struct regnode));
5544 next_is_eval = (OP(scan)((scan)->type) == EVAL84);
5545 do_curly:
5546 if (flags & SCF_DO_SUBSTR0x0400) {
5547 if (mincount == 0)
5548 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5549 /* Cannot extend fixed substrings */
5550 pos_before = data->pos_min;
5551 }
5552 if (data) {
5553 fl = data->flags;
5554 data->flags &= ~(SF_HAS_PAR0x0080|SF_IN_PAR0x0100|SF_HAS_EVAL0x0200);
5555 if (is_inf)
5556 data->flags |= SF_IS_INF0x0040;
5557 }
5558 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
5559 ssc_init(pRExC_state, &this_class)S_ssc_init( pRExC_state,&this_class);
5560 oclass = data->start_class;
5561 data->start_class = &this_class;
5562 f |= SCF_DO_STCLASS_AND0x0800;
5563 f &= ~SCF_DO_STCLASS_OR0x1000;
5564 }
5565 /* Exclude from super-linear cache processing any {n,m}
5566 regops for which the combination of input pos and regex
5567 pos is not enough information to determine if a match
5568 will be possible.
5569
5570 For example, in the regex /foo(bar\s*){4,8}baz/ with the
5571 regex pos at the \s*, the prospects for a match depend not
5572 only on the input position but also on how many (bar\s*)
5573 repeats into the {4,8} we are. */
5574 if ((mincount > 1) || (maxcount > 1 && maxcount != REG_INFTY0xffff))
5575 f &= ~SCF_WHILEM_VISITED_POS0x2000;
5576
5577 /* This will finish on WHILEM, setting scan, or on NULL: */
5578 /* recurse study_chunk() on loop bodies */
5579 minnext = study_chunk(pRExC_state, &scan, minlenp, &deltanext,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,last
,data,stopparen,recursed_depth,((void*)0),(mincount == 0 ? (f
& ~0x0400) : f),depth+1,mutate_ok)
5580 last, data, stopparen, recursed_depth, NULL,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,last
,data,stopparen,recursed_depth,((void*)0),(mincount == 0 ? (f
& ~0x0400) : f),depth+1,mutate_ok)
5581 (mincount == 0S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,last
,data,stopparen,recursed_depth,((void*)0),(mincount == 0 ? (f
& ~0x0400) : f),depth+1,mutate_ok)
5582 ? (f & ~SCF_DO_SUBSTR)S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,last
,data,stopparen,recursed_depth,((void*)0),(mincount == 0 ? (f
& ~0x0400) : f),depth+1,mutate_ok)
5583 : f)S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,last
,data,stopparen,recursed_depth,((void*)0),(mincount == 0 ? (f
& ~0x0400) : f),depth+1,mutate_ok)
5584 , depth+1, mutate_ok)S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,last
,data,stopparen,recursed_depth,((void*)0),(mincount == 0 ? (f
& ~0x0400) : f),depth+1,mutate_ok)
;
5585
5586 if (flags & SCF_DO_STCLASS(0x0800|0x1000))
5587 data->start_class = oclass;
5588 if (mincount == 0 || minnext == 0) {
5589 if (flags & SCF_DO_STCLASS_OR0x1000) {
5590 ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &this_class)S_ssc_or( pRExC_state,data->start_class,(regnode_charclass
*) &this_class)
;
5591 }
5592 else if (flags & SCF_DO_STCLASS_AND0x0800) {
5593 /* Switch to OR mode: cache the old value of
5594 * data->start_class */
5595 INIT_AND_WITHP((!and_withp) ? (void)0 : __assert2("re_comp.c", 5595, __func__
, "!and_withp")); (and_withp = ((void)(__builtin_expect((((((
sizeof(size_t) < sizeof(1) || sizeof(regnode_ssc) > ((
size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ? (size_t)
(1) : ((size_t)-1)/sizeof(regnode_ssc)) > ((size_t)-1)/sizeof
(regnode_ssc))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof
(regnode_ssc)))))); Perl_save_pushptr( (void *)((char*)(and_withp
)),10)
;
5596 StructCopy(data->start_class, and_withp, regnode_ssc)(*((regnode_ssc*)(and_withp)) = *((regnode_ssc*)(data->start_class
)))
;
5597 flags &= ~SCF_DO_STCLASS_AND0x0800;
5598 StructCopy(&this_class, data->start_class, regnode_ssc)(*((regnode_ssc*)(data->start_class)) = *((regnode_ssc*)(&
this_class)))
;
5599 flags |= SCF_DO_STCLASS_OR0x1000;
5600 ANYOF_FLAGS(data->start_class)((data->start_class)->flags)
5601 |= SSC_MATCHES_EMPTY_STRING0x01;
5602 }
5603 } else { /* Non-zero len */
5604 if (flags & SCF_DO_STCLASS_OR0x1000) {
5605 ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &this_class)S_ssc_or( pRExC_state,data->start_class,(regnode_charclass
*) &this_class)
;
5606 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
5607 }
5608 else if (flags & SCF_DO_STCLASS_AND0x0800)
5609 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &this_class)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) &this_class)
;
5610 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
5611 }
5612 if (!scan) /* It was not CURLYX, but CURLY. */
5613 scan = next;
5614 if (((flags & (SCF_TRIE_DOING_RESTUDY0x10000|SCF_DO_SUBSTR0x0400))==SCF_DO_SUBSTR0x0400)
5615 /* ? quantifier ok, except for (?{ ... }) */
5616 && (next_is_eval || !(mincount == 0 && maxcount == 1))
5617 && (minnext == 0) && (deltanext == 0)
5618 && data && !(data->flags & (SF_HAS_PAR0x0080|SF_IN_PAR0x0100))
5619 && maxcount <= REG_INFTY0xffff/3) /* Complement check for big
5620 count */
5621 {
5622 _WARN_HELPER(RExC_precomp_end, packWARN(WARN_REGEXP),do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 5627, (pRExC_state->precomp_end
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop
&& !((PL_curcop->cop_warnings) == ((void*)0) || (
PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL ||
(PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((20 )) & 0xFF))+1) / 8)] & (1 << ((2*((((20 )
) & 0xFF))+1) % 8)))) || (((((20 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) || (((((20
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>16) & 0xFF
))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Quantifier unexpected on zero-length expression "
"in regex m/%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
pRExC_state->precomp_end) - (pRExC_state->precomp)), (void
*)((pRExC_state->precomp))); do { if (( (pRExC_state->copy_start
) && ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->precomp_end) - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
5623 Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP),do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 5627, (pRExC_state->precomp_end
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop
&& !((PL_curcop->cop_warnings) == ((void*)0) || (
PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL ||
(PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((20 )) & 0xFF))+1) / 8)] & (1 << ((2*((((20 )
) & 0xFF))+1) % 8)))) || (((((20 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) || (((((20
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>16) & 0xFF
))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Quantifier unexpected on zero-length expression "
"in regex m/%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
pRExC_state->precomp_end) - (pRExC_state->precomp)), (void
*)((pRExC_state->precomp))); do { if (( (pRExC_state->copy_start
) && ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->precomp_end) - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
5624 "Quantifier unexpected on zero-length expression "do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 5627, (pRExC_state->precomp_end
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop
&& !((PL_curcop->cop_warnings) == ((void*)0) || (
PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL ||
(PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((20 )) & 0xFF))+1) / 8)] & (1 << ((2*((((20 )
) & 0xFF))+1) % 8)))) || (((((20 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) || (((((20
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>16) & 0xFF
))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Quantifier unexpected on zero-length expression "
"in regex m/%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
pRExC_state->precomp_end) - (pRExC_state->precomp)), (void
*)((pRExC_state->precomp))); do { if (( (pRExC_state->copy_start
) && ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->precomp_end) - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
5625 "in regex m/%" UTF8f "/",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 5627, (pRExC_state->precomp_end
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop
&& !((PL_curcop->cop_warnings) == ((void*)0) || (
PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL ||
(PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((20 )) & 0xFF))+1) / 8)] & (1 << ((2*((((20 )
) & 0xFF))+1) % 8)))) || (((((20 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) || (((((20
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>16) & 0xFF
))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Quantifier unexpected on zero-length expression "
"in regex m/%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
pRExC_state->precomp_end) - (pRExC_state->precomp)), (void
*)((pRExC_state->precomp))); do { if (( (pRExC_state->copy_start
) && ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->precomp_end) - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
5626 UTF8fARG(UTF, RExC_precomp_end - RExC_precomp,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 5627, (pRExC_state->precomp_end
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop
&& !((PL_curcop->cop_warnings) == ((void*)0) || (
PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL ||
(PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((20 )) & 0xFF))+1) / 8)] & (1 << ((2*((((20 )
) & 0xFF))+1) % 8)))) || (((((20 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) || (((((20
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>16) & 0xFF
))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Quantifier unexpected on zero-length expression "
"in regex m/%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
pRExC_state->precomp_end) - (pRExC_state->precomp)), (void
*)((pRExC_state->precomp))); do { if (( (pRExC_state->copy_start
) && ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->precomp_end) - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
5627 RExC_precomp)))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 5627, (pRExC_state->precomp_end
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop
&& !((PL_curcop->cop_warnings) == ((void*)0) || (
PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_ALL ||
(PL_curcop->cop_warnings) == (STRLEN *) &PL_WARN_NONE
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
((((20 )) & 0xFF))+1) / 8)] & (1 << ((2*((((20 )
) & 0xFF))+1) % 8)))) || (((((20 )) >>8) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>8) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) || (((((20
)) >>16) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>16) & 0xFF
))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Quantifier unexpected on zero-length expression "
"in regex m/%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
pRExC_state->precomp_end) - (pRExC_state->precomp)), (void
*)((pRExC_state->precomp))); do { if (( (pRExC_state->copy_start
) && ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->precomp_end) - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->precomp_end) - (
pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + ((pRExC_state->
precomp_end) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
5628 }
5629
5630 if ( ( minnext > 0 && mincount >= SSize_t_MAX(ssize_t)(~(size_t)0 >> 1) / minnext )
5631 || min >= SSize_t_MAX(ssize_t)(~(size_t)0 >> 1) - minnext * mincount )
5632 {
5633 FAIL("Regexp out of space")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Regexp out of space"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
5634 }
5635
5636 min += minnext * mincount;
5637 is_inf_internal |= deltanext == OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
5638 || (maxcount == REG_INFTY0xffff && minnext + deltanext > 0);
5639 is_inf |= is_inf_internal;
5640 if (is_inf) {
5641 delta = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
5642 } else {
5643 delta += (minnext + deltanext) * maxcount
5644 - minnext * mincount;
5645 }
5646 /* Try powerful optimization CURLYX => CURLYN. */
5647 if ( OP(oscan)((oscan)->type) == CURLYX61 && data
5648 && data->flags & SF_IN_PAR0x0100
5649 && !(data->flags & SF_HAS_EVAL0x0200)
5650 && !deltanext && minnext == 1
5651 && mutate_ok
5652 ) {
5653 /* Try to optimize to CURLYN. */
5654 regnode *nxt = NEXTOPER(oscan)((oscan) + 1) + EXTRA_STEP_2ARGS((sizeof(struct regnode_2)-1)/sizeof(struct regnode));
5655 regnode * const nxt1 = nxt;
5656#ifdef DEBUGGING
5657 regnode *nxt2;
5658#endif
5659
5660 /* Skip open. */
5661 nxt = regnext(nxt)Perl_regnext( nxt);
5662 if (!REGNODE_SIMPLE(OP(nxt))(PL_simple_bitmask[(((nxt)->type)) >> 3] & (1 <<
((((nxt)->type)) & 7)))
5663 && !(PL_regkind[OP(nxt)((nxt)->type)] == EXACT40
5664 && STR_LEN(nxt)((((nxt)->type) == 41 || ((nxt)->type) == 51) ? (((((nxt
)->type) == 41 || ((nxt)->type) == 51) ? (void)0 : __assert2
("re_comp.c", 5664, __func__, "((nxt)->type) == 41 || ((nxt)->type) == 51"
)), (((struct regnode_lstring *)nxt)->str_len)) : (((((nxt
)->type) != 41 && ((nxt)->type) != 51) ? (void)
0 : __assert2("re_comp.c", 5664, __func__, "((nxt)->type) != 41 && ((nxt)->type) != 51"
)), ((struct regnode_string *)nxt)->str_len))
== 1))
5665 goto nogo;
5666#ifdef DEBUGGING
5667 nxt2 = nxt;
5668#endif
5669 nxt = regnext(nxt)Perl_regnext( nxt);
5670 if (OP(nxt)((nxt)->type) != CLOSE64)
5671 goto nogo;
5672 if (RExC_open_parens(pRExC_state->open_parens)) {
5673
5674 /*open->CURLYM*/
5675 RExC_open_parens(pRExC_state->open_parens)[ARG(nxt1)((((struct regnode_1 *)nxt1)->arg1))] = REGNODE_OFFSET(oscan)((oscan) - (pRExC_state->emit_start));
5676
5677 /*close->while*/
5678 RExC_close_parens(pRExC_state->close_parens)[ARG(nxt1)((((struct regnode_1 *)nxt1)->arg1))] = REGNODE_OFFSET(nxt)((nxt) - (pRExC_state->emit_start)) + 2;
5679 }
5680 /* Now we know that nxt2 is the only contents: */
5681 oscan->flags = (U8)ARG(nxt)((((struct regnode_1 *)nxt)->arg1));
5682 OP(oscan)((oscan)->type) = CURLYN59;
5683 OP(nxt1)((nxt1)->type) = NOTHING54; /* was OPEN. */
5684
5685#ifdef DEBUGGING
5686 OP(nxt1 + 1)((nxt1 + 1)->type) = OPTIMIZED107; /* was count. */
5687 NEXT_OFF(nxt1+ 1)((nxt1+ 1)->next_off) = 0; /* just for consistency. */
5688 NEXT_OFF(nxt2)((nxt2)->next_off) = 0; /* just for consistency with CURLY. */
5689 OP(nxt)((nxt)->type) = OPTIMIZED107; /* was CLOSE. */
5690 OP(nxt + 1)((nxt + 1)->type) = OPTIMIZED107; /* was count. */
5691 NEXT_OFF(nxt+ 1)((nxt+ 1)->next_off) = 0; /* just for consistency. */
5692#endif
5693 }
5694 nogo:
5695
5696 /* Try optimization CURLYX => CURLYM. */
5697 if ( OP(oscan)((oscan)->type) == CURLYX61 && data
5698 && !(data->flags & SF_HAS_PAR0x0080)
5699 && !(data->flags & SF_HAS_EVAL0x0200)
5700 && !deltanext /* atom is fixed width */
5701 && minnext != 0 /* CURLYM can't handle zero width */
5702 /* Nor characters whose fold at run-time may be
5703 * multi-character */
5704 && ! (RExC_seen(pRExC_state->seen) & REG_UNFOLDED_MULTI_SEEN0x00000400)
5705 && mutate_ok
5706 ) {
5707 /* XXXX How to optimize if data == 0? */
5708 /* Optimize to a simpler form. */
5709 regnode *nxt = NEXTOPER(oscan)((oscan) + 1) + EXTRA_STEP_2ARGS((sizeof(struct regnode_2)-1)/sizeof(struct regnode)); /* OPEN */
5710 regnode *nxt2;
5711
5712 OP(oscan)((oscan)->type) = CURLYM60;
5713 while ( (nxt2 = regnext(nxt)Perl_regnext( nxt)) /* skip over embedded stuff*/
5714 && (OP(nxt2)((nxt2)->type) != WHILEM62))
5715 nxt = nxt2;
5716 OP(nxt2)((nxt2)->type) = SUCCEED1; /* Whas WHILEM */
5717 /* Need to optimize away parenths. */
5718 if ((data->flags & SF_IN_PAR0x0100) && OP(nxt)((nxt)->type) == CLOSE64) {
5719 /* Set the parenth number. */
5720 regnode *nxt1 = NEXTOPER(oscan)((oscan) + 1) + EXTRA_STEP_2ARGS((sizeof(struct regnode_2)-1)/sizeof(struct regnode)); /* OPEN*/
5721
5722 oscan->flags = (U8)ARG(nxt)((((struct regnode_1 *)nxt)->arg1));
5723 if (RExC_open_parens(pRExC_state->open_parens)) {
5724 /*open->CURLYM*/
5725 RExC_open_parens(pRExC_state->open_parens)[ARG(nxt1)((((struct regnode_1 *)nxt1)->arg1))] = REGNODE_OFFSET(oscan)((oscan) - (pRExC_state->emit_start));
5726
5727 /*close->NOTHING*/
5728 RExC_close_parens(pRExC_state->close_parens)[ARG(nxt1)((((struct regnode_1 *)nxt1)->arg1))] = REGNODE_OFFSET(nxt2)((nxt2) - (pRExC_state->emit_start))
5729 + 1;
5730 }
5731 OP(nxt1)((nxt1)->type) = OPTIMIZED107; /* was OPEN. */
5732 OP(nxt)((nxt)->type) = OPTIMIZED107; /* was CLOSE. */
5733
5734#ifdef DEBUGGING
5735 OP(nxt1 + 1)((nxt1 + 1)->type) = OPTIMIZED107; /* was count. */
5736 OP(nxt + 1)((nxt + 1)->type) = OPTIMIZED107; /* was count. */
5737 NEXT_OFF(nxt1 + 1)((nxt1 + 1)->next_off) = 0; /* just for consistency. */
5738 NEXT_OFF(nxt + 1)((nxt + 1)->next_off) = 0; /* just for consistency. */
5739#endif
5740#if 0
5741 while ( nxt1 && (OP(nxt1)((nxt1)->type) != WHILEM62)) {
5742 regnode *nnxt = regnext(nxt1)Perl_regnext( nxt1);
5743 if (nnxt == nxt) {
5744 if (reg_off_by_arg[OP(nxt1)((nxt1)->type)])
5745 ARG_SET(nxt1, nxt2 - nxt1)(((((struct regnode_1 *)nxt1)->arg1)) = ((nxt2 - nxt1)));
5746 else if (nxt2 - nxt1 < U16_MAX0xffff)
5747 NEXT_OFF(nxt1)((nxt1)->next_off) = nxt2 - nxt1;
5748 else
5749 OP(nxt)((nxt)->type) = NOTHING54; /* Cannot beautify */
5750 }
5751 nxt1 = nnxt;
5752 }
5753#endif
5754 /* Optimize again: */
5755 /* recurse study_chunk() on optimised CURLYX => CURLYM */
5756 study_chunk(pRExC_state, &nxt1, minlenp, &deltanext, nxt,S_study_chunk( pRExC_state,&nxt1,minlenp,&deltanext,nxt
,((void*)0),stopparen,recursed_depth,((void*)0),0,depth+1,mutate_ok
)
5757 NULL, stopparen, recursed_depth, NULL, 0,S_study_chunk( pRExC_state,&nxt1,minlenp,&deltanext,nxt
,((void*)0),stopparen,recursed_depth,((void*)0),0,depth+1,mutate_ok
)
5758 depth+1, mutate_ok)S_study_chunk( pRExC_state,&nxt1,minlenp,&deltanext,nxt
,((void*)0),stopparen,recursed_depth,((void*)0),0,depth+1,mutate_ok
)
;
5759 }
5760 else
5761 oscan->flags = 0;
5762 }
5763 else if ((OP(oscan)((oscan)->type) == CURLYX61)
5764 && (flags & SCF_WHILEM_VISITED_POS0x2000)
5765 /* See the comment on a similar expression above.
5766 However, this time it's not a subexpression
5767 we care about, but the expression itself. */
5768 && (maxcount == REG_INFTY0xffff)
5769 && data) {
5770 /* This stays as CURLYX, we can put the count/of pair. */
5771 /* Find WHILEM (as in regexec.c) */
5772 regnode *nxt = oscan + NEXT_OFF(oscan)((oscan)->next_off);
5773
5774 if (OP(PREVOPER(nxt))((((nxt) - 1))->type) == NOTHING54) /* LONGJMP */
5775 nxt += ARG(nxt)((((struct regnode_1 *)nxt)->arg1));
5776 nxt = PREVOPER(nxt)((nxt) - 1);
5777 if (nxt->flags & 0xf) {
5778 /* we've already set whilem count on this node */
5779 } else if (++data->whilem_c < 16) {
5780 assert(data->whilem_c <= RExC_whilem_seen)((data->whilem_c <= (pRExC_state->whilem_seen)) ? (void
)0 : __assert2("re_comp.c", 5780, __func__, "data->whilem_c <= RExC_whilem_seen"
))
;
5781 nxt->flags = (U8)(data->whilem_c
5782 | (RExC_whilem_seen(pRExC_state->whilem_seen) << 4)); /* On WHILEM */
5783 }
5784 }
5785 if (data && fl & (SF_HAS_PAR0x0080|SF_IN_PAR0x0100))
5786 pars++;
5787 if (flags & SCF_DO_SUBSTR0x0400) {
5788 SV *last_str = NULL((void*)0);
5789 STRLEN last_chrs = 0;
5790 int counted = mincount != 0;
5791
5792 if (data->last_end > 0 && mincount != 0) { /* Ends with a
5793 string. */
5794 SSize_tssize_t b = pos_before >= data->last_start_min
5795 ? pos_before : data->last_start_min;
5796 STRLEN l;
5797 const char * const s = SvPV_const(data->last_found, l)((((data->last_found)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((l = (*({ const SV *const _svcur = (const
SV *)(data->last_found); ((PL_valid_types_PVX[((svtype)((
_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 5797, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 5797, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5797, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))), ((const char*)(0 + (data->last_found
)->sv_u.svu_pv))) : (const char*) Perl_sv_2pv_flags( data->
last_found,&l,(2|32)))
;
5798 SSize_tssize_t old = b - data->last_start_min;
5799 assert(old >= 0)((old >= 0) ? (void)0 : __assert2("re_comp.c", 5799, __func__
, "old >= 0"))
;
5800
5801 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
5802 old = utf8_hop_forwardPerl_utf8_hop_forward((U8*)s, old,
5803 (U8 *) SvEND(data->last_found)((data->last_found)->sv_u.svu_pv + ((XPV*)(data->last_found
)->sv_any)->xpv_cur)
)
5804 - (U8*)s;
5805 l -= old;
5806 /* Get the added string: */
5807 last_str = newSVpvn_utf8(s + old, l, UTF)Perl_newSVpvn_flags( (s + old),(l),((((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0)) ? 0x20000000 : 0)
;
5808 last_chrs = UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? utf8_length((U8*)(s + old),Perl_utf8_length( (U8*)(s + old),(U8*)(s + old + l))
5809 (U8*)(s + old + l))Perl_utf8_length( (U8*)(s + old),(U8*)(s + old + l)) : l;
5810 if (deltanext == 0 && pos_before == b) {
5811 /* What was added is a constant string */
5812 if (mincount > 1) {
5813
5814 SvGROW(last_str, (mincount * l) + 1)(((last_str)->sv_flags & 0x10000000) || ((XPV*) (last_str
)->sv_any)->xpv_len_u.xpvlenu_len < ((mincount * l) +
1) ? Perl_sv_grow( last_str,(mincount * l) + 1) : (*({ SV *const
_svpvx = ((SV *)({ void *_p = (last_str); _p; })); ((PL_valid_types_PVX
[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 5814, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 5814, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5814, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))
;
5815 repeatcpyPerl_repeatcpy(SvPVX(last_str)(*({ SV *const _svpvx = ((SV *)({ void *_p = (last_str); _p; }
)); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 5815,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 5815, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5815, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
+ l,
5816 SvPVX_const(last_str)((const char*)(0 + (last_str)->sv_u.svu_pv)), l,
5817 mincount - 1);
5818 SvCUR_set(last_str, SvCUR(last_str) * mincount)do { ((PL_valid_types_PVX[((svtype)((last_str)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 5818,
__func__, "PL_valid_types_PVX[SvTYPE(last_str) & SVt_MASK]"
)); ((!((((last_str)->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)((last_str)->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)((last_str)->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 5818, __func__, "!isGV_with_GP(last_str)")); ((!(((svtype)(
(last_str)->sv_flags & 0xff)) == SVt_PVIO && !
(((XPVIO*) (last_str)->sv_any)->xio_flags & 64))) ?
(void)0 : __assert2("re_comp.c", 5818, __func__, "!(SvTYPE(last_str) == SVt_PVIO && !(IoFLAGS(last_str) & IOf_FAKE_DIRP))"
)); (((XPV*) (last_str)->sv_any)->xpv_cur = ((*({ const
SV *const _svcur = (const SV *)(last_str); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 5818, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 5818, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5818, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) * mincount)); } while (0)
;
5819 /* Add additional parts. */
5820 SvCUR_set(data->last_found,do { ((PL_valid_types_PVX[((svtype)((data->last_found)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 5821, __func__, "PL_valid_types_PVX[SvTYPE(data->last_found) & SVt_MASK]"
)); ((!((((data->last_found)->sv_flags & (0x00004000
|0x00008000)) == 0x00008000) && (((svtype)((data->
last_found)->sv_flags & 0xff)) == SVt_PVGV || ((svtype
)((data->last_found)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 5821, __func__, "!isGV_with_GP(data->last_found)"
)); ((!(((svtype)((data->last_found)->sv_flags & 0xff
)) == SVt_PVIO && !(((XPVIO*) (data->last_found)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5821, __func__, "!(SvTYPE(data->last_found) == SVt_PVIO && !(IoFLAGS(data->last_found) & IOf_FAKE_DIRP))"
)); (((XPV*) (data->last_found)->sv_any)->xpv_cur = (
(*({ const SV *const _svcur = (const SV *)(data->last_found
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 5821,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 5821, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5821, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) - l)); } while (0)
5821 SvCUR(data->last_found) - l)do { ((PL_valid_types_PVX[((svtype)((data->last_found)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 5821, __func__, "PL_valid_types_PVX[SvTYPE(data->last_found) & SVt_MASK]"
)); ((!((((data->last_found)->sv_flags & (0x00004000
|0x00008000)) == 0x00008000) && (((svtype)((data->
last_found)->sv_flags & 0xff)) == SVt_PVGV || ((svtype
)((data->last_found)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 5821, __func__, "!isGV_with_GP(data->last_found)"
)); ((!(((svtype)((data->last_found)->sv_flags & 0xff
)) == SVt_PVIO && !(((XPVIO*) (data->last_found)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5821, __func__, "!(SvTYPE(data->last_found) == SVt_PVIO && !(IoFLAGS(data->last_found) & IOf_FAKE_DIRP))"
)); (((XPV*) (data->last_found)->sv_any)->xpv_cur = (
(*({ const SV *const _svcur = (const SV *)(data->last_found
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 5821,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 5821, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 5821, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) - l)); } while (0)
;
5822 sv_catsv(data->last_found, last_str)Perl_sv_catsv_flags( data->last_found,last_str,2);
5823 {
5824 SV * sv = data->last_found;
5825 MAGIC *mg =
5826 SvUTF8(sv)((sv)->sv_flags & 0x20000000) && SvMAGICAL(sv)((sv)->sv_flags & (0x00200000|0x00400000|0x00800000)) ?
5827 mg_findPerl_mg_find(sv, PERL_MAGIC_utf8'w') : NULL((void*)0);
5828 if (mg && mg->mg_len >= 0)
5829 mg->mg_len += last_chrs * (mincount-1);
5830 }
5831 last_chrs *= mincount;
5832 data->last_end += l * (mincount - 1);
5833 }
5834 } else {
5835 /* start offset must point into the last copy */
5836 data->last_start_min += minnext * (mincount - 1);
5837 data->last_start_max =
5838 is_inf
5839 ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
5840 : data->last_start_max +
5841 (maxcount - 1) * (minnext + data->pos_delta);
5842 }
5843 }
5844 /* It is counted once already... */
5845 data->pos_min += minnext * (mincount - counted);
5846#if 0
5847Perl_re_printf( aTHX_ "counted=%" UVuf"lu" " deltanext=%" UVuf"lu"
5848 " OPTIMIZE_INFTY=%" UVuf"lu" " minnext=%" UVuf"lu"
5849 " maxcount=%" UVuf"lu" " mincount=%" UVuf"lu" "\n",
5850 (UV)counted, (UV)deltanext, (UV)OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1), (UV)minnext, (UV)maxcount,
5851 (UV)mincount);
5852if (deltanext != OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1))
5853Perl_re_printf( aTHX_ "LHS=%" UVuf"lu" " RHS=%" UVuf"lu" "\n",
5854 (UV)(-counted * deltanext + (minnext + deltanext) * maxcount
5855 - minnext * mincount), (UV)(OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - data->pos_delta));
5856#endif
5857 if (deltanext == OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
5858 || -counted * deltanext + (minnext + deltanext) * maxcount - minnext * mincount >= OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - data->pos_delta)
5859 data->pos_delta = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
5860 else
5861 data->pos_delta += - counted * deltanext +
5862 (minnext + deltanext) * maxcount - minnext * mincount;
5863 if (mincount != maxcount) {
5864 /* Cannot extend fixed substrings found inside
5865 the group. */
5866 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5867 if (mincount && last_str) {
5868 SV * const sv = data->last_found;
5869 MAGIC * const mg = SvUTF8(sv)((sv)->sv_flags & 0x20000000) && SvMAGICAL(sv)((sv)->sv_flags & (0x00200000|0x00400000|0x00800000)) ?
5870 mg_findPerl_mg_find(sv, PERL_MAGIC_utf8'w') : NULL((void*)0);
5871
5872 if (mg)
5873 mg->mg_len = -1;
5874 sv_setsv(sv, last_str)Perl_sv_setsv_flags( sv,last_str,2|0);
5875 data->last_end = data->pos_min;
5876 data->last_start_min = data->pos_min - last_chrs;
5877 data->last_start_max = is_inf
5878 ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)
5879 : data->pos_min + data->pos_delta - last_chrs;
5880 }
5881 data->cur_is_floating = 1; /* float */
5882 }
5883 SvREFCNT_dec(last_str)Perl_SvREFCNT_dec( ((SV *)({ void *_p = (last_str); _p; })));
5884 }
5885 if (data && (fl & SF_HAS_EVAL0x0200))
5886 data->flags |= SF_HAS_EVAL0x0200;
5887 optimize_curly_tail:
5888 rck_elide_nothing(oscan)S_rck_elide_nothing( oscan);
5889 continue;
5890
5891 default:
5892 Perl_croak(aTHX_ "panic: unexpected varying REx opcode %d",
5893 OP(scan)((scan)->type));
5894 case REF67:
5895 case CLUMP38:
5896 if (flags & SCF_DO_SUBSTR0x0400) {
5897 /* Cannot expect anything... */
5898 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5899 data->cur_is_floating = 1; /* float */
5900 }
5901 is_inf = is_inf_internal = 1;
5902 if (flags & SCF_DO_STCLASS_OR0x1000) {
5903 if (OP(scan)((scan)->type) == CLUMP38) {
5904 /* Actually is any start char, but very few code points
5905 * aren't start characters */
5906 ssc_match_all_cp(data->start_class)S_ssc_add_range( data->start_class,0,(~(UV)0));
5907 }
5908 else {
5909 ssc_anything(data->start_class)S_ssc_anything( data->start_class);
5910 }
5911 }
5912 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
5913 break;
5914 }
5915 }
5916 else if (OP(scan)((scan)->type) == LNBREAK106) {
5917 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
5918 if (flags & SCF_DO_STCLASS_AND0x0800) {
5919 ssc_intersection(data->start_class,S_ssc_intersection( data->start_class,PL_XPosix_ptrs[15],(
0))
5920 PL_XPosix_ptrs[_CC_VERTSPACE], FALSE)S_ssc_intersection( data->start_class,PL_XPosix_ptrs[15],(
0))
;
5921 ssc_clear_localeS_ssc_clear_locale(data->start_class);
5922 ANYOF_FLAGS(data->start_class)((data->start_class)->flags)
5923 &= ~SSC_MATCHES_EMPTY_STRING0x01;
5924 }
5925 else if (flags & SCF_DO_STCLASS_OR0x1000) {
5926 ssc_union(data->start_class,S_ssc_union( data->start_class,PL_XPosix_ptrs[15],(0))
5927 PL_XPosix_ptrs[_CC_VERTSPACE],S_ssc_union( data->start_class,PL_XPosix_ptrs[15],(0))
5928 FALSE)S_ssc_union( data->start_class,PL_XPosix_ptrs[15],(0));
5929 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
5930
5931 /* See commit msg for
5932 * 749e076fceedeb708a624933726e7989f2302f6a */
5933 ANYOF_FLAGS(data->start_class)((data->start_class)->flags)
5934 &= ~SSC_MATCHES_EMPTY_STRING0x01;
5935 }
5936 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
5937 }
5938 min++;
5939 if (delta != OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1))
5940 delta++; /* Because of the 2 char string cr-lf */
5941 if (flags & SCF_DO_SUBSTR0x0400) {
5942 /* Cannot expect anything... */
5943 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5944 data->pos_min += 1;
5945 if (data->pos_delta != OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)) {
5946 data->pos_delta += 1;
5947 }
5948 data->cur_is_floating = 1; /* float */
5949 }
5950 }
5951 else if (REGNODE_SIMPLE(OP(scan))(PL_simple_bitmask[(((scan)->type)) >> 3] & (1 <<
((((scan)->type)) & 7)))
) {
5952
5953 if (flags & SCF_DO_SUBSTR0x0400) {
5954 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
5955 data->pos_min++;
5956 }
5957 min++;
5958 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
5959 bool_Bool invert = 0;
5960 SV* my_invlist = NULL((void*)0);
5961 U8 namedclass;
5962
5963 /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
5964 ANYOF_FLAGS(data->start_class)((data->start_class)->flags) &= ~SSC_MATCHES_EMPTY_STRING0x01;
5965
5966 /* Some of the logic below assumes that switching
5967 locale on will only add false positives. */
5968 switch (OP(scan)((scan)->type)) {
5969
5970 default:
5971#ifdef DEBUGGING
5972 Perl_croak(aTHX_ "panic: unexpected simple REx opcode %d",
5973 OP(scan)((scan)->type));
5974#endif
5975 case SANY17:
5976 if (flags & SCF_DO_STCLASS_OR0x1000) /* Allow everything */
5977 ssc_match_all_cp(data->start_class)S_ssc_add_range( data->start_class,0,(~(UV)0));
5978 break;
5979
5980 case REG_ANY16:
5981 {
5982 SV* REG_ANY_invlist = _new_invlist(2)Perl__new_invlist( 2);
5983 REG_ANY_invlist = add_cp_to_invlist(REG_ANY_invlist,S_add_cp_to_invlist( REG_ANY_invlist,'\n')
5984 '\n')S_add_cp_to_invlist( REG_ANY_invlist,'\n');
5985 if (flags & SCF_DO_STCLASS_OR0x1000) {
5986 ssc_union(data->start_class,S_ssc_union( data->start_class,REG_ANY_invlist,(1))
5987 REG_ANY_invlist,S_ssc_union( data->start_class,REG_ANY_invlist,(1))
5988 TRUE /* TRUE => invert, hence all but \nS_ssc_union( data->start_class,REG_ANY_invlist,(1))
5989 */S_ssc_union( data->start_class,REG_ANY_invlist,(1))
5990 )S_ssc_union( data->start_class,REG_ANY_invlist,(1));
5991 }
5992 else if (flags & SCF_DO_STCLASS_AND0x0800) {
5993 ssc_intersection(data->start_class,S_ssc_intersection( data->start_class,REG_ANY_invlist,(1))
5994 REG_ANY_invlist,S_ssc_intersection( data->start_class,REG_ANY_invlist,(1))
5995 TRUE /* TRUE => invert */S_ssc_intersection( data->start_class,REG_ANY_invlist,(1))
5996 )S_ssc_intersection( data->start_class,REG_ANY_invlist,(1));
5997 ssc_clear_localeS_ssc_clear_locale(data->start_class);
5998 }
5999 SvREFCNT_dec_NN(REG_ANY_invlist)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (REG_ANY_invlist);
_p; })))
;
6000 }
6001 break;
6002
6003 case ANYOFD19:
6004 case ANYOFL20:
6005 case ANYOFPOSIXL21:
6006 case ANYOFH22:
6007 case ANYOFHb23:
6008 case ANYOFHr24:
6009 case ANYOFHs25:
6010 case ANYOF18:
6011 if (flags & SCF_DO_STCLASS_AND0x0800)
6012 ssc_and(pRExC_state, data->start_class,S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) scan)
6013 (regnode_charclass *) scan)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) scan)
;
6014 else
6015 ssc_or(pRExC_state, data->start_class,S_ssc_or( pRExC_state,data->start_class,(regnode_charclass
*) scan)
6016 (regnode_charclass *) scan)S_ssc_or( pRExC_state,data->start_class,(regnode_charclass
*) scan)
;
6017 break;
6018
6019 case NANYOFM29: /* NANYOFM already contains the inversion of the
6020 input ANYOF data, so, unlike things like
6021 NPOSIXA, don't change 'invert' to TRUE */
6022 /* FALLTHROUGH */
6023 case ANYOFM28:
6024 {
6025 SV* cp_list = get_ANYOFM_contents(scan)S_get_ANYOFM_contents( scan);
6026
6027 if (flags & SCF_DO_STCLASS_OR0x1000) {
6028 ssc_union(data->start_class, cp_list, invert)S_ssc_union( data->start_class,cp_list,invert);
6029 }
6030 else if (flags & SCF_DO_STCLASS_AND0x0800) {
6031 ssc_intersection(data->start_class, cp_list, invert)S_ssc_intersection( data->start_class,cp_list,invert);
6032 }
6033
6034 SvREFCNT_dec_NN(cp_list)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (cp_list); _p; }))
)
;
6035 break;
6036 }
6037
6038 case ANYOFR26:
6039 case ANYOFRb27:
6040 {
6041 SV* cp_list = NULL((void*)0);
6042
6043 cp_list = _add_range_to_invlist(cp_list,Perl__add_range_to_invlist( cp_list,(((((struct regnode_1 *)scan
)->arg1)) & ((1 << 20) - 1)),(((((struct regnode_1
*)scan)->arg1)) & ((1 << 20) - 1)) + (((((struct
regnode_1 *)scan)->arg1)) >> 20))
6044 ANYOFRbase(scan),Perl__add_range_to_invlist( cp_list,(((((struct regnode_1 *)scan
)->arg1)) & ((1 << 20) - 1)),(((((struct regnode_1
*)scan)->arg1)) & ((1 << 20) - 1)) + (((((struct
regnode_1 *)scan)->arg1)) >> 20))
6045 ANYOFRbase(scan) + ANYOFRdelta(scan))Perl__add_range_to_invlist( cp_list,(((((struct regnode_1 *)scan
)->arg1)) & ((1 << 20) - 1)),(((((struct regnode_1
*)scan)->arg1)) & ((1 << 20) - 1)) + (((((struct
regnode_1 *)scan)->arg1)) >> 20))
;
6046
6047 if (flags & SCF_DO_STCLASS_OR0x1000) {
6048 ssc_union(data->start_class, cp_list, invert)S_ssc_union( data->start_class,cp_list,invert);
6049 }
6050 else if (flags & SCF_DO_STCLASS_AND0x0800) {
6051 ssc_intersection(data->start_class, cp_list, invert)S_ssc_intersection( data->start_class,cp_list,invert);
6052 }
6053
6054 SvREFCNT_dec_NN(cp_list)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (cp_list); _p; }))
)
;
6055 break;
6056 }
6057
6058 case NPOSIXL35:
6059 invert = 1;
6060 /* FALLTHROUGH */
6061
6062 case POSIXL31:
6063 namedclass = classnum_to_namedclass(FLAGS(scan))((((scan)->flags)) * 2) + invert;
6064 if (flags & SCF_DO_STCLASS_AND0x0800) {
6065 bool_Bool was_there = cBOOL(((((((regnode_charclass_posixl*) (data->start_class))->
classflags) & (1U << ((namedclass))))) ? (_Bool)1 :
(_Bool)0)
6066 ANYOF_POSIXL_TEST(data->start_class,((((((regnode_charclass_posixl*) (data->start_class))->
classflags) & (1U << ((namedclass))))) ? (_Bool)1 :
(_Bool)0)
6067 namedclass))((((((regnode_charclass_posixl*) (data->start_class))->
classflags) & (1U << ((namedclass))))) ? (_Bool)1 :
(_Bool)0)
;
6068 ANYOF_POSIXL_ZERO(data->start_class)do { (((regnode_charclass_posixl*) (data->start_class))->
classflags) = 0; } while (0)
;
6069 if (was_there) { /* Do an AND */
6070 ANYOF_POSIXL_SET(data->start_class, namedclass)((((regnode_charclass_posixl*) (data->start_class))->classflags
) |= (1U << ((namedclass))))
;
6071 }
6072 /* No individual code points can now match */
6073 data->start_class->invlist
6074 = sv_2mortal(_new_invlist(0))Perl_sv_2mortal( Perl__new_invlist( 0));
6075 }
6076 else {
6077 int complement = namedclass + ((invert) ? -1 : 1);
6078
6079 assert(flags & SCF_DO_STCLASS_OR)((flags & 0x1000) ? (void)0 : __assert2("re_comp.c", 6079
, __func__, "flags & SCF_DO_STCLASS_OR"))
;
6080
6081 /* If the complement of this class was already there,
6082 * the result is that they match all code points,
6083 * (\d + \D == everything). Remove the classes from
6084 * future consideration. Locale is not relevant in
6085 * this case */
6086 if (ANYOF_POSIXL_TEST(data->start_class, complement)((((regnode_charclass_posixl*) (data->start_class))->classflags
) & (1U << ((complement))))
) {
6087 ssc_match_all_cp(data->start_class)S_ssc_add_range( data->start_class,0,(~(UV)0));
6088 ANYOF_POSIXL_CLEAR(data->start_class, namedclass)((((regnode_charclass_posixl*) (data->start_class))->classflags
) &= ~ (1U <<((namedclass))))
;
6089 ANYOF_POSIXL_CLEAR(data->start_class, complement)((((regnode_charclass_posixl*) (data->start_class))->classflags
) &= ~ (1U <<((complement))))
;
6090 }
6091 else { /* The usual case; just add this class to the
6092 existing set */
6093 ANYOF_POSIXL_SET(data->start_class, namedclass)((((regnode_charclass_posixl*) (data->start_class))->classflags
) |= (1U << ((namedclass))))
;
6094 }
6095 }
6096 break;
6097
6098 case NPOSIXA37: /* For these, we always know the exact set of
6099 what's matched */
6100 invert = 1;
6101 /* FALLTHROUGH */
6102 case POSIXA33:
6103 my_invlist = invlist_clone(PL_Posix_ptrs[FLAGS(scan)], NULL)Perl_invlist_clone( PL_Posix_ptrs[((scan)->flags)],((void*
)0))
;
6104 goto join_posix_and_ascii;
6105
6106 case NPOSIXD34:
6107 case NPOSIXU36:
6108 invert = 1;
6109 /* FALLTHROUGH */
6110 case POSIXD30:
6111 case POSIXU32:
6112 my_invlist = invlist_clone(PL_XPosix_ptrs[FLAGS(scan)], NULL)Perl_invlist_clone( PL_XPosix_ptrs[((scan)->flags)],((void
*)0))
;
6113
6114 /* NPOSIXD matches all upper Latin1 code points unless the
6115 * target string being matched is UTF-8, which is
6116 * unknowable until match time. Since we are going to
6117 * invert, we want to get rid of all of them so that the
6118 * inversion will match all */
6119 if (OP(scan)((scan)->type) == NPOSIXD34) {
6120 _invlist_subtract(my_invlist, PL_UpperLatin1,Perl__invlist_intersection_maybe_complement_2nd( my_invlist,PL_UpperLatin1
,(1),&my_invlist)
6121 &my_invlist)Perl__invlist_intersection_maybe_complement_2nd( my_invlist,PL_UpperLatin1
,(1),&my_invlist)
;
6122 }
6123
6124 join_posix_and_ascii:
6125
6126 if (flags & SCF_DO_STCLASS_AND0x0800) {
6127 ssc_intersection(data->start_class, my_invlist, invert)S_ssc_intersection( data->start_class,my_invlist,invert);
6128 ssc_clear_localeS_ssc_clear_locale(data->start_class);
6129 }
6130 else {
6131 assert(flags & SCF_DO_STCLASS_OR)((flags & 0x1000) ? (void)0 : __assert2("re_comp.c", 6131
, __func__, "flags & SCF_DO_STCLASS_OR"))
;
6132 ssc_union(data->start_class, my_invlist, invert)S_ssc_union( data->start_class,my_invlist,invert);
6133 }
6134 SvREFCNT_dec(my_invlist)Perl_SvREFCNT_dec( ((SV *)({ void *_p = (my_invlist); _p; }))
)
;
6135 }
6136 if (flags & SCF_DO_STCLASS_OR0x1000)
6137 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
6138 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
6139 }
6140 }
6141 else if (PL_regkind[OP(scan)((scan)->type)] == EOL4 && flags & SCF_DO_SUBSTR0x0400) {
6142 data->flags |= (OP(scan)((scan)->type) == MEOL5
6143 ? SF_BEFORE_MEOL0x0002
6144 : SF_BEFORE_SEOL0x0001);
6145 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
6146
6147 }
6148 else if ( PL_regkind[OP(scan)((scan)->type)] == BRANCHJ78
6149 /* Lookbehind, or need to calculate parens/evals/stclass: */
6150 && (scan->flags || data || (flags & SCF_DO_STCLASS(0x0800|0x1000)))
6151 && (OP(scan)((scan)->type) == IFMATCH79 || OP(scan)((scan)->type) == UNLESSM80))
6152 {
6153 if ( !PERL_ENABLE_POSITIVE_ASSERTION_STUDY0
6154 || OP(scan)((scan)->type) == UNLESSM80 )
6155 {
6156 /* Negative Lookahead/lookbehind
6157 In this case we can't do fixed string optimisation.
6158 */
6159
6160 SSize_tssize_t deltanext, minnext, fake = 0;
6161 regnode *nscan;
6162 regnode_ssc intrnl;
6163 int f = 0;
6164
6165 StructCopy(&zero_scan_data, &data_fake, scan_data_t)(*((scan_data_t*)(&data_fake)) = *((scan_data_t*)(&zero_scan_data
)))
;
6166 if (data) {
6167 data_fake.whilem_c = data->whilem_c;
6168 data_fake.last_closep = data->last_closep;
6169 }
6170 else
6171 data_fake.last_closep = &fake;
6172 data_fake.pos_delta = delta;
6173 if ( flags & SCF_DO_STCLASS(0x0800|0x1000) && !scan->flags
6174 && OP(scan)((scan)->type) == IFMATCH79 ) { /* Lookahead */
6175 ssc_init(pRExC_state, &intrnl)S_ssc_init( pRExC_state,&intrnl);
6176 data_fake.start_class = &intrnl;
6177 f |= SCF_DO_STCLASS_AND0x0800;
6178 }
6179 if (flags & SCF_WHILEM_VISITED_POS0x2000)
6180 f |= SCF_WHILEM_VISITED_POS0x2000;
6181 next = regnext(scan)Perl_regnext( scan);
6182 nscan = NEXTOPER(NEXTOPER(scan))((((scan) + 1)) + 1);
6183
6184 /* recurse study_chunk() for lookahead body */
6185 minnext = study_chunk(pRExC_state, &nscan, minlenp, &deltanext,S_study_chunk( pRExC_state,&nscan,minlenp,&deltanext,
last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
6186 last, &data_fake, stopparen,S_study_chunk( pRExC_state,&nscan,minlenp,&deltanext,
last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
6187 recursed_depth, NULL, f, depth+1,S_study_chunk( pRExC_state,&nscan,minlenp,&deltanext,
last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
6188 mutate_ok)S_study_chunk( pRExC_state,&nscan,minlenp,&deltanext,
last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
;
6189 if (scan->flags) {
6190 if ( deltanext < 0
6191 || deltanext > (I32) U8_MAX0xff
6192 || minnext > (I32)U8_MAX0xff
6193 || minnext + deltanext > (I32)U8_MAX0xff)
6194 {
6195 FAIL2("Lookbehind longer than %" UVuf " not implemented",do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "Lookbehind longer than %" "lu" " not implemented"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV)0xff, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(len), (void*)((pRExC_state->precomp)), ellipses); } while
(0)
6196 (UV)U8_MAX)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "Lookbehind longer than %" "lu" " not implemented"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV)0xff, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(len), (void*)((pRExC_state->precomp)), ellipses); } while
(0)
;
6197 }
6198
6199 /* The 'next_off' field has been repurposed to count the
6200 * additional starting positions to try beyond the initial
6201 * one. (This leaves it at 0 for non-variable length
6202 * matches to avoid breakage for those not using this
6203 * extension) */
6204 if (deltanext) {
6205 scan->next_off = deltanext;
6206 ckWARNexperimental(RExC_parse,do { if (! (pRExC_state->sWARN_EXPERIMENTAL__VLB)) { (pRExC_state
->sWARN_EXPERIMENTAL__VLB) = 1; do { if (! (pRExC_state->
copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 6208, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((72 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((72 )) & 0xFF))+1) %
8)))) || (((((72 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((72 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((72 )) >>
8) & 0xFF))+1) % 8)))) || (((((72 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((72 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((72 )) >>16) & 0xFF))+1) % 8)))) || (((((72
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((72 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((72 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (72 ), "Variable length lookbehind is experimental" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 6208, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0); } } while (0)
6207 WARN_EXPERIMENTAL__VLB,do { if (! (pRExC_state->sWARN_EXPERIMENTAL__VLB)) { (pRExC_state
->sWARN_EXPERIMENTAL__VLB) = 1; do { if (! (pRExC_state->
copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 6208, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((72 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((72 )) & 0xFF))+1) %
8)))) || (((((72 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((72 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((72 )) >>
8) & 0xFF))+1) % 8)))) || (((((72 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((72 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((72 )) >>16) & 0xFF))+1) % 8)))) || (((((72
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((72 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((72 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (72 ), "Variable length lookbehind is experimental" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 6208, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0); } } while (0)
6208 "Variable length lookbehind is experimental")do { if (! (pRExC_state->sWARN_EXPERIMENTAL__VLB)) { (pRExC_state
->sWARN_EXPERIMENTAL__VLB) = 1; do { if (! (pRExC_state->
copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 6208, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((72 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((72 )) & 0xFF))+1) %
8)))) || (((((72 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((72 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((72 )) >>
8) & 0xFF))+1) % 8)))) || (((((72 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((72 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((72 )) >>16) & 0xFF))+1) % 8)))) || (((((72
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((72 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((72 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner_d
( (72 ), "Variable length lookbehind is experimental" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 6208, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0); } } while (0)
;
6209 }
6210 scan->flags = (U8)minnext + deltanext;
6211 }
6212 if (data) {
6213 if (data_fake.flags & (SF_HAS_PAR0x0080|SF_IN_PAR0x0100))
6214 pars++;
6215 if (data_fake.flags & SF_HAS_EVAL0x0200)
6216 data->flags |= SF_HAS_EVAL0x0200;
6217 data->whilem_c = data_fake.whilem_c;
6218 }
6219 if (f & SCF_DO_STCLASS_AND0x0800) {
6220 if (flags & SCF_DO_STCLASS_OR0x1000) {
6221 /* OR before, AND after: ideally we would recurse with
6222 * data_fake to get the AND applied by study of the
6223 * remainder of the pattern, and then derecurse;
6224 * *** HACK *** for now just treat as "no information".
6225 * See [perl #56690].
6226 */
6227 ssc_init(pRExC_state, data->start_class)S_ssc_init( pRExC_state,data->start_class);
6228 } else {
6229 /* AND before and after: combine and continue. These
6230 * assertions are zero-length, so can match an EMPTY
6231 * string */
6232 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &intrnl)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) &intrnl)
;
6233 ANYOF_FLAGS(data->start_class)((data->start_class)->flags)
6234 |= SSC_MATCHES_EMPTY_STRING0x01;
6235 }
6236 }
6237 }
6238#if PERL_ENABLE_POSITIVE_ASSERTION_STUDY0
6239 else {
6240 /* Positive Lookahead/lookbehind
6241 In this case we can do fixed string optimisation,
6242 but we must be careful about it. Note in the case of
6243 lookbehind the positions will be offset by the minimum
6244 length of the pattern, something we won't know about
6245 until after the recurse.
6246 */
6247 SSize_tssize_t deltanext, fake = 0;
6248 regnode *nscan;
6249 regnode_ssc intrnl;
6250 int f = 0;
6251 /* We use SAVEFREEPV so that when the full compile
6252 is finished perl will clean up the allocated
6253 minlens when it's all done. This way we don't
6254 have to worry about freeing them when we know
6255 they wont be used, which would be a pain.
6256 */
6257 SSize_tssize_t *minnextp;
6258 Newx( minnextp, 1, SSize_t )(minnextp = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(1) || sizeof(ssize_t) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof(ssize_t
)) > ((size_t)-1)/sizeof(ssize_t))) ? (_Bool)1 : (_Bool)0)
,(0)) && (Perl_croak_memory_wrap(),0)), (ssize_t*)(Perl_safesysmalloc
((size_t)((1)*sizeof(ssize_t))))))
;
6259 SAVEFREEPV(minnextp)Perl_save_pushptr( (void *)((char*)(minnextp)),10);
6260
6261 if (data) {
6262 StructCopy(data, &data_fake, scan_data_t)(*((scan_data_t*)(&data_fake)) = *((scan_data_t*)(data)));
6263 if ((flags & SCF_DO_SUBSTR0x0400) && data->last_found) {
6264 f |= SCF_DO_SUBSTR0x0400;
6265 if (scan->flags)
6266 scan_commit(pRExC_state, &data_fake, minlenp, is_inf)S_scan_commit( pRExC_state,&data_fake,minlenp,is_inf);
6267 data_fake.last_found=newSVsv(data->last_found)Perl_newSVsv_flags( (data->last_found),2|16);
6268 }
6269 }
6270 else
6271 data_fake.last_closep = &fake;
6272 data_fake.flags = 0;
6273 data_fake.substrs[0].flags = 0;
6274 data_fake.substrs[1].flags = 0;
6275 data_fake.pos_delta = delta;
6276 if (is_inf)
6277 data_fake.flags |= SF_IS_INF0x0040;
6278 if ( flags & SCF_DO_STCLASS(0x0800|0x1000) && !scan->flags
6279 && OP(scan)((scan)->type) == IFMATCH79 ) { /* Lookahead */
6280 ssc_init(pRExC_state, &intrnl)S_ssc_init( pRExC_state,&intrnl);
6281 data_fake.start_class = &intrnl;
6282 f |= SCF_DO_STCLASS_AND0x0800;
6283 }
6284 if (flags & SCF_WHILEM_VISITED_POS0x2000)
6285 f |= SCF_WHILEM_VISITED_POS0x2000;
6286 next = regnext(scan)Perl_regnext( scan);
6287 nscan = NEXTOPER(NEXTOPER(scan))((((scan) + 1)) + 1);
6288
6289 /* positive lookahead study_chunk() recursion */
6290 *minnextp = study_chunk(pRExC_state, &nscan, minnextp,S_study_chunk( pRExC_state,&nscan,minnextp,&deltanext
,last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
6291 &deltanext, last, &data_fake,S_study_chunk( pRExC_state,&nscan,minnextp,&deltanext
,last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
6292 stopparen, recursed_depth, NULL,S_study_chunk( pRExC_state,&nscan,minnextp,&deltanext
,last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
6293 f, depth+1, mutate_ok)S_study_chunk( pRExC_state,&nscan,minnextp,&deltanext
,last,&data_fake,stopparen,recursed_depth,((void*)0),f,depth
+1,mutate_ok)
;
6294 if (scan->flags) {
6295 assert(0)((0) ? (void)0 : __assert2("re_comp.c", 6295, __func__, "0")); /* This code has never been tested since this
6296 is normally not compiled */
6297 if ( deltanext < 0
6298 || deltanext > (I32) U8_MAX0xff
6299 || *minnextp > (I32)U8_MAX0xff
6300 || *minnextp + deltanext > (I32)U8_MAX0xff)
6301 {
6302 FAIL2("Lookbehind longer than %" UVuf " not implemented",do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "Lookbehind longer than %" "lu" " not implemented"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV)0xff, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(len), (void*)((pRExC_state->precomp)), ellipses); } while
(0)
6303 (UV)U8_MAX)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "Lookbehind longer than %" "lu" " not implemented"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV)0xff, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(len), (void*)((pRExC_state->precomp)), ellipses); } while
(0)
;
6304 }
6305
6306 if (deltanext) {
6307 scan->next_off = deltanext;
6308 }
6309 scan->flags = (U8)*minnextp + deltanext;
6310 }
6311
6312 *minnextp += min;
6313
6314 if (f & SCF_DO_STCLASS_AND0x0800) {
6315 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &intrnl)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) &intrnl)
;
6316 ANYOF_FLAGS(data->start_class)((data->start_class)->flags) |= SSC_MATCHES_EMPTY_STRING0x01;
6317 }
6318 if (data) {
6319 if (data_fake.flags & (SF_HAS_PAR0x0080|SF_IN_PAR0x0100))
6320 pars++;
6321 if (data_fake.flags & SF_HAS_EVAL0x0200)
6322 data->flags |= SF_HAS_EVAL0x0200;
6323 data->whilem_c = data_fake.whilem_c;
6324 if ((flags & SCF_DO_SUBSTR0x0400) && data_fake.last_found) {
6325 int i;
6326 if (RExC_rx(pRExC_state->rx)->minlen<*minnextp)
6327 RExC_rx(pRExC_state->rx)->minlen=*minnextp;
6328 scan_commit(pRExC_state, &data_fake, minnextp, is_inf)S_scan_commit( pRExC_state,&data_fake,minnextp,is_inf);
6329 SvREFCNT_dec_NN(data_fake.last_found)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (data_fake.last_found
); _p; })))
;
6330
6331 for (i = 0; i < 2; i++) {
6332 if (data_fake.substrs[i].minlenp != minlenp) {
6333 data->substrs[i].min_offset =
6334 data_fake.substrs[i].min_offset;
6335 data->substrs[i].max_offset =
6336 data_fake.substrs[i].max_offset;
6337 data->substrs[i].minlenp =
6338 data_fake.substrs[i].minlenp;
6339 data->substrs[i].lookbehind += scan->flags;
6340 }
6341 }
6342 }
6343 }
6344 }
6345#endif
6346 }
6347 else if (OP(scan)((scan)->type) == OPEN63) {
6348 if (stopparen != (I32)ARG(scan)((((struct regnode_1 *)scan)->arg1)))
6349 pars++;
6350 }
6351 else if (OP(scan)((scan)->type) == CLOSE64) {
6352 if (stopparen == (I32)ARG(scan)((((struct regnode_1 *)scan)->arg1))) {
6353 break;
6354 }
6355 if ((I32)ARG(scan)((((struct regnode_1 *)scan)->arg1)) == is_par) {
6356 next = regnext(scan)Perl_regnext( scan);
6357
6358 if ( next && (OP(next)((next)->type) != WHILEM62) && next < last)
6359 is_par = 0; /* Disable optimization */
6360 }
6361 if (data)
6362 *(data->last_closep) = ARG(scan)((((struct regnode_1 *)scan)->arg1));
6363 }
6364 else if (OP(scan)((scan)->type) == EVAL84) {
6365 if (data)
6366 data->flags |= SF_HAS_EVAL0x0200;
6367 }
6368 else if ( PL_regkind[OP(scan)((scan)->type)] == ENDLIKE96 ) {
6369 if (flags & SCF_DO_SUBSTR0x0400) {
6370 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
6371 flags &= ~SCF_DO_SUBSTR0x0400;
6372 }
6373 if (data && OP(scan)((scan)->type)==ACCEPT98) {
6374 data->flags |= SCF_SEEN_ACCEPT0x8000;
6375 if (stopmin > min)
6376 stopmin = min;
6377 }
6378 }
6379 else if (OP(scan)((scan)->type) == LOGICAL86 && scan->flags == 2) /* Embedded follows */
6380 {
6381 if (flags & SCF_DO_SUBSTR0x0400) {
6382 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
6383 data->cur_is_floating = 1; /* float */
6384 }
6385 is_inf = is_inf_internal = 1;
6386 if (flags & SCF_DO_STCLASS_OR0x1000) /* Allow everything */
6387 ssc_anything(data->start_class)S_ssc_anything( data->start_class);
6388 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
6389 }
6390 else if (OP(scan)((scan)->type) == GPOS7) {
6391 if (!(RExC_rx(pRExC_state->rx)->intflags & PREGf_GPOS_FLOAT0x00000200) &&
6392 !(delta || is_inf || (data && data->pos_delta)))
6393 {
6394 if (!(RExC_rx(pRExC_state->rx)->intflags & PREGf_ANCH( 0x00000800 | 0x00001000 | 0x00000400 )) && (flags & SCF_DO_SUBSTR0x0400))
6395 RExC_rx(pRExC_state->rx)->intflags |= PREGf_ANCH_GPOS0x00001000;
6396 if (RExC_rx(pRExC_state->rx)->gofs < (STRLEN)min)
6397 RExC_rx(pRExC_state->rx)->gofs = min;
6398 } else {
6399 RExC_rx(pRExC_state->rx)->intflags |= PREGf_GPOS_FLOAT0x00000200;
6400 RExC_rx(pRExC_state->rx)->gofs = 0;
6401 }
6402 }
6403#ifdef TRIE_STUDY_OPT
6404#ifdef FULL_TRIE_STUDY
6405 else if (PL_regkind[OP(scan)((scan)->type)] == TRIE88) {
6406 /* NOTE - There is similar code to this block above for handling
6407 BRANCH nodes on the initial study. If you change stuff here
6408 check there too. */
6409 regnode *trie_node= scan;
6410 regnode *tail= regnext(scan)Perl_regnext( scan);
6411 reg_trie_data *trie = (reg_trie_data*)RExC_rxi(pRExC_state->rxi)->data->data[ ARG(scan)((((struct regnode_1 *)scan)->arg1)) ];
6412 SSize_tssize_t max1 = 0, min1 = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
6413 regnode_ssc accum;
6414
6415 if (flags & SCF_DO_SUBSTR0x0400) { /* XXXX Add !SUSPEND? */
6416 /* Cannot merge strings after this. */
6417 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
6418 }
6419 if (flags & SCF_DO_STCLASS(0x0800|0x1000))
6420 ssc_init_zero(pRExC_state, &accum)S_ssc_init( pRExC_state,&accum);
6421
6422 if (!trie->jump) {
6423 min1= trie->minlen;
6424 max1= trie->maxlen;
6425 } else {
6426 const regnode *nextbranch= NULL((void*)0);
6427 U32 word;
6428
6429 for ( word=1 ; word <= trie->wordcount ; word++)
6430 {
6431 SSize_tssize_t deltanext=0, minnext=0, f = 0, fake;
6432 regnode_ssc this_class;
6433
6434 StructCopy(&zero_scan_data, &data_fake, scan_data_t)(*((scan_data_t*)(&data_fake)) = *((scan_data_t*)(&zero_scan_data
)))
;
6435 if (data) {
6436 data_fake.whilem_c = data->whilem_c;
6437 data_fake.last_closep = data->last_closep;
6438 }
6439 else
6440 data_fake.last_closep = &fake;
6441 data_fake.pos_delta = delta;
6442 if (flags & SCF_DO_STCLASS(0x0800|0x1000)) {
6443 ssc_init(pRExC_state, &this_class)S_ssc_init( pRExC_state,&this_class);
6444 data_fake.start_class = &this_class;
6445 f = SCF_DO_STCLASS_AND0x0800;
6446 }
6447 if (flags & SCF_WHILEM_VISITED_POS0x2000)
6448 f |= SCF_WHILEM_VISITED_POS0x2000;
6449
6450 if (trie->jump[word]) {
6451 if (!nextbranch)
6452 nextbranch = trie_node + trie->jump[0];
6453 scan= trie_node + trie->jump[word];
6454 /* We go from the jump point to the branch that follows
6455 it. Note this means we need the vestigal unused
6456 branches even though they arent otherwise used. */
6457 /* optimise study_chunk() for TRIE */
6458 minnext = study_chunk(pRExC_state, &scan, minlenp,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,(
regnode *)nextbranch,&data_fake,stopparen,recursed_depth,
((void*)0),f,depth+1,mutate_ok)
6459 &deltanext, (regnode *)nextbranch, &data_fake,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,(
regnode *)nextbranch,&data_fake,stopparen,recursed_depth,
((void*)0),f,depth+1,mutate_ok)
6460 stopparen, recursed_depth, NULL, f, depth+1,S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,(
regnode *)nextbranch,&data_fake,stopparen,recursed_depth,
((void*)0),f,depth+1,mutate_ok)
6461 mutate_ok)S_study_chunk( pRExC_state,&scan,minlenp,&deltanext,(
regnode *)nextbranch,&data_fake,stopparen,recursed_depth,
((void*)0),f,depth+1,mutate_ok)
;
6462 }
6463 if (nextbranch && PL_regkind[OP(nextbranch)((nextbranch)->type)]==BRANCH39)
6464 nextbranch= regnext((regnode*)nextbranch)Perl_regnext( (regnode*)nextbranch);
6465
6466 if (min1 > (SSize_tssize_t)(minnext + trie->minlen))
6467 min1 = minnext + trie->minlen;
6468 if (deltanext == OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)) {
6469 is_inf = is_inf_internal = 1;
6470 max1 = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
6471 } else if (max1 < (SSize_tssize_t)(minnext + deltanext + trie->maxlen))
6472 max1 = minnext + deltanext + trie->maxlen;
6473
6474 if (data_fake.flags & (SF_HAS_PAR0x0080|SF_IN_PAR0x0100))
6475 pars++;
6476 if (data_fake.flags & SCF_SEEN_ACCEPT0x8000) {
6477 if ( stopmin > min + min1)
6478 stopmin = min + min1;
6479 flags &= ~SCF_DO_SUBSTR0x0400;
6480 if (data)
6481 data->flags |= SCF_SEEN_ACCEPT0x8000;
6482 }
6483 if (data) {
6484 if (data_fake.flags & SF_HAS_EVAL0x0200)
6485 data->flags |= SF_HAS_EVAL0x0200;
6486 data->whilem_c = data_fake.whilem_c;
6487 }
6488 if (flags & SCF_DO_STCLASS(0x0800|0x1000))
6489 ssc_or(pRExC_state, &accum, (regnode_charclass *) &this_class)S_ssc_or( pRExC_state,&accum,(regnode_charclass *) &this_class
)
;
6490 }
6491 }
6492 if (flags & SCF_DO_SUBSTR0x0400) {
6493 data->pos_min += min1;
6494 data->pos_delta += max1 - min1;
6495 if (max1 != min1 || is_inf)
6496 data->cur_is_floating = 1; /* float */
6497 }
6498 min += min1;
6499 if (delta != OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1)) {
6500 if (OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - (max1 - min1) >= delta)
6501 delta += max1 - min1;
6502 else
6503 delta = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
6504 }
6505 if (flags & SCF_DO_STCLASS_OR0x1000) {
6506 ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &accum)S_ssc_or( pRExC_state,data->start_class,(regnode_charclass
*) &accum)
;
6507 if (min1) {
6508 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
6509 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
6510 }
6511 }
6512 else if (flags & SCF_DO_STCLASS_AND0x0800) {
6513 if (min1) {
6514 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &accum)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) &accum)
;
6515 flags &= ~SCF_DO_STCLASS(0x0800|0x1000);
6516 }
6517 else {
6518 /* Switch to OR mode: cache the old value of
6519 * data->start_class */
6520 INIT_AND_WITHP((!and_withp) ? (void)0 : __assert2("re_comp.c", 6520, __func__
, "!and_withp")); (and_withp = ((void)(__builtin_expect((((((
sizeof(size_t) < sizeof(1) || sizeof(regnode_ssc) > ((
size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ? (size_t)
(1) : ((size_t)-1)/sizeof(regnode_ssc)) > ((size_t)-1)/sizeof
(regnode_ssc))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof
(regnode_ssc)))))); Perl_save_pushptr( (void *)((char*)(and_withp
)),10)
;
6521 StructCopy(data->start_class, and_withp, regnode_ssc)(*((regnode_ssc*)(and_withp)) = *((regnode_ssc*)(data->start_class
)))
;
6522 flags &= ~SCF_DO_STCLASS_AND0x0800;
6523 StructCopy(&accum, data->start_class, regnode_ssc)(*((regnode_ssc*)(data->start_class)) = *((regnode_ssc*)(&
accum)))
;
6524 flags |= SCF_DO_STCLASS_OR0x1000;
6525 }
6526 }
6527 scan= tail;
6528 continue;
6529 }
6530#else
6531 else if (PL_regkind[OP(scan)((scan)->type)] == TRIE88) {
6532 reg_trie_data *trie = (reg_trie_data*)RExC_rxi(pRExC_state->rxi)->data->data[ ARG(scan)((((struct regnode_1 *)scan)->arg1)) ];
6533 U8*bang=NULL((void*)0);
6534
6535 min += trie->minlen;
6536 delta += (trie->maxlen - trie->minlen);
6537 flags &= ~SCF_DO_STCLASS(0x0800|0x1000); /* xxx */
6538 if (flags & SCF_DO_SUBSTR0x0400) {
6539 /* Cannot expect anything... */
6540 scan_commit(pRExC_state, data, minlenp, is_inf)S_scan_commit( pRExC_state,data,minlenp,is_inf);
6541 data->pos_min += trie->minlen;
6542 data->pos_delta += (trie->maxlen - trie->minlen);
6543 if (trie->maxlen != trie->minlen)
6544 data->cur_is_floating = 1; /* float */
6545 }
6546 if (trie->jump) /* no more substrings -- for now /grr*/
6547 flags &= ~SCF_DO_SUBSTR0x0400;
6548 }
6549 else if (OP(scan)((scan)->type) == REGEX_SET109) {
6550 Perl_croak(aTHX_ "panic: %s regnode should be resolved"
6551 " before optimization", reg_name[REGEX_SET109]);
6552 }
6553
6554#endif /* old or new */
6555#endif /* TRIE_STUDY_OPT */
6556
6557 /* Else: zero-length, ignore. */
6558 scan = regnext(scan)Perl_regnext( scan);
6559 }
6560
6561 finish:
6562 if (frame) {
6563 /* we need to unwind recursion. */
6564 depth = depth - 1;
6565
6566 DEBUG_STUDYDATA("frame-end", data, depth, is_inf)S_debug_studydata( "frame-end", data, depth, is_inf);
6567 DEBUG_PEEP("fend", scan, depth, flags)S_debug_peep( "fend", pRExC_state, scan, depth, flags);
6568
6569 /* restore previous context */
6570 last = frame->last_regnode;
6571 scan = frame->next_regnode;
6572 stopparen = frame->stopparen;
6573 recursed_depth = frame->prev_recursed_depth;
6574
6575 RExC_frame_last(pRExC_state->frame_last) = frame->prev_frame;
6576 frame = frame->this_prev_frame;
6577 goto fake_study_recurse;
6578 }
6579
6580 assert(!frame)((!frame) ? (void)0 : __assert2("re_comp.c", 6580, __func__, "!frame"
))
;
6581 DEBUG_STUDYDATA("pre-fin", data, depth, is_inf)S_debug_studydata( "pre-fin", data, depth, is_inf);
6582
6583 *scanp = scan;
6584 *deltap = is_inf_internal ? OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) : delta;
6585
6586 if (flags & SCF_DO_SUBSTR0x0400 && is_inf)
6587 data->pos_delta = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - data->pos_min;
6588 if (is_par > (I32)U8_MAX0xff)
6589 is_par = 0;
6590 if (is_par && pars==1 && data) {
6591 data->flags |= SF_IN_PAR0x0100;
6592 data->flags &= ~SF_HAS_PAR0x0080;
6593 }
6594 else if (pars && data) {
6595 data->flags |= SF_HAS_PAR0x0080;
6596 data->flags &= ~SF_IN_PAR0x0100;
6597 }
6598 if (flags & SCF_DO_STCLASS_OR0x1000)
6599 ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp)S_ssc_and( pRExC_state,data->start_class,(regnode_charclass
*) and_withp)
;
6600 if (flags & SCF_TRIE_RESTUDY0x4000)
6601 data->flags |= SCF_TRIE_RESTUDY0x4000;
6602
6603 DEBUG_STUDYDATA("post-fin", data, depth, is_inf)S_debug_studydata( "post-fin", data, depth, is_inf);
6604
6605 final_minlen = min < stopmin
6606 ? min : stopmin;
6607
6608 if (!(RExC_seen(pRExC_state->seen) & REG_UNBOUNDED_QUANTIFIER_SEEN0x00001000)) {
6609 if (final_minlen > OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1) - delta)
6610 RExC_maxlen(pRExC_state->maxlen) = OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1);
6611 else if (RExC_maxlen(pRExC_state->maxlen) < final_minlen + delta)
6612 RExC_maxlen(pRExC_state->maxlen) = final_minlen + delta;
6613 }
6614 return final_minlen;
6615}
6616
6617STATICstatic U32
6618S_add_data(RExC_state_t* const pRExC_state, const char* const s, const U32 n)
6619{
6620 U32 count = RExC_rxi(pRExC_state->rxi)->data ? RExC_rxi(pRExC_state->rxi)->data->count : 0;
6621
6622 PERL_ARGS_ASSERT_ADD_DATA((pRExC_state) ? (void)0 : __assert2("re_comp.c", 6622, __func__
, "pRExC_state")); ((s) ? (void)0 : __assert2("re_comp.c", 6622
, __func__, "s"))
;
6623
6624 Renewc(RExC_rxi->data,((pRExC_state->rxi)->data = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof(sizeof(*(pRExC_state->rxi)->
data) + sizeof(void*) * (count + n - 1)) || sizeof(char) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(sizeof(*(pRExC_state
->rxi)->data) + sizeof(void*) * (count + n - 1))))) ? (
size_t)(sizeof(*(pRExC_state->rxi)->data) + sizeof(void
*) * (count + n - 1)) : ((size_t)-1)/sizeof(char)) > ((size_t
)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (struct reg_data*)(Perl_safesysrealloc((void *)((pRExC_state
->rxi)->data),(size_t)((sizeof(*(pRExC_state->rxi)->
data) + sizeof(void*) * (count + n - 1))*sizeof(char))))))
6625 sizeof(*RExC_rxi->data) + sizeof(void*) * (count + n - 1),((pRExC_state->rxi)->data = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof(sizeof(*(pRExC_state->rxi)->
data) + sizeof(void*) * (count + n - 1)) || sizeof(char) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(sizeof(*(pRExC_state
->rxi)->data) + sizeof(void*) * (count + n - 1))))) ? (
size_t)(sizeof(*(pRExC_state->rxi)->data) + sizeof(void
*) * (count + n - 1)) : ((size_t)-1)/sizeof(char)) > ((size_t
)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (struct reg_data*)(Perl_safesysrealloc((void *)((pRExC_state
->rxi)->data),(size_t)((sizeof(*(pRExC_state->rxi)->
data) + sizeof(void*) * (count + n - 1))*sizeof(char))))))
6626 char, struct reg_data)((pRExC_state->rxi)->data = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof(sizeof(*(pRExC_state->rxi)->
data) + sizeof(void*) * (count + n - 1)) || sizeof(char) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(sizeof(*(pRExC_state
->rxi)->data) + sizeof(void*) * (count + n - 1))))) ? (
size_t)(sizeof(*(pRExC_state->rxi)->data) + sizeof(void
*) * (count + n - 1)) : ((size_t)-1)/sizeof(char)) > ((size_t
)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (struct reg_data*)(Perl_safesysrealloc((void *)((pRExC_state
->rxi)->data),(size_t)((sizeof(*(pRExC_state->rxi)->
data) + sizeof(void*) * (count + n - 1))*sizeof(char))))))
;
6627 if(count)
6628 Renew(RExC_rxi->data->what, count + n, U8)((pRExC_state->rxi)->data->what = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(count + n) || sizeof(U8) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(count + n))))
? (size_t)(count + n) : ((size_t)-1)/sizeof(U8)) > ((size_t
)-1)/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (U8*)(Perl_safesysrealloc((void *)((pRExC_state->rxi
)->data->what),(size_t)((count + n)*sizeof(U8))))))
;
6629 else
6630 Newx(RExC_rxi->data->what, n, U8)((pRExC_state->rxi)->data->what = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(n) || sizeof(U8) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof(n)))) ? (size_t)(n) : (
(size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(U8*)(Perl_safesysmalloc((size_t)((n)*sizeof(U8))))))
;
6631 RExC_rxi(pRExC_state->rxi)->data->count = count + n;
6632 Copy(s, RExC_rxi->data->what + count, n, U8)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(n) ||
sizeof(U8) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(n)))) ? (size_t)(n) : ((size_t)-1)/sizeof(U8)) > ((size_t
)-1)/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)((pRExC_state->rxi)->data->what + count
)) != 0) ? (void)0 : __assert2("re_comp.c", 6632, __func__, "((void*)((pRExC_state->rxi)->data->what + count)) != 0"
)), ((((void*)(s)) != 0) ? (void)0 : __assert2("re_comp.c", 6632
, __func__, "((void*)(s)) != 0")), (void)memcpy((char*)((pRExC_state
->rxi)->data->what + count),(const char*)(s), (n) * sizeof
(U8)))
;
6633 return count;
6634}
6635
6636/*XXX: todo make this not included in a non debugging perl, but appears to be
6637 * used anyway there, in 'use re' */
6638#ifndef PERL_IN_XSUB_RE
6639void
6640Perl_reginitcolors(pTHXvoid)
6641{
6642 const char * const s = PerlEnv_getenv("PERL_RE_COLORS")Perl_mortal_getenv("PERL_RE_COLORS");
6643 if (s) {
6644 char *t = savepv(s)Perl_savepv( s);
6645 int i = 0;
6646 PL_colors[0] = t;
6647 while (++i < 6) {
6648 t = strchr(t, '\t');
6649 if (t) {
6650 *t = '\0';
6651 PL_colors[i] = ++t;
6652 }
6653 else
6654 PL_colors[i] = t = (char *)"";
6655 }
6656 } else {
6657 int i = 0;
6658 while (i < 6)
6659 PL_colors[i++] = (char *)"";
6660 }
6661 PL_colorset = 1;
6662}
6663#endif
6664
6665
6666#ifdef TRIE_STUDY_OPT
6667#define CHECK_RESTUDY_GOTO_butfirst(dOsomething)do { if ( (data.flags & 0x4000) && ! restudied++ )
{ dOsomething; goto reStudy; } } while (0)
\
6668 STMT_STARTdo { \
6669 if ( \
6670 (data.flags & SCF_TRIE_RESTUDY0x4000) \
6671 && ! restudied++ \
6672 ) { \
6673 dOsomething; \
6674 goto reStudy; \
6675 } \
6676 } STMT_ENDwhile (0)
6677#else
6678#define CHECK_RESTUDY_GOTO_butfirst
6679#endif
6680
6681/*
6682 * pregcomp - compile a regular expression into internal code
6683 *
6684 * Decides which engine's compiler to call based on the hint currently in
6685 * scope
6686 */
6687
6688#ifndef PERL_IN_XSUB_RE
6689
6690/* return the currently in-scope regex engine (or the default if none) */
6691
6692regexp_engine const *
6693Perl_current_re_engine(pTHXvoid)
6694{
6695 if (IN_PERL_COMPILETIME((PL_curcop == &PL_compiling) ? (_Bool)1 : (_Bool)0)) {
6696 HV * const table = GvHV(PL_hintgv)(((0+(*({GV *const _gvgp = (GV *) (PL_hintgv); ((((svtype)((_gvgp
)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_gvgp)->
sv_flags & 0xff)) == SVt_PVLV) ? (void)0 : __assert2("re_comp.c"
, 6696, __func__, "SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV"
)); ((((((_gvgp)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((_gvgp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_gvgp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6696, __func__
, "isGV_with_GP(_gvgp)")); &((_gvgp)->sv_u.svu_gp);}))
))->gp_hv)
;
6697 SV **ptr;
6698
6699 if (!table || !(PL_hintsPL_compiling.cop_hints & HINT_LOCALIZE_HH0x00020000))
6700 return &PL_core_reg_engine;
6701 ptr = hv_fetchs(table, "regcomp", FALSE)((SV**) Perl_hv_common_key_len( ((table)),(("" "regcomp" ""))
,((sizeof("regcomp")-1)),(((0))) ? (0x20 | 0x10) : 0x20,((void
*)0),0))
;
6702 if ( !(ptr && SvIOK(*ptr)((*ptr)->sv_flags & 0x00000100) && SvIV(*ptr)((((*ptr)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? (*({ const SV *const _svivx = (const SV *)(*ptr); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6702, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6702, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( *ptr,2))
))
6703 return &PL_core_reg_engine;
6704 return INT2PTR(regexp_engine*, SvIV(*ptr))(regexp_engine*)(((((*ptr)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(*ptr); ((PL_valid_types_IVX[((svtype)((_svivx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
6704, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6704, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( *ptr,2)))
;
6705 }
6706 else {
6707 SV *ptr;
6708 if (!PL_curcop->cop_hints_hash)
6709 return &PL_core_reg_engine;
6710 ptr = cop_hints_fetch_pvs(PL_curcop, "regcomp", 0)Perl_refcounted_he_fetch_pvn( ((COPHH*)((PL_curcop)->cop_hints_hash
)), ("" "regcomp" ""), (sizeof("regcomp")-1), 0, 0)
;
6711 if ( !(ptr && SvIOK(ptr)((ptr)->sv_flags & 0x00000100) && SvIV(ptr)((((ptr)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? (*({ const SV *const _svivx = (const SV *)(ptr); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6711, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6711, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( ptr,2))
))
6712 return &PL_core_reg_engine;
6713 return INT2PTR(regexp_engine*, SvIV(ptr))(regexp_engine*)(((((ptr)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(ptr); ((PL_valid_types_IVX[((svtype)((_svivx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 6713,
__func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6713, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( ptr,2)))
;
6714 }
6715}
6716
6717
6718REGEXP *
6719Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags)
6720{
6721 regexp_engine const *eng = current_re_engine()Perl_current_re_engine();
6722 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 6722, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 6722, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
6723
6724 PERL_ARGS_ASSERT_PREGCOMP((pattern) ? (void)0 : __assert2("re_comp.c", 6724, __func__,
"pattern"))
;
6725
6726 /* Dispatch a request to compile a regexp to correct regexp engine. */
6727 DEBUG_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "Using engine %" "lx" "\n", (UV)(eng)); };} while (0)
6728 Perl_re_printf( aTHX_ "Using engine %" UVxf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "Using engine %" "lx" "\n", (UV)(eng)); };} while (0)
6729 PTR2UV(eng));do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "Using engine %" "lx" "\n", (UV)(eng)); };} while (0)
6730 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "Using engine %" "lx" "\n", (UV)(eng)); };} while (0)
;
6731 return CALLREGCOMP_ENG(eng, pattern, flags)(eng)->comp( pattern, flags);
6732}
6733#endif
6734
6735/* public(ish) entry point for the perl core's own regex compiling code.
6736 * It's actually a wrapper for Perl_re_op_compile that only takes an SV
6737 * pattern rather than a list of OPs, and uses the internal engine rather
6738 * than the current one */
6739
6740REGEXP *
6741Perl_re_compilemy_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
6742{
6743 SV *pat = pattern; /* defeat constness! */
6744
6745 PERL_ARGS_ASSERT_RE_COMPILE((pattern) ? (void)0 : __assert2("re_comp.c", 6745, __func__,
"pattern"))
;
6746
6747 return Perl_re_op_compilemy_re_op_compile(aTHX_ &pat, 1, NULL((void*)0),
6748#ifdef PERL_IN_XSUB_RE
6749 &my_reg_engine,
6750#else
6751 &PL_core_reg_engine,
6752#endif
6753 NULL((void*)0), NULL((void*)0), rx_flags, 0);
6754}
6755
6756static void
6757S_free_codeblocks(pTHX_ struct reg_code_blocks *cbs)
6758{
6759 int n;
6760
6761 if (--cbs->refcnt > 0)
6762 return;
6763 for (n = 0; n < cbs->count; n++) {
6764 REGEXP *rx = cbs->cb[n].src_regex;
6765 if (rx) {
6766 cbs->cb[n].src_regex = NULL((void*)0);
6767 SvREFCNT_dec_NN(rx)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (rx); _p; })));
6768 }
6769 }
6770 Safefree(cbs->cb)Perl_safesysfree(((void *)(cbs->cb)));
6771 Safefree(cbs)Perl_safesysfree(((void *)(cbs)));
6772}
6773
6774
6775static struct reg_code_blocks *
6776S_alloc_code_blocks(pTHX_ int ncode)
6777{
6778 struct reg_code_blocks *cbs;
6779 Newx(cbs, 1, struct reg_code_blocks)(cbs = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(1) || sizeof(struct reg_code_blocks) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1
)/sizeof(struct reg_code_blocks)) > ((size_t)-1)/sizeof(struct
reg_code_blocks))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (struct reg_code_blocks*)(Perl_safesysmalloc((size_t)
((1)*sizeof(struct reg_code_blocks))))))
;
6780 cbs->count = ncode;
6781 cbs->refcnt = 1;
6782 SAVEDESTRUCTOR_X(S_free_codeblocks, cbs)Perl_save_destructor_x( (DESTRUCTORFUNC_t)(S_free_codeblocks)
,(void*)(cbs))
;
6783 if (ncode)
6784 Newx(cbs->cb, ncode, struct reg_code_block)(cbs->cb = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(ncode) || sizeof(struct reg_code_block) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof(ncode)))) ? (size_t)(ncode
) : ((size_t)-1)/sizeof(struct reg_code_block)) > ((size_t
)-1)/sizeof(struct reg_code_block))) ? (_Bool)1 : (_Bool)0),(
0)) && (Perl_croak_memory_wrap(),0)), (struct reg_code_block
*)(Perl_safesysmalloc((size_t)((ncode)*sizeof(struct reg_code_block
))))))
;
6785 else
6786 cbs->cb = NULL((void*)0);
6787 return cbs;
6788}
6789
6790
6791/* upgrade pattern pat_p of length plen_p to UTF8, and if there are code
6792 * blocks, recalculate the indices. Update pat_p and plen_p in-place to
6793 * point to the realloced string and length.
6794 *
6795 * This is essentially a copy of Perl_bytes_to_utf8() with the code index
6796 * stuff added */
6797
6798static void
6799S_pat_upgrade_to_utf8(pTHX_ RExC_state_t * const pRExC_state,
6800 char **pat_p, STRLEN *plen_p, int num_code_blocks)
6801{
6802 U8 *const src = (U8*)*pat_p;
6803 U8 *dst, *d;
6804 int n=0;
6805 STRLEN s = 0;
6806 bool_Bool do_end = 0;
6807 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 6807, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 6807, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
6808
6809 DEBUG_PARSE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "UTF8 mismatch! Converting to utf8 for resizing and compile\n"
);} while (0)
6810 "UTF8 mismatch! Converting to utf8 for resizing and compile\n"))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "UTF8 mismatch! Converting to utf8 for resizing and compile\n"
);} while (0)
;
6811
6812 /* 1 for each byte + 1 for each byte that expands to two, + trailing NUL */
6813 Newx(dst, *plen_p + variant_under_utf8_count(src, src + *plen_p) + 1, U8)(dst = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(*plen_p + S_variant_under_utf8_count(src, src + *plen_p) + 1
) || sizeof(U8) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(*plen_p + S_variant_under_utf8_count(src, src + *plen_p) + 1
)))) ? (size_t)(*plen_p + S_variant_under_utf8_count(src, src
+ *plen_p) + 1) : ((size_t)-1)/sizeof(U8)) > ((size_t)-1)
/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (U8*)(Perl_safesysmalloc((size_t)((*plen_p + S_variant_under_utf8_count
(src, src + *plen_p) + 1)*sizeof(U8))))))
;
6814 d = dst;
6815
6816 while (s < *plen_p) {
6817 append_utf8_from_native_bytePerl_append_utf8_from_native_byte(src[s], &d);
6818
6819 if (n < num_code_blocks) {
6820 assert(pRExC_state->code_blocks)((pRExC_state->code_blocks) ? (void)0 : __assert2("re_comp.c"
, 6820, __func__, "pRExC_state->code_blocks"))
;
6821 if (!do_end && pRExC_state->code_blocks->cb[n].start == s) {
6822 pRExC_state->code_blocks->cb[n].start = d - dst - 1;
6823 assert(*(d - 1) == '(')((*(d - 1) == '(') ? (void)0 : __assert2("re_comp.c", 6823, __func__
, "*(d - 1) == '('"))
;
6824 do_end = 1;
6825 }
6826 else if (do_end && pRExC_state->code_blocks->cb[n].end == s) {
6827 pRExC_state->code_blocks->cb[n].end = d - dst - 1;
6828 assert(*(d - 1) == ')')((*(d - 1) == ')') ? (void)0 : __assert2("re_comp.c", 6828, __func__
, "*(d - 1) == ')'"))
;
6829 do_end = 0;
6830 n++;
6831 }
6832 }
6833 s++;
6834 }
6835 *d = '\0';
6836 *plen_p = d - dst;
6837 *pat_p = (char*) dst;
6838 SAVEFREEPV(*pat_p)Perl_save_pushptr( (void *)((char*)(*pat_p)),10);
6839 RExC_orig_utf8(pRExC_state->orig_utf8) = RExC_utf8(pRExC_state->utf8) = 1;
6840}
6841
6842
6843
6844/* S_concat_pat(): concatenate a list of args to the pattern string pat,
6845 * while recording any code block indices, and handling overloading,
6846 * nested qr// objects etc. If pat is null, it will allocate a new
6847 * string, or just return the first arg, if there's only one.
6848 *
6849 * Returns the malloced/updated pat.
6850 * patternp and pat_count is the array of SVs to be concatted;
6851 * oplist is the optional list of ops that generated the SVs;
6852 * recompile_p is a pointer to a boolean that will be set if
6853 * the regex will need to be recompiled.
6854 * delim, if non-null is an SV that will be inserted between each element
6855 */
6856
6857static SV*
6858S_concat_pat(pTHX_ RExC_state_t * const pRExC_state,
6859 SV *pat, SV ** const patternp, int pat_count,
6860 OP *oplist, bool_Bool *recompile_p, SV *delim)
6861{
6862 SV **svp;
6863 int n = 0;
6864 bool_Bool use_delim = FALSE(0);
6865 bool_Bool alloced = FALSE(0);
6866
6867 /* if we know we have at least two args, create an empty string,
6868 * then concatenate args to that. For no args, return an empty string */
6869 if (!pat && pat_count != 1) {
6870 pat = newSVpvs("")Perl_newSVpvn( ("" "" ""), (sizeof("")-1));
6871 SAVEFREESV(pat)Perl_save_pushptr( (void *)(((SV *)({ void *_p = (pat); _p; }
))),11)
;
6872 alloced = TRUE(1);
6873 }
6874
6875 for (svp = patternp; svp < patternp + pat_count; svp++) {
6876 SV *sv;
6877 SV *rx = NULL((void*)0);
6878 STRLEN orig_patlen = 0;
6879 bool_Bool code = 0;
6880 SV *msv = use_delim ? delim : *svp;
6881 if (!msv) msv = &PL_sv_undef(PL_sv_immortals[1]);
6882
6883 /* if we've got a delimiter, we go round the loop twice for each
6884 * svp slot (except the last), using the delimiter the second
6885 * time round */
6886 if (use_delim) {
6887 svp--;
6888 use_delim = FALSE(0);
6889 }
6890 else if (delim)
6891 use_delim = TRUE(1);
6892
6893 if (SvTYPE(msv)((svtype)((msv)->sv_flags & 0xff)) == SVt_PVAV) {
6894 /* we've encountered an interpolated array within
6895 * the pattern, e.g. /...@a..../. Expand the list of elements,
6896 * then recursively append elements.
6897 * The code in this block is based on S_pushav() */
6898
6899 AV *const av = (AV*)msv;
6900 const SSize_tssize_t maxarg = AvFILL(av)(((((const SV *) (av))->sv_flags & 0x00800000)) ? Perl_mg_size
( ((SV *)({ void *_p = (av); _p; }))) : ((XPVAV*) (av)->sv_any
)->xav_fill)
+ 1;
6901 SV **array;
6902
6903 if (oplist) {
6904 assert(oplist->op_type == OP_PADAV((oplist->op_type == OP_PADAV || oplist->op_type == OP_RV2AV
) ? (void)0 : __assert2("re_comp.c", 6905, __func__, "oplist->op_type == OP_PADAV || oplist->op_type == OP_RV2AV"
))
6905 || oplist->op_type == OP_RV2AV)((oplist->op_type == OP_PADAV || oplist->op_type == OP_RV2AV
) ? (void)0 : __assert2("re_comp.c", 6905, __func__, "oplist->op_type == OP_PADAV || oplist->op_type == OP_RV2AV"
))
;
6906 oplist = OpSIBLING(oplist)(0 + (oplist)->op_moresib ? (oplist)->op_sibparent : ((
void*)0))
;
6907 }
6908
6909 if (SvRMAGICAL(av)((av)->sv_flags & 0x00800000)) {
6910 SSize_tssize_t i;
6911
6912 Newx(array, maxarg, SV*)(array = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(maxarg) || sizeof(SV*) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(maxarg)))) ? (size_t)(maxarg) : ((size_t)-1)/sizeof
(SV*)) > ((size_t)-1)/sizeof(SV*))) ? (_Bool)1 : (_Bool)0)
,(0)) && (Perl_croak_memory_wrap(),0)), (SV**)(Perl_safesysmalloc
((size_t)((maxarg)*sizeof(SV*))))))
;
6913 SAVEFREEPV(array)Perl_save_pushptr( (void *)((char*)(array)),10);
6914 for (i=0; i < maxarg; i++) {
6915 SV ** const svp = av_fetch(av, i, FALSE)Perl_av_fetch( av,i,(0));
6916 array[i] = svp ? *svp : &PL_sv_undef(PL_sv_immortals[1]);
6917 }
6918 }
6919 else
6920 array = AvARRAY(av)((av)->sv_u.svu_array);
6921
6922 pat = S_concat_pat(aTHX_ pRExC_state, pat,
6923 array, maxarg, NULL((void*)0), recompile_p,
6924 /* $" */
6925 GvSV((gv_fetchpvs("\"", GV_ADDMULTI, SVt_PV)))((0+(*({GV *const _gvgp = (GV *) ((Perl_gv_fetchpvn_flags( (""
"\"" ""), (sizeof("\"")-1), 0x02, SVt_PV))); ((((svtype)((_gvgp
)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_gvgp)->
sv_flags & 0xff)) == SVt_PVLV) ? (void)0 : __assert2("re_comp.c"
, 6925, __func__, "SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV"
)); ((((((_gvgp)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((_gvgp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_gvgp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6925, __func__
, "isGV_with_GP(_gvgp)")); &((_gvgp)->sv_u.svu_gp);}))
)->gp_sv)
);
6926
6927 continue;
6928 }
6929
6930
6931 /* we make the assumption here that each op in the list of
6932 * op_siblings maps to one SV pushed onto the stack,
6933 * except for code blocks, with have both an OP_NULL and
6934 * an OP_CONST.
6935 * This allows us to match up the list of SVs against the
6936 * list of OPs to find the next code block.
6937 *
6938 * Note that PUSHMARK PADSV PADSV ..
6939 * is optimised to
6940 * PADRANGE PADSV PADSV ..
6941 * so the alignment still works. */
6942
6943 if (oplist) {
6944 if (oplist->op_type == OP_NULL
6945 && (oplist->op_flags & OPf_SPECIAL128))
6946 {
6947 assert(n < pRExC_state->code_blocks->count)((n < pRExC_state->code_blocks->count) ? (void)0 : __assert2
("re_comp.c", 6947, __func__, "n < pRExC_state->code_blocks->count"
))
;
6948 pRExC_state->code_blocks->cb[n].start = pat ? SvCUR(pat)(*({ const SV *const _svcur = (const SV *)(pat); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6948, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6948, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 6948, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
: 0;
6949 pRExC_state->code_blocks->cb[n].block = oplist;
6950 pRExC_state->code_blocks->cb[n].src_regex = NULL((void*)0);
6951 n++;
6952 code = 1;
6953 oplist = OpSIBLING(oplist)(0 + (oplist)->op_moresib ? (oplist)->op_sibparent : ((
void*)0))
; /* skip CONST */
6954 assert(oplist)((oplist) ? (void)0 : __assert2("re_comp.c", 6954, __func__, "oplist"
))
;
6955 }
6956 oplist = OpSIBLING(oplist)(0 + (oplist)->op_moresib ? (oplist)->op_sibparent : ((
void*)0))
;;
6957 }
6958
6959 /* apply magic and QR overloading to arg */
6960
6961 SvGETMAGIC(msv)((void)(__builtin_expect(((((msv)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( msv)))
;
6962 if (SvROK(msv)((msv)->sv_flags & 0x00000800) && SvAMAGIC(msv)(((msv)->sv_flags & 0x00000800) && (((*({ SV *
const _svrv = ((SV *)({ void *_p = (msv); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6962, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6962, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 6962, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0x00100000
) && (((*({ const SV *const _svstash = (const SV *)((
*({ SV *const _svrv = ((SV *)({ void *_p = (msv); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 6962, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6962, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6962, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); ((((svtype)((_svstash
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 6962, __func__, "SvTYPE(_svstash) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svstash)->sv_any); _p
; }))->xmg_stash); })))->sv_flags & 0x10000000))
) {
6963 SV *sv = AMG_CALLunary(msv, regexp_amg)Perl_amagic_call( msv,&(PL_sv_immortals[1]),regexp_amg,1 |
8)
;
6964 if (sv) {
6965 if (SvROK(sv)((sv)->sv_flags & 0x00000800))
6966 sv = SvRV(sv)(*({ SV *const _svrv = ((SV *)({ void *_p = (sv); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 6966, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6966, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6966, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))
;
6967 if (SvTYPE(sv)((svtype)((sv)->sv_flags & 0xff)) != SVt_REGEXP)
6968 Perl_croak(aTHX_ "Overloaded qr did not return a REGEXP");
6969 msv = sv;
6970 }
6971 }
6972
6973 /* try concatenation overload ... */
6974 if (pat && (SvAMAGIC(pat)(((pat)->sv_flags & 0x00000800) && (((*({ SV *
const _svrv = ((SV *)({ void *_p = (pat); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6974, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6974, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 6974, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0x00100000
) && (((*({ const SV *const _svstash = (const SV *)((
*({ SV *const _svrv = ((SV *)({ void *_p = (pat); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 6974, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6974, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6974, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); ((((svtype)((_svstash
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 6974, __func__, "SvTYPE(_svstash) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svstash)->sv_any); _p
; }))->xmg_stash); })))->sv_flags & 0x10000000))
|| SvAMAGIC(msv)(((msv)->sv_flags & 0x00000800) && (((*({ SV *
const _svrv = ((SV *)({ void *_p = (msv); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6974, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6974, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 6974, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0x00100000
) && (((*({ const SV *const _svstash = (const SV *)((
*({ SV *const _svrv = ((SV *)({ void *_p = (msv); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 6974, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6974, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6974, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); ((((svtype)((_svstash
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 6974, __func__, "SvTYPE(_svstash) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svstash)->sv_any); _p
; }))->xmg_stash); })))->sv_flags & 0x10000000))
) &&
6975 (sv = amagic_call(pat, msv, concat_amg, AMGf_assign)Perl_amagic_call( pat,msv,concat_amg,4)))
6976 {
6977 sv_setsv(pat, sv)Perl_sv_setsv_flags( pat,sv,2|0);
6978 /* overloading involved: all bets are off over literal
6979 * code. Pretend we haven't seen it */
6980 if (n)
6981 pRExC_state->code_blocks->count -= n;
6982 n = 0;
6983 }
6984 else {
6985 /* ... or failing that, try "" overload */
6986 while (SvAMAGIC(msv)(((msv)->sv_flags & 0x00000800) && (((*({ SV *
const _svrv = ((SV *)({ void *_p = (msv); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 6986, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6986, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 6986, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0x00100000
) && (((*({ const SV *const _svstash = (const SV *)((
*({ SV *const _svrv = ((SV *)({ void *_p = (msv); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 6986, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6986, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6986, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); ((((svtype)((_svstash
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 6986, __func__, "SvTYPE(_svstash) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svstash)->sv_any); _p
; }))->xmg_stash); })))->sv_flags & 0x10000000))
6987 && (sv = AMG_CALLunary(msv, string_amg)Perl_amagic_call( msv,&(PL_sv_immortals[1]),string_amg,1 |
8)
)
6988 && sv != msv
6989 && !( SvROK(msv)((msv)->sv_flags & 0x00000800)
6990 && SvROK(sv)((sv)->sv_flags & 0x00000800)
6991 && SvRV(msv)(*({ SV *const _svrv = ((SV *)({ void *_p = (msv); _p; })); (
(PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)
) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 6991, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6991, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6991, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))
== SvRV(sv)(*({ SV *const _svrv = ((SV *)({ void *_p = (sv); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 6991, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6991, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6991, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))
)
6992 ) {
6993 msv = sv;
6994 SvGETMAGIC(msv)((void)(__builtin_expect(((((msv)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( msv)))
;
6995 }
6996 if (SvROK(msv)((msv)->sv_flags & 0x00000800) && SvTYPE(SvRV(msv))((svtype)(((*({ SV *const _svrv = ((SV *)({ void *_p = (msv);
_p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 6996,
__func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")
); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 6996, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 6996, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0xff
))
== SVt_REGEXP)
6997 msv = SvRV(msv)(*({ SV *const _svrv = ((SV *)({ void *_p = (msv); _p; })); (
(PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)
) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 6997, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 6997, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 6997, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))
;
6998
6999 if (pat) {
7000 /* this is a partially unrolled
7001 * sv_catsv_nomg(pat, msv);
7002 * that allows us to adjust code block indices if
7003 * needed */
7004 STRLEN dlen;
7005 char *dst = SvPV_force_nomg(pat, dlen)((((pat)->sv_flags & (0x00000400|0x00000100|0x00000200
|0x00000800|0x00008000|(0x08000000|0x00010000|0x00000800|0x01000000
|0x00800000|0x10000000)|0x00200000)) == 0x00000400) ? ((dlen
= (*({ const SV *const _svcur = (const SV *)(pat); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7005, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7005, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7005, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))), (*({ SV *const _svpvx = ((SV *)({ void *
_p = (pat); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 7005, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7005, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7005, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))) : Perl_sv_pvn_force_flags
( pat,&dlen,0))
;
7006 orig_patlen = dlen;
7007 if (SvUTF8(msv)((msv)->sv_flags & 0x20000000) && !SvUTF8(pat)((pat)->sv_flags & 0x20000000)) {
7008 S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &dst, &dlen, n);
7009 sv_setpvn(pat, dst, dlen)Perl_sv_setpvn( pat,dst,dlen);
7010 SvUTF8_on(pat)((pat)->sv_flags |= (0x20000000));
7011 }
7012 sv_catsv_nomg(pat, msv)Perl_sv_catsv_flags( pat,msv,0);
7013 rx = msv;
7014 }
7015 else {
7016 /* We have only one SV to process, but we need to verify
7017 * it is properly null terminated or we will fail asserts
7018 * later. In theory we probably shouldn't get such SV's,
7019 * but if we do we should handle it gracefully. */
7020 if ( SvTYPE(msv)((svtype)((msv)->sv_flags & 0xff)) != SVt_PV || (SvLEN(msv)((XPV*) (msv)->sv_any)->xpv_len_u.xpvlenu_len > SvCUR(msv)(*({ const SV *const _svcur = (const SV *)(msv); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7020, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7020, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7020, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
&& *(SvEND(msv)((msv)->sv_u.svu_pv + ((XPV*)(msv)->sv_any)->xpv_cur
)
) == 0) || SvIsCOW_shared_hash(msv)(((msv)->sv_flags & 0x10000000) && ((XPV*) (msv
)->sv_any)->xpv_len_u.xpvlenu_len == 0)
) {
7021 /* not a string, or a string with a trailing null */
7022 pat = msv;
7023 } else {
7024 /* a string with no trailing null, we need to copy it
7025 * so it has a trailing null */
7026 pat = sv_2mortal(newSVsv(msv))Perl_sv_2mortal( Perl_newSVsv_flags( (msv),2|16));
7027 }
7028 }
7029
7030 if (code)
7031 pRExC_state->code_blocks->cb[n-1].end = SvCUR(pat)(*({ const SV *const _svcur = (const SV *)(pat); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7031, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7031, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7031, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
-1;
7032 }
7033
7034 /* extract any code blocks within any embedded qr//'s */
7035 if (rx && SvTYPE(rx)((svtype)((rx)->sv_flags & 0xff)) == SVt_REGEXP
7036 && RX_ENGINE((REGEXP*)rx)(((Perl_ReANY((const REGEXP *)((REGEXP*)rx)))->engine))->op_comp)
7037 {
7038
7039 RXi_GET_DECL(ReANY((REGEXP *)rx), ri)regexp_internal *ri = ((regexp_internal *)((Perl_ReANY((const
REGEXP *)((REGEXP *)rx)))->pprivate))
;
7040 if (ri->code_blocks && ri->code_blocks->count) {
7041 int i;
7042 /* the presence of an embedded qr// with code means
7043 * we should always recompile: the text of the
7044 * qr// may not have changed, but it may be a
7045 * different closure than last time */
7046 *recompile_p = 1;
7047 if (pRExC_state->code_blocks) {
7048 int new_count = pRExC_state->code_blocks->count
7049 + ri->code_blocks->count;
7050 Renew(pRExC_state->code_blocks->cb,(pRExC_state->code_blocks->cb = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(new_count) || sizeof(struct
reg_code_block) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(new_count)))) ? (size_t)(new_count) : ((size_t)-1)/sizeof
(struct reg_code_block)) > ((size_t)-1)/sizeof(struct reg_code_block
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (struct reg_code_block*)(Perl_safesysrealloc((void *)
(pRExC_state->code_blocks->cb),(size_t)((new_count)*sizeof
(struct reg_code_block))))))
7051 new_count, struct reg_code_block)(pRExC_state->code_blocks->cb = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(new_count) || sizeof(struct
reg_code_block) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(new_count)))) ? (size_t)(new_count) : ((size_t)-1)/sizeof
(struct reg_code_block)) > ((size_t)-1)/sizeof(struct reg_code_block
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (struct reg_code_block*)(Perl_safesysrealloc((void *)
(pRExC_state->code_blocks->cb),(size_t)((new_count)*sizeof
(struct reg_code_block))))))
;
7052 pRExC_state->code_blocks->count = new_count;
7053 }
7054 else
7055 pRExC_state->code_blocks = S_alloc_code_blocks(aTHX_
7056 ri->code_blocks->count);
7057
7058 for (i=0; i < ri->code_blocks->count; i++) {
7059 struct reg_code_block *src, *dst;
7060 STRLEN offset = orig_patlen
7061 + ReANY((REGEXP *)rx)Perl_ReANY((const REGEXP *)((REGEXP *)rx))->pre_prefix;
7062 assert(n < pRExC_state->code_blocks->count)((n < pRExC_state->code_blocks->count) ? (void)0 : __assert2
("re_comp.c", 7062, __func__, "n < pRExC_state->code_blocks->count"
))
;
7063 src = &ri->code_blocks->cb[i];
7064 dst = &pRExC_state->code_blocks->cb[n];
7065 dst->start = src->start + offset;
7066 dst->end = src->end + offset;
7067 dst->block = src->block;
7068 dst->src_regex = (REGEXP*) SvREFCNT_inc( (SV*)Perl_SvREFCNT_inc(((SV *)({ void *_p = ((SV*) src->src_regex
? src->src_regex : (REGEXP*)rx); _p; })))
7069 src->src_regexPerl_SvREFCNT_inc(((SV *)({ void *_p = ((SV*) src->src_regex
? src->src_regex : (REGEXP*)rx); _p; })))
7070 ? src->src_regexPerl_SvREFCNT_inc(((SV *)({ void *_p = ((SV*) src->src_regex
? src->src_regex : (REGEXP*)rx); _p; })))
7071 : (REGEXP*)rx)Perl_SvREFCNT_inc(((SV *)({ void *_p = ((SV*) src->src_regex
? src->src_regex : (REGEXP*)rx); _p; })))
;
7072 n++;
7073 }
7074 }
7075 }
7076 }
7077 /* avoid calling magic multiple times on a single element e.g. =~ $qr */
7078 if (alloced)
7079 SvSETMAGIC(pat)do { if (__builtin_expect(((((pat)->sv_flags & 0x00400000
)) ? (_Bool)1 : (_Bool)0),(0))) Perl_mg_set( pat); } while (0
)
;
7080
7081 return pat;
7082}
7083
7084
7085
7086/* see if there are any run-time code blocks in the pattern.
7087 * False positives are allowed */
7088
7089static bool_Bool
7090S_has_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
7091 char *pat, STRLEN plen)
7092{
7093 int n = 0;
7094 STRLEN s;
7095
7096 PERL_UNUSED_CONTEXT;
7097
7098 for (s = 0; s < plen; s++) {
7099 if ( pRExC_state->code_blocks
7100 && n < pRExC_state->code_blocks->count
7101 && s == pRExC_state->code_blocks->cb[n].start)
7102 {
7103 s = pRExC_state->code_blocks->cb[n].end;
7104 n++;
7105 continue;
7106 }
7107 /* TODO ideally should handle [..], (#..), /#.../x to reduce false
7108 * positives here */
7109 if (pat[s] == '(' && s+2 <= plen && pat[s+1] == '?' &&
7110 (pat[s+2] == '{'
7111 || (s + 2 <= plen && pat[s+2] == '?' && pat[s+3] == '{'))
7112 )
7113 return 1;
7114 }
7115 return 0;
7116}
7117
7118/* Handle run-time code blocks. We will already have compiled any direct
7119 * or indirect literal code blocks. Now, take the pattern 'pat' and make a
7120 * copy of it, but with any literal code blocks blanked out and
7121 * appropriate chars escaped; then feed it into
7122 *
7123 * eval "qr'modified_pattern'"
7124 *
7125 * For example,
7126 *
7127 * a\bc(?{"this was literal"})def'ghi\\jkl(?{"this is runtime"})mno
7128 *
7129 * becomes
7130 *
7131 * qr'a\\bc_______________________def\'ghi\\\\jkl(?{"this is runtime"})mno'
7132 *
7133 * After eval_sv()-ing that, grab any new code blocks from the returned qr
7134 * and merge them with any code blocks of the original regexp.
7135 *
7136 * If the pat is non-UTF8, while the evalled qr is UTF8, don't merge;
7137 * instead, just save the qr and return FALSE; this tells our caller that
7138 * the original pattern needs upgrading to utf8.
7139 */
7140
7141static bool_Bool
7142S_compile_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
7143 char *pat, STRLEN plen)
7144{
7145 SV *qr;
7146
7147 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7147, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 7147, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
7148
7149 if (pRExC_state->runtime_code_qr) {
7150 /* this is the second time we've been called; this should
7151 * only happen if the main pattern got upgraded to utf8
7152 * during compilation; re-use the qr we compiled first time
7153 * round (which should be utf8 too)
7154 */
7155 qr = pRExC_state->runtime_code_qr;
7156 pRExC_state->runtime_code_qr = NULL((void*)0);
7157 assert(RExC_utf8 && SvUTF8(qr))(((pRExC_state->utf8) && ((qr)->sv_flags & 0x20000000
)) ? (void)0 : __assert2("re_comp.c", 7157, __func__, "RExC_utf8 && SvUTF8(qr)"
))
;
7158 }
7159 else {
7160 int n = 0;
7161 STRLEN s;
7162 char *p, *newpat;
7163 int newlen = plen + 7; /* allow for "qr''xx\0" extra chars */
7164 SV *sv, *qr_ref;
7165 dSPSV **sp = PL_stack_sp;
7166
7167 /* determine how many extra chars we need for ' and \ escaping */
7168 for (s = 0; s < plen; s++) {
7169 if (pat[s] == '\'' || pat[s] == '\\')
7170 newlen++;
7171 }
7172
7173 Newx(newpat, newlen, char)(newpat = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(newlen) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(newlen)))) ? (size_t)(newlen) : ((size_t)-1)/sizeof
(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)
0),(0)) && (Perl_croak_memory_wrap(),0)), (char*)(Perl_safesysmalloc
((size_t)((newlen)*sizeof(char))))))
;
7174 p = newpat;
7175 *p++ = 'q'; *p++ = 'r'; *p++ = '\'';
7176
7177 for (s = 0; s < plen; s++) {
7178 if ( pRExC_state->code_blocks
7179 && n < pRExC_state->code_blocks->count
7180 && s == pRExC_state->code_blocks->cb[n].start)
7181 {
7182 /* blank out literal code block so that they aren't
7183 * recompiled: eg change from/to:
7184 * /(?{xyz})/
7185 * /(?=====)/
7186 * and
7187 * /(??{xyz})/
7188 * /(?======)/
7189 * and
7190 * /(?(?{xyz}))/
7191 * /(?(?=====))/
7192 */
7193 assert(pat[s] == '(')((pat[s] == '(') ? (void)0 : __assert2("re_comp.c", 7193, __func__
, "pat[s] == '('"))
;
7194 assert(pat[s+1] == '?')((pat[s+1] == '?') ? (void)0 : __assert2("re_comp.c", 7194, __func__
, "pat[s+1] == '?'"))
;
7195 *p++ = '(';
7196 *p++ = '?';
7197 s += 2;
7198 while (s < pRExC_state->code_blocks->cb[n].end) {
7199 *p++ = '=';
7200 s++;
7201 }
7202 *p++ = ')';
7203 n++;
7204 continue;
7205 }
7206 if (pat[s] == '\'' || pat[s] == '\\')
7207 *p++ = '\\';
7208 *p++ = pat[s];
7209 }
7210 *p++ = '\'';
7211 if (pRExC_state->pm_flags & RXf_PMf_EXTENDED(1U << (0 +3))) {
7212 *p++ = 'x';
7213 if (pRExC_state->pm_flags & RXf_PMf_EXTENDED_MORE(1U << (0 +4))) {
7214 *p++ = 'x';
7215 }
7216 }
7217 *p++ = '\0';
7218 DEBUG_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "%sre-parsing pattern for runtime code:%s %s\n", PL_colors[
4], PL_colors[5], newpat); };} while (0)
7219 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "%sre-parsing pattern for runtime code:%s %s\n", PL_colors[
4], PL_colors[5], newpat); };} while (0)
7220 "%sre-parsing pattern for runtime code:%s %s\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "%sre-parsing pattern for runtime code:%s %s\n", PL_colors[
4], PL_colors[5], newpat); };} while (0)
7221 PL_colors[4], PL_colors[5], newpat);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "%sre-parsing pattern for runtime code:%s %s\n", PL_colors[
4], PL_colors[5], newpat); };} while (0)
7222 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { Perl_re_printf
( "%sre-parsing pattern for runtime code:%s %s\n", PL_colors[
4], PL_colors[5], newpat); };} while (0)
;
7223
7224 sv = newSVpvn_flags(newpat, p-newpat-1, RExC_utf8 ? SVf_UTF8 : 0)Perl_newSVpvn_flags( newpat,p-newpat-1,(pRExC_state->utf8)
? 0x20000000 : 0)
;
7225 Safefree(newpat)Perl_safesysfree(((void *)(newpat)));
7226
7227 ENTERdo { Perl_push_scope(); if (__builtin_expect(((PL_debug &
0x00000004) ? (_Bool)1 : (_Bool)0),(0))) Perl_deb( "%s scope %ld (savestack=%ld) at %s:%d\n"
, "ENTER", (long)PL_scopestack_ix, (long)PL_savestack_ix, "re_comp.c"
, 7227); } while (0)
;
7228 SAVETMPSPerl_savetmps();
7229 save_re_context()Perl_save_re_context();
7230 PUSHSTACKi(PERLSI_REQUIRE)do { PERL_SI *next = PL_curstackinfo->si_next; if (__builtin_expect
(((PL_debug & 0x00000004) ? (_Bool)1 : (_Bool)0),(0))) { int
i = 0; PERL_SI *p = PL_curstackinfo; while (p) { i++; p = p->
si_prev; } Perl_deb( "push STACKINFO %d at %s:%d\n", i, "re_comp.c"
, 7230);} if (!next) { next = Perl_new_stackinfo( 32,2048/sizeof
(PERL_CONTEXT) - 1); next->si_prev = PL_curstackinfo; PL_curstackinfo
->si_next = next; } next->si_type = 9; next->si_cxix
= -1; next->si_cxsubix = -1; (void)0; ((XPVAV*) (next->
si_stack)->sv_any)->xav_fill = 0; do { ((XPVAV*) (PL_curstack
)->sv_any)->xav_fill = sp - PL_stack_base; PL_stack_base
= ((next->si_stack)->sv_u.svu_array); PL_stack_max = PL_stack_base
+ ((XPVAV*) (next->si_stack)->sv_any)->xav_max; sp =
PL_stack_sp = PL_stack_base + ((XPVAV*) (next->si_stack)->
sv_any)->xav_fill; PL_curstack = next->si_stack; } while
(0); PL_curstackinfo = next; PL_curstackinfo->si_markoff =
PL_markstack_ptr - PL_markstack; } while (0)
;
7231 /* G_RE_REPARSING causes the toker to collapse \\ into \ when
7232 * parsing qr''; normally only q'' does this. It also alters
7233 * hints handling */
7234 eval_sv(sv, G_SCALAR|G_RE_REPARSING)Perl_eval_sv( sv,2|0x800);
7235 SvREFCNT_dec_NN(sv)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (sv); _p; })));
7236 SPAGAINsp = PL_stack_sp;
7237 qr_ref = POPs(*sp--);
7238 PUTBACKPL_stack_sp = sp;
7239 {
7240 SV * const errsv = ERRSV(*((0+(*({GV *const _gvgp = (GV *) (PL_errgv); ((((svtype)((_gvgp
)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_gvgp)->
sv_flags & 0xff)) == SVt_PVLV) ? (void)0 : __assert2("re_comp.c"
, 7240, __func__, "SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV"
)); ((((((_gvgp)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((_gvgp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_gvgp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7240, __func__
, "isGV_with_GP(_gvgp)")); &((_gvgp)->sv_u.svu_gp);}))
)->gp_sv ? &((0+(*({GV *const _gvgp = (GV *) (PL_errgv
); ((((svtype)((_gvgp)->sv_flags & 0xff)) == SVt_PVGV ||
((svtype)((_gvgp)->sv_flags & 0xff)) == SVt_PVLV) ? (
void)0 : __assert2("re_comp.c", 7240, __func__, "SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV"
)); ((((((_gvgp)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((_gvgp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_gvgp)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7240, __func__
, "isGV_with_GP(_gvgp)")); &((_gvgp)->sv_u.svu_gp);}))
)->gp_sv) : &((0+(*({GV *const _gvgp = (GV *) (Perl_gv_add_by_type
( (PL_errgv),SVt_NULL)); ((((svtype)((_gvgp)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_gvgp)->sv_flags & 0xff
)) == SVt_PVLV) ? (void)0 : __assert2("re_comp.c", 7240, __func__
, "SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV"));
((((((_gvgp)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_gvgp)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_gvgp)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 7240, __func__, "isGV_with_GP(_gvgp)"
)); &((_gvgp)->sv_u.svu_gp);})))->gp_sv)))
;
7241 if (SvTRUE_NN(errsv)(((void)(__builtin_expect(((((errsv)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( errsv)
)), (( ((size_t)((errsv) - &(PL_sv_immortals[0])) < 4)
? ((errsv) == &(PL_sv_immortals[0])) : !((errsv)->sv_flags
& (0x00000100|0x00000200|0x00000400|0x00000800| 0x00001000
|0x00002000|0x00004000|0x00008000)) ? 0 : ((errsv)->sv_flags
& 0x00000400) ? ( ((XPV*)((errsv))->sv_any) &&
( ((XPV*)((errsv))->sv_any)->xpv_cur > 1 || ( ((XPV
*)((errsv))->sv_any)->xpv_cur && *(errsv)->sv_u
.svu_pv != '0' ) ) ) : ((errsv)->sv_flags & 0x00000100
) ? ((*({ const SV *const _svivx = (const SV *)(errsv); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7241, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7241, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) != 0 ) :
(((errsv)->sv_flags & 0x00000800) && !( (((*(
{ SV *const _svrv = ((SV *)({ void *_p = (errsv); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 7241, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 7241, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7241, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0x00100000
) && (((*({ const SV *const _svstash = (const SV *)((
*({ SV *const _svrv = ((SV *)({ void *_p = (errsv); _p; })); (
(PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)
) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7241, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 7241, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7241, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); ((((svtype)((_svstash
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 7241, __func__, "SvTYPE(_svstash) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svstash)->sv_any); _p
; }))->xmg_stash); })))->sv_flags & 0x10000000))) ?
(1) : (Perl_sv_2bool_flags( errsv,0)))))
)
7242 /* use croak_sv ? */
7243 Perl_croak_nocontextPerl_croak("%" SVf"-p", SVfARG(errsv)((void*)(errsv)));
7244 }
7245 assert(SvROK(qr_ref))((((qr_ref)->sv_flags & 0x00000800)) ? (void)0 : __assert2
("re_comp.c", 7245, __func__, "SvROK(qr_ref)"))
;
7246 qr = SvRV(qr_ref)(*({ SV *const _svrv = ((SV *)({ void *_p = (qr_ref); _p; }))
; ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7246, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 7246, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7246, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))
;
7247 assert(SvTYPE(qr) == SVt_REGEXP && RX_ENGINE((REGEXP*)qr)->op_comp)((((svtype)((qr)->sv_flags & 0xff)) == SVt_REGEXP &&
(((Perl_ReANY((const REGEXP *)((REGEXP*)qr)))->engine))->
op_comp) ? (void)0 : __assert2("re_comp.c", 7247, __func__, "SvTYPE(qr) == SVt_REGEXP && RX_ENGINE((REGEXP*)qr)->op_comp"
))
;
7248 /* the leaving below frees the tmp qr_ref.
7249 * Give qr a life of its own */
7250 SvREFCNT_inc(qr)Perl_SvREFCNT_inc(((SV *)({ void *_p = (qr); _p; })));
7251 POPSTACKdo { SV **sp = PL_stack_sp; PERL_SI * const prev = PL_curstackinfo
->si_prev; if (__builtin_expect(((PL_debug & 0x00000004
) ? (_Bool)1 : (_Bool)0),(0))) { int i = -1; PERL_SI *p = PL_curstackinfo
; while (p) { i++; p = p->si_prev; } Perl_deb( "pop STACKINFO %d at %s:%d\n"
, i, "re_comp.c", 7251);} if (!prev) { Perl_croak_popstack();
} do { ((XPVAV*) (PL_curstack)->sv_any)->xav_fill = sp
- PL_stack_base; PL_stack_base = ((prev->si_stack)->sv_u
.svu_array); PL_stack_max = PL_stack_base + ((XPVAV*) (prev->
si_stack)->sv_any)->xav_max; sp = PL_stack_sp = PL_stack_base
+ ((XPVAV*) (prev->si_stack)->sv_any)->xav_fill; PL_curstack
= prev->si_stack; } while (0); PL_curstackinfo = prev; } while
(0)
;
7252 FREETMPSif (PL_tmps_ix > PL_tmps_floor) Perl_free_tmps();
7253 LEAVEdo { if (__builtin_expect(((PL_debug & 0x00000004) ? (_Bool
)1 : (_Bool)0),(0))) Perl_deb( "%s scope %ld (savestack=%ld) at %s:%d\n"
, "LEAVE", (long)PL_scopestack_ix, (long)PL_savestack_ix, "re_comp.c"
, 7253); Perl_pop_scope(); } while (0)
;
7254
7255 }
7256
7257 if (!RExC_utf8(pRExC_state->utf8) && SvUTF8(qr)((qr)->sv_flags & 0x20000000)) {
7258 /* first time through; the pattern got upgraded; save the
7259 * qr for the next time through */
7260 assert(!pRExC_state->runtime_code_qr)((!pRExC_state->runtime_code_qr) ? (void)0 : __assert2("re_comp.c"
, 7260, __func__, "!pRExC_state->runtime_code_qr"))
;
7261 pRExC_state->runtime_code_qr = qr;
7262 return 0;
7263 }
7264
7265
7266 /* extract any code blocks within the returned qr// */
7267
7268
7269 /* merge the main (r1) and run-time (r2) code blocks into one */
7270 {
7271 RXi_GET_DECL(ReANY((REGEXP *)qr), r2)regexp_internal *r2 = ((regexp_internal *)((Perl_ReANY((const
REGEXP *)((REGEXP *)qr)))->pprivate))
;
7272 struct reg_code_block *new_block, *dst;
7273 RExC_state_t * const r1 = pRExC_state; /* convenient alias */
7274 int i1 = 0, i2 = 0;
7275 int r1c, r2c;
7276
7277 if (!r2->code_blocks || !r2->code_blocks->count) /* we guessed wrong */
7278 {
7279 SvREFCNT_dec_NN(qr)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (qr); _p; })));
7280 return 1;
7281 }
7282
7283 if (!r1->code_blocks)
7284 r1->code_blocks = S_alloc_code_blocks(aTHX_ 0);
7285
7286 r1c = r1->code_blocks->count;
7287 r2c = r2->code_blocks->count;
7288
7289 Newx(new_block, r1c + r2c, struct reg_code_block)(new_block = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(r1c + r2c) || sizeof(struct reg_code_block) > ((size_t
)1 << 8*(sizeof(size_t) - sizeof(r1c + r2c)))) ? (size_t
)(r1c + r2c) : ((size_t)-1)/sizeof(struct reg_code_block)) >
((size_t)-1)/sizeof(struct reg_code_block))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (struct reg_code_block
*)(Perl_safesysmalloc((size_t)((r1c + r2c)*sizeof(struct reg_code_block
))))))
;
7290
7291 dst = new_block;
7292
7293 while (i1 < r1c || i2 < r2c) {
7294 struct reg_code_block *src;
7295 bool_Bool is_qr = 0;
7296
7297 if (i1 == r1c) {
7298 src = &r2->code_blocks->cb[i2++];
7299 is_qr = 1;
7300 }
7301 else if (i2 == r2c)
7302 src = &r1->code_blocks->cb[i1++];
7303 else if ( r1->code_blocks->cb[i1].start
7304 < r2->code_blocks->cb[i2].start)
7305 {
7306 src = &r1->code_blocks->cb[i1++];
7307 assert(src->end < r2->code_blocks->cb[i2].start)((src->end < r2->code_blocks->cb[i2].start) ? (void
)0 : __assert2("re_comp.c", 7307, __func__, "src->end < r2->code_blocks->cb[i2].start"
))
;
7308 }
7309 else {
7310 assert( r1->code_blocks->cb[i1].start((r1->code_blocks->cb[i1].start > r2->code_blocks
->cb[i2].start) ? (void)0 : __assert2("re_comp.c", 7311, __func__
, "r1->code_blocks->cb[i1].start > r2->code_blocks->cb[i2].start"
))
7311 > r2->code_blocks->cb[i2].start)((r1->code_blocks->cb[i1].start > r2->code_blocks
->cb[i2].start) ? (void)0 : __assert2("re_comp.c", 7311, __func__
, "r1->code_blocks->cb[i1].start > r2->code_blocks->cb[i2].start"
))
;
7312 src = &r2->code_blocks->cb[i2++];
7313 is_qr = 1;
7314 assert(src->end < r1->code_blocks->cb[i1].start)((src->end < r1->code_blocks->cb[i1].start) ? (void
)0 : __assert2("re_comp.c", 7314, __func__, "src->end < r1->code_blocks->cb[i1].start"
))
;
7315 }
7316
7317 assert(pat[src->start] == '(')((pat[src->start] == '(') ? (void)0 : __assert2("re_comp.c"
, 7317, __func__, "pat[src->start] == '('"))
;
7318 assert(pat[src->end] == ')')((pat[src->end] == ')') ? (void)0 : __assert2("re_comp.c",
7318, __func__, "pat[src->end] == ')'"))
;
7319 dst->start = src->start;
7320 dst->end = src->end;
7321 dst->block = src->block;
7322 dst->src_regex = is_qr ? (REGEXP*) SvREFCNT_inc( (SV*) qr)Perl_SvREFCNT_inc(((SV *)({ void *_p = ((SV*) qr); _p; })))
7323 : src->src_regex;
7324 dst++;
7325 }
7326 r1->code_blocks->count += r2c;
7327 Safefree(r1->code_blocks->cb)Perl_safesysfree(((void *)(r1->code_blocks->cb)));
7328 r1->code_blocks->cb = new_block;
7329 }
7330
7331 SvREFCNT_dec_NN(qr)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (qr); _p; })));
7332 return 1;
7333}
7334
7335
7336STATICstatic bool_Bool
7337S_setup_longest(pTHX_ RExC_state_t *pRExC_state,
7338 struct reg_substr_datum *rsd,
7339 struct scan_data_substrs *sub,
7340 STRLEN longest_length)
7341{
7342 /* This is the common code for setting up the floating and fixed length
7343 * string data extracted from Perl_re_op_compile() below. Returns a boolean
7344 * as to whether succeeded or not */
7345
7346 I32 t;
7347 SSize_tssize_t ml;
7348 bool_Bool eol = cBOOL(sub->flags & SF_BEFORE_EOL)((sub->flags & (0x0001|0x0002)) ? (_Bool)1 : (_Bool)0);
7349 bool_Bool meol = cBOOL(sub->flags & SF_BEFORE_MEOL)((sub->flags & 0x0002) ? (_Bool)1 : (_Bool)0);
7350
7351 if (! (longest_length
7352 || (eol /* Can't have SEOL and MULTI */
7353 && (! meol || (RExC_flags(pRExC_state->flags) & RXf_PMf_MULTILINE(1U << (0 +0)))))
7354 )
7355 /* See comments for join_exact for why REG_UNFOLDED_MULTI_SEEN */
7356 || (RExC_seen(pRExC_state->seen) & REG_UNFOLDED_MULTI_SEEN0x00000400))
7357 {
7358 return FALSE(0);
7359 }
7360
7361 /* copy the information about the longest from the reg_scan_data
7362 over to the program. */
7363 if (SvUTF8(sub->str)((sub->str)->sv_flags & 0x20000000)) {
7364 rsd->substr = NULL((void*)0);
7365 rsd->utf8_substr = sub->str;
7366 } else {
7367 rsd->substr = sub->str;
7368 rsd->utf8_substr = NULL((void*)0);
7369 }
7370 /* end_shift is how many chars that must be matched that
7371 follow this item. We calculate it ahead of time as once the
7372 lookbehind offset is added in we lose the ability to correctly
7373 calculate it.*/
7374 ml = sub->minlenp ? *(sub->minlenp) : (SSize_tssize_t)longest_length;
7375 rsd->end_shift = ml - sub->min_offset
7376 - longest_length
7377 /* XXX SvTAIL is always false here - did you mean FBMcf_TAIL
7378 * intead? - DAPM
7379 + (SvTAIL(sub->str) != 0)
7380 */
7381 + sub->lookbehind;
7382
7383 t = (eol/* Can't have SEOL and MULTI */
7384 && (! meol || (RExC_flags(pRExC_state->flags) & RXf_PMf_MULTILINE(1U << (0 +0)))));
7385 fbm_compile(sub->str, t ? FBMcf_TAIL : 0)Perl_fbm_compile( sub->str,t ? (1|2|4|8) : 0);
7386
7387 return TRUE(1);
7388}
7389
7390STATICstatic void
7391S_set_regex_pv(pTHX_ RExC_state_t *pRExC_state, REGEXP *Rx)
7392{
7393 /* Calculates and sets in the compiled pattern 'Rx' the string to compile,
7394 * properly wrapped with the right modifiers */
7395
7396 bool_Bool has_p = ((RExC_rx(pRExC_state->rx)->extflags & RXf_PMf_KEEPCOPY(1U << (0 +6))) == RXf_PMf_KEEPCOPY(1U << (0 +6)));
7397 bool_Bool has_charset = RExC_utf8(pRExC_state->utf8) || (get_regex_charset(RExC_rx(pRExC_state->rx)->extflags)
7398 != REGEX_DEPENDS_CHARSET);
7399
7400 /* The caret is output if there are any defaults: if not all the STD
7401 * flags are set, or if no character set specifier is needed */
7402 bool_Bool has_default =
7403 (((RExC_rx(pRExC_state->rx)->extflags & RXf_PMf_STD_PMMOD((1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2
))|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
5)))
) != RXf_PMf_STD_PMMOD((1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2
))|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
5)))
)
7404 || ! has_charset);
7405 bool_Bool has_runon = ((RExC_seen(pRExC_state->seen) & REG_RUN_ON_COMMENT_SEEN0x00000200)
7406 == REG_RUN_ON_COMMENT_SEEN0x00000200);
7407 U8 reganch = (U8)((RExC_rx(pRExC_state->rx)->extflags & RXf_PMf_STD_PMMOD((1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2
))|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
5)))
)
7408 >> RXf_PMf_STD_PMMOD_SHIFT0);
7409 const char *fptr = STD_PAT_MODS"msixxn"; /*"msixxn"*/
7410 char *p;
7411 STRLEN pat_len = RExC_precomp_end(pRExC_state->precomp_end) - RExC_precomp(pRExC_state->precomp);
7412
7413 /* We output all the necessary flags; we never output a minus, as all
7414 * those are defaults, so are
7415 * covered by the caret */
7416 const STRLEN wraplen = pat_len + has_p + has_runon
7417 + has_default /* If needs a caret */
7418 + PL_bitcount[reganch] /* 1 char for each set standard flag */
7419
7420 /* If needs a character set specifier */
7421 + ((has_charset) ? MAX_CHARSET_NAME_LENGTH2 : 0)
7422 + (sizeof("(?:)") - 1);
7423
7424 PERL_ARGS_ASSERT_SET_REGEX_PV((pRExC_state) ? (void)0 : __assert2("re_comp.c", 7424, __func__
, "pRExC_state")); ((Rx) ? (void)0 : __assert2("re_comp.c", 7424
, __func__, "Rx"))
;
7425
7426 /* make sure PL_bitcount bounds not exceeded */
7427 assert(sizeof(STD_PAT_MODS) <= 8)((sizeof("msixxn") <= 8) ? (void)0 : __assert2("re_comp.c"
, 7427, __func__, "sizeof(STD_PAT_MODS) <= 8"))
;
7428
7429 p = sv_grow(MUTABLE_SV(Rx), wraplen + 1)Perl_sv_grow( ((SV *)({ void *_p = (Rx); _p; })),wraplen + 1); /* +1 for the ending NUL */
7430 SvPOK_on(Rx)(((!((Rx)->sv_flags & 0x00000800) || !(*({ SV *const _svrv
= ((SV *)({ void *_p = (Rx); _p; })); ((PL_valid_types_RV[((
svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void
)0 : __assert2("re_comp.c", 7430, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7430, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7430, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 7430, __func__, "!((Rx)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (Rx); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 7430, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 7430, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 7430, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((Rx)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((Rx)->sv_flags & 0xff
)) == SVt_PVGV || ((svtype)((Rx)->sv_flags & 0xff)) ==
SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7430, __func__
, "!((((Rx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((Rx)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((Rx)->sv_flags & 0xff)) == SVt_PVLV))"
)), (Rx)->sv_flags |= (0x00000400|0x00004000))
;
7431 if (RExC_utf8(pRExC_state->utf8))
7432 SvFLAGS(Rx)(Rx)->sv_flags |= SVf_UTF80x20000000;
7433 *p++='('; *p++='?';
7434
7435 /* If a default, cover it using the caret */
7436 if (has_default) {
7437 *p++= DEFAULT_PAT_MOD'^';
7438 }
7439 if (has_charset) {
7440 STRLEN len;
7441 const char* name;
7442
7443 name = get_regex_charset_nameS_get_regex_charset_name(RExC_rx(pRExC_state->rx)->extflags, &len);
7444 if (strEQ(name, DEPENDS_PAT_MODS)(strcmp(name,"d") == 0)) { /* /d under UTF-8 => /u */
7445 assert(RExC_utf8)(((pRExC_state->utf8)) ? (void)0 : __assert2("re_comp.c", 7445
, __func__, "RExC_utf8"))
;
7446 name = UNICODE_PAT_MODS"u";
7447 len = sizeof(UNICODE_PAT_MODS"u") - 1;
7448 }
7449 Copy(name, p, len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(len)))) ? (size_t)(len) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)(p)) != 0) ? (void)
0 : __assert2("re_comp.c", 7449, __func__, "((void*)(p)) != 0"
)), ((((void*)(name)) != 0) ? (void)0 : __assert2("re_comp.c"
, 7449, __func__, "((void*)(name)) != 0")), (void)memcpy((char
*)(p),(const char*)(name), (len) * sizeof(char)))
;
7450 p += len;
7451 }
7452 if (has_p)
7453 *p++ = KEEPCOPY_PAT_MOD'p'; /*'p'*/
7454 {
7455 char ch;
7456 while((ch = *fptr++)) {
7457 if(reganch & 1)
7458 *p++ = ch;
7459 reganch >>= 1;
7460 }
7461 }
7462
7463 *p++ = ':';
7464 Copy(RExC_precomp, p, pat_len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(pat_len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(pat_len)))) ? (size_t)(pat_len) : ((size_t)-1)/sizeof
(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)
0),(0)) && (Perl_croak_memory_wrap(),0)), ((((void*)(
p)) != 0) ? (void)0 : __assert2("re_comp.c", 7464, __func__, "((void*)(p)) != 0"
)), ((((void*)((pRExC_state->precomp))) != 0) ? (void)0 : __assert2
("re_comp.c", 7464, __func__, "((void*)((pRExC_state->precomp))) != 0"
)), (void)memcpy((char*)(p),(const char*)((pRExC_state->precomp
)), (pat_len) * sizeof(char)))
;
7465 assert ((RX_WRAPPED(Rx) - p) < 16)((((*({ SV *const _svpvx = ((SV *)({ void *_p = (Rx); _p; }))
; ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7465, __func__
, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]")); ((!(
(((_svpvx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svpvx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 7465, __func__, "!isGV_with_GP(_svpvx)"
)); ((!(((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svpvx)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7465, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })) - p) < 16) ? (void
)0 : __assert2("re_comp.c", 7465, __func__, "(RX_WRAPPED(Rx) - p) < 16"
))
;
7466 RExC_rx(pRExC_state->rx)->pre_prefix = p - RX_WRAPPED(Rx)(*({ SV *const _svpvx = ((SV *)({ void *_p = (Rx); _p; })); (
(PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7466, __func__
, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]")); ((!(
(((_svpvx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svpvx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 7466, __func__, "!isGV_with_GP(_svpvx)"
)); ((!(((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svpvx)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7466, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
7467 p += pat_len;
7468
7469 /* Adding a trailing \n causes this to compile properly:
7470 my $R = qr / A B C # D E/x; /($R)/
7471 Otherwise the parens are considered part of the comment */
7472 if (has_runon)
7473 *p++ = '\n';
7474 *p++ = ')';
7475 *p = 0;
7476 SvCUR_set(Rx, p - RX_WRAPPED(Rx))do { ((PL_valid_types_PVX[((svtype)((Rx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7476, __func__
, "PL_valid_types_PVX[SvTYPE(Rx) & SVt_MASK]")); ((!((((Rx
)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) &&
(((svtype)((Rx)->sv_flags & 0xff)) == SVt_PVGV || ((svtype
)((Rx)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2
("re_comp.c", 7476, __func__, "!isGV_with_GP(Rx)")); ((!(((svtype
)((Rx)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO
*) (Rx)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2
("re_comp.c", 7476, __func__, "!(SvTYPE(Rx) == SVt_PVIO && !(IoFLAGS(Rx) & IOf_FAKE_DIRP))"
)); (((XPV*) (Rx)->sv_any)->xpv_cur = (p - (*({ SV *const
_svpvx = ((SV *)({ void *_p = (Rx); _p; })); ((PL_valid_types_PVX
[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7476, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7476, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7476, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))); } while (0)
;
7477}
7478
7479/*
7480 * Perl_re_op_compile - the perl internal RE engine's function to compile a
7481 * regular expression into internal code.
7482 * The pattern may be passed either as:
7483 * a list of SVs (patternp plus pat_count)
7484 * a list of OPs (expr)
7485 * If both are passed, the SV list is used, but the OP list indicates
7486 * which SVs are actually pre-compiled code blocks
7487 *
7488 * The SVs in the list have magic and qr overloading applied to them (and
7489 * the list may be modified in-place with replacement SVs in the latter
7490 * case).
7491 *
7492 * If the pattern hasn't changed from old_re, then old_re will be
7493 * returned.
7494 *
7495 * eng is the current engine. If that engine has an op_comp method, then
7496 * handle directly (i.e. we assume that op_comp was us); otherwise, just
7497 * do the initial concatenation of arguments and pass on to the external
7498 * engine.
7499 *
7500 * If is_bare_re is not null, set it to a boolean indicating whether the
7501 * arg list reduced (after overloading) to a single bare regex which has
7502 * been returned (i.e. /$qr/).
7503 *
7504 * orig_rx_flags contains RXf_* flags. See perlreapi.pod for more details.
7505 *
7506 * pm_flags contains the PMf_* flags, typically based on those from the
7507 * pm_flags field of the related PMOP. Currently we're only interested in
7508 * PMf_HAS_CV, PMf_IS_QR, PMf_USE_RE_EVAL, PMf_WILDCARD.
7509 *
7510 * For many years this code had an initial sizing pass that calculated
7511 * (sometimes incorrectly, leading to security holes) the size needed for the
7512 * compiled pattern. That was changed by commit
7513 * 7c932d07cab18751bfc7515b4320436273a459e2 in 5.29, which reallocs the size, a
7514 * node at a time, as parsing goes along. Patches welcome to fix any obsolete
7515 * references to this sizing pass.
7516 *
7517 * Now, an initial crude guess as to the size needed is made, based on the
7518 * length of the pattern. Patches welcome to improve that guess. That amount
7519 * of space is malloc'd and then immediately freed, and then clawed back node
7520 * by node. This design is to minimze, to the extent possible, memory churn
7521 * when doing the reallocs.
7522 *
7523 * A separate parentheses counting pass may be needed in some cases.
7524 * (Previously the sizing pass did this.) Patches welcome to reduce the number
7525 * of these cases.
7526 *
7527 * The existence of a sizing pass necessitated design decisions that are no
7528 * longer needed. There are potential areas of simplification.
7529 *
7530 * Beware that the optimization-preparation code in here knows about some
7531 * of the structure of the compiled regexp. [I'll say.]
7532 */
7533
7534REGEXP *
7535Perl_re_op_compilemy_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
7536 OP *expr, const regexp_engine* eng, REGEXP *old_re,
7537 bool_Bool *is_bare_re, const U32 orig_rx_flags, const U32 pm_flags)
7538{
7539 dVARstruct Perl___notused_struct;
7540 REGEXP *Rx; /* Capital 'R' means points to a REGEXP */
7541 STRLEN plen;
7542 char *exp;
7543 regnode *scan;
7544 I32 flags;
7545 SSize_tssize_t minlen = 0;
7546 U32 rx_flags;
7547 SV *pat;
7548 SV** new_patternp = patternp;
7549
7550 /* these are all flags - maybe they should be turned
7551 * into a single int with different bit masks */
7552 I32 sawlookahead = 0;
7553 I32 sawplus = 0;
7554 I32 sawopen = 0;
7555 I32 sawminmod = 0;
7556
7557 regex_charset initial_charset = get_regex_charset(orig_rx_flags);
7558 bool_Bool recompile = 0;
7559 bool_Bool runtime_code = 0;
7560 scan_data_t data;
7561 RExC_state_t RExC_state;
7562 RExC_state_t * const pRExC_state = &RExC_state;
7563#ifdef TRIE_STUDY_OPT
7564 int restudied = 0;
7565 RExC_state_t copyRExC_state;
7566#endif
7567 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7567, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 7567, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
7568
7569 PERL_ARGS_ASSERT_RE_OP_COMPILE((eng) ? (void)0 : __assert2("re_comp.c", 7569, __func__, "eng"
))
;
7570
7571 DEBUG_r(if (!PL_colorset) reginitcolors())do {if (!PL_colorset) Perl_reginitcolors();} while (0);
7572
7573
7574 pRExC_state->warn_text = NULL((void*)0);
7575 pRExC_state->unlexed_names = NULL((void*)0);
7576 pRExC_state->code_blocks = NULL((void*)0);
7577
7578 if (is_bare_re)
7579 *is_bare_re = FALSE(0);
7580
7581 if (expr && (expr->op_type == OP_LIST ||
7582 (expr->op_type == OP_NULL && expr->op_targ == OP_LIST))) {
7583 /* allocate code_blocks if needed */
7584 OP *o;
7585 int ncode = 0;
7586
7587 for (o = cLISTOPx(expr)((LISTOP*)(expr))->op_first; o; o = OpSIBLING(o)(0 + (o)->op_moresib ? (o)->op_sibparent : ((void*)0)))
7588 if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL128))
7589 ncode++; /* count of DO blocks */
7590
7591 if (ncode)
7592 pRExC_state->code_blocks = S_alloc_code_blocks(aTHX_ ncode);
7593 }
7594
7595 if (!pat_count) {
7596 /* compile-time pattern with just OP_CONSTs and DO blocks */
7597
7598 int n;
7599 OP *o;
7600
7601 /* find how many CONSTs there are */
7602 assert(expr)((expr) ? (void)0 : __assert2("re_comp.c", 7602, __func__, "expr"
))
;
7603 n = 0;
7604 if (expr->op_type == OP_CONST)
7605 n = 1;
7606 else
7607 for (o = cLISTOPx(expr)((LISTOP*)(expr))->op_first; o; o = OpSIBLING(o)(0 + (o)->op_moresib ? (o)->op_sibparent : ((void*)0))) {
7608 if (o->op_type == OP_CONST)
7609 n++;
7610 }
7611
7612 /* fake up an SV array */
7613
7614 assert(!new_patternp)((!new_patternp) ? (void)0 : __assert2("re_comp.c", 7614, __func__
, "!new_patternp"))
;
7615 Newx(new_patternp, n, SV*)(new_patternp = ((void)(__builtin_expect(((((( sizeof(size_t)
< sizeof(n) || sizeof(SV*) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(n)))) ? (size_t)(n) : ((size_t)-1)/sizeof(SV
*)) > ((size_t)-1)/sizeof(SV*))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), (SV**)(Perl_safesysmalloc
((size_t)((n)*sizeof(SV*))))))
;
7616 SAVEFREEPV(new_patternp)Perl_save_pushptr( (void *)((char*)(new_patternp)),10);
7617 pat_count = n;
7618
7619 n = 0;
7620 if (expr->op_type == OP_CONST)
7621 new_patternp[n] = cSVOPx_sv(expr)(((SVOP*)(expr))->op_sv);
7622 else
7623 for (o = cLISTOPx(expr)((LISTOP*)(expr))->op_first; o; o = OpSIBLING(o)(0 + (o)->op_moresib ? (o)->op_sibparent : ((void*)0))) {
7624 if (o->op_type == OP_CONST)
7625 new_patternp[n++] = cSVOPo_sv(((SVOP*)(o))->op_sv);
7626 }
7627
7628 }
7629
7630 DEBUG_PARSE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Assembling pattern from %d elements%s\n", pat_count, orig_rx_flags
& (1U<<(0 +11)) ? " for split" : "");} while (0)
7631 "Assembling pattern from %d elements%s\n", pat_count,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Assembling pattern from %d elements%s\n", pat_count, orig_rx_flags
& (1U<<(0 +11)) ? " for split" : "");} while (0)
7632 orig_rx_flags & RXf_SPLIT ? " for split" : ""))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Assembling pattern from %d elements%s\n", pat_count, orig_rx_flags
& (1U<<(0 +11)) ? " for split" : "");} while (0)
;
7633
7634 /* set expr to the first arg op */
7635
7636 if (pRExC_state->code_blocks && pRExC_state->code_blocks->count
7637 && expr->op_type != OP_CONST)
7638 {
7639 expr = cLISTOPx(expr)((LISTOP*)(expr))->op_first;
7640 assert( expr->op_type == OP_PUSHMARK((expr->op_type == OP_PUSHMARK || (expr->op_type == OP_NULL
&& expr->op_targ == OP_PUSHMARK) || expr->op_type
== OP_PADRANGE) ? (void)0 : __assert2("re_comp.c", 7642, __func__
, "expr->op_type == OP_PUSHMARK || (expr->op_type == OP_NULL && expr->op_targ == OP_PUSHMARK) || expr->op_type == OP_PADRANGE"
))
7641 || (expr->op_type == OP_NULL && expr->op_targ == OP_PUSHMARK)((expr->op_type == OP_PUSHMARK || (expr->op_type == OP_NULL
&& expr->op_targ == OP_PUSHMARK) || expr->op_type
== OP_PADRANGE) ? (void)0 : __assert2("re_comp.c", 7642, __func__
, "expr->op_type == OP_PUSHMARK || (expr->op_type == OP_NULL && expr->op_targ == OP_PUSHMARK) || expr->op_type == OP_PADRANGE"
))
7642 || expr->op_type == OP_PADRANGE)((expr->op_type == OP_PUSHMARK || (expr->op_type == OP_NULL
&& expr->op_targ == OP_PUSHMARK) || expr->op_type
== OP_PADRANGE) ? (void)0 : __assert2("re_comp.c", 7642, __func__
, "expr->op_type == OP_PUSHMARK || (expr->op_type == OP_NULL && expr->op_targ == OP_PUSHMARK) || expr->op_type == OP_PADRANGE"
))
;
7643 expr = OpSIBLING(expr)(0 + (expr)->op_moresib ? (expr)->op_sibparent : ((void
*)0))
;
7644 }
7645
7646 pat = S_concat_pat(aTHX_ pRExC_state, NULL((void*)0), new_patternp, pat_count,
7647 expr, &recompile, NULL((void*)0));
7648
7649 /* handle bare (possibly after overloading) regex: foo =~ $re */
7650 {
7651 SV *re = pat;
7652 if (SvROK(re)((re)->sv_flags & 0x00000800))
7653 re = SvRV(re)(*({ SV *const _svrv = ((SV *)({ void *_p = (re); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 7653, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 7653, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7653, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))
;
7654 if (SvTYPE(re)((svtype)((re)->sv_flags & 0xff)) == SVt_REGEXP) {
7655 if (is_bare_re)
7656 *is_bare_re = TRUE(1);
7657 SvREFCNT_inc(re)Perl_SvREFCNT_inc(((SV *)({ void *_p = (re); _p; })));
7658 DEBUG_PARSE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Precompiled pattern%s\n", orig_rx_flags & (1U<<(
0 +11)) ? " for split" : "");} while (0)
7659 "Precompiled pattern%s\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Precompiled pattern%s\n", orig_rx_flags & (1U<<(
0 +11)) ? " for split" : "");} while (0)
7660 orig_rx_flags & RXf_SPLIT ? " for split" : ""))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Precompiled pattern%s\n", orig_rx_flags & (1U<<(
0 +11)) ? " for split" : "");} while (0)
;
7661
7662 return (REGEXP*)re;
7663 }
7664 }
7665
7666 exp = SvPV_nomg(pat, plen)((((pat)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((plen = (*({ const SV *const _svcur = (const SV *)(pat);
((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7666, __func__
, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]")); ((!(
(((_svcur)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svcur)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 7666, __func__, "!isGV_with_GP(_svcur)"
)); ((!(((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svcur)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7666, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))), (*({ SV *const _svpvx = ((SV *)({ void *
_p = (pat); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 7666, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7666, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7666, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))) : Perl_sv_2pv_flags
( pat,&plen,0))
;
7667
7668 if (!eng->op_comp) {
7669 if ((SvUTF8(pat)((pat)->sv_flags & 0x20000000) && IN_BYTES__builtin_expect(((((PL_curcop)->cop_hints + 0) & 0x00000008
) ? (_Bool)1 : (_Bool)0),(0))
)
7670 || SvGMAGICAL(pat)((pat)->sv_flags & 0x00200000) || SvAMAGIC(pat)(((pat)->sv_flags & 0x00000800) && (((*({ SV *
const _svrv = ((SV *)({ void *_p = (pat); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7670, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7670, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7670, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); })))->sv_flags & 0x00100000
) && (((*({ const SV *const _svstash = (const SV *)((
*({ SV *const _svrv = ((SV *)({ void *_p = (pat); _p; })); ((
PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff))
& 0x1f]) ? (void)0 : __assert2("re_comp.c", 7670, __func__
, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]")); ((!(((
(_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))
) ? (void)0 : __assert2("re_comp.c", 7670, __func__, "!isGV_with_GP(_svrv)"
)); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svrv)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 7670, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); ((((svtype)((_svstash
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 7670, __func__, "SvTYPE(_svstash) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svstash)->sv_any); _p
; }))->xmg_stash); })))->sv_flags & 0x10000000))
)
7671 {
7672 /* make a temporary copy; either to convert to bytes,
7673 * or to avoid repeating get-magic / overloaded stringify */
7674 pat = newSVpvn_flags(exp, plen, SVs_TEMP |Perl_newSVpvn_flags( exp,plen,0x00080000 | (__builtin_expect(
((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool)
1 : (_Bool)0),(0)) ? 0 : ((pat)->sv_flags & 0x20000000
)))
7675 (IN_BYTES ? 0 : SvUTF8(pat)))Perl_newSVpvn_flags( exp,plen,0x00080000 | (__builtin_expect(
((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool)
1 : (_Bool)0),(0)) ? 0 : ((pat)->sv_flags & 0x20000000
)))
;
7676 }
7677 return CALLREGCOMP_ENG(eng, pat, orig_rx_flags)(eng)->comp( pat, orig_rx_flags);
7678 }
7679
7680 /* ignore the utf8ness if the pattern is 0 length */
7681 RExC_utf8(pRExC_state->utf8) = RExC_orig_utf8(pRExC_state->orig_utf8) = (plen == 0 || IN_BYTES__builtin_expect(((((PL_curcop)->cop_hints + 0) & 0x00000008
) ? (_Bool)1 : (_Bool)0),(0))
) ? 0 : SvUTF8(pat)((pat)->sv_flags & 0x20000000);
7682 RExC_uni_semantics(pRExC_state->uni_semantics) = 0;
7683 RExC_contains_locale(pRExC_state->contains_locale) = 0;
7684 RExC_strict(pRExC_state->strict) = cBOOL(pm_flags & RXf_PMf_STRICT)((pm_flags & (1U<<(0 +10))) ? (_Bool)1 : (_Bool)0);
7685 RExC_in_script_run(pRExC_state->in_script_run) = 0;
7686 RExC_study_started(pRExC_state->study_started) = 0;
7687 pRExC_state->runtime_code_qr = NULL((void*)0);
7688 RExC_frame_head(pRExC_state->frame_head)= NULL((void*)0);
7689 RExC_frame_last(pRExC_state->frame_last)= NULL((void*)0);
7690 RExC_frame_count(pRExC_state->frame_count)= 0;
7691 RExC_latest_warn_offset(pRExC_state->latest_warn_offset ) = 0;
7692 RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ) = 0;
7693 RExC_warned_WARN_EXPERIMENTAL__VLB(pRExC_state->sWARN_EXPERIMENTAL__VLB) = 0;
7694 RExC_warned_WARN_EXPERIMENTAL__REGEX_SETS(pRExC_state->sWARN_EXPERIMENTAL__REGEX_SETS) = 0;
7695 RExC_total_parens(pRExC_state->total_par) = 0;
7696 RExC_open_parens(pRExC_state->open_parens) = NULL((void*)0);
7697 RExC_close_parens(pRExC_state->close_parens) = NULL((void*)0);
7698 RExC_paren_names(pRExC_state->paren_names) = NULL((void*)0);
7699 RExC_size(pRExC_state->size) = 0;
7700 RExC_seen_d_op(pRExC_state->seen_d_op) = FALSE(0);
7701#ifdef DEBUGGING
7702 RExC_paren_name_list(pRExC_state->paren_name_list) = NULL((void*)0);
7703#endif
7704
7705 DEBUG_r({do {{ (pRExC_state->mysv1)= Perl_sv_newmortal(); (pRExC_state
->mysv2)= Perl_sv_newmortal(); };} while (0)
7706 RExC_mysv1= sv_newmortal();do {{ (pRExC_state->mysv1)= Perl_sv_newmortal(); (pRExC_state
->mysv2)= Perl_sv_newmortal(); };} while (0)
7707 RExC_mysv2= sv_newmortal();do {{ (pRExC_state->mysv1)= Perl_sv_newmortal(); (pRExC_state
->mysv2)= Perl_sv_newmortal(); };} while (0)
7708 })do {{ (pRExC_state->mysv1)= Perl_sv_newmortal(); (pRExC_state
->mysv2)= Perl_sv_newmortal(); };} while (0)
;
7709
7710 DEBUG_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sCompiling REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7711 SV *dsv= sv_newmortal();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sCompiling REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7712 RE_PV_QUOTED_DECL(s, RExC_utf8, dsv, exp, plen, PL_dump_re_max_len);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sCompiling REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7713 Perl_re_printf( aTHX_ "%sCompiling REx%s %s\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sCompiling REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7714 PL_colors[4], PL_colors[5], s);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sCompiling REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7715 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sCompiling REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
;
7716
7717 /* we jump here if we have to recompile, e.g., from upgrading the pattern
7718 * to utf8 */
7719
7720 if ((pm_flags & PMf_USE_RE_EVAL(1U<<(((0 +12)+2)+16)))
7721 /* this second condition covers the non-regex literal case,
7722 * i.e. $foo =~ '(?{})'. */
7723 || (IN_PERL_COMPILETIME((PL_curcop == &PL_compiling) ? (_Bool)1 : (_Bool)0) && (PL_hintsPL_compiling.cop_hints & HINT_RE_EVAL0x00200000))
7724 )
7725 runtime_code = S_has_runtime_code(aTHX_ pRExC_state, exp, plen);
7726
7727 redo_parse:
7728 /* return old regex if pattern hasn't changed */
7729 /* XXX: note in the below we have to check the flags as well as the
7730 * pattern.
7731 *
7732 * Things get a touch tricky as we have to compare the utf8 flag
7733 * independently from the compile flags. */
7734
7735 if ( old_re
7736 && !recompile
7737 && !!RX_UTF8(old_re)((old_re)->sv_flags & 0x20000000) == !!RExC_utf8(pRExC_state->utf8)
7738 && ( RX_COMPFLAGS(old_re)((Perl_ReANY((const REGEXP *)(old_re)))->compflags) == ( orig_rx_flags & RXf_PMf_FLAGCOPYMASK(((1U << (0 +0))|(1U << (0 +1))|(1U << (0 +
2))|(1U << (0 +3))|(1U << (0 +4))|(1U << (0
+6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<
(0 +10)))|(1U<<(0 +11)))
) )
7739 && RX_PRECOMP(old_re)((*({ SV *const _svpvx = ((SV *)({ void *_p = (old_re); _p; }
)); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 7739,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7739, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7739, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })) + Perl_ReANY((const REGEXP
*)(old_re))->pre_prefix)
7740 && RX_PRELEN(old_re)((*({ const SV *const _svcur = (const SV *)(old_re); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 7740, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7740, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7740, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) - Perl_ReANY((const REGEXP *)(old_re))->
pre_prefix - 1)
== plen
7741 && memEQ(RX_PRECOMP(old_re), exp, plen)(memcmp(((const void *) (((*({ SV *const _svpvx = ((SV *)({ void
*_p = (old_re); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7741, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7741, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 7741, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })) + Perl_ReANY((const REGEXP
*)(old_re))->pre_prefix))), ((const void *) (exp)), plen)
== 0)
7742 && !runtime_code /* with runtime code, always recompile */ )
7743 {
7744 DEBUG_COMPILE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sSkipping recompilation of unchanged REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7745 SV *dsv= sv_newmortal();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sSkipping recompilation of unchanged REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7746 RE_PV_QUOTED_DECL(s, RExC_utf8, dsv, exp, plen, PL_dump_re_max_len);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sSkipping recompilation of unchanged REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7747 Perl_re_printf( aTHX_ "%sSkipping recompilation of unchanged REx%s %s\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sSkipping recompilation of unchanged REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7748 PL_colors[4], PL_colors[5], s);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sSkipping recompilation of unchanged REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
7749 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*dsv= Perl_sv_newmortal(); const char * const s = Perl_pv_pretty
( (dsv),(exp),(plen),(PL_dump_re_max_len),PL_colors[0],PL_colors
[1],( 0x000001 | 0x008000 | 0x000400 | 0x000002 | (((pRExC_state
->utf8)) ? 0x000100 : 0))); Perl_re_printf( "%sSkipping recompilation of unchanged REx%s %s\n"
, PL_colors[4], PL_colors[5], s); };} while (0)
;
7750 return old_re;
7751 }
7752
7753 /* Allocate the pattern's SV */
7754 RExC_rx_sv(pRExC_state->rx_sv) = Rx = (REGEXP*) newSV_type(SVt_REGEXP)Perl_newSV_type( SVt_REGEXP);
7755 RExC_rx(pRExC_state->rx) = ReANY(Rx)Perl_ReANY((const REGEXP *)(Rx));
7756 if ( RExC_rx(pRExC_state->rx) == NULL((void*)0) )
7757 FAIL("Regexp out of space")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Regexp out of space"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
7758
7759 rx_flags = orig_rx_flags;
7760
7761 if ( toUSE_UNI_CHARSET_NOT_DEPENDS((pRExC_state->uni_semantics) || (((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0))
7762 && initial_charset == REGEX_DEPENDS_CHARSET)
7763 {
7764
7765 /* Set to use unicode semantics if the pattern is in utf8 and has the
7766 * 'depends' charset specified, as it means unicode when utf8 */
7767 set_regex_charset(&rx_flags, REGEX_UNICODE_CHARSET);
7768 RExC_uni_semantics(pRExC_state->uni_semantics) = 1;
7769 }
7770
7771 RExC_pm_flags(pRExC_state->pm_flags) = pm_flags;
7772
7773 if (runtime_code) {
7774 assert(TAINTING_get || !TAINT_get)(((((__builtin_expect(((PL_tainting) ? (_Bool)1 : (_Bool)0),(
0))) ? (_Bool)1 : (_Bool)0)) || !(((__builtin_expect(((PL_tainted
) ? (_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool)0))) ? (void
)0 : __assert2("re_comp.c", 7774, __func__, "TAINTING_get || !TAINT_get"
))
;
7775 if (TAINT_get(((__builtin_expect(((PL_tainted) ? (_Bool)1 : (_Bool)0),(0))
) ? (_Bool)1 : (_Bool)0))
)
7776 Perl_croak(aTHX_ "Eval-group in insecure regular expression");
7777
7778 if (!S_compile_runtime_code(aTHX_ pRExC_state, exp, plen)) {
7779 /* whoops, we have a non-utf8 pattern, whilst run-time code
7780 * got compiled as utf8. Try again with a utf8 pattern */
7781 S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &exp, &plen,
7782 pRExC_state->code_blocks ? pRExC_state->code_blocks->count : 0);
7783 goto redo_parse;
7784 }
7785 }
7786 assert(!pRExC_state->runtime_code_qr)((!pRExC_state->runtime_code_qr) ? (void)0 : __assert2("re_comp.c"
, 7786, __func__, "!pRExC_state->runtime_code_qr"))
;
7787
7788 RExC_sawback(pRExC_state->sawback) = 0;
7789
7790 RExC_seen(pRExC_state->seen) = 0;
7791 RExC_maxlen(pRExC_state->maxlen) = 0;
7792 RExC_in_lookaround(pRExC_state->in_lookaround) = 0;
7793 RExC_seen_zerolen(pRExC_state->seen_zerolen) = *exp == '^' ? -1 : 0;
7794 RExC_recode_x_to_native(pRExC_state->recode_x_to_native) = 0;
7795 RExC_in_multi_char_class(pRExC_state->in_multi_char_class) = 0;
7796
7797 RExC_start(pRExC_state->start) = RExC_copy_start_in_constructed(pRExC_state->copy_start) = RExC_copy_start_in_input(pRExC_state->copy_start_in_input) = RExC_precomp(pRExC_state->precomp) = exp;
7798 RExC_precomp_end(pRExC_state->precomp_end) = RExC_end(pRExC_state->end) = exp + plen;
7799 RExC_nestroot(pRExC_state->nestroot) = 0;
7800 RExC_whilem_seen(pRExC_state->whilem_seen) = 0;
7801 RExC_end_op(pRExC_state->end_op) = NULL((void*)0);
7802 RExC_recurse(pRExC_state->recurse) = NULL((void*)0);
7803 RExC_study_chunk_recursed(pRExC_state->study_chunk_recursed) = NULL((void*)0);
7804 RExC_study_chunk_recursed_bytes(pRExC_state->study_chunk_recursed_bytes)= 0;
7805 RExC_recurse_count(pRExC_state->recurse_count) = 0;
7806 RExC_sets_depth(pRExC_state->sets_depth) = 0;
7807 pRExC_state->code_index = 0;
7808
7809 /* Initialize the string in the compiled pattern. This is so that there is
7810 * something to output if necessary */
7811 set_regex_pv(pRExC_state, Rx)S_set_regex_pv( pRExC_state,Rx);
7812
7813 DEBUG_PARSE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Starting parse and generation\n"); (pRExC_state->lastnum
)=0; (pRExC_state->lastparse)=((void*)0); };} while (0)
7814 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Starting parse and generation\n"); (pRExC_state->lastnum
)=0; (pRExC_state->lastparse)=((void*)0); };} while (0)
7815 "Starting parse and generation\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Starting parse and generation\n"); (pRExC_state->lastnum
)=0; (pRExC_state->lastparse)=((void*)0); };} while (0)
7816 RExC_lastnum=0;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Starting parse and generation\n"); (pRExC_state->lastnum
)=0; (pRExC_state->lastparse)=((void*)0); };} while (0)
7817 RExC_lastparse=NULL;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Starting parse and generation\n"); (pRExC_state->lastnum
)=0; (pRExC_state->lastparse)=((void*)0); };} while (0)
7818 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Starting parse and generation\n"); (pRExC_state->lastnum
)=0; (pRExC_state->lastparse)=((void*)0); };} while (0)
;
7819
7820 /* Allocate space and zero-initialize. Note, the two step process
7821 of zeroing when in debug mode, thus anything assigned has to
7822 happen after that */
7823 if (! RExC_size(pRExC_state->size)) {
7824
7825 /* On the first pass of the parse, we guess how big this will be. Then
7826 * we grow in one operation to that amount and then give it back. As
7827 * we go along, we re-allocate what we need.
7828 *
7829 * XXX Currently the guess is essentially that the pattern will be an
7830 * EXACT node with one byte input, one byte output. This is crude, and
7831 * better heuristics are welcome.
7832 *
7833 * On any subsequent passes, we guess what we actually computed in the
7834 * latest earlier pass. Such a pass probably didn't complete so is
7835 * missing stuff. We could improve those guesses by knowing where the
7836 * parse stopped, and use the length so far plus apply the above
7837 * assumption to what's left. */
7838 RExC_size(pRExC_state->size) = STR_SZ(RExC_end - RExC_start)((((pRExC_state->end) - (pRExC_state->start)) + sizeof(
regnode) - 1) / sizeof(regnode))
;
7839 }
7840
7841 Newxc(RExC_rxi, sizeof(regexp_internal) + RExC_size, char, regexp_internal)((pRExC_state->rxi) = ((void)(__builtin_expect(((((( sizeof
(size_t) < sizeof(sizeof(regexp_internal) + (pRExC_state->
size)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(regexp_internal) + (pRExC_state->size)))
)) ? (size_t)(sizeof(regexp_internal) + (pRExC_state->size
)) : ((size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regexp_internal*)(Perl_safesysmalloc((size_t)((sizeof
(regexp_internal) + (pRExC_state->size))*sizeof(char))))))
;
7842 if ( RExC_rxi(pRExC_state->rxi) == NULL((void*)0) )
7843 FAIL("Regexp out of space")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Regexp out of space"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
7844
7845 Zero(RExC_rxi, sizeof(regexp_internal) + RExC_size, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(regexp_internal) + (pRExC_state->size)) || sizeof(char) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(sizeof(regexp_internal
) + (pRExC_state->size))))) ? (size_t)(sizeof(regexp_internal
) + (pRExC_state->size)) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->rxi
))) != 0) ? (void)0 : __assert2("re_comp.c", 7845, __func__, "((void*)((pRExC_state->rxi))) != 0"
)), (void)memset((char*)((pRExC_state->rxi)),0,(sizeof(regexp_internal
) + (pRExC_state->size)) * sizeof(char)))
;
7846 RXi_SET( RExC_rx, RExC_rxi )((pRExC_state->rx))->pprivate = (void*)((pRExC_state->
rxi))
;
7847
7848 /* We start from 0 (over from 0 in the case this is a reparse. The first
7849 * node parsed will give back any excess memory we have allocated so far).
7850 * */
7851 RExC_size(pRExC_state->size) = 0;
7852
7853 /* non-zero initialization begins here */
7854 RExC_rx(pRExC_state->rx)->engine= eng;
7855 RExC_rx(pRExC_state->rx)->extflags = rx_flags;
7856 RXp_COMPFLAGS(RExC_rx)(((pRExC_state->rx))->compflags) = orig_rx_flags & RXf_PMf_FLAGCOPYMASK(((1U << (0 +0))|(1U << (0 +1))|(1U << (0 +
2))|(1U << (0 +3))|(1U << (0 +4))|(1U << (0
+6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<
(0 +10)))|(1U<<(0 +11)))
;
7857
7858 if (pm_flags & PMf_IS_QR(1U<<(((0 +12)+2)+15))) {
7859 RExC_rxi(pRExC_state->rxi)->code_blocks = pRExC_state->code_blocks;
7860 if (RExC_rxi(pRExC_state->rxi)->code_blocks) {
7861 RExC_rxi(pRExC_state->rxi)->code_blocks->refcnt++;
7862 }
7863 }
7864
7865 RExC_rx(pRExC_state->rx)->intflags = 0;
7866
7867 RExC_flags(pRExC_state->flags) = rx_flags; /* don't let top level (?i) bleed */
7868 RExC_parse(pRExC_state->parse) = exp;
7869
7870 /* This NUL is guaranteed because the pattern comes from an SV*, and the sv
7871 * code makes sure the final byte is an uncounted NUL. But should this
7872 * ever not be the case, lots of things could read beyond the end of the
7873 * buffer: loops like
7874 * while(isFOO(*RExC_parse)) RExC_parse++;
7875 * strchr(RExC_parse, "foo");
7876 * etc. So it is worth noting. */
7877 assert(*RExC_end == '\0')((*(pRExC_state->end) == '\0') ? (void)0 : __assert2("re_comp.c"
, 7877, __func__, "*RExC_end == '\\0'"))
;
7878
7879 RExC_naughty(pRExC_state->naughty) = 0;
7880 RExC_npar(pRExC_state->npar) = 1;
7881 RExC_parens_buf_size(pRExC_state->parens_buf_size) = 0;
7882 RExC_emit_start(pRExC_state->emit_start) = RExC_rxi(pRExC_state->rxi)->program;
7883 pRExC_state->code_index = 0;
7884
7885 *((char*) RExC_emit_start(pRExC_state->emit_start)) = (char) REG_MAGIC0234;
7886 RExC_emit(pRExC_state->emit) = 1;
7887
7888 /* Do the parse */
7889 if (reg(pRExC_state, 0, &flags, 1)S_reg( pRExC_state,0,&flags,1)) {
7890
7891 /* Success!, But we may need to redo the parse knowing how many parens
7892 * there actually are */
7893 if (IN_PARENS_PASS((pRExC_state->total_par) < 0)) {
7894 flags |= RESTART_PARSE0x20;
7895 }
7896
7897 /* We have that number in RExC_npar */
7898 RExC_total_parens(pRExC_state->total_par) = RExC_npar(pRExC_state->npar);
7899
7900 /* XXX For backporting, use long jumps if there is any possibility of
7901 * overflow */
7902 if (RExC_size(pRExC_state->size) > U16_MAX0xffff && ! RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ)) {
7903 RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ) = TRUE(1);
7904 flags |= RESTART_PARSE0x20;
7905 }
7906 }
7907 else if (! MUST_RESTART(flags)((flags) & (0x20))) {
7908 ReREFCNT_dec(Rx)({ REGEXP *const _rerefcnt_dec = (Rx); Perl_SvREFCNT_dec( ((SV
*)({ void *_p = (_rerefcnt_dec); _p; }))); })
;
7909 Perl_croak(aTHX_ "panic: reg returned failure to re_op_compile, flags=%#" UVxf"lx", (UV) flags);
7910 }
7911
7912 /* Here, we either have success, or we have to redo the parse for some reason */
7913 if (MUST_RESTART(flags)((flags) & (0x20))) {
7914
7915 /* It's possible to write a regexp in ascii that represents Unicode
7916 codepoints outside of the byte range, such as via \x{100}. If we
7917 detect such a sequence we have to convert the entire pattern to utf8
7918 and then recompile, as our sizing calculation will have been based
7919 on 1 byte == 1 character, but we will need to use utf8 to encode
7920 at least some part of the pattern, and therefore must convert the whole
7921 thing.
7922 -- dmq */
7923 if (flags & NEED_UTF80x40) {
7924
7925 /* We have stored the offset of the final warning output so far.
7926 * That must be adjusted. Any variant characters between the start
7927 * of the pattern and this warning count for 2 bytes in the final,
7928 * so just add them again */
7929 if (UNLIKELY(RExC_latest_warn_offset > 0)__builtin_expect((((pRExC_state->latest_warn_offset ) >
0) ? (_Bool)1 : (_Bool)0),(0))
) {
7930 RExC_latest_warn_offset(pRExC_state->latest_warn_offset ) +=
7931 variant_under_utf8_countS_variant_under_utf8_count((U8 *) exp, (U8 *) exp
7932 + RExC_latest_warn_offset(pRExC_state->latest_warn_offset ));
7933 }
7934 S_pat_upgrade_to_utf8(aTHX_ pRExC_state, &exp, &plen,
7935 pRExC_state->code_blocks ? pRExC_state->code_blocks->count : 0);
7936 DEBUG_PARSE_r(Perl_re_printf( aTHX_ "Need to redo parse after upgrade\n"))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Need to redo parse after upgrade\n");} while (0)
;
7937 }
7938 else {
7939 DEBUG_PARSE_r(Perl_re_printf( aTHX_ "Need to redo parse\n"))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "Need to redo parse\n");} while (0)
;
7940 }
7941
7942 if (ALL_PARENS_COUNTED((pRExC_state->total_par) > 0)) {
7943 /* Make enough room for all the known parens, and zero it */
7944 Renew(RExC_open_parens, RExC_total_parens, regnode_offset)((pRExC_state->open_parens) = ((void)(__builtin_expect((((
(( sizeof(size_t) < sizeof((pRExC_state->total_par)) ||
sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof((pRExC_state->total_par))))) ? (size_t)((pRExC_state
->total_par)) : ((size_t)-1)/sizeof(regnode_offset)) > (
(size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool)0),(
0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesysrealloc((void *)((pRExC_state->open_parens)
),(size_t)(((pRExC_state->total_par))*sizeof(regnode_offset
))))))
;
7945 Zero(RExC_open_parens, RExC_total_parens, regnode_offset)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->total_par)) || sizeof(regnode_offset) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof((pRExC_state->total_par))))) ?
(size_t)((pRExC_state->total_par)) : ((size_t)-1)/sizeof(
regnode_offset)) > ((size_t)-1)/sizeof(regnode_offset))) ?
(_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)((pRExC_state->open_parens))) != 0) ? (void
)0 : __assert2("re_comp.c", 7945, __func__, "((void*)((pRExC_state->open_parens))) != 0"
)), (void)memset((char*)((pRExC_state->open_parens)),0,((pRExC_state
->total_par)) * sizeof(regnode_offset)))
;
7946 RExC_open_parens(pRExC_state->open_parens)[0] = 1; /* +1 for REG_MAGIC */
7947
7948 Renew(RExC_close_parens, RExC_total_parens, regnode_offset)((pRExC_state->close_parens) = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof((pRExC_state->total_par)) ||
sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof((pRExC_state->total_par))))) ? (size_t)((pRExC_state
->total_par)) : ((size_t)-1)/sizeof(regnode_offset)) > (
(size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool)0),(
0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesysrealloc((void *)((pRExC_state->close_parens
)),(size_t)(((pRExC_state->total_par))*sizeof(regnode_offset
))))))
;
7949 Zero(RExC_close_parens, RExC_total_parens, regnode_offset)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->total_par)) || sizeof(regnode_offset) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof((pRExC_state->total_par))))) ?
(size_t)((pRExC_state->total_par)) : ((size_t)-1)/sizeof(
regnode_offset)) > ((size_t)-1)/sizeof(regnode_offset))) ?
(_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)((pRExC_state->close_parens))) != 0) ? (
void)0 : __assert2("re_comp.c", 7949, __func__, "((void*)((pRExC_state->close_parens))) != 0"
)), (void)memset((char*)((pRExC_state->close_parens)),0,((
pRExC_state->total_par)) * sizeof(regnode_offset)))
;
7950 }
7951 else { /* Parse did not complete. Reinitialize the parentheses
7952 structures */
7953 RExC_total_parens(pRExC_state->total_par) = 0;
7954 if (RExC_open_parens(pRExC_state->open_parens)) {
7955 Safefree(RExC_open_parens)Perl_safesysfree(((void *)((pRExC_state->open_parens))));
7956 RExC_open_parens(pRExC_state->open_parens) = NULL((void*)0);
7957 }
7958 if (RExC_close_parens(pRExC_state->close_parens)) {
7959 Safefree(RExC_close_parens)Perl_safesysfree(((void *)((pRExC_state->close_parens))));
7960 RExC_close_parens(pRExC_state->close_parens) = NULL((void*)0);
7961 }
7962 }
7963
7964 /* Clean up what we did in this parse */
7965 SvREFCNT_dec_NN(RExC_rx_sv)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = ((pRExC_state->
rx_sv)); _p; })))
;
7966
7967 goto redo_parse;
7968 }
7969
7970 /* Here, we have successfully parsed and generated the pattern's program
7971 * for the regex engine. We are ready to finish things up and look for
7972 * optimizations. */
7973
7974 /* Update the string to compile, with correct modifiers, etc */
7975 set_regex_pv(pRExC_state, Rx)S_set_regex_pv( pRExC_state,Rx);
7976
7977 RExC_rx(pRExC_state->rx)->nparens = RExC_total_parens(pRExC_state->total_par) - 1;
7978
7979 /* Uses the upper 4 bits of the FLAGS field, so keep within that size */
7980 if (RExC_whilem_seen(pRExC_state->whilem_seen) > 15)
7981 RExC_whilem_seen(pRExC_state->whilem_seen) = 15;
7982
7983 DEBUG_PARSE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Required size %" "ld" " nodes\n", (IV)(pRExC_state->size
)); (pRExC_state->lastnum)=0; (pRExC_state->lastparse)=
((void*)0); };} while (0)
7984 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Required size %" "ld" " nodes\n", (IV)(pRExC_state->size
)); (pRExC_state->lastnum)=0; (pRExC_state->lastparse)=
((void*)0); };} while (0)
7985 "Required size %" IVdf " nodes\n", (IV)RExC_size);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Required size %" "ld" " nodes\n", (IV)(pRExC_state->size
)); (pRExC_state->lastnum)=0; (pRExC_state->lastparse)=
((void*)0); };} while (0)
7986 RExC_lastnum=0;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Required size %" "ld" " nodes\n", (IV)(pRExC_state->size
)); (pRExC_state->lastnum)=0; (pRExC_state->lastparse)=
((void*)0); };} while (0)
7987 RExC_lastparse=NULL;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Required size %" "ld" " nodes\n", (IV)(pRExC_state->size
)); (pRExC_state->lastnum)=0; (pRExC_state->lastparse)=
((void*)0); };} while (0)
7988 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { Perl_re_printf
( "Required size %" "ld" " nodes\n", (IV)(pRExC_state->size
)); (pRExC_state->lastnum)=0; (pRExC_state->lastparse)=
((void*)0); };} while (0)
;
7989
7990#ifdef RE_TRACK_PATTERN_OFFSETS
7991 DEBUG_OFFSETS_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) Perl_re_printf
( "%s %" "lu" " bytes for offset annotations.\n", ((pRExC_state
->rxi)->u.offsets) ? "Got" : "Couldn't get", (UV)((((pRExC_state
->rxi)->u.offsets)[0] * 2 + 1)));} while (0)
7992 "%s %" UVuf " bytes for offset annotations.\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) Perl_re_printf
( "%s %" "lu" " bytes for offset annotations.\n", ((pRExC_state
->rxi)->u.offsets) ? "Got" : "Couldn't get", (UV)((((pRExC_state
->rxi)->u.offsets)[0] * 2 + 1)));} while (0)
7993 RExC_offsets ? "Got" : "Couldn't get",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) Perl_re_printf
( "%s %" "lu" " bytes for offset annotations.\n", ((pRExC_state
->rxi)->u.offsets) ? "Got" : "Couldn't get", (UV)((((pRExC_state
->rxi)->u.offsets)[0] * 2 + 1)));} while (0)
7994 (UV)((RExC_offsets[0] * 2 + 1))))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) Perl_re_printf
( "%s %" "lu" " bytes for offset annotations.\n", ((pRExC_state
->rxi)->u.offsets) ? "Got" : "Couldn't get", (UV)((((pRExC_state
->rxi)->u.offsets)[0] * 2 + 1)));} while (0)
;
7995 DEBUG_OFFSETS_r(if (RExC_offsets) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
7996 const STRLEN len = RExC_offsets[0];do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
7997 STRLEN i;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
7998 DECLARE_AND_GET_RE_DEBUG_FLAGS;do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
7999 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8000 "Offsets: [%" UVuf "]\n\t", (UV)RExC_offsets[0]);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8001 for (i = 1; i <= len; i++) {do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8002 if (RExC_offsets[i*2-1] || RExC_offsets[i*2])do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8003 Perl_re_printf( aTHX_ "%" UVuf ":%" UVuf "[%" UVuf "] ",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8004 (UV)i, (UV)RExC_offsets[i*2-1], (UV)RExC_offsets[i*2]);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8005 }do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8006 Perl_re_printf( aTHX_ "\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
8007 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0020000))) if
(((pRExC_state->rxi)->u.offsets)) { const STRLEN len =
((pRExC_state->rxi)->u.offsets)[0]; STRLEN i; volatile
IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)); do { SV
* re_debug_flags_sv = ((void*)0); re_debug_flags_sv = PL_curcop
? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void*)0); if (re_debug_flags_sv
) { if (!((re_debug_flags_sv)->sv_flags & 0x00000100))
Perl_sv_setuv( re_debug_flags_sv,0x000008 | 0x00FF00); re_debug_flags
=((((re_debug_flags_sv)->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? (*({ const SV *const _svivx = (const SV *
)(re_debug_flags_sv); ((PL_valid_types_IVX[((svtype)((_svivx)
->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 7998, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 7998, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( re_debug_flags_sv,2)); } } while (0); Perl_re_printf( "Offsets: [%"
"lu" "]\n\t", (UV)((pRExC_state->rxi)->u.offsets)[0]);
for (i = 1; i <= len; i++) { if (((pRExC_state->rxi)->
u.offsets)[i*2-1] || ((pRExC_state->rxi)->u.offsets)[i*
2]) Perl_re_printf( "%" "lu" ":%" "lu" "[%" "lu" "] ", (UV)i,
(UV)((pRExC_state->rxi)->u.offsets)[i*2-1], (UV)((pRExC_state
->rxi)->u.offsets)[i*2]); } Perl_re_printf( "\n"); };} while
(0)
;
8008
8009#else
8010 SetProgLen(RExC_rxi,RExC_size)(pRExC_state->rxi)->u.offsets[0] = (pRExC_state->size
)
;
8011#endif
8012
8013 DEBUG_DUMP_PRE_OPTIMIZE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8014 SV * const sv = sv_newmortal();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8015 RXi_GET_DECL(RExC_rx, ri);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8016 DEBUG_RExC_seen();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8017 Perl_re_printf( aTHX_ "Program before optimization:\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8018
8019 (void)dumpuntil(RExC_rx, ri->program, ri->program + 1, NULL, NULL,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8020 sv, 0, 0);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
8021 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x1000000))) { SV
* const sv = Perl_sv_newmortal(); regexp_internal *ri = ((regexp_internal
*)(((pRExC_state->rx))->pprivate)); do {if (__builtin_expect
(((PL_debug & 0x00100000) ? (_Bool)1 : (_Bool)0),(0)) || (
(0x0100000|0x000002) == (re_debug_flags & (0x0100000|0x000002
)))) { Perl_re_printf( "RExC_seen: "); if ((pRExC_state->seen
) & 0x00000001) Perl_re_printf( "REG_ZERO_LEN_SEEN "); if
((pRExC_state->seen) & 0x00000002) Perl_re_printf( "REG_LOOKBEHIND_SEEN "
); if ((pRExC_state->seen) & 0x00000004) Perl_re_printf
( "REG_GPOS_SEEN "); if ((pRExC_state->seen) & 0x00000020
) Perl_re_printf( "REG_RECURSE_SEEN "); if ((pRExC_state->
seen) & 0x00000040) Perl_re_printf( "REG_TOP_LEVEL_BRANCHES_SEEN "
); if ((pRExC_state->seen) & 0x00000080) Perl_re_printf
( "REG_VERBARG_SEEN "); if ((pRExC_state->seen) & 0x00000100
) Perl_re_printf( "REG_CUTGROUP_SEEN "); if ((pRExC_state->
seen) & 0x00000200) Perl_re_printf( "REG_RUN_ON_COMMENT_SEEN "
); if ((pRExC_state->seen) & 0x00000400) Perl_re_printf
( "REG_UNFOLDED_MULTI_SEEN "); if ((pRExC_state->seen) &
0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Program before optimization:\n"
); (void)S_dumpuntil( (pRExC_state->rx),ri->program,ri->
program + 1,((void*)0),((void*)0),sv,0,0); };} while (0)
;
8022
8023 DEBUG_OPTIMISE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "Starting post parse optimization\n");;} while (0)
8024 Perl_re_printf( aTHX_ "Starting post parse optimization\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "Starting post parse optimization\n");;} while (0)
8025 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "Starting post parse optimization\n");;} while (0)
;
8026
8027 /* XXXX To minimize changes to RE engine we always allocate
8028 3-units-long substrs field. */
8029 Newx(RExC_rx->substrs, 1, struct reg_substr_data)((pRExC_state->rx)->substrs = ((void)(__builtin_expect(
((((( sizeof(size_t) < sizeof(1) || sizeof(struct reg_substr_data
) > ((size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ?
(size_t)(1) : ((size_t)-1)/sizeof(struct reg_substr_data)) >
((size_t)-1)/sizeof(struct reg_substr_data))) ? (_Bool)1 : (
_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (struct
reg_substr_data*)(Perl_safesysmalloc((size_t)((1)*sizeof(struct
reg_substr_data))))))
;
8030 if (RExC_recurse_count(pRExC_state->recurse_count)) {
8031 Newx(RExC_recurse, RExC_recurse_count, regnode *)((pRExC_state->recurse) = ((void)(__builtin_expect(((((( sizeof
(size_t) < sizeof((pRExC_state->recurse_count)) || sizeof
(regnode *) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
((pRExC_state->recurse_count))))) ? (size_t)((pRExC_state->
recurse_count)) : ((size_t)-1)/sizeof(regnode *)) > ((size_t
)-1)/sizeof(regnode *))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), (regnode **)(Perl_safesysmalloc
((size_t)(((pRExC_state->recurse_count))*sizeof(regnode *)
)))))
;
8032 SAVEFREEPV(RExC_recurse)Perl_save_pushptr( (void *)((char*)((pRExC_state->recurse)
)),10)
;
8033 }
8034
8035 if (RExC_seen(pRExC_state->seen) & REG_RECURSE_SEEN0x00000020) {
8036 /* Note, RExC_total_parens is 1 + the number of parens in a pattern.
8037 * So its 1 if there are no parens. */
8038 RExC_study_chunk_recursed_bytes(pRExC_state->study_chunk_recursed_bytes)= (RExC_total_parens(pRExC_state->total_par) >> 3) +
8039 ((RExC_total_parens(pRExC_state->total_par) & 0x07) != 0);
8040 Newx(RExC_study_chunk_recursed,((pRExC_state->study_chunk_recursed) = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par)) || sizeof(U8) > ((size_t)
1 << 8*(sizeof(size_t) - sizeof((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par))))) ? (size_t)((pRExC_state->
study_chunk_recursed_bytes) * (pRExC_state->total_par)) : (
(size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(U8*)(Perl_safesysmalloc((size_t)(((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par))*sizeof(U8))))))
8041 RExC_study_chunk_recursed_bytes * RExC_total_parens, U8)((pRExC_state->study_chunk_recursed) = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par)) || sizeof(U8) > ((size_t)
1 << 8*(sizeof(size_t) - sizeof((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par))))) ? (size_t)((pRExC_state->
study_chunk_recursed_bytes) * (pRExC_state->total_par)) : (
(size_t)-1)/sizeof(U8)) > ((size_t)-1)/sizeof(U8))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(U8*)(Perl_safesysmalloc((size_t)(((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par))*sizeof(U8))))))
;
8042 SAVEFREEPV(RExC_study_chunk_recursed)Perl_save_pushptr( (void *)((char*)((pRExC_state->study_chunk_recursed
))),10)
;
8043 }
8044
8045 reStudy:
8046 RExC_rx(pRExC_state->rx)->minlen = minlen = sawlookahead = sawplus = sawopen = sawminmod = 0;
8047 DEBUG_r(do {(pRExC_state->study_chunk_recursed_count)= 0;;} while (
0)
8048 RExC_study_chunk_recursed_count= 0;do {(pRExC_state->study_chunk_recursed_count)= 0;;} while (
0)
8049 )do {(pRExC_state->study_chunk_recursed_count)= 0;;} while (
0)
;
8050 Zero(RExC_rx->substrs, 1, struct reg_substr_data)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(1) ||
sizeof(struct reg_substr_data) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(1)))) ? (size_t)(1) : ((size_t)-1)/sizeof(struct
reg_substr_data)) > ((size_t)-1)/sizeof(struct reg_substr_data
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((((void*)((pRExC_state->rx)->substrs)) != 0) ?
(void)0 : __assert2("re_comp.c", 8050, __func__, "((void*)((pRExC_state->rx)->substrs)) != 0"
)), (void)memset((char*)((pRExC_state->rx)->substrs),0,
(1) * sizeof(struct reg_substr_data)))
;
8051 if (RExC_study_chunk_recursed(pRExC_state->study_chunk_recursed)) {
8052 Zero(RExC_study_chunk_recursed,((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->study_chunk_recursed_bytes) * (pRExC_state->total_par
)) || sizeof(U8) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof((pRExC_state->study_chunk_recursed_bytes) * (pRExC_state
->total_par))))) ? (size_t)((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par)) : ((size_t)-1)/sizeof(U8)) >
((size_t)-1)/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->study_chunk_recursed
))) != 0) ? (void)0 : __assert2("re_comp.c", 8053, __func__, "((void*)((pRExC_state->study_chunk_recursed))) != 0"
)), (void)memset((char*)((pRExC_state->study_chunk_recursed
)),0,((pRExC_state->study_chunk_recursed_bytes) * (pRExC_state
->total_par)) * sizeof(U8)))
8053 RExC_study_chunk_recursed_bytes * RExC_total_parens, U8)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->study_chunk_recursed_bytes) * (pRExC_state->total_par
)) || sizeof(U8) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof((pRExC_state->study_chunk_recursed_bytes) * (pRExC_state
->total_par))))) ? (size_t)((pRExC_state->study_chunk_recursed_bytes
) * (pRExC_state->total_par)) : ((size_t)-1)/sizeof(U8)) >
((size_t)-1)/sizeof(U8))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->study_chunk_recursed
))) != 0) ? (void)0 : __assert2("re_comp.c", 8053, __func__, "((void*)((pRExC_state->study_chunk_recursed))) != 0"
)), (void)memset((char*)((pRExC_state->study_chunk_recursed
)),0,((pRExC_state->study_chunk_recursed_bytes) * (pRExC_state
->total_par)) * sizeof(U8)))
;
8054 }
8055
8056
8057#ifdef TRIE_STUDY_OPT
8058 if (!restudied) {
8059 StructCopy(&zero_scan_data, &data, scan_data_t)(*((scan_data_t*)(&data)) = *((scan_data_t*)(&zero_scan_data
)))
;
8060 copyRExC_state = RExC_state;
8061 } else {
8062 U32 seen=RExC_seen(pRExC_state->seen);
8063 DEBUG_OPTIMISE_r(Perl_re_printf( aTHX_ "Restudying\n"))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) Perl_re_printf
( "Restudying\n");} while (0)
;
8064
8065 RExC_state = copyRExC_state;
8066 if (seen & REG_TOP_LEVEL_BRANCHES_SEEN0x00000040)
8067 RExC_seen(pRExC_state->seen) |= REG_TOP_LEVEL_BRANCHES_SEEN0x00000040;
8068 else
8069 RExC_seen(pRExC_state->seen) &= ~REG_TOP_LEVEL_BRANCHES_SEEN0x00000040;
8070 StructCopy(&zero_scan_data, &data, scan_data_t)(*((scan_data_t*)(&data)) = *((scan_data_t*)(&zero_scan_data
)))
;
8071 }
8072#else
8073 StructCopy(&zero_scan_data, &data, scan_data_t)(*((scan_data_t*)(&data)) = *((scan_data_t*)(&zero_scan_data
)))
;
8074#endif
8075
8076 /* Dig out information for optimizations. */
8077 RExC_rx(pRExC_state->rx)->extflags = RExC_flags(pRExC_state->flags); /* was pm_op */
8078 /*dmq: removed as part of de-PMOP: pm->op_pmflags = RExC_flags; */
8079
8080 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
8081 SvUTF8_on(Rx)((Rx)->sv_flags |= (0x20000000)); /* Unicode in it? */
8082 RExC_rxi(pRExC_state->rxi)->regstclass = NULL((void*)0);
8083 if (RExC_naughty(pRExC_state->naughty) >= TOO_NAUGHTY(10)) /* Probably an expensive pattern. */
8084 RExC_rx(pRExC_state->rx)->intflags |= PREGf_NAUGHTY0x00000004;
8085 scan = RExC_rxi(pRExC_state->rxi)->program + 1; /* First BRANCH. */
8086
8087 /* testing for BRANCH here tells us whether there is "must appear"
8088 data in the pattern. If there is then we can use it for optimisations */
8089 if (!(RExC_seen(pRExC_state->seen) & REG_TOP_LEVEL_BRANCHES_SEEN0x00000040)) { /* Only one top-level choice.
8090 */
8091 SSize_tssize_t fake;
8092 STRLEN longest_length[2];
8093 regnode_ssc ch_class; /* pointed to by data */
8094 int stclass_flag;
8095 SSize_tssize_t last_close = 0; /* pointed to by data */
8096 regnode *first= scan;
8097 regnode *first_next= regnext(first)Perl_regnext( first);
8098 int i;
8099
8100 /*
8101 * Skip introductions and multiplicators >= 1
8102 * so that we can extract the 'meat' of the pattern that must
8103 * match in the large if() sequence following.
8104 * NOTE that EXACT is NOT covered here, as it is normally
8105 * picked up by the optimiser separately.
8106 *
8107 * This is unfortunate as the optimiser isnt handling lookahead
8108 * properly currently.
8109 *
8110 */
8111 while ((OP(first)((first)->type) == OPEN63 && (sawopen = 1)) ||
8112 /* An OR of *one* alternative - should not happen now. */
8113 (OP(first)((first)->type) == BRANCH39 && OP(first_next)((first_next)->type) != BRANCH39) ||
8114 /* for now we can't handle lookbehind IFMATCH*/
8115 (OP(first)((first)->type) == IFMATCH79 && !first->flags && (sawlookahead = 1)) ||
8116 (OP(first)((first)->type) == PLUS57) ||
8117 (OP(first)((first)->type) == MINMOD85) ||
8118 /* An {n,m} with n>0 */
8119 (PL_regkind[OP(first)((first)->type)] == CURLY58 && ARG1(first)((((struct regnode_2 *)first)->arg1)) > 0) ||
8120 (OP(first)((first)->type) == NOTHING54 && PL_regkind[OP(first_next)((first_next)->type)] != END0 ))
8121 {
8122 /*
8123 * the only op that could be a regnode is PLUS, all the rest
8124 * will be regnode_1 or regnode_2.
8125 *
8126 * (yves doesn't think this is true)
8127 */
8128 if (OP(first)((first)->type) == PLUS57)
8129 sawplus = 1;
8130 else {
8131 if (OP(first)((first)->type) == MINMOD85)
8132 sawminmod = 1;
8133 first += regarglen[OP(first)((first)->type)];
8134 }
8135 first = NEXTOPER(first)((first) + 1);
8136 first_next= regnext(first)Perl_regnext( first);
8137 }
8138
8139 /* Starting-point info. */
8140 again:
8141 DEBUG_PEEP("first:", first, 0, 0)S_debug_peep( "first:", pRExC_state, first, 0, 0);
8142 /* Ignore EXACT as we deal with it later. */
8143 if (PL_regkind[OP(first)((first)->type)] == EXACT40) {
8144 if ( OP(first)((first)->type) == EXACT40
8145 || OP(first)((first)->type) == LEXACT41
8146 || OP(first)((first)->type) == EXACT_REQ850
8147 || OP(first)((first)->type) == LEXACT_REQ851
8148 || OP(first)((first)->type) == EXACTL42)
8149 {
8150 NOOP(void)0; /* Empty, get anchored substr later. */
8151 }
8152 else
8153 RExC_rxi(pRExC_state->rxi)->regstclass = first;
8154 }
8155#ifdef TRIE_STCLASS
8156 else if (PL_regkind[OP(first)((first)->type)] == TRIE88 &&
8157 ((reg_trie_data *)RExC_rxi(pRExC_state->rxi)->data->data[ ARG(first)((((struct regnode_1 *)first)->arg1)) ])->minlen>0)
8158 {
8159 /* this can happen only on restudy */
8160 RExC_rxi(pRExC_state->rxi)->regstclass = construct_ahocorasick_from_trie(pRExC_state, (regnode *)first, 0)S_construct_ahocorasick_from_trie( pRExC_state,(regnode *)first
,0)
;
8161 }
8162#endif
8163 else if (REGNODE_SIMPLE(OP(first))(PL_simple_bitmask[(((first)->type)) >> 3] & (1 <<
((((first)->type)) & 7)))
)
8164 RExC_rxi(pRExC_state->rxi)->regstclass = first;
8165 else if (PL_regkind[OP(first)((first)->type)] == BOUND8 ||
8166 PL_regkind[OP(first)((first)->type)] == NBOUND12)
8167 RExC_rxi(pRExC_state->rxi)->regstclass = first;
8168 else if (PL_regkind[OP(first)((first)->type)] == BOL2) {
8169 RExC_rx(pRExC_state->rx)->intflags |= (OP(first)((first)->type) == MBOL3
8170 ? PREGf_ANCH_MBOL0x00000400
8171 : PREGf_ANCH_SBOL0x00000800);
8172 first = NEXTOPER(first)((first) + 1);
8173 goto again;
8174 }
8175 else if (OP(first)((first)->type) == GPOS7) {
8176 RExC_rx(pRExC_state->rx)->intflags |= PREGf_ANCH_GPOS0x00001000;
8177 first = NEXTOPER(first)((first) + 1);
8178 goto again;
8179 }
8180 else if ((!sawopen || !RExC_sawback(pRExC_state->sawback)) &&
8181 !sawlookahead &&
8182 (OP(first)((first)->type) == STAR56 &&
8183 PL_regkind[OP(NEXTOPER(first))((((first) + 1))->type)] == REG_ANY16) &&
8184 !(RExC_rx(pRExC_state->rx)->intflags & PREGf_ANCH( 0x00000800 | 0x00001000 | 0x00000400 )) && !pRExC_state->code_blocks)
8185 {
8186 /* turn .* into ^.* with an implied $*=1 */
8187 const int type =
8188 (OP(NEXTOPER(first))((((first) + 1))->type) == REG_ANY16)
8189 ? PREGf_ANCH_MBOL0x00000400
8190 : PREGf_ANCH_SBOL0x00000800;
8191 RExC_rx(pRExC_state->rx)->intflags |= (type | PREGf_IMPLICIT0x00000002);
8192 first = NEXTOPER(first)((first) + 1);
8193 goto again;
8194 }
8195 if (sawplus && !sawminmod && !sawlookahead
8196 && (!sawopen || !RExC_sawback(pRExC_state->sawback))
8197 && !pRExC_state->code_blocks) /* May examine pos and $& */
8198 /* x+ must match at the 1st pos of run of x's */
8199 RExC_rx(pRExC_state->rx)->intflags |= PREGf_SKIP0x00000001;
8200
8201 /* Scan is after the zeroth branch, first is atomic matcher. */
8202#ifdef TRIE_STUDY_OPT
8203 DEBUG_PARSE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) if (
!restudied) Perl_re_printf( "first at %" "ld" "\n", (IV)(first
- scan + 1));} while (0)
8204 if (!restudied)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) if (
!restudied) Perl_re_printf( "first at %" "ld" "\n", (IV)(first
- scan + 1));} while (0)
8205 Perl_re_printf( aTHX_ "first at %" IVdf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) if (
!restudied) Perl_re_printf( "first at %" "ld" "\n", (IV)(first
- scan + 1));} while (0)
8206 (IV)(first - scan + 1))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) if (
!restudied) Perl_re_printf( "first at %" "ld" "\n", (IV)(first
- scan + 1));} while (0)
8207 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) if (
!restudied) Perl_re_printf( "first at %" "ld" "\n", (IV)(first
- scan + 1));} while (0)
;
8208#else
8209 DEBUG_PARSE_r(do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "first at %" "ld" "\n", (IV)(first - scan + 1));} while (0)
8210 Perl_re_printf( aTHX_ "first at %" IVdf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "first at %" "ld" "\n", (IV)(first - scan + 1));} while (0)
8211 (IV)(first - scan + 1))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "first at %" "ld" "\n", (IV)(first - scan + 1));} while (0)
8212 )do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "first at %" "ld" "\n", (IV)(first - scan + 1));} while (0)
;
8213#endif
8214
8215
8216 /*
8217 * If there's something expensive in the r.e., find the
8218 * longest literal string that must appear and make it the
8219 * regmust. Resolve ties in favor of later strings, since
8220 * the regstart check works with the beginning of the r.e.
8221 * and avoiding duplication strengthens checking. Not a
8222 * strong reason, but sufficient in the absence of others.
8223 * [Now we resolve ties in favor of the earlier string if
8224 * it happens that c_offset_min has been invalidated, since the
8225 * earlier string may buy us something the later one won't.]
8226 */
8227
8228 data.substrs[0].str = newSVpvs("")Perl_newSVpvn( ("" "" ""), (sizeof("")-1));
8229 data.substrs[1].str = newSVpvs("")Perl_newSVpvn( ("" "" ""), (sizeof("")-1));
8230 data.last_found = newSVpvs("")Perl_newSVpvn( ("" "" ""), (sizeof("")-1));
8231 data.cur_is_floating = 0; /* initially any found substring is fixed */
8232 ENTER_with_name("study_chunk")do { Perl_push_scope(); if (PL_scopestack_name) PL_scopestack_name
[PL_scopestack_ix-1] = "study_chunk"; if (__builtin_expect(((
PL_debug & 0x00000004) ? (_Bool)1 : (_Bool)0),(0))) Perl_deb
( "%s scope %ld (savestack=%ld) at %s:%d\n", "ENTER \"" "study_chunk"
"\"", (long)PL_scopestack_ix, (long)PL_savestack_ix, "re_comp.c"
, 8232); } while (0)
;
8233 SAVEFREESV(data.substrs[0].str)Perl_save_pushptr( (void *)(((SV *)({ void *_p = (data.substrs
[0].str); _p; }))),11)
;
8234 SAVEFREESV(data.substrs[1].str)Perl_save_pushptr( (void *)(((SV *)({ void *_p = (data.substrs
[1].str); _p; }))),11)
;
8235 SAVEFREESV(data.last_found)Perl_save_pushptr( (void *)(((SV *)({ void *_p = (data.last_found
); _p; }))),11)
;
8236 first = scan;
8237 if (!RExC_rxi(pRExC_state->rxi)->regstclass) {
8238 ssc_init(pRExC_state, &ch_class)S_ssc_init( pRExC_state,&ch_class);
8239 data.start_class = &ch_class;
8240 stclass_flag = SCF_DO_STCLASS_AND0x0800;
8241 } else /* XXXX Check for BOUND? */
8242 stclass_flag = 0;
8243 data.last_closep = &last_close;
8244
8245 DEBUG_RExC_seen()do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);
;
8246 /*
8247 * MAIN ENTRY FOR study_chunk() FOR m/PATTERN/
8248 * (NO top level branches)
8249 */
8250 minlen = study_chunk(pRExC_state, &first, &minlen, &fake,S_study_chunk( pRExC_state,&first,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0400 | 0x2000
| stclass_flag | (restudied ? 0x10000 : 0),0,(1))
8251 scan + RExC_size, /* Up to end */S_study_chunk( pRExC_state,&first,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0400 | 0x2000
| stclass_flag | (restudied ? 0x10000 : 0),0,(1))
8252 &data, -1, 0, NULL,S_study_chunk( pRExC_state,&first,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0400 | 0x2000
| stclass_flag | (restudied ? 0x10000 : 0),0,(1))
8253 SCF_DO_SUBSTR | SCF_WHILEM_VISITED_POS | stclass_flagS_study_chunk( pRExC_state,&first,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0400 | 0x2000
| stclass_flag | (restudied ? 0x10000 : 0),0,(1))
8254 | (restudied ? SCF_TRIE_DOING_RESTUDY : 0),S_study_chunk( pRExC_state,&first,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0400 | 0x2000
| stclass_flag | (restudied ? 0x10000 : 0),0,(1))
8255 0, TRUE)S_study_chunk( pRExC_state,&first,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0400 | 0x2000
| stclass_flag | (restudied ? 0x10000 : 0),0,(1))
;
8256
8257
8258 CHECK_RESTUDY_GOTO_butfirst(LEAVE_with_name("study_chunk"))do { if ( (data.flags & 0x4000) && ! restudied++ )
{ do { if (__builtin_expect(((PL_debug & 0x00000004) ? (
_Bool)1 : (_Bool)0),(0))) Perl_deb( "%s scope %ld (savestack=%ld) at %s:%d\n"
, "LEAVE \"" "study_chunk" "\"", (long)PL_scopestack_ix, (long
)PL_savestack_ix, "re_comp.c", 8258); if (PL_scopestack_name)
{ ((((char*)PL_scopestack_name[PL_scopestack_ix-1] == (char*
)"study_chunk") || (strcmp(PL_scopestack_name[PL_scopestack_ix
-1],"study_chunk") == 0)) ? (void)0 : __assert2("re_comp.c", 8258
, __func__, "((char*)PL_scopestack_name[PL_scopestack_ix-1] == (char*)\"study_chunk\") || strEQ(PL_scopestack_name[PL_scopestack_ix-1], \"study_chunk\")"
)); } Perl_pop_scope(); } while (0); goto reStudy; } } while (
0)
;
8259
8260
8261 if ( RExC_total_parens(pRExC_state->total_par) == 1 && !data.cur_is_floating
8262 && data.last_start_min == 0 && data.last_end > 0
8263 && !RExC_seen_zerolen(pRExC_state->seen_zerolen)
8264 && !(RExC_seen(pRExC_state->seen) & REG_VERBARG_SEEN0x00000080)
8265 && !(RExC_seen(pRExC_state->seen) & REG_GPOS_SEEN0x00000004)
8266 ){
8267 RExC_rx(pRExC_state->rx)->extflags |= RXf_CHECK_ALL(1U<<(((0 +12) + 2)+5));
8268 }
8269 scan_commit(pRExC_state, &data,&minlen, 0)S_scan_commit( pRExC_state,&data,&minlen,0);
8270
8271
8272 /* XXX this is done in reverse order because that's the way the
8273 * code was before it was parameterised. Don't know whether it
8274 * actually needs doing in reverse order. DAPM */
8275 for (i = 1; i >= 0; i--) {
8276 longest_length[i] = CHR_SVLEN(data.substrs[i].str)((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? Perl_sv_len_utf8
( data.substrs[i].str) : (*({ const SV *const _svcur = (const
SV *)(data.substrs[i].str); ((PL_valid_types_PVX[((svtype)((
_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 8276, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8276, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8276, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })))
;
8277
8278 if ( !( i
8279 && SvCUR(data.substrs[0].str)(*({ const SV *const _svcur = (const SV *)(data.substrs[0].str
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8279,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8279, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8279, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
/* ok to leave SvCUR */
8280 && data.substrs[0].min_offset
8281 == data.substrs[1].min_offset
8282 && SvCUR(data.substrs[0].str)(*({ const SV *const _svcur = (const SV *)(data.substrs[0].str
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8282,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8282, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8282, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
8283 == SvCUR(data.substrs[1].str)(*({ const SV *const _svcur = (const SV *)(data.substrs[1].str
); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8283,
__func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8283, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8283, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
8284 )
8285 && S_setup_longest (aTHX_ pRExC_state,
8286 &(RExC_rx(pRExC_state->rx)->substrs->data[i]),
8287 &(data.substrs[i]),
8288 longest_length[i]))
8289 {
8290 RExC_rx(pRExC_state->rx)->substrs->data[i].min_offset =
8291 data.substrs[i].min_offset - data.substrs[i].lookbehind;
8292
8293 RExC_rx(pRExC_state->rx)->substrs->data[i].max_offset = data.substrs[i].max_offset;
8294 /* Don't offset infinity */
8295 if (data.substrs[i].max_offset < OPTIMIZE_INFTY(ssize_t)(~(size_t)0 >> 1))
8296 RExC_rx(pRExC_state->rx)->substrs->data[i].max_offset -= data.substrs[i].lookbehind;
8297 SvREFCNT_inc_simple_void_NN(data.substrs[i].str)(void)(++(((SV *)({ void *_p = (data.substrs[i].str); _p; }))
)->sv_refcnt)
;
8298 }
8299 else {
8300 RExC_rx(pRExC_state->rx)->substrs->data[i].substr = NULL((void*)0);
8301 RExC_rx(pRExC_state->rx)->substrs->data[i].utf8_substr = NULL((void*)0);
8302 longest_length[i] = 0;
8303 }
8304 }
8305
8306 LEAVE_with_name("study_chunk")do { if (__builtin_expect(((PL_debug & 0x00000004) ? (_Bool
)1 : (_Bool)0),(0))) Perl_deb( "%s scope %ld (savestack=%ld) at %s:%d\n"
, "LEAVE \"" "study_chunk" "\"", (long)PL_scopestack_ix, (long
)PL_savestack_ix, "re_comp.c", 8306); if (PL_scopestack_name)
{ ((((char*)PL_scopestack_name[PL_scopestack_ix-1] == (char*
)"study_chunk") || (strcmp(PL_scopestack_name[PL_scopestack_ix
-1],"study_chunk") == 0)) ? (void)0 : __assert2("re_comp.c", 8306
, __func__, "((char*)PL_scopestack_name[PL_scopestack_ix-1] == (char*)\"study_chunk\") || strEQ(PL_scopestack_name[PL_scopestack_ix-1], \"study_chunk\")"
)); } Perl_pop_scope(); } while (0)
;
8307
8308 if (RExC_rxi(pRExC_state->rxi)->regstclass
8309 && (OP(RExC_rxi->regstclass)(((pRExC_state->rxi)->regstclass)->type) == REG_ANY16 || OP(RExC_rxi->regstclass)(((pRExC_state->rxi)->regstclass)->type) == SANY17))
8310 RExC_rxi(pRExC_state->rxi)->regstclass = NULL((void*)0);
8311
8312 if ((!(RExC_rx(pRExC_state->rx)->substrs->data[0].substr || RExC_rx(pRExC_state->rx)->substrs->data[0].utf8_substr)
8313 || RExC_rx(pRExC_state->rx)->substrs->data[0].min_offset)
8314 && stclass_flag
8315 && ! (ANYOF_FLAGS(data.start_class)((data.start_class)->flags) & SSC_MATCHES_EMPTY_STRING0x01)
8316 && is_ssc_worth_itS_is_ssc_worth_it(pRExC_state, data.start_class))
8317 {
8318 const U32 n = add_dataS_add_data(pRExC_state, STR_WITH_LEN("f")("" "f" ""), (sizeof("f")-1));
8319
8320 ssc_finalize(pRExC_state, data.start_class)S_ssc_finalize( pRExC_state,data.start_class);
8321
8322 Newx(RExC_rxi->data->data[n], 1, regnode_ssc)((pRExC_state->rxi)->data->data[n] = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(1) || sizeof(regnode_ssc) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ? (size_t
)(1) : ((size_t)-1)/sizeof(regnode_ssc)) > ((size_t)-1)/sizeof
(regnode_ssc))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof
(regnode_ssc))))))
;
8323 StructCopy(data.start_class,(*((regnode_ssc*)((regnode_ssc*)(pRExC_state->rxi)->data
->data[n])) = *((regnode_ssc*)(data.start_class)))
8324 (regnode_ssc*)RExC_rxi->data->data[n],(*((regnode_ssc*)((regnode_ssc*)(pRExC_state->rxi)->data
->data[n])) = *((regnode_ssc*)(data.start_class)))
8325 regnode_ssc)(*((regnode_ssc*)((regnode_ssc*)(pRExC_state->rxi)->data
->data[n])) = *((regnode_ssc*)(data.start_class)))
;
8326 RExC_rxi(pRExC_state->rxi)->regstclass = (regnode*)RExC_rxi(pRExC_state->rxi)->data->data[n];
8327 RExC_rx(pRExC_state->rx)->intflags &= ~PREGf_SKIP0x00000001; /* Used in find_byclass(). */
8328 DEBUG_COMPILE_r({ SV *sv = sv_newmortal();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8329 regprop(RExC_rx, sv, (regnode*)data.start_class, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8330 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8331 "synthetic stclass \"%s\".\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8332 SvPVX_const(sv));})do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
*sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
;
8333 data.start_class = NULL((void*)0);
8334 }
8335
8336 /* A temporary algorithm prefers floated substr to fixed one of
8337 * same length to dig more info. */
8338 i = (longest_length[0] <= longest_length[1]);
8339 RExC_rx(pRExC_state->rx)->substrs->check_ix = i;
8340 RExC_rx(pRExC_state->rx)->check_end_shiftsubstrs->data[2].end_shift = RExC_rx(pRExC_state->rx)->substrs->data[i].end_shift;
8341 RExC_rx(pRExC_state->rx)->check_substrsubstrs->data[2].substr = RExC_rx(pRExC_state->rx)->substrs->data[i].substr;
8342 RExC_rx(pRExC_state->rx)->check_utf8substrs->data[2].utf8_substr = RExC_rx(pRExC_state->rx)->substrs->data[i].utf8_substr;
8343 RExC_rx(pRExC_state->rx)->check_offset_minsubstrs->data[2].min_offset = RExC_rx(pRExC_state->rx)->substrs->data[i].min_offset;
8344 RExC_rx(pRExC_state->rx)->check_offset_maxsubstrs->data[2].max_offset = RExC_rx(pRExC_state->rx)->substrs->data[i].max_offset;
8345 if (!i && (RExC_rx(pRExC_state->rx)->intflags & (PREGf_ANCH_SBOL0x00000800|PREGf_ANCH_GPOS0x00001000)))
8346 RExC_rx(pRExC_state->rx)->intflags |= PREGf_NOSCAN0x00000040;
8347
8348 if ((RExC_rx(pRExC_state->rx)->check_substrsubstrs->data[2].substr || RExC_rx(pRExC_state->rx)->check_utf8substrs->data[2].utf8_substr) ) {
8349 RExC_rx(pRExC_state->rx)->extflags |= RXf_USE_INTUIT((1U<<(((0 +12) + 2)+7))|(1U<<(((0 +12) + 2)+8)));
8350 if (SvTAIL(RExC_rx->check_substr ? RExC_rx->check_substr : RExC_rx->check_utf8)({ const SV *const _svtail = (const SV *)((pRExC_state->rx
)->substrs->data[2].substr ? (pRExC_state->rx)->substrs
->data[2].substr : (pRExC_state->rx)->substrs->data
[2].utf8_substr); ((((svtype)((_svtail)->sv_flags & 0xff
)) != SVt_PVAV) ? (void)0 : __assert2("re_comp.c", 8350, __func__
, "SvTYPE(_svtail) != SVt_PVAV")); ((((svtype)((_svtail)->
sv_flags & 0xff)) != SVt_PVHV) ? (void)0 : __assert2("re_comp.c"
, 8350, __func__, "SvTYPE(_svtail) != SVt_PVHV")); ((!((_svtail
)->sv_flags & (0x00000200|0x00002000))) ? (void)0 : __assert2
("re_comp.c", 8350, __func__, "!(SvFLAGS(_svtail) & (SVf_NOK|SVp_NOK))"
)); ((( ((_svtail)->sv_flags & 0x00004000) && (
(_svtail)->sv_flags & 0x00400000) && (*({ const
SV *const _svmagic = (const SV *)(_svtail); ((((svtype)((_svmagic
)->sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2
("re_comp.c", 8350, __func__, "SvTYPE(_svmagic) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svmagic)->sv_any); _p
; }))->xmg_u.xmg_magic); })) && ((*({ const SV *const
_svmagic = (const SV *)(_svtail); ((((svtype)((_svmagic)->
sv_flags & 0xff)) >= SVt_PVMG) ? (void)0 : __assert2("re_comp.c"
, 8350, __func__, "SvTYPE(_svmagic) >= SVt_PVMG")); &(
((XPVMG*) ({ void *_p = ((_svmagic)->sv_any); _p; }))->
xmg_u.xmg_magic); }))->mg_type == 'B' || Perl_mg_find(_svtail
, 'B')) )) ? (void)0 : __assert2("re_comp.c", 8350, __func__,
"SvVALID(_svtail)")); ((XPVNV*)(_svtail)->sv_any)->xnv_u
.xnv_bm_tail; })
)
8351 RExC_rx(pRExC_state->rx)->extflags |= RXf_INTUIT_TAIL(1U<<(((0 +12) + 2)+9));
8352 }
8353
8354 /* XXX Unneeded? dmq (shouldn't as this is handled elsewhere)
8355 if ( (STRLEN)minlen < longest_length[1] )
8356 minlen= longest_length[1];
8357 if ( (STRLEN)minlen < longest_length[0] )
8358 minlen= longest_length[0];
8359 */
8360 }
8361 else {
8362 /* Several toplevels. Best we can is to set minlen. */
8363 SSize_tssize_t fake;
8364 regnode_ssc ch_class;
8365 SSize_tssize_t last_close = 0;
8366
8367 DEBUG_PARSE_r(Perl_re_printf( aTHX_ "\nMulti Top Level\n"))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) Perl_re_printf
( "\nMulti Top Level\n");} while (0)
;
8368
8369 scan = RExC_rxi(pRExC_state->rxi)->program + 1;
8370 ssc_init(pRExC_state, &ch_class)S_ssc_init( pRExC_state,&ch_class);
8371 data.start_class = &ch_class;
8372 data.last_closep = &last_close;
8373
8374 DEBUG_RExC_seen()do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);
;
8375 /*
8376 * MAIN ENTRY FOR study_chunk() FOR m/P1|P2|.../
8377 * (patterns WITH top level branches)
8378 */
8379 minlen = study_chunk(pRExC_state,S_study_chunk( pRExC_state,&scan,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0800|0x2000
|(restudied ? 0x10000 : 0),0,(1))
8380 &scan, &minlen, &fake, scan + RExC_size, &data, -1, 0, NULL,S_study_chunk( pRExC_state,&scan,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0800|0x2000
|(restudied ? 0x10000 : 0),0,(1))
8381 SCF_DO_STCLASS_AND|SCF_WHILEM_VISITED_POS|(restudiedS_study_chunk( pRExC_state,&scan,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0800|0x2000
|(restudied ? 0x10000 : 0),0,(1))
8382 ? SCF_TRIE_DOING_RESTUDYS_study_chunk( pRExC_state,&scan,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0800|0x2000
|(restudied ? 0x10000 : 0),0,(1))
8383 : 0),S_study_chunk( pRExC_state,&scan,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0800|0x2000
|(restudied ? 0x10000 : 0),0,(1))
8384 0, TRUE)S_study_chunk( pRExC_state,&scan,&minlen,&fake,scan
+ (pRExC_state->size),&data,-1,0,((void*)0),0x0800|0x2000
|(restudied ? 0x10000 : 0),0,(1))
;
8385
8386 CHECK_RESTUDY_GOTO_butfirst(NOOP)do { if ( (data.flags & 0x4000) && ! restudied++ )
{ (void)0; goto reStudy; } } while (0)
;
8387
8388 RExC_rx(pRExC_state->rx)->check_substrsubstrs->data[2].substr = NULL((void*)0);
8389 RExC_rx(pRExC_state->rx)->check_utf8substrs->data[2].utf8_substr = NULL((void*)0);
8390 RExC_rx(pRExC_state->rx)->substrs->data[0].substr = NULL((void*)0);
8391 RExC_rx(pRExC_state->rx)->substrs->data[0].utf8_substr = NULL((void*)0);
8392 RExC_rx(pRExC_state->rx)->substrs->data[1].substr = NULL((void*)0);
8393 RExC_rx(pRExC_state->rx)->substrs->data[1].utf8_substr = NULL((void*)0);
8394
8395 if (! (ANYOF_FLAGS(data.start_class)((data.start_class)->flags) & SSC_MATCHES_EMPTY_STRING0x01)
8396 && is_ssc_worth_itS_is_ssc_worth_it(pRExC_state, data.start_class))
8397 {
8398 const U32 n = add_dataS_add_data(pRExC_state, STR_WITH_LEN("f")("" "f" ""), (sizeof("f")-1));
8399
8400 ssc_finalize(pRExC_state, data.start_class)S_ssc_finalize( pRExC_state,data.start_class);
8401
8402 Newx(RExC_rxi->data->data[n], 1, regnode_ssc)((pRExC_state->rxi)->data->data[n] = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof(1) || sizeof(regnode_ssc) >
((size_t)1 << 8*(sizeof(size_t) - sizeof(1)))) ? (size_t
)(1) : ((size_t)-1)/sizeof(regnode_ssc)) > ((size_t)-1)/sizeof
(regnode_ssc))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (regnode_ssc*)(Perl_safesysmalloc((size_t)((1)*sizeof
(regnode_ssc))))))
;
8403 StructCopy(data.start_class,(*((regnode_ssc*)((regnode_ssc*)(pRExC_state->rxi)->data
->data[n])) = *((regnode_ssc*)(data.start_class)))
8404 (regnode_ssc*)RExC_rxi->data->data[n],(*((regnode_ssc*)((regnode_ssc*)(pRExC_state->rxi)->data
->data[n])) = *((regnode_ssc*)(data.start_class)))
8405 regnode_ssc)(*((regnode_ssc*)((regnode_ssc*)(pRExC_state->rxi)->data
->data[n])) = *((regnode_ssc*)(data.start_class)))
;
8406 RExC_rxi(pRExC_state->rxi)->regstclass = (regnode*)RExC_rxi(pRExC_state->rxi)->data->data[n];
8407 RExC_rx(pRExC_state->rx)->intflags &= ~PREGf_SKIP0x00000001; /* Used in find_byclass(). */
8408 DEBUG_COMPILE_r({ SV* sv = sv_newmortal();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
* sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8409 regprop(RExC_rx, sv, (regnode*)data.start_class, NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
* sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8410 Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
* sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8411 "synthetic stclass \"%s\".\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
* sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
8412 SvPVX_const(sv));})do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0000FF))) { SV
* sv = Perl_sv_newmortal(); my_regprop( (pRExC_state->rx),
sv,(regnode*)data.start_class,((void*)0),pRExC_state); Perl_re_printf
( "synthetic stclass \"%s\".\n", ((const char*)(0 + (sv)->
sv_u.svu_pv)));};} while (0)
;
8413 data.start_class = NULL((void*)0);
8414 }
8415 }
8416
8417 if (RExC_seen(pRExC_state->seen) & REG_UNBOUNDED_QUANTIFIER_SEEN0x00001000) {
8418 RExC_rx(pRExC_state->rx)->extflags |= RXf_UNBOUNDED_QUANTIFIER_SEEN(1U<<(((0 +12) + 2)+4));
8419 RExC_rx(pRExC_state->rx)->maxlen = REG_INFTY0xffff;
8420 }
8421 else {
8422 RExC_rx(pRExC_state->rx)->maxlen = RExC_maxlen(pRExC_state->maxlen);
8423 }
8424
8425 /* Guard against an embedded (?=) or (?<=) with a longer minlen than
8426 the "real" pattern. */
8427 DEBUG_OPTIMISE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { Perl_re_printf
( "minlen: %" "ld" " RExC_rx->minlen:%" "ld" " maxlen:%" "ld"
"\n", (IV)minlen, (IV)(pRExC_state->rx)->minlen, (IV)(
pRExC_state->maxlen)); };} while (0)
8428 Perl_re_printf( aTHX_ "minlen: %" IVdf " RExC_rx->minlen:%" IVdf " maxlen:%" IVdf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { Perl_re_printf
( "minlen: %" "ld" " RExC_rx->minlen:%" "ld" " maxlen:%" "ld"
"\n", (IV)minlen, (IV)(pRExC_state->rx)->minlen, (IV)(
pRExC_state->maxlen)); };} while (0)
8429 (IV)minlen, (IV)RExC_rx->minlen, (IV)RExC_maxlen);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { Perl_re_printf
( "minlen: %" "ld" " RExC_rx->minlen:%" "ld" " maxlen:%" "ld"
"\n", (IV)minlen, (IV)(pRExC_state->rx)->minlen, (IV)(
pRExC_state->maxlen)); };} while (0)
8430 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000002))) { Perl_re_printf
( "minlen: %" "ld" " RExC_rx->minlen:%" "ld" " maxlen:%" "ld"
"\n", (IV)minlen, (IV)(pRExC_state->rx)->minlen, (IV)(
pRExC_state->maxlen)); };} while (0)
;
8431 RExC_rx(pRExC_state->rx)->minlenret = minlen;
8432 if (RExC_rx(pRExC_state->rx)->minlen < minlen)
8433 RExC_rx(pRExC_state->rx)->minlen = minlen;
8434
8435 if (RExC_seen(pRExC_state->seen) & REG_RECURSE_SEEN0x00000020 ) {
8436 RExC_rx(pRExC_state->rx)->intflags |= PREGf_RECURSE_SEEN0x00002000;
8437 Newx(RExC_rx->recurse_locinput, RExC_rx->nparens + 1, char *)((pRExC_state->rx)->recurse_locinput = ((void)(__builtin_expect
(((((( sizeof(size_t) < sizeof((pRExC_state->rx)->nparens
+ 1) || sizeof(char *) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof((pRExC_state->rx)->nparens + 1)))) ? (size_t
)((pRExC_state->rx)->nparens + 1) : ((size_t)-1)/sizeof
(char *)) > ((size_t)-1)/sizeof(char *))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (char **)(
Perl_safesysmalloc((size_t)(((pRExC_state->rx)->nparens
+ 1)*sizeof(char *))))))
;
8438 }
8439 if (RExC_seen(pRExC_state->seen) & REG_GPOS_SEEN0x00000004)
8440 RExC_rx(pRExC_state->rx)->intflags |= PREGf_GPOS_SEEN0x00000100;
8441 if (RExC_seen(pRExC_state->seen) & REG_LOOKBEHIND_SEEN0x00000002)
8442 RExC_rx(pRExC_state->rx)->extflags |= RXf_NO_INPLACE_SUBST(1U<<(((0 +12) + 2)+2)); /* inplace might break the
8443 lookbehind */
8444 if (pRExC_state->code_blocks)
8445 RExC_rx(pRExC_state->rx)->extflags |= RXf_EVAL_SEEN(1U<<(((0 +12) + 2)+3));
8446 if (RExC_seen(pRExC_state->seen) & REG_VERBARG_SEEN0x00000080)
8447 {
8448 RExC_rx(pRExC_state->rx)->intflags |= PREGf_VERBARG_SEEN0x00000008;
8449 RExC_rx(pRExC_state->rx)->extflags |= RXf_NO_INPLACE_SUBST(1U<<(((0 +12) + 2)+2)); /* don't understand this! Yves */
8450 }
8451 if (RExC_seen(pRExC_state->seen) & REG_CUTGROUP_SEEN0x00000100)
8452 RExC_rx(pRExC_state->rx)->intflags |= PREGf_CUTGROUP_SEEN0x00000010;
8453 if (pm_flags & PMf_USE_RE_EVAL(1U<<(((0 +12)+2)+16)))
8454 RExC_rx(pRExC_state->rx)->intflags |= PREGf_USE_RE_EVAL0x00000020;
8455 if (RExC_paren_names(pRExC_state->paren_names))
8456 RXp_PAREN_NAMES(RExC_rx)(((pRExC_state->rx))->paren_names) = MUTABLE_HV(SvREFCNT_inc(RExC_paren_names))((HV *)({ void *_p = (Perl_SvREFCNT_inc(((SV *)({ void *_p = (
(pRExC_state->paren_names)); _p; })))); _p; }))
;
8457 else
8458 RXp_PAREN_NAMES(RExC_rx)(((pRExC_state->rx))->paren_names) = NULL((void*)0);
8459
8460 /* If we have seen an anchor in our pattern then we set the extflag RXf_IS_ANCHORED
8461 * so it can be used in pp.c */
8462 if (RExC_rx(pRExC_state->rx)->intflags & PREGf_ANCH( 0x00000800 | 0x00001000 | 0x00000400 ))
8463 RExC_rx(pRExC_state->rx)->extflags |= RXf_IS_ANCHORED(1U<<(((0 +12) + 2)+10));
8464
8465
8466 {
8467 /* this is used to identify "special" patterns that might result
8468 * in Perl NOT calling the regex engine and instead doing the match "itself",
8469 * particularly special cases in split//. By having the regex compiler
8470 * do this pattern matching at a regop level (instead of by inspecting the pattern)
8471 * we avoid weird issues with equivalent patterns resulting in different behavior,
8472 * AND we allow non Perl engines to get the same optimizations by the setting the
8473 * flags appropriately - Yves */
8474 regnode *first = RExC_rxi(pRExC_state->rxi)->program + 1;
8475 U8 fop = OP(first)((first)->type);
8476 regnode *next = regnext(first)Perl_regnext( first);
8477 U8 nop = OP(next)((next)->type);
8478
8479 if (PL_regkind[fop] == NOTHING54 && nop == END0)
8480 RExC_rx(pRExC_state->rx)->extflags |= RXf_NULL(1U<<(((0 +12) + 2)+17));
8481 else if ((fop == MBOL3 || (fop == SBOL2 && !first->flags)) && nop == END0)
8482 /* when fop is SBOL first->flags will be true only when it was
8483 * produced by parsing /\A/, and not when parsing /^/. This is
8484 * very important for the split code as there we want to
8485 * treat /^/ as /^/m, but we do not want to treat /\A/ as /^/m.
8486 * See rt #122761 for more details. -- Yves */
8487 RExC_rx(pRExC_state->rx)->extflags |= RXf_START_ONLY(1U<<(((0 +12) + 2)+14));
8488 else if (fop == PLUS57
8489 && PL_regkind[nop] == POSIXD30 && FLAGS(next)((next)->flags) == _CC_SPACE10
8490 && nop == END0)
8491 RExC_rx(pRExC_state->rx)->extflags |= RXf_WHITE(1U<<(((0 +12) + 2)+16));
8492 else if ( RExC_rx(pRExC_state->rx)->extflags & RXf_SPLIT(1U<<(0 +11))
8493 && ( fop == EXACT40 || fop == LEXACT41
8494 || fop == EXACT_REQ850 || fop == LEXACT_REQ851
8495 || fop == EXACTL42)
8496 && STR_LEN(first)((((first)->type) == 41 || ((first)->type) == 51) ? (((
((first)->type) == 41 || ((first)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 8496, __func__, "((first)->type) == 41 || ((first)->type) == 51"
)), (((struct regnode_lstring *)first)->str_len)) : (((((first
)->type) != 41 && ((first)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 8496, __func__, "((first)->type) != 41 && ((first)->type) != 51"
)), ((struct regnode_string *)first)->str_len))
== 1
8497 && *(STRING(first)((((first)->type) == 41 || ((first)->type) == 51) ? (((
((first)->type) == 41 || ((first)->type) == 51) ? (void
)0 : __assert2("re_comp.c", 8497, __func__, "((first)->type) == 41 || ((first)->type) == 51"
)), (((struct regnode_lstring *)first)->string)) : (((((first
)->type) != 41 && ((first)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 8497, __func__, "((first)->type) != 41 && ((first)->type) != 51"
)), ((struct regnode_string *)first)->string))
) == ' '
8498 && nop == END0 )
8499 RExC_rx(pRExC_state->rx)->extflags |= (RXf_SKIPWHITE(1U<<(((0 +12) + 2)+15))|RXf_WHITE(1U<<(((0 +12) + 2)+16)));
8500
8501 }
8502
8503 if (RExC_contains_locale(pRExC_state->contains_locale)) {
8504 RXp_EXTFLAGS(RExC_rx)(((pRExC_state->rx))->extflags) |= RXf_TAINTED(1U<<(((0 +12) + 2)+13));
8505 }
8506
8507#ifdef DEBUGGING
8508 if (RExC_paren_names(pRExC_state->paren_names)) {
8509 RExC_rxi(pRExC_state->rxi)->name_list_idx = add_dataS_add_data( pRExC_state, STR_WITH_LEN("a")("" "a" ""), (sizeof("a")-1));
8510 RExC_rxi(pRExC_state->rxi)->data->data[RExC_rxi(pRExC_state->rxi)->name_list_idx]
8511 = (void*)SvREFCNT_inc(RExC_paren_name_list)Perl_SvREFCNT_inc(((SV *)({ void *_p = ((pRExC_state->paren_name_list
)); _p; })))
;
8512 } else
8513#endif
8514 RExC_rxi(pRExC_state->rxi)->name_list_idx = 0;
8515
8516 while ( RExC_recurse_count(pRExC_state->recurse_count) > 0 ) {
8517 const regnode *scan = RExC_recurse(pRExC_state->recurse)[ --RExC_recurse_count(pRExC_state->recurse_count) ];
8518 /*
8519 * This data structure is set up in study_chunk() and is used
8520 * to calculate the distance between a GOSUB regopcode and
8521 * the OPEN/CURLYM (CURLYM's are special and can act like OPEN's)
8522 * it refers to.
8523 *
8524 * If for some reason someone writes code that optimises
8525 * away a GOSUB opcode then the assert should be changed to
8526 * an if(scan) to guard the ARG2L_SET() - Yves
8527 *
8528 */
8529 assert(scan && OP(scan) == GOSUB)((scan && ((scan)->type) == 92) ? (void)0 : __assert2
("re_comp.c", 8529, __func__, "scan && OP(scan) == GOSUB"
))
;
8530 ARG2L_SET( scan, RExC_open_parens[ARG(scan)] - REGNODE_OFFSET(scan))(((((struct regnode_2L *)scan)->arg2)) = (((pRExC_state->
open_parens)[((((struct regnode_1 *)scan)->arg1))] - ((scan
) - (pRExC_state->emit_start)))))
;
8531 }
8532
8533 Newxz(RExC_rx->offs, RExC_total_parens, regexp_paren_pair)((pRExC_state->rx)->offs = ((void)(__builtin_expect((((
(( sizeof(size_t) < sizeof((pRExC_state->total_par)) ||
sizeof(regexp_paren_pair) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->total_par))))) ? (size_t)(
(pRExC_state->total_par)) : ((size_t)-1)/sizeof(regexp_paren_pair
)) > ((size_t)-1)/sizeof(regexp_paren_pair))) ? (_Bool)1 :
(_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (regexp_paren_pair
*)(Perl_safesyscalloc(((pRExC_state->total_par)),sizeof(regexp_paren_pair
)))))
;
8534 /* assume we don't need to swap parens around before we match */
8535 DEBUG_TEST_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000020))) { Perl_re_printf
( "study_chunk_recursed_count: %lu\n", (unsigned long)(pRExC_state
->study_chunk_recursed_count)); };} while (0)
8536 Perl_re_printf( aTHX_ "study_chunk_recursed_count: %lu\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000020))) { Perl_re_printf
( "study_chunk_recursed_count: %lu\n", (unsigned long)(pRExC_state
->study_chunk_recursed_count)); };} while (0)
8537 (unsigned long)RExC_study_chunk_recursed_count);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000020))) { Perl_re_printf
( "study_chunk_recursed_count: %lu\n", (unsigned long)(pRExC_state
->study_chunk_recursed_count)); };} while (0)
8538 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000020))) { Perl_re_printf
( "study_chunk_recursed_count: %lu\n", (unsigned long)(pRExC_state
->study_chunk_recursed_count)); };} while (0)
;
8539 DEBUG_DUMP_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000008))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Final program:\n"
); my_regdump( (pRExC_state->rx)); };} while (0)
8540 DEBUG_RExC_seen();do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000008))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Final program:\n"
); my_regdump( (pRExC_state->rx)); };} while (0)
8541 Perl_re_printf( aTHX_ "Final program:\n");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000008))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Final program:\n"
); my_regdump( (pRExC_state->rx)); };} while (0)
8542 regdump(RExC_rx);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000008))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Final program:\n"
); my_regdump( (pRExC_state->rx)); };} while (0)
8543 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000008))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) { Perl_re_printf( "RExC_seen: "
); if ((pRExC_state->seen) & 0x00000001) Perl_re_printf
( "REG_ZERO_LEN_SEEN "); if ((pRExC_state->seen) & 0x00000002
) Perl_re_printf( "REG_LOOKBEHIND_SEEN "); if ((pRExC_state->
seen) & 0x00000004) Perl_re_printf( "REG_GPOS_SEEN "); if
((pRExC_state->seen) & 0x00000020) Perl_re_printf( "REG_RECURSE_SEEN "
); if ((pRExC_state->seen) & 0x00000040) Perl_re_printf
( "REG_TOP_LEVEL_BRANCHES_SEEN "); if ((pRExC_state->seen)
& 0x00000080) Perl_re_printf( "REG_VERBARG_SEEN "); if (
(pRExC_state->seen) & 0x00000100) Perl_re_printf( "REG_CUTGROUP_SEEN "
); if ((pRExC_state->seen) & 0x00000200) Perl_re_printf
( "REG_RUN_ON_COMMENT_SEEN "); if ((pRExC_state->seen) &
0x00000400) Perl_re_printf( "REG_UNFOLDED_MULTI_SEEN "); if (
(pRExC_state->seen) & 0x00001000) Perl_re_printf( "REG_UNBOUNDED_QUANTIFIER_SEEN "
); Perl_re_printf( "\n"); };} while (0);; Perl_re_printf( "Final program:\n"
); my_regdump( (pRExC_state->rx)); };} while (0)
;
8544
8545 if (RExC_open_parens(pRExC_state->open_parens)) {
8546 Safefree(RExC_open_parens)Perl_safesysfree(((void *)((pRExC_state->open_parens))));
8547 RExC_open_parens(pRExC_state->open_parens) = NULL((void*)0);
8548 }
8549 if (RExC_close_parens(pRExC_state->close_parens)) {
8550 Safefree(RExC_close_parens)Perl_safesysfree(((void *)((pRExC_state->close_parens))));
8551 RExC_close_parens(pRExC_state->close_parens) = NULL((void*)0);
8552 }
8553
8554#ifdef USE_ITHREADS
8555 /* under ithreads the ?pat? PMf_USED flag on the pmop is simulated
8556 * by setting the regexp SV to readonly-only instead. If the
8557 * pattern's been recompiled, the USEDness should remain. */
8558 if (old_re && SvREADONLY(old_re)((old_re)->sv_flags & (0x08000000|0x00010000)))
8559 SvREADONLY_on(Rx)((Rx)->sv_flags |= 0x08000000);
8560#endif
8561 return Rx;
8562}
8563
8564
8565SV*
8566Perl_reg_named_buffmy_reg_named_buff(pTHX_ REGEXP * const rx, SV * const key, SV * const value,
8567 const U32 flags)
8568{
8569 PERL_ARGS_ASSERT_REG_NAMED_BUFF((rx) ? (void)0 : __assert2("re_comp.c", 8569, __func__, "rx"
))
;
8570
8571 PERL_UNUSED_ARG(value)((void)sizeof(value));
8572
8573 if (flags & RXapif_FETCH0x0001) {
8574 return reg_named_buff_fetch(rx, key, flags)my_reg_named_buff_fetch( rx,key,flags);
8575 } else if (flags & (RXapif_STORE0x0002 | RXapif_DELETE0x0004 | RXapif_CLEAR0x0008)) {
8576 Perl_croak_no_modify();
8577 return NULL((void*)0);
8578 } else if (flags & RXapif_EXISTS0x0010) {
8579 return reg_named_buff_exists(rx, key, flags)my_reg_named_buff_exists( rx,key,flags)
8580 ? &PL_sv_yes(PL_sv_immortals[0])
8581 : &PL_sv_no(PL_sv_immortals[2]);
8582 } else if (flags & RXapif_REGNAMES0x0800) {
8583 return reg_named_buff_all(rx, flags)my_reg_named_buff_all( rx,flags);
8584 } else if (flags & (RXapif_SCALAR0x0020 | RXapif_REGNAMES_COUNT0x1000)) {
8585 return reg_named_buff_scalar(rx, flags)my_reg_named_buff_scalar( rx,flags);
8586 } else {
8587 Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff", (int)flags);
8588 return NULL((void*)0);
8589 }
8590}
8591
8592SV*
8593Perl_reg_named_buff_itermy_reg_named_buff_iter(pTHX_ REGEXP * const rx, const SV * const lastkey,
8594 const U32 flags)
8595{
8596 PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER((rx) ? (void)0 : __assert2("re_comp.c", 8596, __func__, "rx"
))
;
8597 PERL_UNUSED_ARG(lastkey)((void)sizeof(lastkey));
8598
8599 if (flags & RXapif_FIRSTKEY0x0040)
8600 return reg_named_buff_firstkey(rx, flags)my_reg_named_buff_firstkey( rx,flags);
8601 else if (flags & RXapif_NEXTKEY0x0080)
8602 return reg_named_buff_nextkey(rx, flags)my_reg_named_buff_nextkey( rx,flags);
8603 else {
8604 Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_iter",
8605 (int)flags);
8606 return NULL((void*)0);
8607 }
8608}
8609
8610SV*
8611Perl_reg_named_buff_fetchmy_reg_named_buff_fetch(pTHX_ REGEXP * const r, SV * const namesv,
8612 const U32 flags)
8613{
8614 SV *ret;
8615 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8616
8617 PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH((rx) ? (void)0 : __assert2("re_comp.c", 8617, __func__, "rx"
)); ((namesv) ? (void)0 : __assert2("re_comp.c", 8617, __func__
, "namesv"))
;
8618
8619 if (rx && RXp_PAREN_NAMES(rx)((rx)->paren_names)) {
8620 HE *he_str = hv_fetch_ent( RXp_PAREN_NAMES(rx), namesv, 0, 0 )((HE *) Perl_hv_common( (((rx)->paren_names)),(namesv),((void
*)0),0,0,((0) ? 0x10 : 0),((void*)0),(0)))
;
8621 if (he_str) {
8622 IV i;
8623 SV* sv_dat=HeVAL(he_str)(he_str)->he_valu.hent_val;
8624 I32 *nums=(I32*)SvPVX(sv_dat)(*({ SV *const _svpvx = ((SV *)({ void *_p = (sv_dat); _p; })
); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8624,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8624, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8624, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
8625 AV * const retarray = (flags & RXapif_ALL0x0200) ? newAV()((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV)); _p; })) : NULL((void*)0);
8626 for ( i=0; i<SvIVX(sv_dat)(*({ const SV *const _svivx = (const SV *)(sv_dat); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 8626, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8626, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); }))
; i++ ) {
8627 if ((I32)(rx->nparens) >= nums[i]
8628 && rx->offs[nums[i]].start != -1
8629 && rx->offs[nums[i]].end != -1)
8630 {
8631 ret = newSVpvs("")Perl_newSVpvn( ("" "" ""), (sizeof("")-1));
8632 CALLREG_NUMBUF_FETCH(r, nums[i], ret)(((Perl_ReANY((const REGEXP *)(r)))->engine))->numbered_buff_FETCH
( (r),(nums[i]),(ret))
;
8633 if (!retarray)
8634 return ret;
8635 } else {
8636 if (retarray)
8637 ret = newSVsv(&PL_sv_undef)Perl_newSVsv_flags( (&(PL_sv_immortals[1])),2|16);
8638 }
8639 if (retarray)
8640 av_push(retarray, ret)Perl_av_push( retarray,ret);
8641 }
8642 if (retarray)
8643 return newRV_noinc(MUTABLE_SV(retarray))Perl_newRV_noinc( ((SV *)({ void *_p = (retarray); _p; })));
8644 }
8645 }
8646 return NULL((void*)0);
8647}
8648
8649bool_Bool
8650Perl_reg_named_buff_existsmy_reg_named_buff_exists(pTHX_ REGEXP * const r, SV * const key,
8651 const U32 flags)
8652{
8653 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8654
8655 PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS((rx) ? (void)0 : __assert2("re_comp.c", 8655, __func__, "rx"
)); ((key) ? (void)0 : __assert2("re_comp.c", 8655, __func__,
"key"))
;
8656
8657 if (rx && RXp_PAREN_NAMES(rx)((rx)->paren_names)) {
8658 if (flags & RXapif_ALL0x0200) {
8659 return hv_exists_ent(RXp_PAREN_NAMES(rx), key, 0)((Perl_hv_common( (((rx)->paren_names)),(key),((void*)0),0
,0,0x08,0,(0))) ? (_Bool)1 : (_Bool)0)
;
8660 } else {
8661 SV *sv = CALLREG_NAMED_BUFF_FETCH(r, key, flags)(((Perl_ReANY((const REGEXP *)(r)))->engine))->named_buff
( (r), (key), ((void*)0), ((flags) | 0x0001))
;
8662 if (sv) {
8663 SvREFCNT_dec_NN(sv)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (sv); _p; })));
8664 return TRUE(1);
8665 } else {
8666 return FALSE(0);
8667 }
8668 }
8669 } else {
8670 return FALSE(0);
8671 }
8672}
8673
8674SV*
8675Perl_reg_named_buff_firstkeymy_reg_named_buff_firstkey(pTHX_ REGEXP * const r, const U32 flags)
8676{
8677 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8678
8679 PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY((rx) ? (void)0 : __assert2("re_comp.c", 8679, __func__, "rx"
))
;
8680
8681 if ( rx && RXp_PAREN_NAMES(rx)((rx)->paren_names) ) {
8682 (void)hv_iterinit(RXp_PAREN_NAMES(rx))Perl_hv_iterinit( ((rx)->paren_names));
8683
8684 return CALLREG_NAMED_BUFF_NEXTKEY(r, NULL, flags & ~RXapif_FIRSTKEY)(((Perl_ReANY((const REGEXP *)(r)))->engine))->named_buff_iter
( (r), (((void*)0)), ((flags & ~0x0040) | 0x0080))
;
8685 } else {
8686 return FALSE(0);
8687 }
8688}
8689
8690SV*
8691Perl_reg_named_buff_nextkeymy_reg_named_buff_nextkey(pTHX_ REGEXP * const r, const U32 flags)
8692{
8693 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8694 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8694, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 8694, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
8695
8696 PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY((rx) ? (void)0 : __assert2("re_comp.c", 8696, __func__, "rx"
))
;
8697
8698 if (rx && RXp_PAREN_NAMES(rx)((rx)->paren_names)) {
8699 HV *hv = RXp_PAREN_NAMES(rx)((rx)->paren_names);
8700 HE *temphe;
8701 while ( (temphe = hv_iternext_flags(hv, 0)Perl_hv_iternext_flags( hv,0)) ) {
8702 IV i;
8703 IV parno = 0;
8704 SV* sv_dat = HeVAL(temphe)(temphe)->he_valu.hent_val;
8705 I32 *nums = (I32*)SvPVX(sv_dat)(*({ SV *const _svpvx = ((SV *)({ void *_p = (sv_dat); _p; })
); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8705,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8705, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8705, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
8706 for ( i = 0; i < SvIVX(sv_dat)(*({ const SV *const _svivx = (const SV *)(sv_dat); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 8706, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8706, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); }))
; i++ ) {
8707 if ((I32)(rx->lastparen) >= nums[i] &&
8708 rx->offs[nums[i]].start != -1 &&
8709 rx->offs[nums[i]].end != -1)
8710 {
8711 parno = nums[i];
8712 break;
8713 }
8714 }
8715 if (parno || flags & RXapif_ALL0x0200) {
8716 return newSVhek(HeKEY_hek(temphe))Perl_newSVhek( (temphe)->hent_hek);
8717 }
8718 }
8719 }
8720 return NULL((void*)0);
8721}
8722
8723SV*
8724Perl_reg_named_buff_scalarmy_reg_named_buff_scalar(pTHX_ REGEXP * const r, const U32 flags)
8725{
8726 SV *ret;
8727 AV *av;
8728 SSize_tssize_t length;
8729 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8730
8731 PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR((rx) ? (void)0 : __assert2("re_comp.c", 8731, __func__, "rx"
))
;
8732
8733 if (rx && RXp_PAREN_NAMES(rx)((rx)->paren_names)) {
8734 if (flags & (RXapif_ALL0x0200 | RXapif_REGNAMES_COUNT0x1000)) {
8735 return newSViv(HvTOTALKEYS(RXp_PAREN_NAMES(rx)))Perl_newSViv( (((XPVHV*) (((rx)->paren_names))->sv_any)
->xhv_keys))
;
8736 } else if (flags & RXapif_ONE0x0100) {
8737 ret = CALLREG_NAMED_BUFF_ALL(r, (flags | RXapif_REGNAMES))(((Perl_ReANY((const REGEXP *)(r)))->engine))->named_buff
( (r), ((void*)0), ((void*)0), (flags | 0x0800))
;
8738 av = MUTABLE_AV(SvRV(ret))((AV *)({ void *_p = ((*({ SV *const _svrv = ((SV *)({ void *
_p = (ret); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 8738, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8738, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8738, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))); _p; }))
;
8739 length = av_tindex(av)Perl_av_top_index( av);
8740 SvREFCNT_dec_NN(ret)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (ret); _p; })));
8741 return newSViv(length + 1)Perl_newSViv( length + 1);
8742 } else {
8743 Perl_croak(aTHX_ "panic: Unknown flags %d in named_buff_scalar",
8744 (int)flags);
8745 return NULL((void*)0);
8746 }
8747 }
8748 return &PL_sv_undef(PL_sv_immortals[1]);
8749}
8750
8751SV*
8752Perl_reg_named_buff_allmy_reg_named_buff_all(pTHX_ REGEXP * const r, const U32 flags)
8753{
8754 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8755 AV *av = newAV()((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV)); _p; }));
8756
8757 PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL((rx) ? (void)0 : __assert2("re_comp.c", 8757, __func__, "rx"
))
;
8758
8759 if (rx && RXp_PAREN_NAMES(rx)((rx)->paren_names)) {
8760 HV *hv= RXp_PAREN_NAMES(rx)((rx)->paren_names);
8761 HE *temphe;
8762 (void)hv_iterinit(hv)Perl_hv_iterinit( hv);
8763 while ( (temphe = hv_iternext_flags(hv, 0)Perl_hv_iternext_flags( hv,0)) ) {
8764 IV i;
8765 IV parno = 0;
8766 SV* sv_dat = HeVAL(temphe)(temphe)->he_valu.hent_val;
8767 I32 *nums = (I32*)SvPVX(sv_dat)(*({ SV *const _svpvx = ((SV *)({ void *_p = (sv_dat); _p; })
); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 8767,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8767, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 8767, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
8768 for ( i = 0; i < SvIVX(sv_dat)(*({ const SV *const _svivx = (const SV *)(sv_dat); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 8768, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 8768, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); }))
; i++ ) {
8769 if ((I32)(rx->lastparen) >= nums[i] &&
8770 rx->offs[nums[i]].start != -1 &&
8771 rx->offs[nums[i]].end != -1)
8772 {
8773 parno = nums[i];
8774 break;
8775 }
8776 }
8777 if (parno || flags & RXapif_ALL0x0200) {
8778 av_push(av, newSVhek(HeKEY_hek(temphe)))Perl_av_push( av,Perl_newSVhek( (temphe)->hent_hek));
8779 }
8780 }
8781 }
8782
8783 return newRV_noinc(MUTABLE_SV(av))Perl_newRV_noinc( ((SV *)({ void *_p = (av); _p; })));
8784}
8785
8786void
8787Perl_reg_numbered_buff_fetchmy_reg_numbered_buff_fetch(pTHX_ REGEXP * const r, const I32 paren,
8788 SV * const sv)
8789{
8790 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8791 char *s = NULL((void*)0);
8792 SSize_tssize_t i = 0;
8793 SSize_tssize_t s1, t1;
8794 I32 n = paren;
8795
8796 PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH((rx) ? (void)0 : __assert2("re_comp.c", 8796, __func__, "rx"
))
;
8797
8798 if ( n == RX_BUFF_IDX_CARET_PREMATCH-5
8799 || n == RX_BUFF_IDX_CARET_FULLMATCH-3
8800 || n == RX_BUFF_IDX_CARET_POSTMATCH-4
8801 )
8802 {
8803 bool_Bool keepcopy = cBOOL(rx->extflags & RXf_PMf_KEEPCOPY)((rx->extflags & (1U << (0 +6))) ? (_Bool)1 : (_Bool
)0)
;
8804 if (!keepcopy) {
8805 /* on something like
8806 * $r = qr/.../;
8807 * /$qr/p;
8808 * the KEEPCOPY is set on the PMOP rather than the regex */
8809 if (PL_curpm && r == PM_GETRE(PL_curpm)((PL_curpm)->op_pmregexp))
8810 keepcopy = cBOOL(PL_curpm->op_pmflags & PMf_KEEPCOPY)((PL_curpm->op_pmflags & (1U<<6)) ? (_Bool)1 : (
_Bool)0)
;
8811 }
8812 if (!keepcopy)
8813 goto ret_undef;
8814 }
8815
8816 if (!rx->subbeg)
8817 goto ret_undef;
8818
8819 if (n == RX_BUFF_IDX_CARET_FULLMATCH-3)
8820 /* no need to distinguish between them any more */
8821 n = RX_BUFF_IDX_FULLMATCH0;
8822
8823 if ((n == RX_BUFF_IDX_PREMATCH-2 || n == RX_BUFF_IDX_CARET_PREMATCH-5)
8824 && rx->offs[0].start != -1)
8825 {
8826 /* $`, ${^PREMATCH} */
8827 i = rx->offs[0].start;
8828 s = rx->subbeg;
8829 }
8830 else
8831 if ((n == RX_BUFF_IDX_POSTMATCH-1 || n == RX_BUFF_IDX_CARET_POSTMATCH-4)
8832 && rx->offs[0].end != -1)
8833 {
8834 /* $', ${^POSTMATCH} */
8835 s = rx->subbeg - rx->suboffset + rx->offs[0].end;
8836 i = rx->sublen + rx->suboffset - rx->offs[0].end;
8837 }
8838 else
8839 if (inRANGE(n, 0, (I32)rx->nparens)(((((I32)rx->nparens) >= (0)) ? (void)0 : __assert2("re_comp.c"
, 8839, __func__, "((I32)rx->nparens) >= (0)")), ( (sizeof
(n) == sizeof(U8)) ? ((((NV) ((0)) >= 0) ? (void)0 : __assert2
("re_comp.c", 8839, __func__, "(NV) ((0)) >= 0")), (((NV) (
(((I32)rx->nparens) - (0))) >= 0) ? (void)0 : __assert2
("re_comp.c", 8839, __func__, "(NV) ((((I32)rx->nparens) - (0))) >= 0"
)), (((U64) (((((U8) (n)))) - (((0)) | 0))) <= (((U64) (((
((I32)rx->nparens) - (0))) | 0))))) : (sizeof(n) == sizeof
(U32)) ? ((((NV) ((0)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 8839, __func__, "(NV) ((0)) >= 0")), (((NV) ((((I32)rx->
nparens) - (0))) >= 0) ? (void)0 : __assert2("re_comp.c", 8839
, __func__, "(NV) ((((I32)rx->nparens) - (0))) >= 0")),
(((U64) (((((U32) (n)))) - (((0)) | 0))) <= (((U64) (((((
I32)rx->nparens) - (0))) | 0))))) : (((sizeof(n) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 8839, __func__, "sizeof(n) == sizeof(U64)"
)), ((((NV) ((0)) >= 0) ? (void)0 : __assert2("re_comp.c",
8839, __func__, "(NV) ((0)) >= 0")), (((NV) ((((I32)rx->
nparens) - (0))) >= 0) ? (void)0 : __assert2("re_comp.c", 8839
, __func__, "(NV) ((((I32)rx->nparens) - (0))) >= 0")),
(((U64) (((((U64) (n)))) - (((0)) | 0))) <= (((U64) (((((
I32)rx->nparens) - (0))) | 0))))))))
&&
8840 (s1 = rx->offs[n].start) != -1 &&
8841 (t1 = rx->offs[n].end) != -1)
8842 {
8843 /* $&, ${^MATCH}, $1 ... */
8844 i = t1 - s1;
8845 s = rx->subbeg + s1 - rx->suboffset;
8846 } else {
8847 goto ret_undef;
8848 }
8849
8850 assert(s >= rx->subbeg)((s >= rx->subbeg) ? (void)0 : __assert2("re_comp.c", 8850
, __func__, "s >= rx->subbeg"))
;
8851 assert((STRLEN)rx->sublen >= (STRLEN)((s - rx->subbeg) + i) )(((STRLEN)rx->sublen >= (STRLEN)((s - rx->subbeg) + i
)) ? (void)0 : __assert2("re_comp.c", 8851, __func__, "(STRLEN)rx->sublen >= (STRLEN)((s - rx->subbeg) + i)"
))
;
8852 if (i >= 0) {
8853#ifdef NO_TAINT_SUPPORT
8854 sv_setpvn(sv, s, i)Perl_sv_setpvn( sv,s,i);
8855#else
8856 const int oldtainted = TAINT_get(((__builtin_expect(((PL_tainted) ? (_Bool)1 : (_Bool)0),(0))
) ? (_Bool)1 : (_Bool)0))
;
8857 TAINT_NOT(PL_tainted = (0));
8858 sv_setpvn(sv, s, i)Perl_sv_setpvn( sv,s,i);
8859 TAINT_set(oldtainted)(PL_tainted = (oldtainted));
8860#endif
8861 if (RXp_MATCH_UTF8(rx)(((rx)->extflags) & (1U<<(((0 +12) + 2)+6))))
8862 SvUTF8_on(sv)((sv)->sv_flags |= (0x20000000));
8863 else
8864 SvUTF8_off(sv)((sv)->sv_flags &= ~(0x20000000));
8865 if (TAINTING_get(((__builtin_expect(((PL_tainting) ? (_Bool)1 : (_Bool)0),(0)
)) ? (_Bool)1 : (_Bool)0))
) {
8866 if (RXp_MATCH_TAINTED(rx)(((rx)->extflags) & (1U<<(((0 +12) + 2)+12)))) {
8867 if (SvTYPE(sv)((svtype)((sv)->sv_flags & 0xff)) >= SVt_PVMG) {
8868 MAGIC* const mg = SvMAGIC(sv)(*({ const SV *const _svmagic = (const SV *)(sv); ((((svtype)
((_svmagic)->sv_flags & 0xff)) >= SVt_PVMG) ? (void
)0 : __assert2("re_comp.c", 8868, __func__, "SvTYPE(_svmagic) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svmagic)->sv_any); _p
; }))->xmg_u.xmg_magic); }))
;
8869 MAGIC* mgt;
8870 TAINT(PL_tainted = PL_tainting);
8871 SvMAGIC_set(sv, mg->mg_moremagic)do { ((((svtype)((sv)->sv_flags & 0xff)) >= SVt_PVMG
) ? (void)0 : __assert2("re_comp.c", 8871, __func__, "SvTYPE(sv) >= SVt_PVMG"
)); (((XPVMG*)(sv)->sv_any)->xmg_u.xmg_magic = (mg->
mg_moremagic)); } while (0)
;
8872 SvTAINT(sv)do { (((((__builtin_expect(((PL_tainting) ? (_Bool)1 : (_Bool
)0),(0))) ? (_Bool)1 : (_Bool)0)) || !(((__builtin_expect(((PL_tainted
) ? (_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool)0))) ? (void
)0 : __assert2("re_comp.c", 8872, __func__, "TAINTING_get || !TAINT_get"
)); if (__builtin_expect((((((__builtin_expect(((PL_tainted) ?
(_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool)0))) ? (_Bool
)1 : (_Bool)0),(0))) do{ if(__builtin_expect((((((__builtin_expect
(((PL_tainting) ? (_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool
)0))) ? (_Bool)1 : (_Bool)0),(0))){Perl_sv_magic( (sv),((void
*)0),'t',((void*)0),0);} }while (0); } while (0)
;
8873 if ((mgt = SvMAGIC(sv)(*({ const SV *const _svmagic = (const SV *)(sv); ((((svtype)
((_svmagic)->sv_flags & 0xff)) >= SVt_PVMG) ? (void
)0 : __assert2("re_comp.c", 8873, __func__, "SvTYPE(_svmagic) >= SVt_PVMG"
)); &(((XPVMG*) ({ void *_p = ((_svmagic)->sv_any); _p
; }))->xmg_u.xmg_magic); }))
)) {
8874 mg->mg_moremagic = mgt;
8875 SvMAGIC_set(sv, mg)do { ((((svtype)((sv)->sv_flags & 0xff)) >= SVt_PVMG
) ? (void)0 : __assert2("re_comp.c", 8875, __func__, "SvTYPE(sv) >= SVt_PVMG"
)); (((XPVMG*)(sv)->sv_any)->xmg_u.xmg_magic = (mg)); }
while (0)
;
8876 }
8877 } else {
8878 TAINT(PL_tainted = PL_tainting);
8879 SvTAINT(sv)do { (((((__builtin_expect(((PL_tainting) ? (_Bool)1 : (_Bool
)0),(0))) ? (_Bool)1 : (_Bool)0)) || !(((__builtin_expect(((PL_tainted
) ? (_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool)0))) ? (void
)0 : __assert2("re_comp.c", 8879, __func__, "TAINTING_get || !TAINT_get"
)); if (__builtin_expect((((((__builtin_expect(((PL_tainted) ?
(_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool)0))) ? (_Bool
)1 : (_Bool)0),(0))) do{ if(__builtin_expect((((((__builtin_expect
(((PL_tainting) ? (_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool
)0))) ? (_Bool)1 : (_Bool)0),(0))){Perl_sv_magic( (sv),((void
*)0),'t',((void*)0),0);} }while (0); } while (0)
;
8880 }
8881 } else
8882 SvTAINTED_off(sv)do{ if(__builtin_expect((((((__builtin_expect(((PL_tainting) ?
(_Bool)1 : (_Bool)0),(0))) ? (_Bool)1 : (_Bool)0))) ? (_Bool
)1 : (_Bool)0),(0))){Perl_sv_untaint( sv);} }while (0)
;
8883 }
8884 } else {
8885 ret_undef:
8886 sv_set_undef(sv)Perl_sv_set_undef( sv);
8887 return;
8888 }
8889}
8890
8891void
8892Perl_reg_numbered_buff_storemy_reg_numbered_buff_store(pTHX_ REGEXP * const rx, const I32 paren,
8893 SV const * const value)
8894{
8895 PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE((rx) ? (void)0 : __assert2("re_comp.c", 8895, __func__, "rx"
))
;
8896
8897 PERL_UNUSED_ARG(rx)((void)sizeof(rx));
8898 PERL_UNUSED_ARG(paren)((void)sizeof(paren));
8899 PERL_UNUSED_ARG(value)((void)sizeof(value));
8900
8901 if (!PL_localizing)
8902 Perl_croak_no_modify();
8903}
8904
8905I32
8906Perl_reg_numbered_buff_lengthmy_reg_numbered_buff_length(pTHX_ REGEXP * const r, const SV * const sv,
8907 const I32 paren)
8908{
8909 struct regexp *const rx = ReANY(r)Perl_ReANY((const REGEXP *)(r));
8910 I32 i;
8911 I32 s1, t1;
8912
8913 PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH((rx) ? (void)0 : __assert2("re_comp.c", 8913, __func__, "rx"
)); ((sv) ? (void)0 : __assert2("re_comp.c", 8913, __func__, "sv"
))
;
8914
8915 if ( paren == RX_BUFF_IDX_CARET_PREMATCH-5
8916 || paren == RX_BUFF_IDX_CARET_FULLMATCH-3
8917 || paren == RX_BUFF_IDX_CARET_POSTMATCH-4
8918 )
8919 {
8920 bool_Bool keepcopy = cBOOL(rx->extflags & RXf_PMf_KEEPCOPY)((rx->extflags & (1U << (0 +6))) ? (_Bool)1 : (_Bool
)0)
;
8921 if (!keepcopy) {
8922 /* on something like
8923 * $r = qr/.../;
8924 * /$qr/p;
8925 * the KEEPCOPY is set on the PMOP rather than the regex */
8926 if (PL_curpm && r == PM_GETRE(PL_curpm)((PL_curpm)->op_pmregexp))
8927 keepcopy = cBOOL(PL_curpm->op_pmflags & PMf_KEEPCOPY)((PL_curpm->op_pmflags & (1U<<6)) ? (_Bool)1 : (
_Bool)0)
;
8928 }
8929 if (!keepcopy)
8930 goto warn_undef;
8931 }
8932
8933 /* Some of this code was originally in C<Perl_magic_len> in F<mg.c> */
8934 switch (paren) {
8935 case RX_BUFF_IDX_CARET_PREMATCH-5: /* ${^PREMATCH} */
8936 case RX_BUFF_IDX_PREMATCH-2: /* $` */
8937 if (rx->offs[0].start != -1) {
8938 i = rx->offs[0].start;
8939 if (i > 0) {
8940 s1 = 0;
8941 t1 = i;
8942 goto getlen;
8943 }
8944 }
8945 return 0;
8946
8947 case RX_BUFF_IDX_CARET_POSTMATCH-4: /* ${^POSTMATCH} */
8948 case RX_BUFF_IDX_POSTMATCH-1: /* $' */
8949 if (rx->offs[0].end != -1) {
8950 i = rx->sublen - rx->offs[0].end;
8951 if (i > 0) {
8952 s1 = rx->offs[0].end;
8953 t1 = rx->sublen;
8954 goto getlen;
8955 }
8956 }
8957 return 0;
8958
8959 default: /* $& / ${^MATCH}, $1, $2, ... */
8960 if (paren <= (I32)rx->nparens &&
8961 (s1 = rx->offs[paren].start) != -1 &&
8962 (t1 = rx->offs[paren].end) != -1)
8963 {
8964 i = t1 - s1;
8965 goto getlen;
8966 } else {
8967 warn_undef:
8968 if (ckWARN(WARN_UNINITIALIZED)Perl_ckwarn( (41 )))
8969 report_uninit((const SV *)sv)Perl_report_uninit( (const SV *)sv);
8970 return 0;
8971 }
8972 }
8973 getlen:
8974 if (i > 0 && RXp_MATCH_UTF8(rx)(((rx)->extflags) & (1U<<(((0 +12) + 2)+6)))) {
8975 const char * const s = rx->subbeg - rx->suboffset + s1;
8976 const U8 *ep;
8977 STRLEN el;
8978
8979 i = t1 - s1;
8980 if (is_utf8_string_loclenPerl_is_utf8_string_loclen((U8*)s, i, &ep, &el))
8981 i = el;
8982 }
8983 return i;
8984}
8985
8986SV*
8987Perl_reg_qr_packagemy_reg_qr_package(pTHX_ REGEXP * const rx)
8988{
8989 PERL_ARGS_ASSERT_REG_QR_PACKAGE((rx) ? (void)0 : __assert2("re_comp.c", 8989, __func__, "rx"
))
;
8990 PERL_UNUSED_ARG(rx)((void)sizeof(rx));
8991 if (0)
8992 return NULL((void*)0);
8993 else
8994 return newSVpvs("Regexp")Perl_newSVpvn( ("" "Regexp" ""), (sizeof("Regexp")-1));
8995}
8996
8997/* Scans the name of a named buffer from the pattern.
8998 * If flags is REG_RSN_RETURN_NULL returns null.
8999 * If flags is REG_RSN_RETURN_NAME returns an SV* containing the name
9000 * If flags is REG_RSN_RETURN_DATA returns the data SV* corresponding
9001 * to the parsed name as looked up in the RExC_paren_names hash.
9002 * If there is an error throws a vFAIL().. type exception.
9003 */
9004
9005#define REG_RSN_RETURN_NULL0 0
9006#define REG_RSN_RETURN_NAME1 1
9007#define REG_RSN_RETURN_DATA2 2
9008
9009STATICstatic SV*
9010S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags)
9011{
9012 char *name_start = RExC_parse(pRExC_state->parse);
9013 SV* sv_name;
9014
9015 PERL_ARGS_ASSERT_REG_SCAN_NAME((pRExC_state) ? (void)0 : __assert2("re_comp.c", 9015, __func__
, "pRExC_state"))
;
9016
9017 assert (RExC_parse <= RExC_end)(((pRExC_state->parse) <= (pRExC_state->end)) ? (void
)0 : __assert2("re_comp.c", 9017, __func__, "RExC_parse <= RExC_end"
))
;
9018 if (RExC_parse(pRExC_state->parse) == RExC_end(pRExC_state->end)) NOOP(void)0;
9019 else if (isIDFIRST_lazy_if_safe(RExC_parse, RExC_end, UTF)((__builtin_expect(((((PL_curcop)->cop_hints + 0) & 0x00000008
) ? (_Bool)1 : (_Bool)0),(0)) || !(((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? (( (sizeof(*((pRExC_state->parse)
)) == 1) || !(((U64)((*((pRExC_state->parse))) | 0)) &
~0xFF)) && ((PL_charclass[(U8) (*((pRExC_state->parse
)))] & ((1U << (16)) | (1U << (14)))) == ((1U
<< (16)) | (1U << (14))))) : ((! (((U8 *) ((pRExC_state
->end))) > ((U8 *) ((pRExC_state->parse))))) ? (Perl__force_out_malformed_utf8_message
( (U8 *) ((U8 *) ((pRExC_state->parse))),(U8 *) ((U8 *) ((
pRExC_state->end))),0,1), 0) : (((((U64)(((UV) (((*((U8 *)
((pRExC_state->parse)))) | 0) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))) ? ((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF)) && (PL_charclass[(U8) (*((U8
*) ((pRExC_state->parse))))] & (1U << (16)))) ?
(_Bool)1 : (_Bool)0) : ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse))
)) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(
*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof
(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))))))) ? ((__builtin_expect
(((((U8 *) ((pRExC_state->end))) - ((U8 *) ((pRExC_state->
parse))) > 1 && (((( (sizeof(*(((U8 *) ((pRExC_state
->parse)))+1)) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->
parse)))+1)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1)) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1)) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1)) ==
1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1)) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1)) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1)) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1)) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (_Bool)1 : (_Bool)0),(1))) ? ((( (sizeof(( (((((
( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64
)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ?
(void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse))
)) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(
*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof
(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0)))))))))) ? (void)0 : __assert2
("re_comp.c", 9019, __func__, "(((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))\")), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\\\"re_comp.c\\\", 9019, __func__, \\\"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\\\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)\")), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0)))))))))"
)), (((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) ==
1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 ))
== 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 ))
| 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (void)0 : __assert2("re_comp.c", 9019, __func__,
"(((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))\")), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))\")), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0))) & ((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) & 0xB0))))"
)), (((( (sizeof((((( (sizeof((*(((U8 *) ((pRExC_state->parse
)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse
)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((
((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1)
|| !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF)))
? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))"
)), ((U8) (((((( (sizeof((*(((U8 *) ((pRExC_state->parse))
)+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse
)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) | 0))))) == 1) || !(
((U64)((( (((((( (sizeof(*((U8 *) ((pRExC_state->parse))))
== 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)
) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse))
)) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(
*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof
(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0)))))))))) ? (void)0 : __assert2
("re_comp.c", 9019, __func__, "(((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))\")), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\\\"re_comp.c\\\", 9019, __func__, \\\"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\\\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)\")), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0)))))))))"
)), (((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) ==
1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 ))
== 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 ))
| 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (void)0 : __assert2("re_comp.c", 9019, __func__,
"(((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))\")), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))\")), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0))) & ((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) & 0xB0))))"
)), (((( (sizeof((((( (sizeof((*(((U8 *) ((pRExC_state->parse
)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse
)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((
((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1)
|| !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF)))
? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))"
)), ((U8) (((((( (sizeof((*(((U8 *) ((pRExC_state->parse))
)+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse
)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) | 0))))) | 0)) &
~0xFF)) && (PL_charclass[(U8) (( (((((( (sizeof(*((U8
*) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) (
(pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2
("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse))
)) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(
*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof
(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8
*) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)
0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->
parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) -
((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((
2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0)))
<= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF
: ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) | 0)))))))))) ? (void)0 : __assert2
("re_comp.c", 9019, __func__, "(((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))\")), ( (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U8) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U32) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"sizeof((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\\\"re_comp.c\\\", 9019, __func__, \\\"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\\\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0)))) == sizeof(U64)\")), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U64) ((((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0)))))))))"
)), (((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) ==
1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 ))
== 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 ))
| 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (void)0 : __assert2("re_comp.c", 9019, __func__,
"(((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))\")), ((((((( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*(((U8 *) ((pRExC_state->parse)))+1 )) == 1) || !(((U64)((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0)) & ~0xFF))\")), ((U8) ((*(((U8 *) ((pRExC_state->parse)))+1 )) | 0))) & ((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) & 0xB0))))"
)), (((( (sizeof((((( (sizeof((*(((U8 *) ((pRExC_state->parse
)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse
)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((
((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1)
|| !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0
)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__
, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF)))
? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))\")), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9019, __func__, \"( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))"
)), ((U8) (((((( (sizeof((*(((U8 *) ((pRExC_state->parse))
)+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse
)))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9019, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1
) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019, __func__, "( (sizeof(*((U8 *) ((pRExC_state->parse)))) == 1) || !(((U64)((*((U8 *) ((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8 *) ((pRExC_state->parse)))) | 0))) &
(((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6
) | (((((( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))
) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 )
)) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9019
, __func__, "( (sizeof((*(((U8 *) ((pRExC_state->parse)))+1 ))) == 1) || !(((U64)(((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8 *) ((pRExC_state->parse)))+1 ))) | 0))
)) & ((U8) ((1U << 6) - 1))))) | 0)))))] & (1U <<
(16)))) ? (_Bool)1 : (_Bool)0) : (Perl__force_out_malformed_utf8_message
( (U8 *) ((U8 *) ((pRExC_state->parse))),(U8 *) ((U8 *) ((
pRExC_state->end))),0,1), 0)) : Perl__is_utf8_perl_idstart
( (U8 *) ((pRExC_state->parse)),(U8 *) ((pRExC_state->end
))))))
) {
9020 /* Note that the code here assumes well-formed UTF-8. Skip IDFIRST by
9021 * using do...while */
9022 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
9023 do {
9024 RExC_parse(pRExC_state->parse) += UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))];
9025 } while ( RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end)
9026 && isWORDCHAR_utf8_safe((U8*)RExC_parse, (U8*) RExC_end)((! (((U8*) (pRExC_state->end)) > ((U8*)(pRExC_state->
parse)))) ? (Perl__force_out_malformed_utf8_message( (U8 *) (
(U8*)(pRExC_state->parse)),(U8 *) ((U8*) (pRExC_state->
end)),0,1), 0) : (((((U64)(((UV) (((*((U8*)(pRExC_state->parse
))) | 0) | 0)))) < (((U8) (0xFF << 6)) & 0xB0)))
) ? ((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !((
(U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF)) &&
(PL_charclass[(U8) (*((U8*)(pRExC_state->parse)))] & (
1U << (0)))) ? (_Bool)1 : (_Bool)0) : ((((( (sizeof(*((
U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) ==
1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8
*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*(
(U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))))))) ? ((__builtin_expect(((
((U8*) (pRExC_state->end)) - ((U8*)(pRExC_state->parse)
) > 1 && (((( (sizeof(*(((U8*)(pRExC_state->parse
))+1)) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1)
) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1)) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1)) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1)) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1)) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1)) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1)) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8*)(pRExC_state->parse))+1)) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (_Bool)1 : (_Bool)0),(1))) ? ((( (sizeof(( (((((
( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)(
(*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void
)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) ==
1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8
*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*(
(U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0)))))))))) ? (void)0 : __assert2(
"re_comp.c", 9026, __func__, "(((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))\")), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\\\"re_comp.c\\\", 9026, __func__, \\\"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\\\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)\")), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0)))))))))"
)), (((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8*)(pRExC_state->parse))+1 )) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (void)0 : __assert2("re_comp.c", 9026, __func__,
"(((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))\")), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))\")), ((U8) ((*(((U8*)(pRExC_state->parse))+1 )) | 0))) & ((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) & 0xB0))))"
)), (((( (sizeof((((( (sizeof((*(((U8*)(pRExC_state->parse
))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))
+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof
((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((
*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ?
(void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))) ? (void
)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))"
)), ((U8) (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 )
)) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 )))
| 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) | 0))))) == 1) || !(((U64)((
( (((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(
((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF)))
? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) ==
1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8
*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*(
(U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0)))))))))) ? (void)0 : __assert2(
"re_comp.c", 9026, __func__, "(((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))\")), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\\\"re_comp.c\\\", 9026, __func__, \\\"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\\\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)\")), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0)))))))))"
)), (((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8*)(pRExC_state->parse))+1 )) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (void)0 : __assert2("re_comp.c", 9026, __func__,
"(((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))\")), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))\")), ((U8) ((*(((U8*)(pRExC_state->parse))+1 )) | 0))) & ((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) & 0xB0))))"
)), (((( (sizeof((((( (sizeof((*(((U8*)(pRExC_state->parse
))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))
+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof
((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((
*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ?
(void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))) ? (void
)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))"
)), ((U8) (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 )
)) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 )))
| 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) | 0))))) | 0)) & ~0xFF))
&& (PL_charclass[(U8) (( (((((( (sizeof(*((U8*)(pRExC_state
->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse
))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6))
& 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2)))))))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))"
)), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) ==
1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8
*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*(
(U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state
->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof
(U64)) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)"
)), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >>
6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))
)) >= 0) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0"
)), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((
U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF <<
6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (
0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0"
)), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse
))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0))
& ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__
, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - (((
(((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) >
7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (
((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8)
(0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6
)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE
<< (7-(2))))))))) | 0)))))))))) ? (void)0 : __assert2(
"re_comp.c", 9026, __func__, "(((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) >= ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))\")), ( (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U8)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U8) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U32)) ? ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U32) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0))))) : (((sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"sizeof((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\\\"re_comp.c\\\", 9026, __func__, \\\"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\\\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0)))) == sizeof(U64)\")), ((((NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) >= 0\")), (((NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"(NV) (((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) >= 0\")), (((U64) (((((U64) ((((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))))))) - ((((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))) | 0))) <= (((U64) ((((((0x100 >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))) - 1) - ((((((U8) (0xFF << 6)) & 0xB0) >> 6) | (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2))))))))) | 0)))))))))"
)), (((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))"
)), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1
) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))"
)), ((U8) ((*(((U8*)(pRExC_state->parse))+1 )) | 0))) &
((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) &
0xB0))))) ? (void)0 : __assert2("re_comp.c", 9026, __func__,
"(((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))\")), ((((((( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*(((U8*)(pRExC_state->parse))+1 )) == 1) || !(((U64)((*(((U8*)(pRExC_state->parse))+1 )) | 0)) & ~0xFF))\")), ((U8) ((*(((U8*)(pRExC_state->parse))+1 )) | 0))) & ((U8) (0xFF << 6))) == (((U8) (0xFF << 6)) & 0xB0))))"
)), (((( (sizeof((((( (sizeof((*(((U8*)(pRExC_state->parse
))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))
+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c"
, 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof
((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((
*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ?
(void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))) ? (void
)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) == 1) || !(((U64)(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))\")), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) | (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))) ? (void)0 : __assert2(\"re_comp.c\", 9026, __func__, \"( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))\")), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) & ((U8) ((1U << 6) - 1))))) | 0)) & ~0xFF))"
)), ((U8) (((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 )
)) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 )))
| 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026
, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((( (((( (sizeof(*((U8*)(pRExC_state->parse))) == 1) ||
!(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof(*((U8*)(pRExC_state->parse))) == 1) || !(((U64)((*((U8*)(pRExC_state->parse))) | 0)) & ~0xFF))"
)), ((U8) ((*((U8*)(pRExC_state->parse))) | 0))) & (((
2) >= 7) ? 0x00 : (0x1F >> ((2)-2))))) << 6) |
(((((( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1)
|| !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) &
~0xFF))) ? (void)0 : __assert2("re_comp.c", 9026, __func__, "( (sizeof((*(((U8*)(pRExC_state->parse))+1 ))) == 1) || !(((U64)(((*(((U8*)(pRExC_state->parse))+1 ))) | 0)) & ~0xFF))"
)), ((U8) (((*(((U8*)(pRExC_state->parse))+1 ))) | 0)))) &
((U8) ((1U << 6) - 1))))) | 0)))))] & (1U <<
(0)))) ? (_Bool)1 : (_Bool)0) : (Perl__force_out_malformed_utf8_message
( (U8 *) ((U8*)(pRExC_state->parse)),(U8 *) ((U8*) (pRExC_state
->end)),0,1), 0)) : Perl__is_utf8_FOO( 0,(U8*)(pRExC_state
->parse),(U8*) (pRExC_state->end))))
);
9027 else
9028 do {
9029 RExC_parse(pRExC_state->parse)++;
9030 } while (RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end) && isWORDCHAR(*RExC_parse)(( (sizeof(*(pRExC_state->parse)) == 1) || !(((U64)((*(pRExC_state
->parse)) | 0)) & ~0xFF)) && ((PL_charclass[(U8
) (*(pRExC_state->parse))] & ((1U << (0)) | (1U <<
(14)))) == ((1U << (0)) | (1U << (14)))))
);
9031 } else {
9032 RExC_parse(pRExC_state->parse)++; /* so the <- from the vFAIL is after the offending
9033 character */
9034 vFAIL("Group name must start with a non-digit word character")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Group name must start with a non-digit word character"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 9034, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
9035 }
9036 sv_name = newSVpvn_flags(name_start, (int)(RExC_parse - name_start),Perl_newSVpvn_flags( name_start,(int)((pRExC_state->parse)
- name_start),0x00080000 | ((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0) ? 0x20000000 : 0))
9037 SVs_TEMP | (UTF ? SVf_UTF8 : 0))Perl_newSVpvn_flags( name_start,(int)((pRExC_state->parse)
- name_start),0x00080000 | ((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0) ? 0x20000000 : 0))
;
9038 if ( flags == REG_RSN_RETURN_NAME1)
9039 return sv_name;
9040 else if (flags==REG_RSN_RETURN_DATA2) {
9041 HE *he_str = NULL((void*)0);
9042 SV *sv_dat = NULL((void*)0);
9043 if ( ! sv_name ) /* should not happen*/
9044 Perl_croak(aTHX_ "panic: no svname in reg_scan_name");
9045 if (RExC_paren_names(pRExC_state->paren_names))
9046 he_str = hv_fetch_ent( RExC_paren_names, sv_name, 0, 0 )((HE *) Perl_hv_common( ((pRExC_state->paren_names)),(sv_name
),((void*)0),0,0,((0) ? 0x10 : 0),((void*)0),(0)))
;
9047 if ( he_str )
9048 sv_dat = HeVAL(he_str)(he_str)->he_valu.hent_val;
9049 if ( ! sv_dat ) { /* Didn't find group */
9050
9051 /* It might be a forward reference; we can't fail until we
9052 * know, by completing the parse to get all the groups, and
9053 * then reparsing */
9054 if (ALL_PARENS_COUNTED((pRExC_state->total_par) > 0)) {
9055 vFAIL("Reference to nonexistent named group")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Reference to nonexistent named group", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 9055, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
9056 }
9057 else {
9058 REQUIRE_PARENS_PASSdo { if (! ((pRExC_state->total_par) > 0)) (pRExC_state
->total_par) = -1; } while (0)
;
9059 }
9060 }
9061 return sv_dat;
9062 }
9063
9064 Perl_croak(aTHX_ "panic: bad flag %lx in reg_scan_name",
9065 (unsigned long) flags);
9066}
9067
9068#define DEBUG_PARSE_MSG(funcname)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
DEBUG_PARSE_r({ \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9069 if (RExC_lastparse!=RExC_parse) { \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9070 Perl_re_printf( aTHX_ "%s", \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9071 Perl_pv_pretty(aTHX_ RExC_mysv1, RExC_parse, \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9072 RExC_end - RExC_parse, 16, \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9073 "", "", \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9074 PERL_PV_ESCAPE_UNI_DETECT | \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9075 PERL_PV_PRETTY_ELLIPSES | \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9076 PERL_PV_PRETTY_LTGT | \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9077 PERL_PV_ESCAPE_RE | \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9078 PERL_PV_PRETTY_EXACTSIZE \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9079 ) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9080 ); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9081 } else \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9082 Perl_re_printf( aTHX_ "%16s",""); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9083 \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9084 if (RExC_lastnum!=RExC_emit) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9085 Perl_re_printf( aTHX_ "|%4zu", RExC_emit); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9086 else \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9087 Perl_re_printf( aTHX_ "|%4s",""); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9088 Perl_re_printf( aTHX_ "|%*s%-4s", \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9089 (int)((depth*2)), "", \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9090 (funcname) \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9091 ); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9092 RExC_lastnum=RExC_emit; \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9093 RExC_lastparse=RExC_parse; \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9094})do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (funcname) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0)
9095
9096
9097
9098#define DEBUG_PARSE(funcname)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
DEBUG_PARSE_r({ \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
9099 DEBUG_PARSE_MSG((funcname)); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
9100 Perl_re_printf( aTHX_ "%4s","\n"); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
9101})do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
9102#define DEBUG_PARSE_FMT(funcname,fmt,args)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( fmt
"\n",args); };} while (0)
DEBUG_PARSE_r({\do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( fmt
"\n",args); };} while (0)
9103 DEBUG_PARSE_MSG((funcname)); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( fmt
"\n",args); };} while (0)
9104 Perl_re_printf( aTHX_ fmt "\n",args); \do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( fmt
"\n",args); };} while (0)
9105})do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ((funcname)) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( fmt
"\n",args); };} while (0)
9106
9107/* This section of code defines the inversion list object and its methods. The
9108 * interfaces are highly subject to change, so as much as possible is static to
9109 * this file. An inversion list is here implemented as a malloc'd C UV array
9110 * as an SVt_INVLIST scalar.
9111 *
9112 * An inversion list for Unicode is an array of code points, sorted by ordinal
9113 * number. Each element gives the code point that begins a range that extends
9114 * up-to but not including the code point given by the next element. The final
9115 * element gives the first code point of a range that extends to the platform's
9116 * infinity. The even-numbered elements (invlist[0], invlist[2], invlist[4],
9117 * ...) give ranges whose code points are all in the inversion list. We say
9118 * that those ranges are in the set. The odd-numbered elements give ranges
9119 * whose code points are not in the inversion list, and hence not in the set.
9120 * Thus, element [0] is the first code point in the list. Element [1]
9121 * is the first code point beyond that not in the list; and element [2] is the
9122 * first code point beyond that that is in the list. In other words, the first
9123 * range is invlist[0]..(invlist[1]-1), and all code points in that range are
9124 * in the inversion list. The second range is invlist[1]..(invlist[2]-1), and
9125 * all code points in that range are not in the inversion list. The third
9126 * range invlist[2]..(invlist[3]-1) gives code points that are in the inversion
9127 * list, and so forth. Thus every element whose index is divisible by two
9128 * gives the beginning of a range that is in the list, and every element whose
9129 * index is not divisible by two gives the beginning of a range not in the
9130 * list. If the final element's index is divisible by two, the inversion list
9131 * extends to the platform's infinity; otherwise the highest code point in the
9132 * inversion list is the contents of that element minus 1.
9133 *
9134 * A range that contains just a single code point N will look like
9135 * invlist[i] == N
9136 * invlist[i+1] == N+1
9137 *
9138 * If N is UV_MAX (the highest representable code point on the machine), N+1 is
9139 * impossible to represent, so element [i+1] is omitted. The single element
9140 * inversion list
9141 * invlist[0] == UV_MAX
9142 * contains just UV_MAX, but is interpreted as matching to infinity.
9143 *
9144 * Taking the complement (inverting) an inversion list is quite simple, if the
9145 * first element is 0, remove it; otherwise add a 0 element at the beginning.
9146 * This implementation reserves an element at the beginning of each inversion
9147 * list to always contain 0; there is an additional flag in the header which
9148 * indicates if the list begins at the 0, or is offset to begin at the next
9149 * element. This means that the inversion list can be inverted without any
9150 * copying; just flip the flag.
9151 *
9152 * More about inversion lists can be found in "Unicode Demystified"
9153 * Chapter 13 by Richard Gillam, published by Addison-Wesley.
9154 *
9155 * The inversion list data structure is currently implemented as an SV pointing
9156 * to an array of UVs that the SV thinks are bytes. This allows us to have an
9157 * array of UV whose memory management is automatically handled by the existing
9158 * facilities for SV's.
9159 *
9160 * Some of the methods should always be private to the implementation, and some
9161 * should eventually be made public */
9162
9163/* The header definitions are in F<invlist_inline.h> */
9164
9165#ifndef PERL_IN_XSUB_RE
9166
9167PERL_STATIC_INLINEstatic __inline__ UV*
9168S__invlist_array_init(SV* const invlist, const bool_Bool will_have_0)
9169{
9170 /* Returns a pointer to the first element in the inversion list's array.
9171 * This is called upon initialization of an inversion list. Where the
9172 * array begins depends on whether the list has the code point U+0000 in it
9173 * or not. The other parameter tells it whether the code that follows this
9174 * call is about to put a 0 in the inversion list or not. The first
9175 * element is either the element reserved for 0, if TRUE, or the element
9176 * after it, if FALSE */
9177
9178 bool_Bool* offset = get_invlist_offset_addrS_get_invlist_offset_addr(invlist);
9179 UV* zero_addr = (UV *) SvPVX(invlist)(*({ SV *const _svpvx = ((SV *)({ void *_p = (invlist); _p; }
)); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9179,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9179, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9179, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
9180
9181 PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT;
9182
9183 /* Must be empty */
9184 assert(! _invlist_len(invlist))((! S__invlist_len(invlist)) ? (void)0 : __assert2("re_comp.c"
, 9184, __func__, "! _invlist_len(invlist)"))
;
9185
9186 *zero_addr = 0;
9187
9188 /* 1^1 = 0; 1^0 = 1 */
9189 *offset = 1 ^ will_have_0;
9190 return zero_addr + *offset;
9191}
9192
9193STATICstatic void
9194S_invlist_replace_list_destroys_src(pTHX_ SV * dest, SV * src)
9195{
9196 /* Replaces the inversion list in 'dest' with the one from 'src'. It
9197 * steals the list from 'src', so 'src' is made to have a NULL list. This
9198 * is similar to what SvSetMagicSV() would do, if it were implemented on
9199 * inversion lists, though this routine avoids a copy */
9200
9201 const UV src_len = _invlist_lenS__invlist_len(src);
9202 const bool_Bool src_offset = *get_invlist_offset_addrS_get_invlist_offset_addr(src);
9203 const STRLEN src_byte_len = SvLEN(src)((XPV*) (src)->sv_any)->xpv_len_u.xpvlenu_len;
9204 char * array = SvPVX(src)(*({ SV *const _svpvx = ((SV *)({ void *_p = (src); _p; })); (
(PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9204, __func__
, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]")); ((!(
(((_svpvx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svpvx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 9204, __func__, "!isGV_with_GP(_svpvx)"
)); ((!(((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svpvx)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 9204, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
9205
9206 const int oldtainted = TAINT_get(((__builtin_expect(((PL_tainted) ? (_Bool)1 : (_Bool)0),(0))
) ? (_Bool)1 : (_Bool)0))
;
9207
9208 PERL_ARGS_ASSERT_INVLIST_REPLACE_LIST_DESTROYS_SRC;
9209
9210 assert(is_invlist(src))((S_is_invlist(src)) ? (void)0 : __assert2("re_comp.c", 9210,
__func__, "is_invlist(src)"))
;
9211 assert(is_invlist(dest))((S_is_invlist(dest)) ? (void)0 : __assert2("re_comp.c", 9211
, __func__, "is_invlist(dest)"))
;
9212 assert(! invlist_is_iterating(src))((! S_invlist_is_iterating(src)) ? (void)0 : __assert2("re_comp.c"
, 9212, __func__, "! invlist_is_iterating(src)"))
;
9213 assert(SvCUR(src) == 0 || SvCUR(src) < SvLEN(src))(((*({ const SV *const _svcur = (const SV *)(src); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 9213, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9213, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9213, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) == 0 || (*({ const SV *const _svcur = (const
SV *)(src); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
9213, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9213, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9213, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) < ((XPV*) (src)->sv_any)->xpv_len_u
.xpvlenu_len) ? (void)0 : __assert2("re_comp.c", 9213, __func__
, "SvCUR(src) == 0 || SvCUR(src) < SvLEN(src)"))
;
9214
9215 /* Make sure it ends in the right place with a NUL, as our inversion list
9216 * manipulations aren't careful to keep this true, but sv_usepvn_flags()
9217 * asserts it */
9218 array[src_byte_len - 1] = '\0';
9219
9220 TAINT_NOT(PL_tainted = (0)); /* Otherwise it breaks */
9221 sv_usepvn_flags(dest,Perl_sv_usepvn_flags( dest,(char *) array,src_byte_len - 1,256
)
9222 (char *) array,Perl_sv_usepvn_flags( dest,(char *) array,src_byte_len - 1,256
)
9223 src_byte_len - 1,Perl_sv_usepvn_flags( dest,(char *) array,src_byte_len - 1,256
)
9224
9225 /* This flag is documented to cause a copy to be avoided */Perl_sv_usepvn_flags( dest,(char *) array,src_byte_len - 1,256
)
9226 SV_HAS_TRAILING_NUL)Perl_sv_usepvn_flags( dest,(char *) array,src_byte_len - 1,256
)
;
9227 TAINT_set(oldtainted)(PL_tainted = (oldtainted));
9228 SvPV_set(src, 0)do { ((PL_valid_types_PVX[((svtype)((src)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9228, __func__
, "PL_valid_types_PVX[SvTYPE(src) & SVt_MASK]")); ((!((((
src)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((src)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((src)->sv_flags & 0xff)) == SVt_PVLV))) ?
(void)0 : __assert2("re_comp.c", 9228, __func__, "!isGV_with_GP(src)"
)); ((!(((svtype)((src)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (src)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 9228, __func__, "!(SvTYPE(src) == SVt_PVIO && !(IoFLAGS(src) & IOf_FAKE_DIRP))"
)); ((src)->sv_u.svu_pv = (0)); } while (0)
;
9229 SvLEN_set(src, 0)do { ((PL_valid_types_PVX[((svtype)((src)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9229, __func__
, "PL_valid_types_PVX[SvTYPE(src) & SVt_MASK]")); ((!((((
src)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((src)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((src)->sv_flags & 0xff)) == SVt_PVLV))) ?
(void)0 : __assert2("re_comp.c", 9229, __func__, "!isGV_with_GP(src)"
)); ((!(((svtype)((src)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (src)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 9229, __func__, "!(SvTYPE(src) == SVt_PVIO && !(IoFLAGS(src) & IOf_FAKE_DIRP))"
)); (((XPV*) (src)->sv_any)->xpv_len_u.xpvlenu_len = (0
)); } while (0)
;
9230 SvCUR_set(src, 0)do { ((PL_valid_types_PVX[((svtype)((src)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9230, __func__
, "PL_valid_types_PVX[SvTYPE(src) & SVt_MASK]")); ((!((((
src)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((src)->sv_flags & 0xff)) == SVt_PVGV
|| ((svtype)((src)->sv_flags & 0xff)) == SVt_PVLV))) ?
(void)0 : __assert2("re_comp.c", 9230, __func__, "!isGV_with_GP(src)"
)); ((!(((svtype)((src)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (src)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 9230, __func__, "!(SvTYPE(src) == SVt_PVIO && !(IoFLAGS(src) & IOf_FAKE_DIRP))"
)); (((XPV*) (src)->sv_any)->xpv_cur = (0)); } while (0
)
;
9231
9232 /* Finish up copying over the other fields in an inversion list */
9233 *get_invlist_offset_addrS_get_invlist_offset_addr(dest) = src_offset;
9234 invlist_set_len(dest, src_len, src_offset)S_invlist_set_len( dest,src_len,src_offset);
9235 *get_invlist_previous_index_addr(dest) = 0;
9236 invlist_iterfinishS_invlist_iterfinish(dest);
9237}
9238
9239PERL_STATIC_INLINEstatic __inline__ IV*
9240S_get_invlist_previous_index_addr(SV* invlist)
9241{
9242 /* Return the address of the IV that is reserved to hold the cached index
9243 * */
9244 PERL_ARGS_ASSERT_GET_INVLIST_PREVIOUS_INDEX_ADDR;
9245
9246 assert(is_invlist(invlist))((S_is_invlist(invlist)) ? (void)0 : __assert2("re_comp.c", 9246
, __func__, "is_invlist(invlist)"))
;
9247
9248 return &(((XINVLIST*) SvANY(invlist)(invlist)->sv_any)->prev_index);
9249}
9250
9251PERL_STATIC_INLINEstatic __inline__ IV
9252S_invlist_previous_index(SV* const invlist)
9253{
9254 /* Returns cached index of previous search */
9255
9256 PERL_ARGS_ASSERT_INVLIST_PREVIOUS_INDEX;
9257
9258 return *get_invlist_previous_index_addr(invlist);
9259}
9260
9261PERL_STATIC_INLINEstatic __inline__ void
9262S_invlist_set_previous_index(SV* const invlist, const IV index)
9263{
9264 /* Caches <index> for later retrieval */
9265
9266 PERL_ARGS_ASSERT_INVLIST_SET_PREVIOUS_INDEX;
9267
9268 assert(index == 0 || index < (int) _invlist_len(invlist))((index == 0 || index < (int) S__invlist_len(invlist)) ? (
void)0 : __assert2("re_comp.c", 9268, __func__, "index == 0 || index < (int) _invlist_len(invlist)"
))
;
9269
9270 *get_invlist_previous_index_addr(invlist) = index;
9271}
9272
9273PERL_STATIC_INLINEstatic __inline__ void
9274S_invlist_trim(SV* invlist)
9275{
9276 /* Free the not currently-being-used space in an inversion list */
9277
9278 /* But don't free up the space needed for the 0 UV that is always at the
9279 * beginning of the list, nor the trailing NUL */
9280 const UV min_size = TO_INTERNAL_SIZE(1) + 1;
9281
9282 PERL_ARGS_ASSERT_INVLIST_TRIM;
9283
9284 assert(is_invlist(invlist))((S_is_invlist(invlist)) ? (void)0 : __assert2("re_comp.c", 9284
, __func__, "is_invlist(invlist)"))
;
9285
9286 SvPV_renew(invlist, MAX(min_size, SvCUR(invlist) + 1))do { do { ((PL_valid_types_PVX[((svtype)((invlist)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
9286, __func__, "PL_valid_types_PVX[SvTYPE(invlist) & SVt_MASK]"
)); ((!((((invlist)->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!isGV_with_GP(invlist)")); ((!(((svtype)((
invlist)->sv_flags & 0xff)) == SVt_PVIO && !((
(XPVIO*) (invlist)->sv_any)->xio_flags & 64))) ? (void
)0 : __assert2("re_comp.c", 9286, __func__, "!(SvTYPE(invlist) == SVt_PVIO && !(IoFLAGS(invlist) & IOf_FAKE_DIRP))"
)); (((XPV*) (invlist)->sv_any)->xpv_len_u.xpvlenu_len =
((((min_size)>((*({ const SV *const _svcur = (const SV *)
(invlist); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))?(min_size):((*({ const SV *const _svcur
= (const SV *)(invlist); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1)))); } while (0); do { ((PL_valid_types_PVX
[((svtype)(((invlist))->sv_flags & 0xff)) & 0x1f])
? (void)0 : __assert2("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE((invlist)) & SVt_MASK]"
)); ((!(((((invlist))->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)(((invlist))->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)(((invlist))->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!isGV_with_GP((invlist))")); ((!(((svtype)
(((invlist))->sv_flags & 0xff)) == SVt_PVIO &&
!(((XPVIO*) ((invlist))->sv_any)->xio_flags & 64))
) ? (void)0 : __assert2("re_comp.c", 9286, __func__, "!(SvTYPE((invlist)) == SVt_PVIO && !(IoFLAGS((invlist)) & IOf_FAKE_DIRP))"
)); (((invlist))->sv_u.svu_pv = (((void)(__builtin_expect(
((((( sizeof(size_t) < sizeof((((min_size)>((*({ const SV
*const _svcur = (const SV *)(invlist); ((PL_valid_types_PVX[
((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))?(min_size):((*({ const SV *const _svcur
= (const SV *)(invlist); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof((((min_size)>((*({ const SV *const
_svcur = (const SV *)(invlist); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))?(min_size):((*({ const SV *const _svcur
= (const SV *)(invlist); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1)))))) ? (size_t)((((min_size)>((*(
{ const SV *const _svcur = (const SV *)(invlist); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))?(min_size):((*({ const SV *const _svcur
= (const SV *)(invlist); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))) : ((size_t)-1)/sizeof(char)) > (
(size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), (char*)Perl_safesysrealloc((void
*)(*({ SV *const _svpvx = ((SV *)({ void *_p = (invlist); _p
; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9286,
__func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })), (size_t)(((((min_size
)>((*({ const SV *const _svcur = (const SV *)(invlist); ((
PL_valid_types_PVX[((svtype)((_svcur)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]")); ((!(
(((_svcur)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svcur)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 9286, __func__, "!isGV_with_GP(_svcur)"
)); ((!(((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svcur)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1))?(min_size):((*({ const SV *const _svcur
= (const SV *)(invlist); ((PL_valid_types_PVX[((svtype)((_svcur
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 9286, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9286, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9286, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + 1)))))))); } while (0); } while (0)
;
9287}
9288
9289PERL_STATIC_INLINEstatic __inline__ void
9290S_invlist_clear(pTHX_ SV* invlist) /* Empty the inversion list */
9291{
9292 PERL_ARGS_ASSERT_INVLIST_CLEAR;
9293
9294 assert(is_invlist(invlist))((S_is_invlist(invlist)) ? (void)0 : __assert2("re_comp.c", 9294
, __func__, "is_invlist(invlist)"))
;
9295
9296 invlist_set_len(invlist, 0, 0)S_invlist_set_len( invlist,0,0);
9297 invlist_trim(invlist);
9298}
9299
9300#endif /* ifndef PERL_IN_XSUB_RE */
9301
9302PERL_STATIC_INLINEstatic __inline__ bool_Bool
9303S_invlist_is_iterating(SV* const invlist)
9304{
9305 PERL_ARGS_ASSERT_INVLIST_IS_ITERATING((invlist) ? (void)0 : __assert2("re_comp.c", 9305, __func__,
"invlist"))
;
9306
9307 return *(get_invlist_iter_addrS_get_invlist_iter_addr(invlist)) < (STRLEN) UV_MAX(~(UV)0);
9308}
9309
9310#ifndef PERL_IN_XSUB_RE
9311
9312PERL_STATIC_INLINEstatic __inline__ UV
9313S_invlist_max(SV* const invlist)
9314{
9315 /* Returns the maximum number of elements storable in the inversion list's
9316 * array, without having to realloc() */
9317
9318 PERL_ARGS_ASSERT_INVLIST_MAX;
9319
9320 assert(is_invlist(invlist))((S_is_invlist(invlist)) ? (void)0 : __assert2("re_comp.c", 9320
, __func__, "is_invlist(invlist)"))
;
9321
9322 /* Assumes worst case, in which the 0 element is not counted in the
9323 * inversion list, so subtracts 1 for that */
9324 return SvLEN(invlist)((XPV*) (invlist)->sv_any)->xpv_len_u.xpvlenu_len == 0 /* This happens under _new_invlist_C_array */
9325 ? FROM_INTERNAL_SIZE(SvCUR(invlist)(*({ const SV *const _svcur = (const SV *)(invlist); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 9325, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9325, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9325, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
) - 1
9326 : FROM_INTERNAL_SIZE(SvLEN(invlist)((XPV*) (invlist)->sv_any)->xpv_len_u.xpvlenu_len) - 1;
9327}
9328
9329STATICstatic void
9330S_initialize_invlist_guts(pTHX_ SV* invlist, const Size_tsize_t initial_size)
9331{
9332 PERL_ARGS_ASSERT_INITIALIZE_INVLIST_GUTS;
9333
9334 /* First 1 is in case the zero element isn't in the list; second 1 is for
9335 * trailing NUL */
9336 SvGROW(invlist, TO_INTERNAL_SIZE(initial_size + 1) + 1)(((invlist)->sv_flags & 0x10000000) || ((XPV*) (invlist
)->sv_any)->xpv_len_u.xpvlenu_len < (TO_INTERNAL_SIZE
(initial_size + 1) + 1) ? Perl_sv_grow( invlist,TO_INTERNAL_SIZE
(initial_size + 1) + 1) : (*({ SV *const _svpvx = ((SV *)({ void
*_p = (invlist); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 9336, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9336, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9336, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))
;
9337 invlist_set_len(invlist, 0, 0)S_invlist_set_len( invlist,0,0);
9338
9339 /* Force iterinit() to be used to get iteration to work */
9340 invlist_iterfinishS_invlist_iterfinish(invlist);
9341
9342 *get_invlist_previous_index_addr(invlist) = 0;
9343 SvPOK_on(invlist)(((!((invlist)->sv_flags & 0x00000800) || !(*({ SV *const
_svrv = ((SV *)({ void *_p = (invlist); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 9343, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9343, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9343, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 9343, __func__, "!((invlist)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (invlist); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 9343, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 9343, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 9343, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((invlist)->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 9343, __func__, "!((((invlist)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((invlist)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags & 0xff)) == SVt_PVLV))"
)), (invlist)->sv_flags |= (0x00000400|0x00004000))
; /* This allows B to extract the PV */
9344}
9345
9346SV*
9347Perl__new_invlist(pTHX_ IV initial_size)
9348{
9349
9350 /* Return a pointer to a newly constructed inversion list, with enough
9351 * space to store 'initial_size' elements. If that number is negative, a
9352 * system default is used instead */
9353
9354 SV* new_list;
9355
9356 if (initial_size < 0) {
9357 initial_size = 10;
9358 }
9359
9360 new_list = newSV_type(SVt_INVLIST)Perl_newSV_type( SVt_INVLIST);
9361 initialize_invlist_guts(new_list, initial_size);
9362
9363 return new_list;
9364}
9365
9366SV*
9367Perl__new_invlist_C_array(pTHX_ const UV* const list)
9368{
9369 /* Return a pointer to a newly constructed inversion list, initialized to
9370 * point to <list>, which has to be in the exact correct inversion list
9371 * form, including internal fields. Thus this is a dangerous routine that
9372 * should not be used in the wrong hands. The passed in 'list' contains
9373 * several header fields at the beginning that are not part of the
9374 * inversion list body proper */
9375
9376 const STRLEN length = (STRLEN) list[0];
9377 const UV version_id = list[1];
9378 const bool_Bool offset = cBOOL(list[2])((list[2]) ? (_Bool)1 : (_Bool)0);
9379#define HEADER_LENGTH 3
9380 /* If any of the above changes in any way, you must change HEADER_LENGTH
9381 * (if appropriate) and regenerate INVLIST_VERSION_ID by running
9382 * perl -E 'say int(rand 2**31-1)'
9383 */
9384#define INVLIST_VERSION_ID 148565664 /* This is a combination of a version and
9385 data structure type, so that one being
9386 passed in can be validated to be an
9387 inversion list of the correct vintage.
9388 */
9389
9390 SV* invlist = newSV_type(SVt_INVLIST)Perl_newSV_type( SVt_INVLIST);
9391
9392 PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY((list) ? (void)0 : __assert2("re_comp.c", 9392, __func__, "list"
))
;
9393
9394 if (version_id != INVLIST_VERSION_ID) {
9395 Perl_croak(aTHX_ "panic: Incorrect version for previously generated inversion list");
9396 }
9397
9398 /* The generated array passed in includes header elements that aren't part
9399 * of the list proper, so start it just after them */
9400 SvPV_set(invlist, (char *) (list + HEADER_LENGTH))do { ((PL_valid_types_PVX[((svtype)((invlist)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9400,
__func__, "PL_valid_types_PVX[SvTYPE(invlist) & SVt_MASK]"
)); ((!((((invlist)->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 9400, __func__, "!isGV_with_GP(invlist)")); ((!(((svtype)((
invlist)->sv_flags & 0xff)) == SVt_PVIO && !((
(XPVIO*) (invlist)->sv_any)->xio_flags & 64))) ? (void
)0 : __assert2("re_comp.c", 9400, __func__, "!(SvTYPE(invlist) == SVt_PVIO && !(IoFLAGS(invlist) & IOf_FAKE_DIRP))"
)); ((invlist)->sv_u.svu_pv = ((char *) (list + HEADER_LENGTH
))); } while (0)
;
9401
9402 SvLEN_set(invlist, 0)do { ((PL_valid_types_PVX[((svtype)((invlist)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 9402,
__func__, "PL_valid_types_PVX[SvTYPE(invlist) & SVt_MASK]"
)); ((!((((invlist)->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 9402, __func__, "!isGV_with_GP(invlist)")); ((!(((svtype)((
invlist)->sv_flags & 0xff)) == SVt_PVIO && !((
(XPVIO*) (invlist)->sv_any)->xio_flags & 64))) ? (void
)0 : __assert2("re_comp.c", 9402, __func__, "!(SvTYPE(invlist) == SVt_PVIO && !(IoFLAGS(invlist) & IOf_FAKE_DIRP))"
)); (((XPV*) (invlist)->sv_any)->xpv_len_u.xpvlenu_len =
(0)); } while (0)
; /* Means we own the contents, and the system
9403 shouldn't touch it */
9404
9405 *(get_invlist_offset_addrS_get_invlist_offset_addr(invlist)) = offset;
9406
9407 /* The 'length' passed to us is the physical number of elements in the
9408 * inversion list. But if there is an offset the logical number is one
9409 * less than that */
9410 invlist_set_len(invlist, length - offset, offset)S_invlist_set_len( invlist,length - offset,offset);
9411
9412 invlist_set_previous_index(invlist, 0);
9413
9414 /* Initialize the iteration pointer. */
9415 invlist_iterfinishS_invlist_iterfinish(invlist);
9416
9417 SvREADONLY_on(invlist)((invlist)->sv_flags |= 0x08000000);
9418 SvPOK_on(invlist)(((!((invlist)->sv_flags & 0x00000800) || !(*({ SV *const
_svrv = ((SV *)({ void *_p = (invlist); _p; })); ((PL_valid_types_RV
[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 9418, __func__, "PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]"
)); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000))
== 0x00008000) && (((svtype)((_svrv)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 9418, __func__
, "!isGV_with_GP(_svrv)")); ((!(((svtype)((_svrv)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 9418, __func__, "!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))"
)); &((_svrv)->sv_u.svu_rv); }))) ? (void)0 : __assert2
("re_comp.c", 9418, __func__, "!((invlist)->sv_flags & 0x00000800) || !(*({ SV *const _svrv = ((SV *)({ void *_p = (invlist); _p; })); ((PL_valid_types_RV[((svtype)((_svrv)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 9418, __func__, \"PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]\")); ((!((((_svrv)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 9418, __func__, \"!isGV_with_GP(_svrv)\")); ((!(((svtype)((_svrv)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svrv)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 9418, __func__, \"!(SvTYPE(_svrv) == SVt_PVIO && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))\")); &((_svrv)->sv_u.svu_rv); }))"
)), ((!((((invlist)->sv_flags & (0x00004000|0x00008000
)) == 0x00008000) && (((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags
& 0xff)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c"
, 9418, __func__, "!((((invlist)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((invlist)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((invlist)->sv_flags & 0xff)) == SVt_PVLV))"
)), (invlist)->sv_flags |= (0x00000400|0x00004000))
;
9419
9420 return invlist;
9421}
9422
9423STATICstatic void
9424S__append_range_to_invlist(pTHX_ SV* const invlist,
9425 const UV start, const UV end)
9426{
9427 /* Subject to change or removal. Append the range from 'start' to 'end' at
9428 * the end of the inversion list. The range must be above any existing
9429 * ones. */
9430
9431 UV* array;
9432 UV max = invlist_max(invlist);
9433 UV len = _invlist_lenS__invlist_len(invlist);
9434 bool_Bool offset;
9435
9436 PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST;
9437
9438 if (len == 0) { /* Empty lists must be initialized */
9439 offset = start != 0;
9440 array = _invlist_array_init(invlist, ! offset);
9441 }
9442 else {
9443 /* Here, the existing list is non-empty. The current max entry in the
9444 * list is generally the first value not in the set, except when the
9445 * set extends to the end of permissible values, in which case it is
9446 * the first entry in that final set, and so this call is an attempt to
9447 * append out-of-order */
9448
9449 UV final_element = len - 1;
9450 array = invlist_arrayS_invlist_array(invlist);
9451 if ( array[final_element] > start
9452 || ELEMENT_RANGE_MATCHES_INVLIST(final_element)(! ((final_element) & 1)))
9453 {
9454 Perl_croak(aTHX_ "panic: attempting to append to an inversion list, but wasn't at the end of the list, final=%" UVuf"lu" ", start=%" UVuf"lu" ", match=%c",
9455 array[final_element], start,
9456 ELEMENT_RANGE_MATCHES_INVLIST(final_element)(! ((final_element) & 1)) ? 't' : 'f');
9457 }
9458
9459 /* Here, it is a legal append. If the new range begins 1 above the end
9460 * of the range below it, it is extending the range below it, so the
9461 * new first value not in the set is one greater than the newly
9462 * extended range. */
9463 offset = *get_invlist_offset_addrS_get_invlist_offset_addr(invlist);
9464 if (array[final_element] == start) {
9465 if (end != UV_MAX(~(UV)0)) {
9466 array[final_element] = end + 1;
9467 }
9468 else {
9469 /* But if the end is the maximum representable on the machine,
9470 * assume that infinity was actually what was meant. Just let
9471 * the range that this would extend to have no end */
9472 invlist_set_len(invlist, len - 1, offset)S_invlist_set_len( invlist,len - 1,offset);
9473 }
9474 return;
9475 }
9476 }
9477
9478 /* Here the new range doesn't extend any existing set. Add it */
9479
9480 len += 2; /* Includes an element each for the start and end of range */
9481
9482 /* If wll overflow the existing space, extend, which may cause the array to
9483 * be moved */
9484 if (max < len) {
9485 invlist_extend(invlist, len)S_invlist_extend( invlist,len);
9486
9487 /* Have to set len here to avoid assert failure in invlist_array() */
9488 invlist_set_len(invlist, len, offset)S_invlist_set_len( invlist,len,offset);
9489
9490 array = invlist_arrayS_invlist_array(invlist);
9491 }
9492 else {
9493 invlist_set_len(invlist, len, offset)S_invlist_set_len( invlist,len,offset);
9494 }
9495
9496 /* The next item on the list starts the range, the one after that is
9497 * one past the new range. */
9498 array[len - 2] = start;
9499 if (end != UV_MAX(~(UV)0)) {
9500 array[len - 1] = end + 1;
9501 }
9502 else {
9503 /* But if the end is the maximum representable on the machine, just let
9504 * the range have no end */
9505 invlist_set_len(invlist, len - 1, offset)S_invlist_set_len( invlist,len - 1,offset);
9506 }
9507}
9508
9509SSize_tssize_t
9510Perl__invlist_search(SV* const invlist, const UV cp)
9511{
9512 /* Searches the inversion list for the entry that contains the input code
9513 * point <cp>. If <cp> is not in the list, -1 is returned. Otherwise, the
9514 * return value is the index into the list's array of the range that
9515 * contains <cp>, that is, 'i' such that
9516 * array[i] <= cp < array[i+1]
9517 */
9518
9519 IV low = 0;
9520 IV mid;
9521 IV high = _invlist_lenS__invlist_len(invlist);
9522 const IV highest_element = high - 1;
9523 const UV* array;
9524
9525 PERL_ARGS_ASSERT__INVLIST_SEARCH((invlist) ? (void)0 : __assert2("re_comp.c", 9525, __func__,
"invlist"))
;
9526
9527 /* If list is empty, return failure. */
9528 if (high == 0) {
9529 return -1;
9530 }
9531
9532 /* (We can't get the array unless we know the list is non-empty) */
9533 array = invlist_arrayS_invlist_array(invlist);
9534
9535 mid = invlist_previous_index(invlist);
9536 assert(mid >=0)((mid >=0) ? (void)0 : __assert2("re_comp.c", 9536, __func__
, "mid >=0"))
;
9537 if (mid > highest_element) {
9538 mid = highest_element;
9539 }
9540
9541 /* <mid> contains the cache of the result of the previous call to this
9542 * function (0 the first time). See if this call is for the same result,
9543 * or if it is for mid-1. This is under the theory that calls to this
9544 * function will often be for related code points that are near each other.
9545 * And benchmarks show that caching gives better results. We also test
9546 * here if the code point is within the bounds of the list. These tests
9547 * replace others that would have had to be made anyway to make sure that
9548 * the array bounds were not exceeded, and these give us extra information
9549 * at the same time */
9550 if (cp >= array[mid]) {
9551 if (cp >= array[highest_element]) {
9552 return highest_element;
9553 }
9554
9555 /* Here, array[mid] <= cp < array[highest_element]. This means that
9556 * the final element is not the answer, so can exclude it; it also
9557 * means that <mid> is not the final element, so can refer to 'mid + 1'
9558 * safely */
9559 if (cp < array[mid + 1]) {
9560 return mid;
9561 }
9562 high--;
9563 low = mid + 1;
9564 }
9565 else { /* cp < aray[mid] */
9566 if (cp < array[0]) { /* Fail if outside the array */
9567 return -1;
9568 }
9569 high = mid;
9570 if (cp >= array[mid - 1]) {
9571 goto found_entry;
9572 }
9573 }
9574
9575 /* Binary search. What we are looking for is <i> such that
9576 * array[i] <= cp < array[i+1]
9577 * The loop below converges on the i+1. Note that there may not be an
9578 * (i+1)th element in the array, and things work nonetheless */
9579 while (low < high) {
9580 mid = (low + high) / 2;
9581 assert(mid <= highest_element)((mid <= highest_element) ? (void)0 : __assert2("re_comp.c"
, 9581, __func__, "mid <= highest_element"))
;
9582 if (array[mid] <= cp) { /* cp >= array[mid] */
9583 low = mid + 1;
9584
9585 /* We could do this extra test to exit the loop early.
9586 if (cp < array[low]) {
9587 return mid;
9588 }
9589 */
9590 }
9591 else { /* cp < array[mid] */
9592 high = mid;
9593 }
9594 }
9595
9596 found_entry:
9597 high--;
9598 invlist_set_previous_index(invlist, high);
9599 return high;
9600}
9601
9602void
9603Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b,
9604 const bool_Bool complement_b, SV** output)
9605{
9606 /* Take the union of two inversion lists and point '*output' to it. On
9607 * input, '*output' MUST POINT TO NULL OR TO AN SV* INVERSION LIST (possibly
9608 * even 'a' or 'b'). If to an inversion list, the contents of the original
9609 * list will be replaced by the union. The first list, 'a', may be
9610 * NULL, in which case a copy of the second list is placed in '*output'.
9611 * If 'complement_b' is TRUE, the union is taken of the complement
9612 * (inversion) of 'b' instead of b itself.
9613 *
9614 * The basis for this comes from "Unicode Demystified" Chapter 13 by
9615 * Richard Gillam, published by Addison-Wesley, and explained at some
9616 * length there. The preface says to incorporate its examples into your
9617 * code at your own risk.
9618 *
9619 * The algorithm is like a merge sort. */
9620
9621 const UV* array_a; /* a's array */
9622 const UV* array_b;
9623 UV len_a; /* length of a's array */
9624 UV len_b;
9625
9626 SV* u; /* the resulting union */
9627 UV* array_u;
9628 UV len_u = 0;
9629
9630 UV i_a = 0; /* current index into a's array */
9631 UV i_b = 0;
9632 UV i_u = 0;
9633
9634 /* running count, as explained in the algorithm source book; items are
9635 * stopped accumulating and are output when the count changes to/from 0.
9636 * The count is incremented when we start a range that's in an input's set,
9637 * and decremented when we start a range that's not in a set. So this
9638 * variable can be 0, 1, or 2. When it is 0 neither input is in their set,
9639 * and hence nothing goes into the union; 1, just one of the inputs is in
9640 * its set (and its current range gets added to the union); and 2 when both
9641 * inputs are in their sets. */
9642 UV count = 0;
9643
9644 PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND((b) ? (void)0 : __assert2("re_comp.c", 9644, __func__, "b"))
; ((output) ? (void)0 : __assert2("re_comp.c", 9644, __func__
, "output"))
;
9645 assert(a != b)((a != b) ? (void)0 : __assert2("re_comp.c", 9645, __func__, "a != b"
))
;
9646 assert(*output == NULL || is_invlist(*output))((*output == ((void*)0) || S_is_invlist(*output)) ? (void)0 :
__assert2("re_comp.c", 9646, __func__, "*output == NULL || is_invlist(*output)"
))
;
9647
9648 len_b = _invlist_lenS__invlist_len(b);
9649 if (len_b == 0) {
9650
9651 /* Here, 'b' is empty, hence it's complement is all possible code
9652 * points. So if the union includes the complement of 'b', it includes
9653 * everything, and we need not even look at 'a'. It's easiest to
9654 * create a new inversion list that matches everything. */
9655 if (complement_b) {
9656 SV* everything = _add_range_to_invlist(NULL, 0, UV_MAX)Perl__add_range_to_invlist( ((void*)0),0,(~(UV)0));
9657
9658 if (*output == NULL((void*)0)) { /* If the output didn't exist, just point it
9659 at the new list */
9660 *output = everything;
9661 }
9662 else { /* Otherwise, replace its contents with the new list */
9663 invlist_replace_list_destroys_src(*output, everything);
9664 SvREFCNT_dec_NN(everything)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (everything); _p; }
)))
;
9665 }
9666
9667 return;
9668 }
9669
9670 /* Here, we don't want the complement of 'b', and since 'b' is empty,
9671 * the union will come entirely from 'a'. If 'a' is NULL or empty, the
9672 * output will be empty */
9673
9674 if (a == NULL((void*)0) || _invlist_lenS__invlist_len(a) == 0) {
9675 if (*output == NULL((void*)0)) {
9676 *output = _new_invlist(0)Perl__new_invlist( 0);
9677 }
9678 else {
9679 invlist_clear(*output);
9680 }
9681 return;
9682 }
9683
9684 /* Here, 'a' is not empty, but 'b' is, so 'a' entirely determines the
9685 * union. We can just return a copy of 'a' if '*output' doesn't point
9686 * to an existing list */
9687 if (*output == NULL((void*)0)) {
9688 *output = invlist_clone(a, NULL)Perl_invlist_clone( a,((void*)0));
9689 return;
9690 }
9691
9692 /* If the output is to overwrite 'a', we have a no-op, as it's
9693 * already in 'a' */
9694 if (*output == a) {
9695 return;
9696 }
9697
9698 /* Here, '*output' is to be overwritten by 'a' */
9699 u = invlist_clone(a, NULL)Perl_invlist_clone( a,((void*)0));
9700 invlist_replace_list_destroys_src(*output, u);
9701 SvREFCNT_dec_NN(u)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (u); _p; })));
9702
9703 return;
9704 }
9705
9706 /* Here 'b' is not empty. See about 'a' */
9707
9708 if (a == NULL((void*)0) || ((len_a = _invlist_lenS__invlist_len(a)) == 0)) {
9709
9710 /* Here, 'a' is empty (and b is not). That means the union will come
9711 * entirely from 'b'. If '*output' is NULL, we can directly return a
9712 * clone of 'b'. Otherwise, we replace the contents of '*output' with
9713 * the clone */
9714
9715 SV ** dest = (*output == NULL((void*)0)) ? output : &u;
9716 *dest = invlist_clone(b, NULL)Perl_invlist_clone( b,((void*)0));
9717 if (complement_b) {
9718 _invlist_invert(*dest)Perl__invlist_invert( *dest);
9719 }
9720
9721 if (dest == &u) {
9722 invlist_replace_list_destroys_src(*output, u);
9723 SvREFCNT_dec_NN(u)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (u); _p; })));
9724 }
9725
9726 return;
9727 }
9728
9729 /* Here both lists exist and are non-empty */
9730 array_a = invlist_arrayS_invlist_array(a);
9731 array_b = invlist_arrayS_invlist_array(b);
9732
9733 /* If are to take the union of 'a' with the complement of b, set it
9734 * up so are looking at b's complement. */
9735 if (complement_b) {
9736
9737 /* To complement, we invert: if the first element is 0, remove it. To
9738 * do this, we just pretend the array starts one later */
9739 if (array_b[0] == 0) {
9740 array_b++;
9741 len_b--;
9742 }
9743 else {
9744
9745 /* But if the first element is not zero, we pretend the list starts
9746 * at the 0 that is always stored immediately before the array. */
9747 array_b--;
9748 len_b++;
9749 }
9750 }
9751
9752 /* Size the union for the worst case: that the sets are completely
9753 * disjoint */
9754 u = _new_invlist(len_a + len_b)Perl__new_invlist( len_a + len_b);
9755
9756 /* Will contain U+0000 if either component does */
9757 array_u = _invlist_array_init(u, ( len_a > 0 && array_a[0] == 0)
9758 || (len_b > 0 && array_b[0] == 0));
9759
9760 /* Go through each input list item by item, stopping when have exhausted
9761 * one of them */
9762 while (i_a < len_a && i_b < len_b) {
9763 UV cp; /* The element to potentially add to the union's array */
9764 bool_Bool cp_in_set; /* is it in the input list's set or not */
9765
9766 /* We need to take one or the other of the two inputs for the union.
9767 * Since we are merging two sorted lists, we take the smaller of the
9768 * next items. In case of a tie, we take first the one that is in its
9769 * set. If we first took the one not in its set, it would decrement
9770 * the count, possibly to 0 which would cause it to be output as ending
9771 * the range, and the next time through we would take the same number,
9772 * and output it again as beginning the next range. By doing it the
9773 * opposite way, there is no possibility that the count will be
9774 * momentarily decremented to 0, and thus the two adjoining ranges will
9775 * be seamlessly merged. (In a tie and both are in the set or both not
9776 * in the set, it doesn't matter which we take first.) */
9777 if ( array_a[i_a] < array_b[i_b]
9778 || ( array_a[i_a] == array_b[i_b]
9779 && ELEMENT_RANGE_MATCHES_INVLIST(i_a)(! ((i_a) & 1))))
9780 {
9781 cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_a)(! ((i_a) & 1));
9782 cp = array_a[i_a++];
9783 }
9784 else {
9785 cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_b)(! ((i_b) & 1));
9786 cp = array_b[i_b++];
9787 }
9788
9789 /* Here, have chosen which of the two inputs to look at. Only output
9790 * if the running count changes to/from 0, which marks the
9791 * beginning/end of a range that's in the set */
9792 if (cp_in_set) {
9793 if (count == 0) {
9794 array_u[i_u++] = cp;
9795 }
9796 count++;
9797 }
9798 else {
9799 count--;
9800 if (count == 0) {
9801 array_u[i_u++] = cp;
9802 }
9803 }
9804 }
9805
9806
9807 /* The loop above increments the index into exactly one of the input lists
9808 * each iteration, and ends when either index gets to its list end. That
9809 * means the other index is lower than its end, and so something is
9810 * remaining in that one. We decrement 'count', as explained below, if
9811 * that list is in its set. (i_a and i_b each currently index the element
9812 * beyond the one we care about.) */
9813 if ( (i_a != len_a && PREV_RANGE_MATCHES_INVLIST(i_a)(! (! ((i_a) & 1))))
9814 || (i_b != len_b && PREV_RANGE_MATCHES_INVLIST(i_b)(! (! ((i_b) & 1)))))
9815 {
9816 count--;
9817 }
9818
9819 /* Above we decremented 'count' if the list that had unexamined elements in
9820 * it was in its set. This has made it so that 'count' being non-zero
9821 * means there isn't anything left to output; and 'count' equal to 0 means
9822 * that what is left to output is precisely that which is left in the
9823 * non-exhausted input list.
9824 *
9825 * To see why, note first that the exhausted input obviously has nothing
9826 * left to add to the union. If it was in its set at its end, that means
9827 * the set extends from here to the platform's infinity, and hence so does
9828 * the union and the non-exhausted set is irrelevant. The exhausted set
9829 * also contributed 1 to 'count'. If 'count' was 2, it got decremented to
9830 * 1, but if it was 1, the non-exhausted set wasn't in its set, and so
9831 * 'count' remains at 1. This is consistent with the decremented 'count'
9832 * != 0 meaning there's nothing left to add to the union.
9833 *
9834 * But if the exhausted input wasn't in its set, it contributed 0 to
9835 * 'count', and the rest of the union will be whatever the other input is.
9836 * If 'count' was 0, neither list was in its set, and 'count' remains 0;
9837 * otherwise it gets decremented to 0. This is consistent with 'count'
9838 * == 0 meaning the remainder of the union is whatever is left in the
9839 * non-exhausted list. */
9840 if (count != 0) {
9841 len_u = i_u;
9842 }
9843 else {
9844 IV copy_count = len_a - i_a;
9845 if (copy_count > 0) { /* The non-exhausted input is 'a' */
9846 Copy(array_a + i_a, array_u + i_u, copy_count, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(copy_count
) || sizeof(UV) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(copy_count)))) ? (size_t)(copy_count) : ((size_t)-1)/sizeof(
UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((((void*)(array_u
+ i_u)) != 0) ? (void)0 : __assert2("re_comp.c", 9846, __func__
, "((void*)(array_u + i_u)) != 0")), ((((void*)(array_a + i_a
)) != 0) ? (void)0 : __assert2("re_comp.c", 9846, __func__, "((void*)(array_a + i_a)) != 0"
)), (void)memcpy((char*)(array_u + i_u),(const char*)(array_a
+ i_a), (copy_count) * sizeof(UV)))
;
9847 }
9848 else { /* The non-exhausted input is b */
9849 copy_count = len_b - i_b;
9850 Copy(array_b + i_b, array_u + i_u, copy_count, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(copy_count
) || sizeof(UV) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(copy_count)))) ? (size_t)(copy_count) : ((size_t)-1)/sizeof(
UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((((void*)(array_u
+ i_u)) != 0) ? (void)0 : __assert2("re_comp.c", 9850, __func__
, "((void*)(array_u + i_u)) != 0")), ((((void*)(array_b + i_b
)) != 0) ? (void)0 : __assert2("re_comp.c", 9850, __func__, "((void*)(array_b + i_b)) != 0"
)), (void)memcpy((char*)(array_u + i_u),(const char*)(array_b
+ i_b), (copy_count) * sizeof(UV)))
;
9851 }
9852 len_u = i_u + copy_count;
9853 }
9854
9855 /* Set the result to the final length, which can change the pointer to
9856 * array_u, so re-find it. (Note that it is unlikely that this will
9857 * change, as we are shrinking the space, not enlarging it) */
9858 if (len_u != _invlist_lenS__invlist_len(u)) {
9859 invlist_set_len(u, len_u, *get_invlist_offset_addr(u))S_invlist_set_len( u,len_u,*S_get_invlist_offset_addr(u));
9860 invlist_trim(u);
9861 array_u = invlist_arrayS_invlist_array(u);
9862 }
9863
9864 if (*output == NULL((void*)0)) { /* Simply return the new inversion list */
9865 *output = u;
9866 }
9867 else {
9868 /* Otherwise, overwrite the inversion list that was in '*output'. We
9869 * could instead free '*output', and then set it to 'u', but experience
9870 * has shown [perl #127392] that if the input is a mortal, we can get a
9871 * huge build-up of these during regex compilation before they get
9872 * freed. */
9873 invlist_replace_list_destroys_src(*output, u);
9874 SvREFCNT_dec_NN(u)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (u); _p; })));
9875 }
9876
9877 return;
9878}
9879
9880void
9881Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b,
9882 const bool_Bool complement_b, SV** i)
9883{
9884 /* Take the intersection of two inversion lists and point '*i' to it. On
9885 * input, '*i' MUST POINT TO NULL OR TO AN SV* INVERSION LIST (possibly
9886 * even 'a' or 'b'). If to an inversion list, the contents of the original
9887 * list will be replaced by the intersection. The first list, 'a', may be
9888 * NULL, in which case '*i' will be an empty list. If 'complement_b' is
9889 * TRUE, the result will be the intersection of 'a' and the complement (or
9890 * inversion) of 'b' instead of 'b' directly.
9891 *
9892 * The basis for this comes from "Unicode Demystified" Chapter 13 by
9893 * Richard Gillam, published by Addison-Wesley, and explained at some
9894 * length there. The preface says to incorporate its examples into your
9895 * code at your own risk. In fact, it had bugs
9896 *
9897 * The algorithm is like a merge sort, and is essentially the same as the
9898 * union above
9899 */
9900
9901 const UV* array_a; /* a's array */
9902 const UV* array_b;
9903 UV len_a; /* length of a's array */
9904 UV len_b;
9905
9906 SV* r; /* the resulting intersection */
9907 UV* array_r;
9908 UV len_r = 0;
9909
9910 UV i_a = 0; /* current index into a's array */
9911 UV i_b = 0;
9912 UV i_r = 0;
9913
9914 /* running count of how many of the two inputs are postitioned at ranges
9915 * that are in their sets. As explained in the algorithm source book,
9916 * items are stopped accumulating and are output when the count changes
9917 * to/from 2. The count is incremented when we start a range that's in an
9918 * input's set, and decremented when we start a range that's not in a set.
9919 * Only when it is 2 are we in the intersection. */
9920 UV count = 0;
9921
9922 PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND((b) ? (void)0 : __assert2("re_comp.c", 9922, __func__, "b"))
; ((i) ? (void)0 : __assert2("re_comp.c", 9922, __func__, "i"
))
;
9923 assert(a != b)((a != b) ? (void)0 : __assert2("re_comp.c", 9923, __func__, "a != b"
))
;
9924 assert(*i == NULL || is_invlist(*i))((*i == ((void*)0) || S_is_invlist(*i)) ? (void)0 : __assert2
("re_comp.c", 9924, __func__, "*i == NULL || is_invlist(*i)")
)
;
9925
9926 /* Special case if either one is empty */
9927 len_a = (a == NULL((void*)0)) ? 0 : _invlist_lenS__invlist_len(a);
9928 if ((len_a == 0) || ((len_b = _invlist_lenS__invlist_len(b)) == 0)) {
9929 if (len_a != 0 && complement_b) {
9930
9931 /* Here, 'a' is not empty, therefore from the enclosing 'if', 'b'
9932 * must be empty. Here, also we are using 'b's complement, which
9933 * hence must be every possible code point. Thus the intersection
9934 * is simply 'a'. */
9935
9936 if (*i == a) { /* No-op */
9937 return;
9938 }
9939
9940 if (*i == NULL((void*)0)) {
9941 *i = invlist_clone(a, NULL)Perl_invlist_clone( a,((void*)0));
9942 return;
9943 }
9944
9945 r = invlist_clone(a, NULL)Perl_invlist_clone( a,((void*)0));
9946 invlist_replace_list_destroys_src(*i, r);
9947 SvREFCNT_dec_NN(r)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (r); _p; })));
9948 return;
9949 }
9950
9951 /* Here, 'a' or 'b' is empty and not using the complement of 'b'. The
9952 * intersection must be empty */
9953 if (*i == NULL((void*)0)) {
9954 *i = _new_invlist(0)Perl__new_invlist( 0);
9955 return;
9956 }
9957
9958 invlist_clear(*i);
9959 return;
9960 }
9961
9962 /* Here both lists exist and are non-empty */
9963 array_a = invlist_arrayS_invlist_array(a);
9964 array_b = invlist_arrayS_invlist_array(b);
9965
9966 /* If are to take the intersection of 'a' with the complement of b, set it
9967 * up so are looking at b's complement. */
9968 if (complement_b) {
9969
9970 /* To complement, we invert: if the first element is 0, remove it. To
9971 * do this, we just pretend the array starts one later */
9972 if (array_b[0] == 0) {
9973 array_b++;
9974 len_b--;
9975 }
9976 else {
9977
9978 /* But if the first element is not zero, we pretend the list starts
9979 * at the 0 that is always stored immediately before the array. */
9980 array_b--;
9981 len_b++;
9982 }
9983 }
9984
9985 /* Size the intersection for the worst case: that the intersection ends up
9986 * fragmenting everything to be completely disjoint */
9987 r= _new_invlist(len_a + len_b)Perl__new_invlist( len_a + len_b);
9988
9989 /* Will contain U+0000 iff both components do */
9990 array_r = _invlist_array_init(r, len_a > 0 && array_a[0] == 0
9991 && len_b > 0 && array_b[0] == 0);
9992
9993 /* Go through each list item by item, stopping when have exhausted one of
9994 * them */
9995 while (i_a < len_a && i_b < len_b) {
9996 UV cp; /* The element to potentially add to the intersection's
9997 array */
9998 bool_Bool cp_in_set; /* Is it in the input list's set or not */
9999
10000 /* We need to take one or the other of the two inputs for the
10001 * intersection. Since we are merging two sorted lists, we take the
10002 * smaller of the next items. In case of a tie, we take first the one
10003 * that is not in its set (a difference from the union algorithm). If
10004 * we first took the one in its set, it would increment the count,
10005 * possibly to 2 which would cause it to be output as starting a range
10006 * in the intersection, and the next time through we would take that
10007 * same number, and output it again as ending the set. By doing the
10008 * opposite of this, there is no possibility that the count will be
10009 * momentarily incremented to 2. (In a tie and both are in the set or
10010 * both not in the set, it doesn't matter which we take first.) */
10011 if ( array_a[i_a] < array_b[i_b]
10012 || ( array_a[i_a] == array_b[i_b]
10013 && ! ELEMENT_RANGE_MATCHES_INVLIST(i_a)(! ((i_a) & 1))))
10014 {
10015 cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_a)(! ((i_a) & 1));
10016 cp = array_a[i_a++];
10017 }
10018 else {
10019 cp_in_set = ELEMENT_RANGE_MATCHES_INVLIST(i_b)(! ((i_b) & 1));
10020 cp= array_b[i_b++];
10021 }
10022
10023 /* Here, have chosen which of the two inputs to look at. Only output
10024 * if the running count changes to/from 2, which marks the
10025 * beginning/end of a range that's in the intersection */
10026 if (cp_in_set) {
10027 count++;
10028 if (count == 2) {
10029 array_r[i_r++] = cp;
10030 }
10031 }
10032 else {
10033 if (count == 2) {
10034 array_r[i_r++] = cp;
10035 }
10036 count--;
10037 }
10038
10039 }
10040
10041 /* The loop above increments the index into exactly one of the input lists
10042 * each iteration, and ends when either index gets to its list end. That
10043 * means the other index is lower than its end, and so something is
10044 * remaining in that one. We increment 'count', as explained below, if the
10045 * exhausted list was in its set. (i_a and i_b each currently index the
10046 * element beyond the one we care about.) */
10047 if ( (i_a == len_a && PREV_RANGE_MATCHES_INVLIST(i_a)(! (! ((i_a) & 1))))
10048 || (i_b == len_b && PREV_RANGE_MATCHES_INVLIST(i_b)(! (! ((i_b) & 1)))))
10049 {
10050 count++;
10051 }
10052
10053 /* Above we incremented 'count' if the exhausted list was in its set. This
10054 * has made it so that 'count' being below 2 means there is nothing left to
10055 * output; otheriwse what's left to add to the intersection is precisely
10056 * that which is left in the non-exhausted input list.
10057 *
10058 * To see why, note first that the exhausted input obviously has nothing
10059 * left to affect the intersection. If it was in its set at its end, that
10060 * means the set extends from here to the platform's infinity, and hence
10061 * anything in the non-exhausted's list will be in the intersection, and
10062 * anything not in it won't be. Hence, the rest of the intersection is
10063 * precisely what's in the non-exhausted list The exhausted set also
10064 * contributed 1 to 'count', meaning 'count' was at least 1. Incrementing
10065 * it means 'count' is now at least 2. This is consistent with the
10066 * incremented 'count' being >= 2 means to add the non-exhausted list to
10067 * the intersection.
10068 *
10069 * But if the exhausted input wasn't in its set, it contributed 0 to
10070 * 'count', and the intersection can't include anything further; the
10071 * non-exhausted set is irrelevant. 'count' was at most 1, and doesn't get
10072 * incremented. This is consistent with 'count' being < 2 meaning nothing
10073 * further to add to the intersection. */
10074 if (count < 2) { /* Nothing left to put in the intersection. */
10075 len_r = i_r;
10076 }
10077 else { /* copy the non-exhausted list, unchanged. */
10078 IV copy_count = len_a - i_a;
10079 if (copy_count > 0) { /* a is the one with stuff left */
10080 Copy(array_a + i_a, array_r + i_r, copy_count, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(copy_count
) || sizeof(UV) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(copy_count)))) ? (size_t)(copy_count) : ((size_t)-1)/sizeof(
UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((((void*)(array_r
+ i_r)) != 0) ? (void)0 : __assert2("re_comp.c", 10080, __func__
, "((void*)(array_r + i_r)) != 0")), ((((void*)(array_a + i_a
)) != 0) ? (void)0 : __assert2("re_comp.c", 10080, __func__, "((void*)(array_a + i_a)) != 0"
)), (void)memcpy((char*)(array_r + i_r),(const char*)(array_a
+ i_a), (copy_count) * sizeof(UV)))
;
10081 }
10082 else { /* b is the one with stuff left */
10083 copy_count = len_b - i_b;
10084 Copy(array_b + i_b, array_r + i_r, copy_count, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(copy_count
) || sizeof(UV) > ((size_t)1 << 8*(sizeof(size_t) - sizeof
(copy_count)))) ? (size_t)(copy_count) : ((size_t)-1)/sizeof(
UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((((void*)(array_r
+ i_r)) != 0) ? (void)0 : __assert2("re_comp.c", 10084, __func__
, "((void*)(array_r + i_r)) != 0")), ((((void*)(array_b + i_b
)) != 0) ? (void)0 : __assert2("re_comp.c", 10084, __func__, "((void*)(array_b + i_b)) != 0"
)), (void)memcpy((char*)(array_r + i_r),(const char*)(array_b
+ i_b), (copy_count) * sizeof(UV)))
;
10085 }
10086 len_r = i_r + copy_count;
10087 }
10088
10089 /* Set the result to the final length, which can change the pointer to
10090 * array_r, so re-find it. (Note that it is unlikely that this will
10091 * change, as we are shrinking the space, not enlarging it) */
10092 if (len_r != _invlist_lenS__invlist_len(r)) {
10093 invlist_set_len(r, len_r, *get_invlist_offset_addr(r))S_invlist_set_len( r,len_r,*S_get_invlist_offset_addr(r));
10094 invlist_trim(r);
10095 array_r = invlist_arrayS_invlist_array(r);
10096 }
10097
10098 if (*i == NULL((void*)0)) { /* Simply return the calculated intersection */
10099 *i = r;
10100 }
10101 else { /* Otherwise, replace the existing inversion list in '*i'. We could
10102 instead free '*i', and then set it to 'r', but experience has
10103 shown [perl #127392] that if the input is a mortal, we can get a
10104 huge build-up of these during regex compilation before they get
10105 freed. */
10106 if (len_r) {
10107 invlist_replace_list_destroys_src(*i, r);
10108 }
10109 else {
10110 invlist_clear(*i);
10111 }
10112 SvREFCNT_dec_NN(r)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (r); _p; })));
10113 }
10114
10115 return;
10116}
10117
10118SV*
10119Perl__add_range_to_invlist(pTHX_ SV* invlist, UV start, UV end)
10120{
10121 /* Add the range from 'start' to 'end' inclusive to the inversion list's
10122 * set. A pointer to the inversion list is returned. This may actually be
10123 * a new list, in which case the passed in one has been destroyed. The
10124 * passed-in inversion list can be NULL, in which case a new one is created
10125 * with just the one range in it. The new list is not necessarily
10126 * NUL-terminated. Space is not freed if the inversion list shrinks as a
10127 * result of this function. The gain would not be large, and in many
10128 * cases, this is called multiple times on a single inversion list, so
10129 * anything freed may almost immediately be needed again.
10130 *
10131 * This used to mostly call the 'union' routine, but that is much more
10132 * heavyweight than really needed for a single range addition */
10133
10134 UV* array; /* The array implementing the inversion list */
10135 UV len; /* How many elements in 'array' */
10136 SSize_tssize_t i_s; /* index into the invlist array where 'start'
10137 should go */
10138 SSize_tssize_t i_e = 0; /* And the index where 'end' should go */
10139 UV cur_highest; /* The highest code point in the inversion list
10140 upon entry to this function */
10141
10142 /* This range becomes the whole inversion list if none already existed */
10143 if (invlist == NULL((void*)0)) {
10144 invlist = _new_invlist(2)Perl__new_invlist( 2);
10145 _append_range_to_invlist(invlist, start, end);
10146 return invlist;
10147 }
10148
10149 /* Likewise, if the inversion list is currently empty */
10150 len = _invlist_lenS__invlist_len(invlist);
10151 if (len == 0) {
10152 _append_range_to_invlist(invlist, start, end);
10153 return invlist;
10154 }
10155
10156 /* Starting here, we have to know the internals of the list */
10157 array = invlist_arrayS_invlist_array(invlist);
10158
10159 /* If the new range ends higher than the current highest ... */
10160 cur_highest = invlist_highestS_invlist_highest(invlist);
10161 if (end > cur_highest) {
10162
10163 /* If the whole range is higher, we can just append it */
10164 if (start > cur_highest) {
10165 _append_range_to_invlist(invlist, start, end);
10166 return invlist;
10167 }
10168
10169 /* Otherwise, add the portion that is higher ... */
10170 _append_range_to_invlist(invlist, cur_highest + 1, end);
10171
10172 /* ... and continue on below to handle the rest. As a result of the
10173 * above append, we know that the index of the end of the range is the
10174 * final even numbered one of the array. Recall that the final element
10175 * always starts a range that extends to infinity. If that range is in
10176 * the set (meaning the set goes from here to infinity), it will be an
10177 * even index, but if it isn't in the set, it's odd, and the final
10178 * range in the set is one less, which is even. */
10179 if (end == UV_MAX(~(UV)0)) {
10180 i_e = len;
10181 }
10182 else {
10183 i_e = len - 2;
10184 }
10185 }
10186
10187 /* We have dealt with appending, now see about prepending. If the new
10188 * range starts lower than the current lowest ... */
10189 if (start < array[0]) {
10190
10191 /* Adding something which has 0 in it is somewhat tricky, and uncommon.
10192 * Let the union code handle it, rather than having to know the
10193 * trickiness in two code places. */
10194 if (UNLIKELY(start == 0)__builtin_expect(((start == 0) ? (_Bool)1 : (_Bool)0),(0))) {
10195 SV* range_invlist;
10196
10197 range_invlist = _new_invlist(2)Perl__new_invlist( 2);
10198 _append_range_to_invlist(range_invlist, start, end);
10199
10200 _invlist_union(invlist, range_invlist, &invlist)Perl__invlist_union_maybe_complement_2nd( invlist,range_invlist
,(0),&invlist)
;
10201
10202 SvREFCNT_dec_NN(range_invlist)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (range_invlist); _p
; })))
;
10203
10204 return invlist;
10205 }
10206
10207 /* If the whole new range comes before the first entry, and doesn't
10208 * extend it, we have to insert it as an additional range */
10209 if (end < array[0] - 1) {
10210 i_s = i_e = -1;
10211 goto splice_in_new_range;
10212 }
10213
10214 /* Here the new range adjoins the existing first range, extending it
10215 * downwards. */
10216 array[0] = start;
10217
10218 /* And continue on below to handle the rest. We know that the index of
10219 * the beginning of the range is the first one of the array */
10220 i_s = 0;
10221 }
10222 else { /* Not prepending any part of the new range to the existing list.
10223 * Find where in the list it should go. This finds i_s, such that:
10224 * invlist[i_s] <= start < array[i_s+1]
10225 */
10226 i_s = _invlist_searchPerl__invlist_search(invlist, start);
10227 }
10228
10229 /* At this point, any extending before the beginning of the inversion list
10230 * and/or after the end has been done. This has made it so that, in the
10231 * code below, each endpoint of the new range is either in a range that is
10232 * in the set, or is in a gap between two ranges that are. This means we
10233 * don't have to worry about exceeding the array bounds.
10234 *
10235 * Find where in the list the new range ends (but we can skip this if we
10236 * have already determined what it is, or if it will be the same as i_s,
10237 * which we already have computed) */
10238 if (i_e == 0) {
10239 i_e = (start == end)
10240 ? i_s
10241 : _invlist_searchPerl__invlist_search(invlist, end);
10242 }
10243
10244 /* Here generally invlist[i_e] <= end < array[i_e+1]. But if invlist[i_e]
10245 * is a range that goes to infinity there is no element at invlist[i_e+1],
10246 * so only the first relation holds. */
10247
10248 if ( ! ELEMENT_RANGE_MATCHES_INVLIST(i_s)(! ((i_s) & 1))) {
10249
10250 /* Here, the ranges on either side of the beginning of the new range
10251 * are in the set, and this range starts in the gap between them.
10252 *
10253 * The new range extends the range above it downwards if the new range
10254 * ends at or above that range's start */
10255 const bool_Bool extends_the_range_above = ( end == UV_MAX(~(UV)0)
10256 || end + 1 >= array[i_s+1]);
10257
10258 /* The new range extends the range below it upwards if it begins just
10259 * after where that range ends */
10260 if (start == array[i_s]) {
10261
10262 /* If the new range fills the entire gap between the other ranges,
10263 * they will get merged together. Other ranges may also get
10264 * merged, depending on how many of them the new range spans. In
10265 * the general case, we do the merge later, just once, after we
10266 * figure out how many to merge. But in the case where the new
10267 * range exactly spans just this one gap (possibly extending into
10268 * the one above), we do the merge here, and an early exit. This
10269 * is done here to avoid having to special case later. */
10270 if (i_e - i_s <= 1) {
10271
10272 /* If i_e - i_s == 1, it means that the new range terminates
10273 * within the range above, and hence 'extends_the_range_above'
10274 * must be true. (If the range above it extends to infinity,
10275 * 'i_s+2' will be above the array's limit, but 'len-i_s-2'
10276 * will be 0, so no harm done.) */
10277 if (extends_the_range_above) {
10278 Move(array + i_s + 2, array + i_s, len - i_s - 2, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
- i_s - 2) || sizeof(UV) > ((size_t)1 << 8*(sizeof(
size_t) - sizeof(len - i_s - 2)))) ? (size_t)(len - i_s - 2) :
((size_t)-1)/sizeof(UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
((((void*)(array + i_s)) != 0) ? (void)0 : __assert2("re_comp.c"
, 10278, __func__, "((void*)(array + i_s)) != 0")), ((((void*
)(array + i_s + 2)) != 0) ? (void)0 : __assert2("re_comp.c", 10278
, __func__, "((void*)(array + i_s + 2)) != 0")), (void)memmove
((char*)(array + i_s),(const char*)(array + i_s + 2), (len - i_s
- 2) * sizeof(UV)))
;
10279 invlist_set_len(invlist,S_invlist_set_len( invlist,len - 2,*(S_get_invlist_offset_addr
(invlist)))
10280 len - 2,S_invlist_set_len( invlist,len - 2,*(S_get_invlist_offset_addr
(invlist)))
10281 *(get_invlist_offset_addr(invlist)))S_invlist_set_len( invlist,len - 2,*(S_get_invlist_offset_addr
(invlist)))
;
10282 return invlist;
10283 }
10284
10285 /* Here, i_e must == i_s. We keep them in sync, as they apply
10286 * to the same range, and below we are about to decrement i_s
10287 * */
10288 i_e--;
10289 }
10290
10291 /* Here, the new range is adjacent to the one below. (It may also
10292 * span beyond the range above, but that will get resolved later.)
10293 * Extend the range below to include this one. */
10294 array[i_s] = (end == UV_MAX(~(UV)0)) ? UV_MAX(~(UV)0) : end + 1;
10295 i_s--;
10296 start = array[i_s];
10297 }
10298 else if (extends_the_range_above) {
10299
10300 /* Here the new range only extends the range above it, but not the
10301 * one below. It merges with the one above. Again, we keep i_e
10302 * and i_s in sync if they point to the same range */
10303 if (i_e == i_s) {
10304 i_e++;
10305 }
10306 i_s++;
10307 array[i_s] = start;
10308 }
10309 }
10310
10311 /* Here, we've dealt with the new range start extending any adjoining
10312 * existing ranges.
10313 *
10314 * If the new range extends to infinity, it is now the final one,
10315 * regardless of what was there before */
10316 if (UNLIKELY(end == UV_MAX)__builtin_expect(((end == (~(UV)0)) ? (_Bool)1 : (_Bool)0),(0
))
) {
10317 invlist_set_len(invlist, i_s + 1, *(get_invlist_offset_addr(invlist)))S_invlist_set_len( invlist,i_s + 1,*(S_get_invlist_offset_addr
(invlist)))
;
10318 return invlist;
10319 }
10320
10321 /* If i_e started as == i_s, it has also been dealt with,
10322 * and been updated to the new i_s, which will fail the following if */
10323 if (! ELEMENT_RANGE_MATCHES_INVLIST(i_e)(! ((i_e) & 1))) {
10324
10325 /* Here, the ranges on either side of the end of the new range are in
10326 * the set, and this range ends in the gap between them.
10327 *
10328 * If this range is adjacent to (hence extends) the range above it, it
10329 * becomes part of that range; likewise if it extends the range below,
10330 * it becomes part of that range */
10331 if (end + 1 == array[i_e+1]) {
10332 i_e++;
10333 array[i_e] = start;
10334 }
10335 else if (start <= array[i_e]) {
10336 array[i_e] = end + 1;
10337 i_e--;
10338 }
10339 }
10340
10341 if (i_s == i_e) {
10342
10343 /* If the range fits entirely in an existing range (as possibly already
10344 * extended above), it doesn't add anything new */
10345 if (ELEMENT_RANGE_MATCHES_INVLIST(i_s)(! ((i_s) & 1))) {
10346 return invlist;
10347 }
10348
10349 /* Here, no part of the range is in the list. Must add it. It will
10350 * occupy 2 more slots */
10351 splice_in_new_range:
10352
10353 invlist_extend(invlist, len + 2)S_invlist_extend( invlist,len + 2);
10354 array = invlist_arrayS_invlist_array(invlist);
10355 /* Move the rest of the array down two slots. Don't include any
10356 * trailing NUL */
10357 Move(array + i_e + 1, array + i_e + 3, len - i_e - 1, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
- i_e - 1) || sizeof(UV) > ((size_t)1 << 8*(sizeof(
size_t) - sizeof(len - i_e - 1)))) ? (size_t)(len - i_e - 1) :
((size_t)-1)/sizeof(UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
((((void*)(array + i_e + 3)) != 0) ? (void)0 : __assert2("re_comp.c"
, 10357, __func__, "((void*)(array + i_e + 3)) != 0")), ((((void
*)(array + i_e + 1)) != 0) ? (void)0 : __assert2("re_comp.c",
10357, __func__, "((void*)(array + i_e + 1)) != 0")), (void)
memmove((char*)(array + i_e + 3),(const char*)(array + i_e + 1
), (len - i_e - 1) * sizeof(UV)))
;
10358
10359 /* Do the actual splice */
10360 array[i_e+1] = start;
10361 array[i_e+2] = end + 1;
10362 invlist_set_len(invlist, len + 2, *(get_invlist_offset_addr(invlist)))S_invlist_set_len( invlist,len + 2,*(S_get_invlist_offset_addr
(invlist)))
;
10363 return invlist;
10364 }
10365
10366 /* Here the new range crossed the boundaries of a pre-existing range. The
10367 * code above has adjusted things so that both ends are in ranges that are
10368 * in the set. This means everything in between must also be in the set.
10369 * Just squash things together */
10370 Move(array + i_e + 1, array + i_s + 1, len - i_e - 1, UV)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
- i_e - 1) || sizeof(UV) > ((size_t)1 << 8*(sizeof(
size_t) - sizeof(len - i_e - 1)))) ? (size_t)(len - i_e - 1) :
((size_t)-1)/sizeof(UV)) > ((size_t)-1)/sizeof(UV))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
((((void*)(array + i_s + 1)) != 0) ? (void)0 : __assert2("re_comp.c"
, 10370, __func__, "((void*)(array + i_s + 1)) != 0")), ((((void
*)(array + i_e + 1)) != 0) ? (void)0 : __assert2("re_comp.c",
10370, __func__, "((void*)(array + i_e + 1)) != 0")), (void)
memmove((char*)(array + i_s + 1),(const char*)(array + i_e + 1
), (len - i_e - 1) * sizeof(UV)))
;
10371 invlist_set_len(invlist,S_invlist_set_len( invlist,len - i_e + i_s,*(S_get_invlist_offset_addr
(invlist)))
10372 len - i_e + i_s,S_invlist_set_len( invlist,len - i_e + i_s,*(S_get_invlist_offset_addr
(invlist)))
10373 *(get_invlist_offset_addr(invlist)))S_invlist_set_len( invlist,len - i_e + i_s,*(S_get_invlist_offset_addr
(invlist)))
;
10374
10375 return invlist;
10376}
10377
10378SV*
10379Perl__setup_canned_invlist(pTHX_ const STRLEN size, const UV element0,
10380 UV** other_elements_ptr)
10381{
10382 /* Create and return an inversion list whose contents are to be populated
10383 * by the caller. The caller gives the number of elements (in 'size') and
10384 * the very first element ('element0'). This function will set
10385 * '*other_elements_ptr' to an array of UVs, where the remaining elements
10386 * are to be placed.
10387 *
10388 * Obviously there is some trust involved that the caller will properly
10389 * fill in the other elements of the array.
10390 *
10391 * (The first element needs to be passed in, as the underlying code does
10392 * things differently depending on whether it is zero or non-zero) */
10393
10394 SV* invlist = _new_invlist(size)Perl__new_invlist( size);
10395 bool_Bool offset;
10396
10397 PERL_ARGS_ASSERT__SETUP_CANNED_INVLIST((other_elements_ptr) ? (void)0 : __assert2("re_comp.c", 10397
, __func__, "other_elements_ptr"))
;
10398
10399 invlist = add_cp_to_invlist(invlist, element0)S_add_cp_to_invlist( invlist,element0);
10400 offset = *get_invlist_offset_addrS_get_invlist_offset_addr(invlist);
10401
10402 invlist_set_len(invlist, size, offset)S_invlist_set_len( invlist,size,offset);
10403 *other_elements_ptr = invlist_arrayS_invlist_array(invlist) + 1;
10404 return invlist;
10405}
10406
10407#endif
10408
10409#ifndef PERL_IN_XSUB_RE
10410void
10411Perl__invlist_invert(pTHX_ SV* const invlist)
10412{
10413 /* Complement the input inversion list. This adds a 0 if the list didn't
10414 * have a zero; removes it otherwise. As described above, the data
10415 * structure is set up so that this is very efficient */
10416
10417 PERL_ARGS_ASSERT__INVLIST_INVERT((invlist) ? (void)0 : __assert2("re_comp.c", 10417, __func__
, "invlist"))
;
10418
10419 assert(! invlist_is_iterating(invlist))((! S_invlist_is_iterating(invlist)) ? (void)0 : __assert2("re_comp.c"
, 10419, __func__, "! invlist_is_iterating(invlist)"))
;
10420
10421 /* The inverse of matching nothing is matching everything */
10422 if (_invlist_lenS__invlist_len(invlist) == 0) {
10423 _append_range_to_invlist(invlist, 0, UV_MAX(~(UV)0));
10424 return;
10425 }
10426
10427 *get_invlist_offset_addrS_get_invlist_offset_addr(invlist) = ! *get_invlist_offset_addrS_get_invlist_offset_addr(invlist);
10428}
10429
10430SV*
10431Perl_invlist_clone(pTHX_ SV* const invlist, SV* new_invlist)
10432{
10433 /* Return a new inversion list that is a copy of the input one, which is
10434 * unchanged. The new list will not be mortal even if the old one was. */
10435
10436 const STRLEN nominal_length = _invlist_lenS__invlist_len(invlist);
10437 const STRLEN physical_length = SvCUR(invlist)(*({ const SV *const _svcur = (const SV *)(invlist); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 10437, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10437, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10437, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
;
10438 const bool_Bool offset = *(get_invlist_offset_addrS_get_invlist_offset_addr(invlist));
10439
10440 PERL_ARGS_ASSERT_INVLIST_CLONE((invlist) ? (void)0 : __assert2("re_comp.c", 10440, __func__
, "invlist"))
;
10441
10442 if (new_invlist == NULL((void*)0)) {
10443 new_invlist = _new_invlist(nominal_length)Perl__new_invlist( nominal_length);
10444 }
10445 else {
10446 sv_upgrade(new_invlist, SVt_INVLIST)Perl_sv_upgrade( new_invlist,SVt_INVLIST);
10447 initialize_invlist_guts(new_invlist, nominal_length);
10448 }
10449
10450 *(get_invlist_offset_addrS_get_invlist_offset_addr(new_invlist)) = offset;
10451 invlist_set_len(new_invlist, nominal_length, offset)S_invlist_set_len( new_invlist,nominal_length,offset);
10452 Copy(SvPVX(invlist), SvPVX(new_invlist), physical_length, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(physical_length
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(physical_length)))) ? (size_t)(physical_length) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(((void*)((*({ SV *const _svpvx = ((SV *)({ void *_p = (new_invlist
); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
10452, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10452, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10452, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))) != 0) ? (void)0 : __assert2
("re_comp.c", 10452, __func__, "((void*)((*({ SV *const _svpvx = ((SV *)({ void *_p = (new_invlist); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 10452, __func__, \"PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]\")); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 10452, __func__, \"!isGV_with_GP(_svpvx)\")); ((!(((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 10452, __func__, \"!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))\")); &((_svpvx)->sv_u.svu_pv); })))) != 0"
)), ((((void*)((*({ SV *const _svpvx = ((SV *)({ void *_p = (
invlist); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->
sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c"
, 10452, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10452, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10452, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))) != 0) ? (void)0 : __assert2
("re_comp.c", 10452, __func__, "((void*)((*({ SV *const _svpvx = ((SV *)({ void *_p = (invlist); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2(\"re_comp.c\", 10452, __func__, \"PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]\")); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVLV))) ? (void)0 : __assert2(\"re_comp.c\", 10452, __func__, \"!isGV_with_GP(_svpvx)\")); ((!(((svtype)((_svpvx)->sv_flags & 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->sv_any)->xio_flags & 64))) ? (void)0 : __assert2(\"re_comp.c\", 10452, __func__, \"!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))\")); &((_svpvx)->sv_u.svu_pv); })))) != 0"
)), (void)memcpy((char*)((*({ SV *const _svpvx = ((SV *)({ void
*_p = (new_invlist); _p; })); ((PL_valid_types_PVX[((svtype)
((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 10452, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10452, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10452, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))),(const char*)((*({ SV
*const _svpvx = ((SV *)({ void *_p = (invlist); _p; })); ((PL_valid_types_PVX
[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 10452, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10452, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10452, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))), (physical_length) *
sizeof(char)))
;
10453
10454 return new_invlist;
10455}
10456
10457#endif
10458
10459PERL_STATIC_INLINEstatic __inline__ UV
10460S_invlist_lowest(SV* const invlist)
10461{
10462 /* Returns the lowest code point that matches an inversion list. This API
10463 * has an ambiguity, as it returns 0 under either the lowest is actually
10464 * 0, or if the list is empty. If this distinction matters to you, check
10465 * for emptiness before calling this function */
10466
10467 UV len = _invlist_lenS__invlist_len(invlist);
10468 UV *array;
10469
10470 PERL_ARGS_ASSERT_INVLIST_LOWEST((invlist) ? (void)0 : __assert2("re_comp.c", 10470, __func__
, "invlist"))
;
10471
10472 if (len == 0) {
10473 return 0;
10474 }
10475
10476 array = invlist_arrayS_invlist_array(invlist);
10477
10478 return array[0];
10479}
10480
10481STATICstatic SV *
10482S_invlist_contents(pTHX_ SV* const invlist, const bool_Bool traditional_style)
10483{
10484 /* Get the contents of an inversion list into a string SV so that they can
10485 * be printed out. If 'traditional_style' is TRUE, it uses the format
10486 * traditionally done for debug tracing; otherwise it uses a format
10487 * suitable for just copying to the output, with blanks between ranges and
10488 * a dash between range components */
10489
10490 UV start, end;
10491 SV* output;
10492 const char intra_range_delimiter = (traditional_style ? '\t' : '-');
10493 const char inter_range_delimiter = (traditional_style ? '\n' : ' ');
10494
10495 if (traditional_style) {
10496 output = newSVpvs("\n")Perl_newSVpvn( ("" "\n" ""), (sizeof("\n")-1));
10497 }
10498 else {
10499 output = newSVpvs("")Perl_newSVpvn( ("" "" ""), (sizeof("")-1));
10500 }
10501
10502 PERL_ARGS_ASSERT_INVLIST_CONTENTS((invlist) ? (void)0 : __assert2("re_comp.c", 10502, __func__
, "invlist"))
;
10503
10504 assert(! invlist_is_iterating(invlist))((! S_invlist_is_iterating(invlist)) ? (void)0 : __assert2("re_comp.c"
, 10504, __func__, "! invlist_is_iterating(invlist)"))
;
10505
10506 invlist_iterinitS_invlist_iterinit(invlist);
10507 while (invlist_iternextS_invlist_iternext(invlist, &start, &end)) {
10508 if (end == UV_MAX(~(UV)0)) {
10509 Perl_sv_catpvf(aTHX_ output, "%04" UVXf"lX" "%cINFTY%c",
10510 start, intra_range_delimiter,
10511 inter_range_delimiter);
10512 }
10513 else if (end != start) {
10514 Perl_sv_catpvf(aTHX_ output, "%04" UVXf"lX" "%c%04" UVXf"lX" "%c",
10515 start,
10516 intra_range_delimiter,
10517 end, inter_range_delimiter);
10518 }
10519 else {
10520 Perl_sv_catpvf(aTHX_ output, "%04" UVXf"lX" "%c",
10521 start, inter_range_delimiter);
10522 }
10523 }
10524
10525 if (SvCUR(output)(*({ const SV *const _svcur = (const SV *)(output); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 10525, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10525, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10525, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
&& ! traditional_style) {/* Get rid of trailing blank */
10526 SvCUR_set(output, SvCUR(output) - 1)do { ((PL_valid_types_PVX[((svtype)((output)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 10526
, __func__, "PL_valid_types_PVX[SvTYPE(output) & SVt_MASK]"
)); ((!((((output)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((output)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((output)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10526, __func__
, "!isGV_with_GP(output)")); ((!(((svtype)((output)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (output)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10526, __func__, "!(SvTYPE(output) == SVt_PVIO && !(IoFLAGS(output) & IOf_FAKE_DIRP))"
)); (((XPV*) (output)->sv_any)->xpv_cur = ((*({ const SV
*const _svcur = (const SV *)(output); ((PL_valid_types_PVX[(
(svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void
)0 : __assert2("re_comp.c", 10526, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 10526, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 10526, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) - 1)); } while (0)
;
10527 }
10528
10529 return output;
10530}
10531
10532#ifndef PERL_IN_XSUB_RE
10533void
10534Perl__invlist_dump(pTHX_ PerlIOPerlIO *file, I32 level,
10535 const char * const indent, SV* const invlist)
10536{
10537 /* Designed to be called only by do_sv_dump(). Dumps out the ranges of the
10538 * inversion list 'invlist' to 'file' at 'level' Each line is prefixed by
10539 * the string 'indent'. The output looks like this:
10540 [0] 0x000A .. 0x000D
10541 [2] 0x0085
10542 [4] 0x2028 .. 0x2029
10543 [6] 0x3104 .. INFTY
10544 * This means that the first range of code points matched by the list are
10545 * 0xA through 0xD; the second range contains only the single code point
10546 * 0x85, etc. An inversion list is an array of UVs. Two array elements
10547 * are used to define each range (except if the final range extends to
10548 * infinity, only a single element is needed). The array index of the
10549 * first element for the corresponding range is given in brackets. */
10550
10551 UV start, end;
10552 STRLEN count = 0;
10553
10554 PERL_ARGS_ASSERT__INVLIST_DUMP((file) ? (void)0 : __assert2("re_comp.c", 10554, __func__, "file"
)); ((indent) ? (void)0 : __assert2("re_comp.c", 10554, __func__
, "indent")); ((invlist) ? (void)0 : __assert2("re_comp.c", 10554
, __func__, "invlist"))
;
10555
10556 if (invlist_is_iteratingS_invlist_is_iterating(invlist)) {
10557 Perl_dump_indent(aTHX_ level, file,
10558 "%sCan't dump inversion list because is in middle of iterating\n",
10559 indent);
10560 return;
10561 }
10562
10563 invlist_iterinitS_invlist_iterinit(invlist);
10564 while (invlist_iternextS_invlist_iternext(invlist, &start, &end)) {
10565 if (end == UV_MAX(~(UV)0)) {
10566 Perl_dump_indent(aTHX_ level, file,
10567 "%s[%" UVuf"lu" "] 0x%04" UVXf"lX" " .. INFTY\n",
10568 indent, (UV)count, start);
10569 }
10570 else if (end != start) {
10571 Perl_dump_indent(aTHX_ level, file,
10572 "%s[%" UVuf"lu" "] 0x%04" UVXf"lX" " .. 0x%04" UVXf"lX" "\n",
10573 indent, (UV)count, start, end);
10574 }
10575 else {
10576 Perl_dump_indent(aTHX_ level, file, "%s[%" UVuf"lu" "] 0x%04" UVXf"lX" "\n",
10577 indent, (UV)count, start);
10578 }
10579 count += 2;
10580 }
10581}
10582
10583#endif
10584
10585#if defined(PERL_ARGS_ASSERT__INVLISTEQ((a) ? (void)0 : __assert2("re_comp.c", 10585, __func__, "a")
); ((b) ? (void)0 : __assert2("re_comp.c", 10585, __func__, "b"
))
) && !defined(PERL_IN_XSUB_RE)
10586bool_Bool
10587Perl__invlistEQ(pTHX_ SV* const a, SV* const b, const bool_Bool complement_b)
10588{
10589 /* Return a boolean as to if the two passed in inversion lists are
10590 * identical. The final argument, if TRUE, says to take the complement of
10591 * the second inversion list before doing the comparison */
10592
10593 const UV len_a = _invlist_lenS__invlist_len(a);
10594 UV len_b = _invlist_lenS__invlist_len(b);
10595
10596 const UV* array_a = NULL((void*)0);
10597 const UV* array_b = NULL((void*)0);
10598
10599 PERL_ARGS_ASSERT__INVLISTEQ((a) ? (void)0 : __assert2("re_comp.c", 10599, __func__, "a")
); ((b) ? (void)0 : __assert2("re_comp.c", 10599, __func__, "b"
))
;
10600
10601 /* This code avoids accessing the arrays unless it knows the length is
10602 * non-zero */
10603
10604 if (len_a == 0) {
10605 if (len_b == 0) {
10606 return ! complement_b;
10607 }
10608 }
10609 else {
10610 array_a = invlist_arrayS_invlist_array(a);
10611 }
10612
10613 if (len_b != 0) {
10614 array_b = invlist_arrayS_invlist_array(b);
10615 }
10616
10617 /* If are to compare 'a' with the complement of b, set it
10618 * up so are looking at b's complement. */
10619 if (complement_b) {
10620
10621 /* The complement of nothing is everything, so <a> would have to have
10622 * just one element, starting at zero (ending at infinity) */
10623 if (len_b == 0) {
10624 return (len_a == 1 && array_a[0] == 0);
10625 }
10626 if (array_b[0] == 0) {
10627
10628 /* Otherwise, to complement, we invert. Here, the first element is
10629 * 0, just remove it. To do this, we just pretend the array starts
10630 * one later */
10631
10632 array_b++;
10633 len_b--;
10634 }
10635 else {
10636
10637 /* But if the first element is not zero, we pretend the list starts
10638 * at the 0 that is always stored immediately before the array. */
10639 array_b--;
10640 len_b++;
10641 }
10642 }
10643
10644 return len_a == len_b
10645 && memEQ(array_a, array_b, len_a * sizeof(array_a[0]))(memcmp(((const void *) (array_a)), ((const void *) (array_b)
), len_a * sizeof(array_a[0])) == 0)
;
10646
10647}
10648#endif
10649
10650/*
10651 * As best we can, determine the characters that can match the start of
10652 * the given EXACTF-ish node. This is for use in creating ssc nodes, so there
10653 * can be false positive matches
10654 *
10655 * Returns the invlist as a new SV*; it is the caller's responsibility to
10656 * call SvREFCNT_dec() when done with it.
10657 */
10658STATICstatic SV*
10659S_make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
10660{
10661 dVARstruct Perl___notused_struct;
10662 const U8 * s = (U8*)STRING(node)((((node)->type) == 41 || ((node)->type) == 51) ? (((((
node)->type) == 41 || ((node)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 10662, __func__, "((node)->type) == 41 || ((node)->type) == 51"
)), (((struct regnode_lstring *)node)->string)) : (((((node
)->type) != 41 && ((node)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 10662, __func__, "((node)->type) != 41 && ((node)->type) != 51"
)), ((struct regnode_string *)node)->string))
;
10663 SSize_tssize_t bytelen = STR_LEN(node)((((node)->type) == 41 || ((node)->type) == 51) ? (((((
node)->type) == 41 || ((node)->type) == 51) ? (void)0 :
__assert2("re_comp.c", 10663, __func__, "((node)->type) == 41 || ((node)->type) == 51"
)), (((struct regnode_lstring *)node)->str_len)) : (((((node
)->type) != 41 && ((node)->type) != 51) ? (void
)0 : __assert2("re_comp.c", 10663, __func__, "((node)->type) != 41 && ((node)->type) != 51"
)), ((struct regnode_string *)node)->str_len))
;
10664 UV uc;
10665 /* Start out big enough for 2 separate code points */
10666 SV* invlist = _new_invlist(4)Perl__new_invlist( 4);
10667
10668 PERL_ARGS_ASSERT_MAKE_EXACTF_INVLIST((pRExC_state) ? (void)0 : __assert2("re_comp.c", 10668, __func__
, "pRExC_state")); ((node) ? (void)0 : __assert2("re_comp.c",
10668, __func__, "node"))
;
10669
10670 if (! UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
10671 uc = *s;
10672
10673 /* We punt and assume can match anything if the node begins
10674 * with a multi-character fold. Things are complicated. For
10675 * example, /ffi/i could match any of:
10676 * "\N{LATIN SMALL LIGATURE FFI}"
10677 * "\N{LATIN SMALL LIGATURE FF}I"
10678 * "F\N{LATIN SMALL LIGATURE FI}"
10679 * plus several other things; and making sure we have all the
10680 * possibilities is hard. */
10681 if (is_MULTI_CHAR_FOLD_latin1_safe(s, s + bytelen)( ((s + bytelen)-(s) > 2) ? ( ( ( ((const U8*)s)[0] & 0xDF
) == 0x46 ) ? ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 )
? ( ( ( ( ((const U8*)s)[2] & 0xDF ) == 0x49 ) || ( ( ((
const U8*)s)[2] & 0xDF ) == 0x4C ) ) ? 3 : 2 ) : ( ( ( ((
const U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[
1] & 0xDF ) == 0x4C ) ) ? 2 : 0 ) : ( ( ( ((const U8*)s)[
0] & 0xDF ) == 0x53 ) && ( ((((0x54) >= (0x53)
) ? (void)0 : __assert2("re_comp.c", 10681, __func__, "(0x54) >= (0x53)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x53
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10681, __func__
, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) - (0x53))) >=
0) ? (void)0 : __assert2("re_comp.c", 10681, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x53)) | 0))
) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x53)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10681, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10681, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x53)) | 0)
)) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x53)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "(NV) ((0x53)) >= 0")), (((NV) (((0x54)
- (0x53))) >= 0) ? (void)0 : __assert2("re_comp.c", 10681
, __func__, "(NV) (((0x54) - (0x53))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x53)) | 0))) <= (((U64
) ((((0x54) - (0x53))) | 0)))))))) || ((((0x74) >= (0x73))
? (void)0 : __assert2("re_comp.c", 10681, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10681, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 10681, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10681, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10681, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74)
- (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 10681
, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64
) ((((0x74) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): ((s + bytelen
)-(s) > 1) ? ( ( ( ((const U8*)s)[0] & 0xDF ) == 0x46 )
? ( ( ( ( ((const U8*)s)[1] & 0xDF ) == 0x46 ) || ( ( ((
const U8*)s)[1] & 0xDF ) == 0x49 ) || ( ( ((const U8*)s)[
1] & 0xDF ) == 0x4C ) ) ? 2 : 0 ) : ( ( ( ((const U8*)s)[
0] & 0xDF ) == 0x53 ) && ( ((((0x54) >= (0x53)
) ? (void)0 : __assert2("re_comp.c", 10681, __func__, "(0x54) >= (0x53)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x53
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10681, __func__
, "(NV) ((0x53)) >= 0")), (((NV) (((0x54) - (0x53))) >=
0) ? (void)0 : __assert2("re_comp.c", 10681, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x53)) | 0))
) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x53)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10681, __func__, "(NV) ((0x53)) >= 0"
)), (((NV) (((0x54) - (0x53))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10681, __func__, "(NV) (((0x54) - (0x53))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x53)) | 0)
)) <= (((U64) ((((0x54) - (0x53))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x53)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "(NV) ((0x53)) >= 0")), (((NV) (((0x54)
- (0x53))) >= 0) ? (void)0 : __assert2("re_comp.c", 10681
, __func__, "(NV) (((0x54) - (0x53))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x53)) | 0))) <= (((U64
) ((((0x54) - (0x53))) | 0)))))))) || ((((0x74) >= (0x73))
? (void)0 : __assert2("re_comp.c", 10681, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10681, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 10681, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10681, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10681, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10681, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74)
- (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 10681
, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64
) ((((0x74) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): 0 )
) {
10682 invlist = _add_range_to_invlist(invlist, 0, UV_MAX)Perl__add_range_to_invlist( invlist,0,(~(UV)0));
10683 }
10684 else {
10685 /* Any Latin1 range character can potentially match any
10686 * other depending on the locale, and in Turkic locales, U+130 and
10687 * U+131 */
10688 if (OP(node)((node)->type) == EXACTFL44) {
10689 _invlist_union(invlist, PL_Latin1, &invlist)Perl__invlist_union_maybe_complement_2nd( invlist,PL_Latin1,(
0),&invlist)
;
10690 invlist = add_cp_to_invlist(invlist,S_add_cp_to_invlist( invlist,0x131)
10691 LATIN_SMALL_LETTER_DOTLESS_I)S_add_cp_to_invlist( invlist,0x131);
10692 invlist = add_cp_to_invlist(invlist,S_add_cp_to_invlist( invlist,0x130)
10693 LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE)S_add_cp_to_invlist( invlist,0x130);
10694 }
10695 else {
10696 /* But otherwise, it matches at least itself. We can
10697 * quickly tell if it has a distinct fold, and if so,
10698 * it matches that as well */
10699 invlist = add_cp_to_invlist(invlist, uc)S_add_cp_to_invlist( invlist,uc);
10700 if (IS_IN_SOME_FOLD_L1(uc)((( (sizeof(uc) == 1) || !(((U64)((uc) | 0)) & ~0xFF)) &&
(PL_charclass[(U8) (uc)] & (1U << (22)))) ? (_Bool
)1 : (_Bool)0)
)
10701 invlist = add_cp_to_invlist(invlist, PL_fold_latin1[uc])S_add_cp_to_invlist( invlist,PL_fold_latin1[uc]);
10702 }
10703
10704 /* Some characters match above-Latin1 ones under /i. This
10705 * is true of EXACTFL ones when the locale is UTF-8 */
10706 if (HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(uc)((! ((( (sizeof(uc) == 1) || !(((U64)((uc) | 0)) & ~0xFF)
)) ? (_Bool)1 : (_Bool)0)) || (PL_charclass[(U8) (uc)] & (
1U << (19))))
10707 && (! isASCII(uc)((U64)((uc) | 0) < 128) || (OP(node)((node)->type) != EXACTFAA46
10708 && OP(node)((node)->type) != EXACTFAA_NO_TRIE49)))
10709 {
10710 add_above_Latin1_folds(pRExC_state, (U8) uc, &invlist)S_add_above_Latin1_folds( pRExC_state,(U8) uc,&invlist);
10711 }
10712 }
10713 }
10714 else { /* Pattern is UTF-8 */
10715 U8 folded[UTF8_MAX_FOLD_CHAR_EXPAND3 * UTF8_MAXBYTES_CASE(((13)>(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13))))?(13):(3 * ((((
U64)(0x10FFFF)) < (((U8) (0xFF << 6)) & 0xB0)) ?
1 : ((UV) (0x10FFFF) < (32 * (1U << ( 6))) ? 2 : (UV
) (0x10FFFF) < (16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF
) < ( 8 * (1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) <
( 4 * (1U << (4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 *
(1U << (5 * 6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U <<
(6 * 6)) ? 7 : 13))))
+ 1] = { '\0' };
10716 const U8* e = s + bytelen;
10717 IV fc;
10718
10719 fc = uc = utf8_to_uvchr_buf(s, s + bytelen, NULL)Perl_utf8_to_uvchr_buf_helper( (const U8 *) (s),(const U8 *) s
+ bytelen,((void*)0))
;
10720
10721 /* The only code points that aren't folded in a UTF EXACTFish
10722 * node are the problematic ones in EXACTFL nodes */
10723 if (OP(node)((node)->type) == EXACTFL44 && is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(uc)( uc <= 0xFF || ( 0xFF < uc && ( 0x130 == uc ||
( 0x130 < uc && ( 0x131 == uc || ( 0x131 < uc &&
( 0x149 == uc || ( 0x149 < uc && ( 0x178 == uc ||
( 0x178 < uc && ( 0x17F == uc || ( 0x17F < uc &&
( 0x1F0 == uc || ( 0x1F0 < uc && ( 0x2BC == uc ||
( 0x2BC < uc && ( 0x39C == uc || ( 0x39C < uc &&
( 0x3BC == uc || ( 0x3BC < uc && ( ((((0x1E9A) >=
(0x1E96)) ? (void)0 : __assert2("re_comp.c", 10723, __func__
, "(0x1E9A) >= (0x1E96)")), ( (sizeof(uc) == sizeof(U8)) ?
((((NV) ((0x1E96)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10723, __func__, "(NV) ((0x1E96)) >= 0")), (((NV) (((0x1E9A
) - (0x1E96))) >= 0) ? (void)0 : __assert2("re_comp.c", 10723
, __func__, "(NV) (((0x1E9A) - (0x1E96))) >= 0")), (((U64)
(((((U8) (uc)))) - (((0x1E96)) | 0))) <= (((U64) ((((0x1E9A
) - (0x1E96))) | 0))))) : (sizeof(uc) == sizeof(U32)) ? ((((NV
) ((0x1E96)) >= 0) ? (void)0 : __assert2("re_comp.c", 10723
, __func__, "(NV) ((0x1E96)) >= 0")), (((NV) (((0x1E9A) - (
0x1E96))) >= 0) ? (void)0 : __assert2("re_comp.c", 10723, __func__
, "(NV) (((0x1E9A) - (0x1E96))) >= 0")), (((U64) (((((U32)
(uc)))) - (((0x1E96)) | 0))) <= (((U64) ((((0x1E9A) - (0x1E96
))) | 0))))) : (((sizeof(uc) == sizeof(U64)) ? (void)0 : __assert2
("re_comp.c", 10723, __func__, "sizeof(uc) == sizeof(U64)")),
((((NV) ((0x1E96)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10723, __func__, "(NV) ((0x1E96)) >= 0")), (((NV) (((0x1E9A
) - (0x1E96))) >= 0) ? (void)0 : __assert2("re_comp.c", 10723
, __func__, "(NV) (((0x1E9A) - (0x1E96))) >= 0")), (((U64)
(((((U64) (uc)))) - (((0x1E96)) | 0))) <= (((U64) ((((0x1E9A
) - (0x1E96))) | 0)))))))) || ( 0x1E9A < uc && ( 0x1E9E
== uc || ( 0x1E9E < uc && ( 0x212A == uc || ( 0x212A
< uc && ( 0x212B == uc || ((((0xFB06) >= (0xFB00
)) ? (void)0 : __assert2("re_comp.c", 10723, __func__, "(0xFB06) >= (0xFB00)"
)), ( (sizeof(uc) == sizeof(U8)) ? ((((NV) ((0xFB00)) >= 0
) ? (void)0 : __assert2("re_comp.c", 10723, __func__, "(NV) ((0xFB00)) >= 0"
)), (((NV) (((0xFB06) - (0xFB00))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10723, __func__, "(NV) (((0xFB06) - (0xFB00))) >= 0"
)), (((U64) (((((U8) (uc)))) - (((0xFB00)) | 0))) <= (((U64
) ((((0xFB06) - (0xFB00))) | 0))))) : (sizeof(uc) == sizeof(U32
)) ? ((((NV) ((0xFB00)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10723, __func__, "(NV) ((0xFB00)) >= 0")), (((NV) (((0xFB06
) - (0xFB00))) >= 0) ? (void)0 : __assert2("re_comp.c", 10723
, __func__, "(NV) (((0xFB06) - (0xFB00))) >= 0")), (((U64)
(((((U32) (uc)))) - (((0xFB00)) | 0))) <= (((U64) ((((0xFB06
) - (0xFB00))) | 0))))) : (((sizeof(uc) == sizeof(U64)) ? (void
)0 : __assert2("re_comp.c", 10723, __func__, "sizeof(uc) == sizeof(U64)"
)), ((((NV) ((0xFB00)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10723, __func__, "(NV) ((0xFB00)) >= 0")), (((NV) (((0xFB06
) - (0xFB00))) >= 0) ? (void)0 : __assert2("re_comp.c", 10723
, __func__, "(NV) (((0xFB06) - (0xFB00))) >= 0")), (((U64)
(((((U64) (uc)))) - (((0xFB00)) | 0))) <= (((U64) ((((0xFB06
) - (0xFB00))) | 0)))))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
) ) ) ) ) ) ) ) )
) {
10724 /* We need to check for the possibility that this EXACTFL
10725 * node begins with a multi-char fold. Therefore we fold
10726 * the first few characters of it so that we can make that
10727 * check */
10728 U8 *d = folded;
10729 int i;
10730
10731 fc = -1;
10732 for (i = 0; i < UTF8_MAX_FOLD_CHAR_EXPAND3 && s < e; i++) {
10733 if (isASCII(*s)((U64)((*s) | 0) < 128)) {
10734 *(d++) = (U8) toFOLD(*s)((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 10734
, __func__, "('Z') >= ('A')")), ( (sizeof(*s) == sizeof(U8
)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10734, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 10734, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) (*s)))
) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))
: (sizeof(*s) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (
void)0 : __assert2("re_comp.c", 10734, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10734, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) (*s)))) - ((('A')) | 0))) <= (((U64) (((('Z') -
('A'))) | 0))))) : (((sizeof(*s) == sizeof(U64)) ? (void)0 :
__assert2("re_comp.c", 10734, __func__, "sizeof(*s) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10734, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 10734, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) (*s))
)) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))
)))) ? (U8)((*s) + ('a' - 'A')) : (*s))
;
10735 if (fc < 0) { /* Save the first fold */
10736 fc = *(d-1);
10737 }
10738 s++;
10739 }
10740 else {
10741 STRLEN len;
10742 UV fold = toFOLD_utf8_safe(s, e, d, &len)Perl__to_utf8_fold_flags( s,e,d,&len,0x2);
10743 if (fc < 0) { /* Save the first fold */
10744 fc = fold;
10745 }
10746 d += len;
10747 s += UTF8SKIP(s)PL_utf8skip[*(const U8*)(s)];
10748 }
10749 }
10750
10751 /* And set up so the code below that looks in this folded
10752 * buffer instead of the node's string */
10753 e = d;
10754 s = folded;
10755 }
10756
10757 /* When we reach here 's' points to the fold of the first
10758 * character(s) of the node; and 'e' points to far enough along
10759 * the folded string to be just past any possible multi-char
10760 * fold.
10761 *
10762 * Unlike the non-UTF-8 case, the macro for determining if a
10763 * string is a multi-char fold requires all the characters to
10764 * already be folded. This is because of all the complications
10765 * if not. Note that they are folded anyway, except in EXACTFL
10766 * nodes. Like the non-UTF case above, we punt if the node
10767 * begins with a multi-char fold */
10768
10769 if (is_MULTI_CHAR_FOLD_utf8_safe(s, e)( ((e)-(s) > 5) ? ( ( 0x61 == ((const U8*)s)[0] ) ? ( ( ( 0xCA
== ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2
] ) ) ? 3 : 0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( ( 0x66 ==
((const U8*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] || 0x6C ==
((const U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)s)[1] ||
0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == ((const U8
*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8*)s
)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 ==
((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)s)[0
] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == (
(const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s)[0] )
? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const
U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74)
- (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64
) ((((0x74) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((
const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) &&
( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const
U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const
U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 :
0 ) : ( 0xC5 == ((const U8*)s)[0] ) ? ( ( ( ( 0xBF == ((const
U8*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) &&
( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)s)[0] ) ? ( ( ( 0xBC == ((const U8*)s)[1] ) && (
0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const U8
*)s)[0] ) ? ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? (
( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)s)[1] || 0xB7
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? ( ( ( 0xCE == ((const U8*)s)
[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 ) : 0
) : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB9 == ((const U8*)s)[1] ) ? ( (
0xCC == ((const U8*)s)[2] ) ? ( ( 0x88 == ((const U8*)s)[3] )
? ( ( 0xCC == ((const U8*)s)[4] ) ? ( ( ((((0x81) >= (0x80
)) ? (void)0 : __assert2("re_comp.c", 10769, __func__, "(0x81) >= (0x80)"
)), ( (sizeof(((const U8*)s)[5]) == sizeof(U8)) ? ((((NV) ((0x80
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10769, __func__
, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) - (0x80))) >=
0) ? (void)0 : __assert2("re_comp.c", 10769, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[5])))) - (((0x80)) | 0))
) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "sizeof(((const U8*)s)[5]) == sizeof(U64)"
)), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81)
- (0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[5])))) - (((0x80)) | 0))) <= (((U64
) ((((0x81) - (0x80))) | 0)))))))) ) ? 6 : 0 ) : ( ( 0xCD == (
(const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) )
? 6 : 0 ) : 0 ) : ( ( 0xCD == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : 0 ) : ( 0xCF == (
(const U8*)s)[0] ) ? ( ( 0x81 == ((const U8*)s)[1] ) ? ( ( ( 0xCC
== ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3
] ) ) ? 4 : 0 ) : ( 0x85 == ((const U8*)s)[1] ) ? ( ( 0xCC ==
((const U8*)s)[2] ) ? ( ( 0x88 == ((const U8*)s)[3] ) ? ( ( 0xCC
== ((const U8*)s)[4] ) ? ( ( ((((0x81) >= (0x80)) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(0x81) >= (0x80)"
)), ( (sizeof(((const U8*)s)[5]) == sizeof(U8)) ? ((((NV) ((0x80
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10769, __func__
, "(NV) ((0x80)) >= 0")), (((NV) (((0x81) - (0x80))) >=
0) ? (void)0 : __assert2("re_comp.c", 10769, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[5])))) - (((0x80)) | 0))
) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "sizeof(((const U8*)s)[5]) == sizeof(U64)"
)), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81)
- (0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[5])))) - (((0x80)) | 0))) <= (((U64
) ((((0x81) - (0x80))) | 0)))))))) ) ? 6 : 0 ) : ( ( 0xCD == (
(const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) )
? 6 : 0 ) : ( 0x93 == ((const U8*)s)[3] ) ? ( ( 0xCC == ((const
U8*)s)[4] ) ? ( ( ((((0x81) >= (0x80)) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(0x81) >= (0x80)")), ( (sizeof
(((const U8*)s)[5]) == sizeof(U8)) ? ((((NV) ((0x80)) >= 0
) ? (void)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[5])))) - (((0x80)) | 0))
) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (sizeof(((const
U8*)s)[5]) == sizeof(U32)) ? ((((NV) ((0x80)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x80)) >= 0"
)), (((NV) (((0x81) - (0x80))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x81) - (0x80))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[5])))) - (((0x80)) | 0)
)) <= (((U64) ((((0x81) - (0x80))) | 0))))) : (((sizeof(((
const U8*)s)[5]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "sizeof(((const U8*)s)[5]) == sizeof(U64)"
)), ((((NV) ((0x80)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) ((0x80)) >= 0")), (((NV) (((0x81)
- (0x80))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) (((0x81) - (0x80))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[5])))) - (((0x80)) | 0))) <= (((U64
) ((((0x81) - (0x80))) | 0)))))))) ) ? 6 : 4 ) : ( ( 0xCD == (
(const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) )
? 6 : 4 ) : 0 ) : ( ( 0xCD == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x89 == ((const
U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? ( ( 0x82 == (
(const U8*)s)[3] ) ? ( ( ( 0xCE == ((const U8*)s)[4] ) &&
( 0xB9 == ((const U8*)s)[5] ) ) ? 6 : 4 ) : 0 ) : ( ( 0xCE ==
((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] )
) ? 4 : 0 ) : ( ( ( 0x8E == ((const U8*)s)[1] ) && (
0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8
*)s)[3] ) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)s)[0] ) ? ( ( 0xA5
== ((const U8*)s)[1] ) ? ( ( ( 0xD6 == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const
U8*)s)[1] ) ? ( ( ( 0xD5 == ((const U8*)s)[2] ) && (
( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)
s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 ) : ( (
( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8
*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0
) : ( 0xE1 == ((const U8*)s)[0] ) ? ( ( 0xBC == ((const U8*)
s)[1] ) ? ( ( ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) &&
( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const
U8*)s)[4] ) ) ? 5 : 0 ) : ( ( ( ( 0xBD == ((const U8*)s)[1] )
&& ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) ||
( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)
s)[2] == 0xBC ) ) && ( 0xCE == ((const U8*)s)[3] ) ) &&
( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 ) : 0 ) : ((e)-(s) >
4) ? ( ( 0x61 == ((const U8*)s)[0] ) ? ( ( ( 0xCA == ((const
U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 3 :
0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( ( 0x66 == ((const U8
*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const U8
*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)s)[1] || 0x6C == (
(const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == ((const U8*)s)[0] ) ?
( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const
U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8*)s)[0] ) ? ( (
( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8
*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)s)[0] ) ? ( ( (
0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*
)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s)[0] ) ? ( ( ((
((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const U8*)s)
[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0")), (((
NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= ((
(U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const U8*)s)[
1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0")), (((
NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (
((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((const U8*)
s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")), (((
(NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73
))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)s
)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8
*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )
: ( 0xC5 == ((const U8*)s)[0] ) ? ( ( ( ( 0xBF == ((const U8
*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) &&
( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)s)[0] ) ? ( ( ( 0xBC == ((const U8*)s)[1] ) && (
0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const U8
*)s)[0] ) ? ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? (
( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)s)[1] || 0xB7
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD ==
((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xCF == ((const U8*)s)[0] ) ? ( ( 0x81 == (
(const U8*)s)[1] ) ? ( ( ( 0xCC == ((const U8*)s)[2] ) &&
( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x85 == ((const
U8*)s)[1] ) ? ( ( 0xCC == ((const U8*)s)[2] ) ? ( ( 0x93 == (
(const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCD == ((const U8*)s)[2] )
&& ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x89
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE ==
((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)s)[0] ) ? ( ( 0xA5 == (
(const U8*)s)[1] ) ? ( ( ( 0xD6 == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const
U8*)s)[1] ) ? ( ( ( 0xD5 == ((const U8*)s)[2] ) && (
( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)
s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 ) : ( (
( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8
*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0
) : ( 0xE1 == ((const U8*)s)[0] ) ? ( ( 0xBC == ((const U8*)
s)[1] ) ? ( ( ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) &&
( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const
U8*)s)[4] ) ) ? 5 : 0 ) : ( ( ( ( 0xBD == ((const U8*)s)[1] )
&& ( ( ( ((const U8*)s)[2] & 0xF8 ) == 0xA0 ) ||
( ( ((const U8*)s)[2] & 0xFB ) == 0xB0 ) || ((const U8*)
s)[2] == 0xBC ) ) && ( 0xCE == ((const U8*)s)[3] ) ) &&
( 0xB9 == ((const U8*)s)[4] ) ) ? 5 : 0 ) : 0 ) : ( ((e)-(s)
> 3) ? ( ( 0x61 == ((const U8*)s)[0] ) ? ( ( ( 0xCA == ((
const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ?
3 : 0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( ( 0x66 == ((const
U8*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] || 0x6C == ((const
U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8*)s)[1] || 0x6C ==
((const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == ((const U8*)s)[0] )
? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const
U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const U8*)s)[0] ) ? ( (
( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8
*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8*)s)[0] ) ? ( ( (
0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*
)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s)[0] ) ? ( ( ((
((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const U8*)s)
[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0")), (((
NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= ((
(U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const U8*)s)[
1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0")), (((
NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64
) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (
((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((const U8*)
s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)")), (((
(NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73
))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769, __func__
, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((((U64) (((
const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64) ((((0x74
) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((const U8*)
s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const U8*)s
)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8
*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 : 0 )
: ( 0xC5 == ((const U8*)s)[0] ) ? ( ( ( ( 0xBF == ((const U8
*)s)[1] ) && ( 0xC5 == ((const U8*)s)[2] ) ) &&
( 0xBF == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xCA == ((const
U8*)s)[0] ) ? ( ( ( 0xBC == ((const U8*)s)[1] ) && (
0x6E == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0xCE == ((const U8
*)s)[0] ) ? ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? (
( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const
U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB1 == ((const U8*)s)[1] || 0xB7
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD ==
((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xCF == ((const U8*)s)[0] ) ? ( ( 0x81 == (
(const U8*)s)[1] ) ? ( ( ( 0xCC == ((const U8*)s)[2] ) &&
( 0x93 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x85 == ((const
U8*)s)[1] ) ? ( ( 0xCC == ((const U8*)s)[2] ) ? ( ( 0x93 == (
(const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCD == ((const U8*)s)[2] )
&& ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0x89
== ((const U8*)s)[1] ) ? ( ( 0xCD == ((const U8*)s)[2] ) ? (
( 0x82 == ((const U8*)s)[3] ) ? 4 : 0 ) : ( ( 0xCE == ((const
U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 4 :
0 ) : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE ==
((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3]
) ) ? 4 : 0 ) : ( 0xD5 == ((const U8*)s)[0] ) ? ( ( 0xA5 == (
(const U8*)s)[1] ) ? ( ( ( 0xD6 == ((const U8*)s)[2] ) &&
( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 0 ) : ( 0xB4 == ((const
U8*)s)[1] ) ? ( ( ( 0xD5 == ((const U8*)s)[2] ) && (
( ( ((const U8*)s)[3] & 0xF7 ) == 0xA5 ) || ((const U8*)
s)[3] == 0xAB || ((const U8*)s)[3] == 0xB6 ) ) ? 4 : 0 ) : ( (
( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8
*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 4 : 0
) : 0 ) : ((e)-(s) > 2) ? ( ( 0x61 == ((const U8*)s)[0] )
? ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const
U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x66 == ((const U8*)s)[0] ) ? ( (
0x66 == ((const U8*)s)[1] ) ? ( ( 0x69 == ((const U8*)s)[2] ||
0x6C == ((const U8*)s)[2] ) ? 3 : 2 ) : ( 0x69 == ((const U8
*)s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : ( 0x68 == (
(const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) &&
( 0xB1 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x69 == ((const
U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && (
0x87 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x6A == ((const U8
*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C
== ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x73 == ((const U8*)s
)[0] ) ? ( ( ((((0x74) >= (0x73)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(0x74) >= (0x73)")), ( (sizeof(((const
U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74)
- (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64
) ((((0x74) - (0x73))) | 0)))))))) ) ? 2 : 0 ) : ( 0x74 == ((
const U8*)s)[0] ) ? ( ( ( 0xCC == ((const U8*)s)[1] ) &&
( 0x88 == ((const U8*)s)[2] ) ) ? 3 : 0 ) : ( 0x77 == ((const
U8*)s)[0] || 0x79 == ((const U8*)s)[0] ) ? ( ( ( 0xCC == ((const
U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 3 :
0 ) : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC ==
((const U8*)s)[1] ) ) && ( 0x6E == ((const U8*)s)[2]
) ) ? 3 : 0 ): ((e)-(s) > 1) ? ( ( 0x66 == ((const U8*)s)
[0] ) ? ( ( 0x66 == ((const U8*)s)[1] || 0x69 == ((const U8*)
s)[1] || 0x6C == ((const U8*)s)[1] ) ? 2 : 0 ) : ( ( 0x73 == (
(const U8*)s)[0] ) && ( ((((0x74) >= (0x73)) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(0x74) >= (0x73)"
)), ( (sizeof(((const U8*)s)[1]) == sizeof(U8)) ? ((((NV) ((0x73
)) >= 0) ? (void)0 : __assert2("re_comp.c", 10769, __func__
, "(NV) ((0x73)) >= 0")), (((NV) (((0x74) - (0x73))) >=
0) ? (void)0 : __assert2("re_comp.c", 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U8) (((const U8*)s)[1])))) - (((0x73)) | 0))
) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (sizeof(((const
U8*)s)[1]) == sizeof(U32)) ? ((((NV) ((0x73)) >= 0) ? (void
)0 : __assert2("re_comp.c", 10769, __func__, "(NV) ((0x73)) >= 0"
)), (((NV) (((0x74) - (0x73))) >= 0) ? (void)0 : __assert2
("re_comp.c", 10769, __func__, "(NV) (((0x74) - (0x73))) >= 0"
)), (((U64) (((((U32) (((const U8*)s)[1])))) - (((0x73)) | 0)
)) <= (((U64) ((((0x74) - (0x73))) | 0))))) : (((sizeof(((
const U8*)s)[1]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "sizeof(((const U8*)s)[1]) == sizeof(U64)"
)), ((((NV) ((0x73)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10769, __func__, "(NV) ((0x73)) >= 0")), (((NV) (((0x74)
- (0x73))) >= 0) ? (void)0 : __assert2("re_comp.c", 10769
, __func__, "(NV) (((0x74) - (0x73))) >= 0")), (((U64) (((
((U64) (((const U8*)s)[1])))) - (((0x73)) | 0))) <= (((U64
) ((((0x74) - (0x73))) | 0)))))))) ) ) ? 2 : 0 ): 0 ) )
) {
10770 invlist = _add_range_to_invlist(invlist, 0, UV_MAX)Perl__add_range_to_invlist( invlist,0,(~(UV)0));
10771 }
10772 else { /* Single char fold */
10773 unsigned int k;
10774 U32 first_fold;
10775 const U32 * remaining_folds;
10776 Size_tsize_t folds_count;
10777
10778 /* It matches itself */
10779 invlist = add_cp_to_invlist(invlist, fc)S_add_cp_to_invlist( invlist,fc);
10780
10781 /* ... plus all the things that fold to it, which are found in
10782 * PL_utf8_foldclosures */
10783 folds_count = _inverse_folds(fc, &first_fold,Perl__inverse_folds( fc,&first_fold,&remaining_folds)
10784 &remaining_folds)Perl__inverse_folds( fc,&first_fold,&remaining_folds);
10785 for (k = 0; k < folds_count; k++) {
10786 UV c = (k == 0) ? first_fold : remaining_folds[k-1];
10787
10788 /* /aa doesn't allow folds between ASCII and non- */
10789 if ( (OP(node)((node)->type) == EXACTFAA46 || OP(node)((node)->type) == EXACTFAA_NO_TRIE49)
10790 && isASCII(c)((U64)((c) | 0) < 128) != isASCII(fc)((U64)((fc) | 0) < 128))
10791 {
10792 continue;
10793 }
10794
10795 invlist = add_cp_to_invlist(invlist, c)S_add_cp_to_invlist( invlist,c);
10796 }
10797
10798 if (OP(node)((node)->type) == EXACTFL44) {
10799
10800 /* If either [iI] are present in an EXACTFL node the above code
10801 * should have added its normal case pair, but under a Turkish
10802 * locale they could match instead the case pairs from it. Add
10803 * those as potential matches as well */
10804 if (isALPHA_FOLD_EQ(fc, 'I')((((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 10804
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(fc))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 10804, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10804, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U8) ((~('A' ^ 'a') & (fc)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') &
(fc))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 10804, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10804, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) ((~('A' ^ 'a') & (fc)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a'
) & (fc))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 10804, __func__, "sizeof((~('A' ^ 'a') & (fc))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10804, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 10804, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (fc)))))) - ((('A')) | 0))) <= (((U64) (((('Z'
) - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2
("re_comp.c", 10804, __func__, "('Z') >= ('A')")), ( (sizeof
((~('A' ^ 'a') & ('I'))) == sizeof(U8)) ? ((((NV) (('A'))
>= 0) ? (void)0 : __assert2("re_comp.c", 10804, __func__,
"(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))) >= 0) ?
(void)0 : __assert2("re_comp.c", 10804, __func__, "(NV) ((('Z') - ('A'))) >= 0"
)), (((U64) (((((U8) ((~('A' ^ 'a') & ('I')))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof
((~('A' ^ 'a') & ('I'))) == sizeof(U32)) ? ((((NV) (('A')
) >= 0) ? (void)0 : __assert2("re_comp.c", 10804, __func__
, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))) >= 0)
? (void)0 : __assert2("re_comp.c", 10804, __func__, "(NV) ((('Z') - ('A'))) >= 0"
)), (((U64) (((((U32) ((~('A' ^ 'a') & ('I')))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof
((~('A' ^ 'a') & ('I'))) == sizeof(U64)) ? (void)0 : __assert2
("re_comp.c", 10804, __func__, "sizeof((~('A' ^ 'a') & ('I'))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 10804, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 10804, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & ('I')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))))))) ? (void)0 : __assert2("re_comp.c"
, 10804, __func__, "(((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & (fc))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & (fc)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & (fc))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & (fc)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & (fc))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"sizeof((~('A' ^ 'a') & (fc))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & (fc)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & ('I'))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & ('I')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('I'))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & ('I')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & ('I'))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"sizeof((~('A' ^ 'a') & ('I'))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 10804, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & ('I')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))"
)), ((fc) & ~('A' ^ 'a')) == (('I') & ~('A' ^ 'a')))
) {
10805 invlist = add_cp_to_invlist(invlist,S_add_cp_to_invlist( invlist,0x131)
10806 LATIN_SMALL_LETTER_DOTLESS_I)S_add_cp_to_invlist( invlist,0x131);
10807 invlist = add_cp_to_invlist(invlist,S_add_cp_to_invlist( invlist,0x130)
10808 LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE)S_add_cp_to_invlist( invlist,0x130);
10809 }
10810 else if (fc == LATIN_SMALL_LETTER_DOTLESS_I0x131) {
10811 invlist = add_cp_to_invlist(invlist, 'I')S_add_cp_to_invlist( invlist,'I');
10812 }
10813 else if (fc == LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE0x130) {
10814 invlist = add_cp_to_invlist(invlist, 'i')S_add_cp_to_invlist( invlist,'i');
10815 }
10816 }
10817 }
10818 }
10819
10820 return invlist;
10821}
10822
10823#undef HEADER_LENGTH
10824#undef TO_INTERNAL_SIZE
10825#undef FROM_INTERNAL_SIZE
10826#undef INVLIST_VERSION_ID
10827
10828/* End of inversion list object */
10829
10830STATICstatic void
10831S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
10832{
10833 /* This parses the flags that are in either the '(?foo)' or '(?foo:bar)'
10834 * constructs, and updates RExC_flags with them. On input, RExC_parse
10835 * should point to the first flag; it is updated on output to point to the
10836 * final ')' or ':'. There needs to be at least one flag, or this will
10837 * abort */
10838
10839 /* for (?g), (?gc), and (?o) warnings; warning
10840 about (?c) will warn about (?g) -- japhy */
10841
10842#define WASTED_O0x01 0x01
10843#define WASTED_G0x02 0x02
10844#define WASTED_C0x04 0x04
10845#define WASTED_GC(0x02|0x04) (WASTED_G0x02|WASTED_C0x04)
10846 I32 wastedflags = 0x00;
10847 U32 posflags = 0, negflags = 0;
10848 U32 *flagsp = &posflags;
10849 char has_charset_modifier = '\0';
10850 regex_charset cs;
10851 bool_Bool has_use_defaults = FALSE(0);
10852 const char* const seqstart = RExC_parse(pRExC_state->parse) - 1; /* Point to the '?' */
10853 int x_mod_count = 0;
10854
10855 PERL_ARGS_ASSERT_PARSE_LPAREN_QUESTION_FLAGS((pRExC_state) ? (void)0 : __assert2("re_comp.c", 10855, __func__
, "pRExC_state"))
;
10856
10857 /* '^' as an initial flag sets certain defaults */
10858 if (UCHARAT(RExC_parse)((int)*(const U8*)((pRExC_state->parse))) == '^') {
10859 RExC_parse(pRExC_state->parse)++;
10860 has_use_defaults = TRUE(1);
10861 STD_PMMOD_FLAGS_CLEAR(&RExC_flags)*(&(pRExC_state->flags)) &= ~((1U << (0 +2))
|(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +3
))|(1U << (0 +4))|(7U << (((0)+7)))|(1U << (
0 +5)))
;
10862 cs = (toUSE_UNI_CHARSET_NOT_DEPENDS((pRExC_state->uni_semantics) || (((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0))
)
10863 ? REGEX_UNICODE_CHARSET
10864 : REGEX_DEPENDS_CHARSET;
10865 set_regex_charset(&RExC_flags(pRExC_state->flags), cs);
10866 }
10867 else {
10868 cs = get_regex_charset(RExC_flags(pRExC_state->flags));
10869 if ( cs == REGEX_DEPENDS_CHARSET
10870 && (toUSE_UNI_CHARSET_NOT_DEPENDS((pRExC_state->uni_semantics) || (((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0))
))
10871 {
10872 cs = REGEX_UNICODE_CHARSET;
10873 }
10874 }
10875
10876 while (RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end)) {
10877 /* && memCHRs("iogcmsx", *RExC_parse) */
10878 /* (?g), (?gc) and (?o) are useless here
10879 and must be globally applied -- japhy */
10880 if ((RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17)))) {
10881 if (flagsp == & negflags) {
10882 if (*RExC_parse(pRExC_state->parse) == 'm') {
10883 RExC_parse(pRExC_state->parse)++;
10884 /* diag_listed_as: Use of %s is not allowed in Unicode
10885 property wildcard subpatterns in regex; marked by <--
10886 HERE in m/%s/ */
10887 vFAIL("Use of modifier '-m' is not allowed in Unicode"do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Use of modifier '-m' is not allowed in Unicode"
" property wildcard subpatterns", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10888, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
10888 " property wildcard subpatterns")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Use of modifier '-m' is not allowed in Unicode"
" property wildcard subpatterns", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10888, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
10889 }
10890 }
10891 else {
10892 if (*RExC_parse(pRExC_state->parse) == 's') {
10893 goto modifier_illegal_in_wildcard;
10894 }
10895 }
10896 }
10897
10898 switch (*RExC_parse(pRExC_state->parse)) {
10899
10900 /* Code for the imsxn flags */
10901 CASE_STD_PMMOD_FLAGS_PARSE_SET(flagsp, x_mod_count)case 'i': *(flagsp) |= (1U << (0 +2)); break; case 'm':
*(flagsp) |= (1U << (0 +0)); break; case 's': *(flagsp
) |= (1U << (0 +1)); break; case 'x': if (x_mod_count ==
0) { *(flagsp) |= (1U << (0 +3)); *(flagsp) &= ~(1U
<< (0 +4)); } else { *(flagsp) |= (1U << (0 +3))
|(1U << (0 +4)); } (x_mod_count)++; break; case 'n': *
(flagsp) |= (1U << (0 +5)); break;
;
10902
10903 case LOCALE_PAT_MOD'l':
10904 if (has_charset_modifier) {
10905 goto excess_modifier;
10906 }
10907 else if (flagsp == &negflags) {
10908 goto neg_modifier;
10909 }
10910 cs = REGEX_LOCALE_CHARSET;
10911 has_charset_modifier = LOCALE_PAT_MOD'l';
10912 break;
10913 case UNICODE_PAT_MOD'u':
10914 if (has_charset_modifier) {
10915 goto excess_modifier;
10916 }
10917 else if (flagsp == &negflags) {
10918 goto neg_modifier;
10919 }
10920 cs = REGEX_UNICODE_CHARSET;
10921 has_charset_modifier = UNICODE_PAT_MOD'u';
10922 break;
10923 case ASCII_RESTRICT_PAT_MOD'a':
10924 if (flagsp == &negflags) {
10925 goto neg_modifier;
10926 }
10927 if (has_charset_modifier) {
10928 if (cs != REGEX_ASCII_RESTRICTED_CHARSET) {
10929 goto excess_modifier;
10930 }
10931 /* Doubled modifier implies more restricted */
10932 cs = REGEX_ASCII_MORE_RESTRICTED_CHARSET;
10933 }
10934 else {
10935 cs = REGEX_ASCII_RESTRICTED_CHARSET;
10936 }
10937 has_charset_modifier = ASCII_RESTRICT_PAT_MOD'a';
10938 break;
10939 case DEPENDS_PAT_MOD'd':
10940 if (has_use_defaults) {
10941 goto fail_modifiers;
10942 }
10943 else if (flagsp == &negflags) {
10944 goto neg_modifier;
10945 }
10946 else if (has_charset_modifier) {
10947 goto excess_modifier;
10948 }
10949
10950 /* The dual charset means unicode semantics if the
10951 * pattern (or target, not known until runtime) are
10952 * utf8, or something in the pattern indicates unicode
10953 * semantics */
10954 cs = (toUSE_UNI_CHARSET_NOT_DEPENDS((pRExC_state->uni_semantics) || (((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0))
)
10955 ? REGEX_UNICODE_CHARSET
10956 : REGEX_DEPENDS_CHARSET;
10957 has_charset_modifier = DEPENDS_PAT_MOD'd';
10958 break;
10959 excess_modifier:
10960 RExC_parse(pRExC_state->parse)++;
10961 if (has_charset_modifier == ASCII_RESTRICT_PAT_MOD'a') {
10962 vFAIL2("Regexp modifier \"%c\" may appear a maximum of twice", ASCII_RESTRICT_PAT_MOD)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Regexp modifier \"%c\" may appear a maximum of twice"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", 'a', (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10962, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
10963 }
10964 else if (has_charset_modifier == *(RExC_parse(pRExC_state->parse) - 1)) {
10965 vFAIL2("Regexp modifier \"%c\" may not appear twice",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Regexp modifier \"%c\" may not appear twice"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", *((pRExC_state->
parse) - 1), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10966, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
10966 *(RExC_parse - 1))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Regexp modifier \"%c\" may not appear twice"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", *((pRExC_state->
parse) - 1), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10966, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
10967 }
10968 else {
10969 vFAIL3("Regexp modifiers \"%c\" and \"%c\" are mutually exclusive", has_charset_modifier, *(RExC_parse - 1))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Regexp modifiers \"%c\" and \"%c\" are mutually exclusive"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", has_charset_modifier
, *((pRExC_state->parse) - 1), (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10969, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
10970 }
10971 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 10971
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
10972 neg_modifier:
10973 RExC_parse(pRExC_state->parse)++;
10974 vFAIL2("Regexp modifier \"%c\" may not appear after the \"-\"",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Regexp modifier \"%c\" may not appear after the \"-\""
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", *((pRExC_state->
parse) - 1), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10975, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
10975 *(RExC_parse - 1))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Regexp modifier \"%c\" may not appear after the \"-\""
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", *((pRExC_state->
parse) - 1), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 10975, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
10976 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 10976
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
10977 case GLOBAL_PAT_MOD'g': /* 'g' */
10978 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
10979 goto modifier_illegal_in_wildcard;
10980 }
10981 /*FALLTHROUGH*/
10982 case ONCE_PAT_MOD'o': /* 'o' */
10983 if (ckWARN(WARN_REGEXP)Perl_ckwarn( (20 ))) {
10984 const I32 wflagbit = *RExC_parse(pRExC_state->parse) == 'o'
10985 ? WASTED_O0x01
10986 : WASTED_G0x02;
10987 if (! (wastedflags & wflagbit) ) {
10988 wastedflags |= wflagbit;
10989 /* diag_listed_as: Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/ */
10990 vWARN5(do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10991 RExC_parse + 1,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10992 "Useless (%s%c) - %suse /%c modifier",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10993 flagsp == &negflags ? "?-" : "?",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10994 *RExC_parse,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10995 flagsp == &negflags ? "don't " : "",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10996 *RExC_parsedo { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
10997 )do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 10997, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%s%c) - %suse /%c modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", *(pRExC_state
->parse), flagsp == &negflags ? "don't " : "", *(pRExC_state
->parse), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 10997, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
;
10998 }
10999 }
11000 break;
11001
11002 case CONTINUE_PAT_MOD'c': /* 'c' */
11003 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
11004 goto modifier_illegal_in_wildcard;
11005 }
11006 if (ckWARN(WARN_REGEXP)Perl_ckwarn( (20 ))) {
11007 if (! (wastedflags & WASTED_C0x04) ) {
11008 wastedflags |= WASTED_GC(0x02|0x04);
11009 /* diag_listed_as: Useless (?-%s) - don't use /%s modifier in regex; marked by <-- HERE in m/%s/ */
11010 vWARN3(do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11015, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%sc) - %suse /gc modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", flagsp
== &negflags ? "don't " : "", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11015, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
11011 RExC_parse + 1,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11015, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%sc) - %suse /gc modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", flagsp
== &negflags ? "don't " : "", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11015, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
11012 "Useless (%sc) - %suse /gc modifier",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11015, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%sc) - %suse /gc modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", flagsp
== &negflags ? "don't " : "", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11015, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
11013 flagsp == &negflags ? "?-" : "?",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11015, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%sc) - %suse /gc modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", flagsp
== &negflags ? "don't " : "", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11015, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
11014 flagsp == &negflags ? "don't " : ""do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11015, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%sc) - %suse /gc modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", flagsp
== &negflags ? "don't " : "", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11015, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
11015 )do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11015, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_warner
( (20 ), "Useless (%sc) - %suse /gc modifier" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", flagsp == &negflags ? "?-" : "?", flagsp
== &negflags ? "don't " : "", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11015, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
;
11016 }
11017 }
11018 break;
11019 case KEEPCOPY_PAT_MOD'p': /* 'p' */
11020 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
11021 goto modifier_illegal_in_wildcard;
11022 }
11023 if (flagsp == &negflags) {
11024 ckWARNreg(RExC_parse + 1,"Useless use of (?-p)")do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 11024, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Useless use of (?-p)" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) : (Perl_croak
( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11024, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))) - (pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state
->latest_warn_offset ))) { (pRExC_state->latest_warn_offset
) = ((((pRExC_state->precomp))>(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
)))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))))?((pRExC_state
->precomp_end)):(((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))))
))) - (pRExC_state->precomp); } } while (0); } } while (0)
;
11025 } else {
11026 *flagsp |= RXf_PMf_KEEPCOPY(1U << (0 +6));
11027 }
11028 break;
11029 case '-':
11030 /* A flag is a default iff it is following a minus, so
11031 * if there is a minus, it means will be trying to
11032 * re-specify a default which is an error */
11033 if (has_use_defaults || flagsp == &negflags) {
11034 goto fail_modifiers;
11035 }
11036 flagsp = &negflags;
11037 wastedflags = 0; /* reset so (?g-c) warns twice */
11038 x_mod_count = 0;
11039 break;
11040 case ':':
11041 case ')':
11042
11043 if ( (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17)))
11044 && cs != REGEX_ASCII_MORE_RESTRICTED_CHARSET)
11045 {
11046 RExC_parse(pRExC_state->parse)++;
11047 /* diag_listed_as: Use of %s is not allowed in Unicode
11048 property wildcard subpatterns in regex; marked by <--
11049 HERE in m/%s/ */
11050 vFAIL2("Use of modifier '%c' is not allowed in Unicode"do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Use of modifier '%c' is not allowed in Unicode"
" property wildcard subpatterns" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", has_charset_modifier, (int)(((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11052, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
11051 " property wildcard subpatterns",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Use of modifier '%c' is not allowed in Unicode"
" property wildcard subpatterns" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", has_charset_modifier, (int)(((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11052, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
11052 has_charset_modifier)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Use of modifier '%c' is not allowed in Unicode"
" property wildcard subpatterns" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", has_charset_modifier, (int)(((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11052, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
11053 }
11054
11055 if ((posflags & (RXf_PMf_EXTENDED(1U << (0 +3))|RXf_PMf_EXTENDED_MORE(1U << (0 +4)))) == RXf_PMf_EXTENDED(1U << (0 +3))) {
11056 negflags |= RXf_PMf_EXTENDED_MORE(1U << (0 +4));
11057 }
11058 RExC_flags(pRExC_state->flags) |= posflags;
11059
11060 if (negflags & RXf_PMf_EXTENDED(1U << (0 +3))) {
11061 negflags |= RXf_PMf_EXTENDED_MORE(1U << (0 +4));
11062 }
11063 RExC_flags(pRExC_state->flags) &= ~negflags;
11064 set_regex_charset(&RExC_flags(pRExC_state->flags), cs);
11065
11066 return;
11067 default:
11068 fail_modifiers:
11069 RExC_parse(pRExC_state->parse) += SKIP_IF_CHAR(RExC_parse, RExC_end)(!*((pRExC_state->parse)) ? 0 : (((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0) ? (((((pRExC_state->end)) >= ((pRExC_state
->parse))) ? (void)0 : __assert2("re_comp.c", 11069, __func__
, "((pRExC_state->end)) >= ((pRExC_state->parse))"))
, (((pRExC_state->end)) - ((pRExC_state->parse))) <=
0 ? 0 : ((((((pRExC_state->end)) - ((pRExC_state->parse
))))<(PL_utf8skip[*(const U8*)((pRExC_state->parse))]))
?((((pRExC_state->end)) - ((pRExC_state->parse)))):(PL_utf8skip
[*(const U8*)((pRExC_state->parse))]))) : 1)
;
11070 /* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
11071 vFAIL2utf8f("Sequence (%" UTF8f "...) not recognized",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%" "d%" "lu" "%4p"
"...) not recognized" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((pRExC_state->parse)-seqstart), (void
*)(seqstart), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11072, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11072 UTF8fARG(UTF, RExC_parse-seqstart, seqstart))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%" "d%" "lu" "%4p"
"...) not recognized" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((pRExC_state->parse)-seqstart), (void
*)(seqstart), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11072, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
11073 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 11073
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
11074 }
11075
11076 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))] : 1;
11077 }
11078
11079 vFAIL("Sequence (?... not terminated")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Sequence (?... not terminated", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11079, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11080
11081 modifier_illegal_in_wildcard:
11082 RExC_parse(pRExC_state->parse)++;
11083 /* diag_listed_as: Use of %s is not allowed in Unicode property wildcard
11084 subpatterns in regex; marked by <-- HERE in m/%s/ */
11085 vFAIL2("Use of modifier '%c' is not allowed in Unicode property wildcard"do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Use of modifier '%c' is not allowed in Unicode property wildcard"
" subpatterns" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", *((
pRExC_state->parse) - 1), (int)(((((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11086, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
11086 " subpatterns", *(RExC_parse - 1))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Use of modifier '%c' is not allowed in Unicode property wildcard"
" subpatterns" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", *((
pRExC_state->parse) - 1), (int)(((((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11086, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
11087}
11088
11089/*
11090 - reg - regular expression, i.e. main body or parenthesized thing
11091 *
11092 * Caller must absorb opening parenthesis.
11093 *
11094 * Combining parenthesis handling with the base level of regular expression
11095 * is a trifle forced, but the need to tie the tails of the branches to what
11096 * follows makes it hard to avoid.
11097 */
11098#define REGTAIL(x,y,z)S_regtail( (x),(y),(z),depth+1) regtail((x),(y),(z),depth+1)S_regtail( (x),(y),(z),depth+1)
11099#ifdef DEBUGGING
11100#define REGTAIL_STUDY(x,y,z)S_regtail_study( (x),(y),(z),depth+1) regtail_study((x),(y),(z),depth+1)S_regtail_study( (x),(y),(z),depth+1)
11101#else
11102#define REGTAIL_STUDY(x,y,z)S_regtail_study( (x),(y),(z),depth+1) regtail((x),(y),(z),depth+1)S_regtail( (x),(y),(z),depth+1)
11103#endif
11104
11105STATICstatic regnode_offset
11106S_handle_named_backref(pTHX_ RExC_state_t *pRExC_state,
11107 I32 *flagp,
11108 char * parse_start,
11109 char ch
11110 )
11111{
11112 regnode_offset ret;
11113 char* name_start = RExC_parse(pRExC_state->parse);
11114 U32 num = 0;
11115 SV *sv_dat = reg_scan_name(pRExC_state, REG_RSN_RETURN_DATA)S_reg_scan_name( pRExC_state,2);
11116 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11116, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 11116, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
11117
11118 PERL_ARGS_ASSERT_HANDLE_NAMED_BACKREF((pRExC_state) ? (void)0 : __assert2("re_comp.c", 11118, __func__
, "pRExC_state")); ((flagp) ? (void)0 : __assert2("re_comp.c"
, 11118, __func__, "flagp")); ((parse_start) ? (void)0 : __assert2
("re_comp.c", 11118, __func__, "parse_start"))
;
11119
11120 if (RExC_parse(pRExC_state->parse) == name_start || *RExC_parse(pRExC_state->parse) != ch) {
11121 /* diag_listed_as: Sequence \%s... not terminated in regex; marked by <-- HERE in m/%s/ */
11122 vFAIL2("Sequence %.3s... not terminated", parse_start)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence %.3s... not terminated"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", parse_start, (int)(
((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1
: (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11122, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11123 }
11124
11125 if (sv_dat) {
11126 num = add_dataS_add_data( pRExC_state, STR_WITH_LEN("S")("" "S" ""), (sizeof("S")-1));
11127 RExC_rxi(pRExC_state->rxi)->data->data[num]=(void*)sv_dat;
11128 SvREFCNT_inc_simple_void_NN(sv_dat)(void)(++(((SV *)({ void *_p = (sv_dat); _p; })))->sv_refcnt
)
;
11129 }
11130 RExC_sawback(pRExC_state->sawback) = 1;
11131 ret = reganode(pRExC_state,S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11132 ((! FOLD)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11133 ? REFNS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11134 : (ASCII_FOLD_RESTRICTED)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11135 ? REFFANS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11136 : (AT_LEAST_UNI_SEMANTICS)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11137 ? REFFUNS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11138 : (LOC)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11139 ? REFFLNS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11140 : REFFN),S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
11141 num)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 72 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 76 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 75 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 74 : 73),num)
;
11142 *flagp |= HASWIDTH0x01;
11143
11144 Set_Node_Offset(REGNODE_p(ret), parse_start+1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 11144, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start+1)-(pRExC_state->start))
);} while (0); if((((((pRExC_state->emit_start) + (ret))) -
(pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start+1)-(pRExC_state->start
)); } } while (0)
;
11145 Set_Node_Cur_Length(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 11145, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - parse_start));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - parse_start)
; } } while (0)
;
11146
11147 nextchar(pRExC_state)S_nextchar( pRExC_state);
11148 return ret;
11149}
11150
11151/* On success, returns the offset at which any next node should be placed into
11152 * the regex engine program being compiled.
11153 *
11154 * Returns 0 otherwise, with *flagp set to indicate why:
11155 * TRYAGAIN at the end of (?) that only sets flags.
11156 * RESTART_PARSE if the parse needs to be restarted, or'd with
11157 * NEED_UTF8 if the pattern needs to be upgraded to UTF-8.
11158 * Otherwise would only return 0 if regbranch() returns 0, which cannot
11159 * happen. */
11160STATICstatic regnode_offset
11161S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
11162 /* paren: Parenthesized? 0=top; 1,2=inside '(': changed to letter.
11163 * 2 is like 1, but indicates that nextchar() has been called to advance
11164 * RExC_parse beyond the '('. Things like '(?' are indivisible tokens, and
11165 * this flag alerts us to the need to check for that */
11166{
11167 regnode_offset ret = 0; /* Will be the head of the group. */
11168 regnode_offset br;
11169 regnode_offset lastbr;
11170 regnode_offset ender = 0;
11171 I32 parno = 0;
11172 I32 flags;
11173 U32 oregflags = RExC_flags(pRExC_state->flags);
11174 bool_Bool have_branch = 0;
11175 bool_Bool is_open = 0;
11176 I32 freeze_paren = 0;
11177 I32 after_freeze = 0;
11178 I32 num; /* numeric backreferences */
11179 SV * max_open; /* Max number of unclosed parens */
11180 I32 was_in_lookaround = RExC_in_lookaround(pRExC_state->in_lookaround);
11181
11182 char * parse_start = RExC_parse(pRExC_state->parse); /* MJD */
11183 char * const oregcomp_parse = RExC_parse(pRExC_state->parse);
11184
11185 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11185, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 11185, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
11186
11187 PERL_ARGS_ASSERT_REG((pRExC_state) ? (void)0 : __assert2("re_comp.c", 11187, __func__
, "pRExC_state")); ((flagp) ? (void)0 : __assert2("re_comp.c"
, 11187, __func__, "flagp"))
;
11188 DEBUG_PARSE("reg ")do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (("reg ")) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
;
11189
11190 max_open = get_sv(RE_COMPILE_RECURSION_LIMIT, GV_ADD)Perl_get_sv( "\022E_COMPILE_RECURSION_LIMIT",0x01);
11191 assert(max_open)((max_open) ? (void)0 : __assert2("re_comp.c", 11191, __func__
, "max_open"))
;
11192 if (!SvIOK(max_open)((max_open)->sv_flags & 0x00000100)) {
11193 sv_setiv(max_open, RE_COMPILE_RECURSION_INIT)Perl_sv_setiv( max_open,1000);
11194 }
11195 if (depth > 4 * (UV) SvIV(max_open)((((max_open)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? (*({ const SV *const _svivx = (const SV *)(max_open); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 11195, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11195, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( max_open,2))
) { /* We increase depth by 4 for each
11196 open paren */
11197 vFAIL("Too many nested open parens")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Too many nested open parens", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11197, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11198 }
11199
11200 *flagp = 0; /* Tentatively. */
11201
11202 /* Having this true makes it feasible to have a lot fewer tests for the
11203 * parse pointer being in scope. For example, we can write
11204 * while(isFOO(*RExC_parse)) RExC_parse++;
11205 * instead of
11206 * while(RExC_parse < RExC_end && isFOO(*RExC_parse)) RExC_parse++;
11207 */
11208 assert(*RExC_end == '\0')((*(pRExC_state->end) == '\0') ? (void)0 : __assert2("re_comp.c"
, 11208, __func__, "*RExC_end == '\\0'"))
;
11209
11210 /* Make an OPEN node, if parenthesized. */
11211 if (paren) {
11212
11213 /* Under /x, space and comments can be gobbled up between the '(' and
11214 * here (if paren ==2). The forms '(*VERB' and '(?...' disallow such
11215 * intervening space, as the sequence is a token, and a token should be
11216 * indivisible */
11217 bool_Bool has_intervening_patws = (paren == 2)
11218 && *(RExC_parse(pRExC_state->parse) - 1) != '(';
11219
11220 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
11221 vFAIL("Unmatched (")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unmatched (", (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 11221, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
11222 }
11223
11224 if (paren == 'r') { /* Atomic script run */
11225 paren = '>';
11226 goto parse_rest;
11227 }
11228 else if ( *RExC_parse(pRExC_state->parse) == '*') { /* (*VERB:ARG), (*construct:...) */
11229 char *start_verb = RExC_parse(pRExC_state->parse) + 1;
11230 STRLEN verb_len;
11231 char *start_arg = NULL((void*)0);
11232 unsigned char op = 0;
11233 int arg_required = 0;
11234 int internal_argval = -1; /* if >-1 we are not allowed an argument*/
11235 bool_Bool has_upper = FALSE(0);
11236
11237 if (has_intervening_patws) {
11238 RExC_parse(pRExC_state->parse)++; /* past the '*' */
11239
11240 /* For strict backwards compatibility, don't change the message
11241 * now that we also have lowercase operands */
11242 if (isUPPER(*RExC_parse)(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 11242
, __func__, "('Z') >= ('A')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 11242, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11242, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 11242, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11242, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 11242, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11242, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 11242, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'
))) | 0))))))))
) {
11243 vFAIL("In '(*VERB...)', the '(' and '*' must be adjacent")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "In '(*VERB...)', the '(' and '*' must be adjacent"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11243, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11244 }
11245 else {
11246 vFAIL("In '(*...)', the '(' and '*' must be adjacent")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "In '(*...)', the '(' and '*' must be adjacent"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11246, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11247 }
11248 }
11249 while (RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end) && *RExC_parse(pRExC_state->parse) != ')' ) {
11250 if ( *RExC_parse(pRExC_state->parse) == ':' ) {
11251 start_arg = RExC_parse(pRExC_state->parse) + 1;
11252 break;
11253 }
11254 else if (! UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
11255 if (isUPPER(*RExC_parse)(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 11255
, __func__, "('Z') >= ('A')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 11255, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11255, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 11255, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11255, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 11255, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11255, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 11255, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'
))) | 0))))))))
) {
11256 has_upper = TRUE(1);
11257 }
11258 RExC_parse(pRExC_state->parse)++;
11259 }
11260 else {
11261 RExC_parse(pRExC_state->parse) += UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))];
11262 }
11263 }
11264 verb_len = RExC_parse(pRExC_state->parse) - start_verb;
11265 if ( start_arg ) {
11266 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
11267 goto unterminated_verb_pattern;
11268 }
11269
11270 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))] : 1;
11271 while ( RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end) && *RExC_parse(pRExC_state->parse) != ')' ) {
11272 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))] : 1;
11273 }
11274 if ( RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end) || *RExC_parse(pRExC_state->parse) != ')' ) {
11275 unterminated_verb_pattern:
11276 if (has_upper) {
11277 vFAIL("Unterminated verb pattern argument")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unterminated verb pattern argument", (int)(
((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1
: (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11277, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11278 }
11279 else {
11280 vFAIL("Unterminated '(*...' argument")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unterminated '(*...' argument", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11280, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11281 }
11282 }
11283 } else {
11284 if ( RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end) || *RExC_parse(pRExC_state->parse) != ')' ) {
11285 if (has_upper) {
11286 vFAIL("Unterminated verb pattern")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unterminated verb pattern", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11286, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11287 }
11288 else {
11289 vFAIL("Unterminated '(*...' construct")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unterminated '(*...' construct", (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11289, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11290 }
11291 }
11292 }
11293
11294 /* Here, we know that RExC_parse < RExC_end */
11295
11296 switch ( *start_verb ) {
11297 case 'A': /* (*ACCEPT) */
11298 if ( memEQs(start_verb, verb_len,"ACCEPT")(((sizeof("ACCEPT")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "ACCEPT" "")))
, (sizeof("ACCEPT")-1)) == 0))
) {
11299 op = ACCEPT98;
11300 internal_argval = RExC_nestroot(pRExC_state->nestroot);
11301 }
11302 break;
11303 case 'C': /* (*COMMIT) */
11304 if ( memEQs(start_verb, verb_len,"COMMIT")(((sizeof("COMMIT")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "COMMIT" "")))
, (sizeof("COMMIT")-1)) == 0))
)
11305 op = COMMIT103;
11306 break;
11307 case 'F': /* (*FAIL) */
11308 if ( verb_len==1 || memEQs(start_verb, verb_len,"FAIL")(((sizeof("FAIL")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "FAIL" ""))), (
sizeof("FAIL")-1)) == 0))
) {
11309 op = OPFAIL97;
11310 }
11311 break;
11312 case ':': /* (*:NAME) */
11313 case 'M': /* (*MARK:NAME) */
11314 if ( verb_len==0 || memEQs(start_verb, verb_len,"MARK")(((sizeof("MARK")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "MARK" ""))), (
sizeof("MARK")-1)) == 0))
) {
11315 op = MARKPOINT101;
11316 arg_required = 1;
11317 }
11318 break;
11319 case 'P': /* (*PRUNE) */
11320 if ( memEQs(start_verb, verb_len,"PRUNE")(((sizeof("PRUNE")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "PRUNE" ""))),
(sizeof("PRUNE")-1)) == 0))
)
11321 op = PRUNE100;
11322 break;
11323 case 'S': /* (*SKIP) */
11324 if ( memEQs(start_verb, verb_len,"SKIP")(((sizeof("SKIP")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "SKIP" ""))), (
sizeof("SKIP")-1)) == 0))
)
11325 op = SKIP102;
11326 break;
11327 case 'T': /* (*THEN) */
11328 /* [19:06] <TimToady> :: is then */
11329 if ( memEQs(start_verb, verb_len,"THEN")(((sizeof("THEN")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "THEN" ""))), (
sizeof("THEN")-1)) == 0))
) {
11330 op = CUTGROUP104;
11331 RExC_seen(pRExC_state->seen) |= REG_CUTGROUP_SEEN0x00000100;
11332 }
11333 break;
11334 case 'a':
11335 if ( memEQs(start_verb, verb_len, "asr")(((sizeof("asr")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "asr" ""))), (
sizeof("asr")-1)) == 0))
11336 || memEQs(start_verb, verb_len, "atomic_script_run")(((sizeof("atomic_script_run")-1) == (verb_len)) && (
memcmp(((const void *) ((start_verb))), ((const void *) (("" "atomic_script_run"
""))), (sizeof("atomic_script_run")-1)) == 0))
)
11337 {
11338 paren = 'r'; /* Mnemonic: recursed run */
11339 goto script_run;
11340 }
11341 else if (memEQs(start_verb, verb_len, "atomic")(((sizeof("atomic")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "atomic" "")))
, (sizeof("atomic")-1)) == 0))
) {
11342 paren = 't'; /* AtOMIC */
11343 goto alpha_assertions;
11344 }
11345 break;
11346 case 'p':
11347 if ( memEQs(start_verb, verb_len, "plb")(((sizeof("plb")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "plb" ""))), (
sizeof("plb")-1)) == 0))
11348 || memEQs(start_verb, verb_len, "positive_lookbehind")(((sizeof("positive_lookbehind")-1) == (verb_len)) &&
(memcmp(((const void *) ((start_verb))), ((const void *) ((""
"positive_lookbehind" ""))), (sizeof("positive_lookbehind")-
1)) == 0))
)
11349 {
11350 paren = 'b';
11351 goto lookbehind_alpha_assertions;
11352 }
11353 else if ( memEQs(start_verb, verb_len, "pla")(((sizeof("pla")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "pla" ""))), (
sizeof("pla")-1)) == 0))
11354 || memEQs(start_verb, verb_len, "positive_lookahead")(((sizeof("positive_lookahead")-1) == (verb_len)) && (
memcmp(((const void *) ((start_verb))), ((const void *) (("" "positive_lookahead"
""))), (sizeof("positive_lookahead")-1)) == 0))
)
11355 {
11356 paren = 'a';
11357 goto alpha_assertions;
11358 }
11359 break;
11360 case 'n':
11361 if ( memEQs(start_verb, verb_len, "nlb")(((sizeof("nlb")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "nlb" ""))), (
sizeof("nlb")-1)) == 0))
11362 || memEQs(start_verb, verb_len, "negative_lookbehind")(((sizeof("negative_lookbehind")-1) == (verb_len)) &&
(memcmp(((const void *) ((start_verb))), ((const void *) ((""
"negative_lookbehind" ""))), (sizeof("negative_lookbehind")-
1)) == 0))
)
11363 {
11364 paren = 'B';
11365 goto lookbehind_alpha_assertions;
11366 }
11367 else if ( memEQs(start_verb, verb_len, "nla")(((sizeof("nla")-1) == (verb_len)) && (memcmp(((const
void *) ((start_verb))), ((const void *) (("" "nla" ""))), (
sizeof("nla")-1)) == 0))
11368 || memEQs(start_verb, verb_len, "negative_lookahead")(((sizeof("negative_lookahead")-1) == (verb_len)) && (
memcmp(((const void *) ((start_verb))), ((const void *) (("" "negative_lookahead"
""))), (sizeof("negative_lookahead")-1)) == 0))
)
11369 {
11370 paren = 'A';
11371 goto alpha_assertions;
11372 }
11373 break;
11374 case 's':
11375 if ( memEQs(start_verb, verb_len, "sr")(((sizeof("sr")-1) == (verb_len)) && (memcmp(((const void
*) ((start_verb))), ((const void *) (("" "sr" ""))), (sizeof
("sr")-1)) == 0))
11376 || memEQs(start_verb, verb_len, "script_run")(((sizeof("script_run")-1) == (verb_len)) && (memcmp(
((const void *) ((start_verb))), ((const void *) (("" "script_run"
""))), (sizeof("script_run")-1)) == 0))
)
11377 {
11378 regnode_offset atomic;
11379
11380 paren = 's';
11381
11382 script_run:
11383
11384 /* This indicates Unicode rules. */
11385 REQUIRE_UNI_RULES(flagp, 0)do { if ((get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)) { set_regex_charset(&(pRExC_state->flags), REGEX_UNICODE_CHARSET
); (pRExC_state->uni_semantics) = 1; if ((pRExC_state->
seen_d_op) && __builtin_expect(((! ((pRExC_state->
total_par) < 0)) ? (_Bool)1 : (_Bool)0),(1))) { *flagp |= 0x20
; return 0; } } } while (0)
;
11386
11387 if (! start_arg) {
11388 goto no_colon;
11389 }
11390
11391 RExC_parse(pRExC_state->parse) = start_arg;
11392
11393 if (RExC_in_script_run(pRExC_state->in_script_run)) {
11394
11395 /* Nested script runs are treated as no-ops, because
11396 * if the nested one fails, the outer one must as
11397 * well. It could fail sooner, and avoid (??{} with
11398 * side effects, but that is explicitly documented as
11399 * undefined behavior. */
11400
11401 ret = 0;
11402
11403 if (paren == 's') {
11404 paren = ':';
11405 goto parse_rest;
11406 }
11407
11408 /* But, the atomic part of a nested atomic script run
11409 * isn't a no-op, but can be treated just like a '(?>'
11410 * */
11411 paren = '>';
11412 goto parse_rest;
11413 }
11414
11415 if (paren == 's') {
11416 /* Here, we're starting a new regular script run */
11417 ret = reg_node(pRExC_state, SROPEN)S_reg_node( pRExC_state,65);
11418 RExC_in_script_run(pRExC_state->in_script_run) = 1;
11419 is_open = 1;
11420 goto parse_rest;
11421 }
11422
11423 /* Here, we are starting an atomic script run. This is
11424 * handled by recursing to deal with the atomic portion
11425 * separately, enclosed in SROPEN ... SRCLOSE nodes */
11426
11427 ret = reg_node(pRExC_state, SROPEN)S_reg_node( pRExC_state,65);
11428
11429 RExC_in_script_run(pRExC_state->in_script_run) = 1;
11430
11431 atomic = reg(pRExC_state, 'r', &flags, depth)S_reg( pRExC_state,'r',&flags,depth);
11432 if (flags & (RESTART_PARSE0x20|NEED_UTF80x40)) {
11433 *flagp = flags & (RESTART_PARSE0x20|NEED_UTF80x40);
11434 return 0;
11435 }
11436
11437 if (! REGTAIL(pRExC_state, ret, atomic)S_regtail( (pRExC_state),(ret),(atomic),depth+1)) {
11438 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
11439 }
11440
11441 if (! REGTAIL(pRExC_state, atomic, reg_node(pRExC_state,S_regtail( (pRExC_state),(atomic),(S_reg_node( pRExC_state,66
)),depth+1)
11442 SRCLOSE))S_regtail( (pRExC_state),(atomic),(S_reg_node( pRExC_state,66
)),depth+1)
)
11443 {
11444 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
11445 }
11446
11447 RExC_in_script_run(pRExC_state->in_script_run) = 0;
11448 return ret;
11449 }
11450
11451 break;
11452
11453 lookbehind_alpha_assertions:
11454 RExC_seen(pRExC_state->seen) |= REG_LOOKBEHIND_SEEN0x00000002;
11455 /*FALLTHROUGH*/
11456
11457 alpha_assertions:
11458
11459 RExC_in_lookaround(pRExC_state->in_lookaround)++;
11460 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
11461
11462 if (! start_arg) {
11463 goto no_colon;
11464 }
11465
11466 /* An empty negative lookahead assertion simply is failure */
11467 if (paren == 'A' && RExC_parse(pRExC_state->parse) == start_arg) {
11468 ret=reganode(pRExC_state, OPFAIL, 0)S_reganode( pRExC_state,97,0);
11469 nextchar(pRExC_state)S_nextchar( pRExC_state);
11470 return ret;
11471 }
11472
11473 RExC_parse(pRExC_state->parse) = start_arg;
11474 goto parse_rest;
11475
11476 no_colon:
11477 vFAIL2utf8f(do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "'(*%" "d%" "lu" "%4p" "' requires a terminating ':'"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(verb_len), (void*)(start_verb), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11479, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11478 "'(*%" UTF8f "' requires a terminating ':'",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "'(*%" "d%" "lu" "%4p" "' requires a terminating ':'"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(verb_len), (void*)(start_verb), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11479, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11479 UTF8fARG(UTF, verb_len, start_verb))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "'(*%" "d%" "lu" "%4p" "' requires a terminating ':'"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(verb_len), (void*)(start_verb), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11479, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
11480 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 11480
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
11481
11482 } /* End of switch */
11483 if ( ! op ) {
11484 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
11485 ? UTF8_SAFE_SKIP(RExC_parse, RExC_end)(((((pRExC_state->end)) >= ((pRExC_state->parse))) ?
(void)0 : __assert2("re_comp.c", 11485, __func__, "((pRExC_state->end)) >= ((pRExC_state->parse))"
)), (((pRExC_state->end)) - ((pRExC_state->parse))) <=
0 ? 0 : ((((((pRExC_state->end)) - ((pRExC_state->parse
))))<(PL_utf8skip[*(const U8*)((pRExC_state->parse))]))
?((((pRExC_state->end)) - ((pRExC_state->parse)))):(PL_utf8skip
[*(const U8*)((pRExC_state->parse))])))
11486 : 1;
11487 if (has_upper || verb_len == 0) {
11488 vFAIL2utf8f(do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Unknown verb pattern '%"
"d%" "lu" "%4p" "'" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(verb_len), (void*)(start_verb), (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11490, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11489 "Unknown verb pattern '%" UTF8f "'",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Unknown verb pattern '%"
"d%" "lu" "%4p" "'" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(verb_len), (void*)(start_verb), (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11490, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11490 UTF8fARG(UTF, verb_len, start_verb))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Unknown verb pattern '%"
"d%" "lu" "%4p" "'" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(verb_len), (void*)(start_verb), (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11490, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
11491 }
11492 else {
11493 vFAIL2utf8f(do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Unknown '(*...)' construct '%"
"d%" "lu" "%4p" "'" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(verb_len), (void*)(start_verb), (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11495, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11494 "Unknown '(*...)' construct '%" UTF8f "'",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Unknown '(*...)' construct '%"
"d%" "lu" "%4p" "'" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(verb_len), (void*)(start_verb), (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11495, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11495 UTF8fARG(UTF, verb_len, start_verb))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Unknown '(*...)' construct '%"
"d%" "lu" "%4p" "'" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(verb_len), (void*)(start_verb), (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11495, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
11496 }
11497 }
11498 if ( RExC_parse(pRExC_state->parse) == start_arg ) {
11499 start_arg = NULL((void*)0);
11500 }
11501 if ( arg_required && !start_arg ) {
11502 vFAIL3("Verb pattern '%.*s' has a mandatory argument",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Verb pattern '%.*s' has a mandatory argument"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int) verb_len, start_verb
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11503, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
11503 (int) verb_len, start_verb)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Verb pattern '%.*s' has a mandatory argument"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int) verb_len, start_verb
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11503, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11504 }
11505 if (internal_argval == -1) {
11506 ret = reganode(pRExC_state, op, 0)S_reganode( pRExC_state,op,0);
11507 } else {
11508 ret = reg2Lanode(pRExC_state, op, 0, internal_argval)S_reg2Lanode( pRExC_state,op,0,internal_argval);
11509 }
11510 RExC_seen(pRExC_state->seen) |= REG_VERBARG_SEEN0x00000080;
11511 if (start_arg) {
11512 SV *sv = newSVpvn( start_arg,Perl_newSVpvn( start_arg,(pRExC_state->parse) - start_arg)
11513 RExC_parse - start_arg)Perl_newSVpvn( start_arg,(pRExC_state->parse) - start_arg);
11514 ARG(REGNODE_p(ret))((((struct regnode_1 *)((pRExC_state->emit_start) + (ret))
)->arg1))
= add_dataS_add_data( pRExC_state,
11515 STR_WITH_LEN("S")("" "S" ""), (sizeof("S")-1));
11516 RExC_rxi(pRExC_state->rxi)->data->data[ARG(REGNODE_p(ret))((((struct regnode_1 *)((pRExC_state->emit_start) + (ret))
)->arg1))
]=(void*)sv;
11517 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = 1;
11518 } else {
11519 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = 0;
11520 }
11521 if ( internal_argval != -1 )
11522 ARG2L_SET(REGNODE_p(ret), internal_argval)(((((struct regnode_2L *)((pRExC_state->emit_start) + (ret
)))->arg2)) = ((internal_argval)))
;
11523 nextchar(pRExC_state)S_nextchar( pRExC_state);
11524 return ret;
11525 }
11526 else if (*RExC_parse(pRExC_state->parse) == '?') { /* (?...) */
11527 bool_Bool is_logical = 0;
11528 const char * const seqstart = RExC_parse(pRExC_state->parse);
11529 const char * endptr;
11530 const char non_existent_group_msg[]
11531 = "Reference to nonexistent group";
11532 const char impossible_group[] = "Invalid reference to group";
11533
11534 if (has_intervening_patws) {
11535 RExC_parse(pRExC_state->parse)++;
11536 vFAIL("In '(?...)', the '(' and '?' must be adjacent")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "In '(?...)', the '(' and '?' must be adjacent"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11536, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11537 }
11538
11539 RExC_parse(pRExC_state->parse)++; /* past the '?' */
11540 paren = *RExC_parse(pRExC_state->parse); /* might be a trailing NUL, if not
11541 well-formed */
11542 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) ? UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))] : 1;
11543 if (RExC_parse(pRExC_state->parse) > RExC_end(pRExC_state->end)) {
11544 paren = '\0';
11545 }
11546 ret = 0; /* For look-ahead/behind. */
11547 switch (paren) {
11548
11549 case 'P': /* (?P...) variants for those used to PCRE/Python */
11550 paren = *RExC_parse(pRExC_state->parse);
11551 if ( paren == '<') { /* (?P<...>) named capture */
11552 RExC_parse(pRExC_state->parse)++;
11553 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
11554 vFAIL("Sequence (?P<... not terminated")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Sequence (?P<... not terminated", (int)(
((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1
: (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11554, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11555 }
11556 goto named_capture;
11557 }
11558 else if (paren == '>') { /* (?P>name) named recursion */
11559 RExC_parse(pRExC_state->parse)++;
11560 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
11561 vFAIL("Sequence (?P>... not terminated")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Sequence (?P>... not terminated", (int)(
((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1
: (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11561, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11562 }
11563 goto named_recursion;
11564 }
11565 else if (paren == '=') { /* (?P=...) named backref */
11566 RExC_parse(pRExC_state->parse)++;
11567 return handle_named_backref(pRExC_state, flagp,S_handle_named_backref( pRExC_state,flagp,parse_start,')')
11568 parse_start, ')')S_handle_named_backref( pRExC_state,flagp,parse_start,')');
11569 }
11570 RExC_parse(pRExC_state->parse) += SKIP_IF_CHAR(RExC_parse, RExC_end)(!*((pRExC_state->parse)) ? 0 : (((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0) ? (((((pRExC_state->end)) >= ((pRExC_state
->parse))) ? (void)0 : __assert2("re_comp.c", 11570, __func__
, "((pRExC_state->end)) >= ((pRExC_state->parse))"))
, (((pRExC_state->end)) - ((pRExC_state->parse))) <=
0 ? 0 : ((((((pRExC_state->end)) - ((pRExC_state->parse
))))<(PL_utf8skip[*(const U8*)((pRExC_state->parse))]))
?((((pRExC_state->end)) - ((pRExC_state->parse)))):(PL_utf8skip
[*(const U8*)((pRExC_state->parse))]))) : 1)
;
11571 /* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
11572 vFAIL3("Sequence (%.*s...) not recognized",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%.*s...) not recognized"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int) ((pRExC_state
->parse) - seqstart), seqstart, (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11573, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
11573 (int) (RExC_parse - seqstart), seqstart)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%.*s...) not recognized"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int) ((pRExC_state
->parse) - seqstart), seqstart, (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11573, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11574 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 11574
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
11575 case '<': /* (?<...) */
11576 /* If you want to support (?<*...), first reconcile with GH #17363 */
11577 if (*RExC_parse(pRExC_state->parse) == '!')
11578 paren = ',';
11579 else if (*RExC_parse(pRExC_state->parse) != '=')
11580 named_capture:
11581 { /* (?<...>) */
11582 char *name_start;
11583 SV *svname;
11584 paren= '>';
11585 /* FALLTHROUGH */
11586 case '\'': /* (?'...') */
11587 name_start = RExC_parse(pRExC_state->parse);
11588 svname = reg_scan_name(pRExC_state, REG_RSN_RETURN_NAME)S_reg_scan_name( pRExC_state,1);
11589 if ( RExC_parse(pRExC_state->parse) == name_start
11590 || RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)
11591 || *RExC_parse(pRExC_state->parse) != paren)
11592 {
11593 vFAIL2("Sequence (?%c... not terminated",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (?%c... not terminated"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", paren=='>' ? '<'
: (char) paren, (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11594, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
11594 paren=='>' ? '<' : (char) paren)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (?%c... not terminated"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", paren=='>' ? '<'
: (char) paren, (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11594, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11595 }
11596 {
11597 HE *he_str;
11598 SV *sv_dat = NULL((void*)0);
11599 if (!svname) /* shouldn't happen */
11600 Perl_croak(aTHX_
11601 "panic: reg_scan_name returned NULL");
11602 if (!RExC_paren_names(pRExC_state->paren_names)) {
11603 RExC_paren_names(pRExC_state->paren_names)= newHV()((HV *)({ void *_p = (Perl_newSV_type( SVt_PVHV)); _p; }));
11604 sv_2mortal(MUTABLE_SV(RExC_paren_names))Perl_sv_2mortal( ((SV *)({ void *_p = ((pRExC_state->paren_names
)); _p; })))
;
11605#ifdef DEBUGGING
11606 RExC_paren_name_list(pRExC_state->paren_name_list)= newAV()((AV *)({ void *_p = (Perl_newSV_type( SVt_PVAV)); _p; }));
11607 sv_2mortal(MUTABLE_SV(RExC_paren_name_list))Perl_sv_2mortal( ((SV *)({ void *_p = ((pRExC_state->paren_name_list
)); _p; })))
;
11608#endif
11609 }
11610 he_str = hv_fetch_ent( RExC_paren_names, svname, 1, 0 )((HE *) Perl_hv_common( ((pRExC_state->paren_names)),(svname
),((void*)0),0,0,((1) ? 0x10 : 0),((void*)0),(0)))
;
11611 if ( he_str )
11612 sv_dat = HeVAL(he_str)(he_str)->he_valu.hent_val;
11613 if ( ! sv_dat ) {
11614 /* croak baby croak */
11615 Perl_croak(aTHX_
11616 "panic: paren_name hash element allocation failed");
11617 } else if ( SvPOK(sv_dat)((sv_dat)->sv_flags & 0x00000400) ) {
11618 /* (?|...) can mean we have dupes so scan to check
11619 its already been stored. Maybe a flag indicating
11620 we are inside such a construct would be useful,
11621 but the arrays are likely to be quite small, so
11622 for now we punt -- dmq */
11623 IV count = SvIV(sv_dat)((((sv_dat)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? (*({ const SV *const _svivx = (const SV *)(sv_dat); ((PL_valid_types_IVX
[((svtype)((_svivx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 11623, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11623, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags
( sv_dat,2))
;
11624 I32 *pv = (I32*)SvPVX(sv_dat)(*({ SV *const _svpvx = ((SV *)({ void *_p = (sv_dat); _p; })
); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11624
, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11624, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11624, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
11625 IV i;
11626 for ( i = 0 ; i < count ; i++ ) {
11627 if ( pv[i] == RExC_npar(pRExC_state->npar) ) {
11628 count = 0;
11629 break;
11630 }
11631 }
11632 if ( count ) {
11633 pv = (I32*)SvGROW(sv_dat,(((sv_dat)->sv_flags & 0x10000000) || ((XPV*) (sv_dat)
->sv_any)->xpv_len_u.xpvlenu_len < ((*({ const SV *const
_svcur = (const SV *)(sv_dat); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 11634, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11634, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11634, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + sizeof(I32)+1) ? Perl_sv_grow( sv_dat,(
*({ const SV *const _svcur = (const SV *)(sv_dat); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 11634, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11634, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11634, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + sizeof(I32)+1) : (*({ SV *const _svpvx =
((SV *)({ void *_p = (sv_dat); _p; })); ((PL_valid_types_PVX
[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 11634, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11634, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11634, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))
11634 SvCUR(sv_dat) + sizeof(I32)+1)(((sv_dat)->sv_flags & 0x10000000) || ((XPV*) (sv_dat)
->sv_any)->xpv_len_u.xpvlenu_len < ((*({ const SV *const
_svcur = (const SV *)(sv_dat); ((PL_valid_types_PVX[((svtype
)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void)0 :
__assert2("re_comp.c", 11634, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11634, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11634, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + sizeof(I32)+1) ? Perl_sv_grow( sv_dat,(
*({ const SV *const _svcur = (const SV *)(sv_dat); ((PL_valid_types_PVX
[((svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 11634, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11634, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11634, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + sizeof(I32)+1) : (*({ SV *const _svpvx =
((SV *)({ void *_p = (sv_dat); _p; })); ((PL_valid_types_PVX
[((svtype)((_svpvx)->sv_flags & 0xff)) & 0x1f]) ? (
void)0 : __assert2("re_comp.c", 11634, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11634, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11634, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); })))
;
11635 SvCUR_set(sv_dat, SvCUR(sv_dat) + sizeof(I32))do { ((PL_valid_types_PVX[((svtype)((sv_dat)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11635
, __func__, "PL_valid_types_PVX[SvTYPE(sv_dat) & SVt_MASK]"
)); ((!((((sv_dat)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((sv_dat)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((sv_dat)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11635, __func__
, "!isGV_with_GP(sv_dat)")); ((!(((svtype)((sv_dat)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (sv_dat)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11635, __func__, "!(SvTYPE(sv_dat) == SVt_PVIO && !(IoFLAGS(sv_dat) & IOf_FAKE_DIRP))"
)); (((XPV*) (sv_dat)->sv_any)->xpv_cur = ((*({ const SV
*const _svcur = (const SV *)(sv_dat); ((PL_valid_types_PVX[(
(svtype)((_svcur)->sv_flags & 0xff)) & 0x1f]) ? (void
)0 : __assert2("re_comp.c", 11635, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11635, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11635, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); })) + sizeof(I32))); } while (0)
;
11636 pv[count] = RExC_npar(pRExC_state->npar);
11637 SvIV_set(sv_dat, SvIVX(sv_dat) + 1)do { ((PL_valid_types_IV_set[((svtype)((sv_dat)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11637
, __func__, "PL_valid_types_IV_set[SvTYPE(sv_dat) & SVt_MASK]"
)); ((!((((sv_dat)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((sv_dat)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((sv_dat)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11637, __func__
, "!isGV_with_GP(sv_dat)")); (((XPVIV*) (sv_dat)->sv_any)->
xiv_u.xivu_iv = ((*({ const SV *const _svivx = (const SV *)(sv_dat
); ((PL_valid_types_IVX[((svtype)((_svivx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11637
, __func__, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]"
)); ((!((((_svivx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svivx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11637, __func__
, "!isGV_with_GP(_svivx)")); &(((XPVIV*) ({ void *_p = ((
_svivx)->sv_any); _p; }))->xiv_u.xivu_iv); })) + 1)); }
while (0)
;
11638 }
11639 } else {
11640 (void)SvUPGRADE(sv_dat, SVt_PVNV)((void)(((svtype)((sv_dat)->sv_flags & 0xff)) >= (SVt_PVNV
) || (Perl_sv_upgrade( sv_dat,SVt_PVNV),1)))
;
11641 sv_setpvn(sv_dat, (char *)&(RExC_npar),Perl_sv_setpvn( sv_dat,(char *)&((pRExC_state->npar)),
sizeof(I32))
11642 sizeof(I32))Perl_sv_setpvn( sv_dat,(char *)&((pRExC_state->npar)),
sizeof(I32))
;
11643 SvIOK_on(sv_dat)(((!((((sv_dat)->sv_flags & (0x00004000|0x00008000)) ==
0x00008000) && (((svtype)((sv_dat)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((sv_dat)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11643, __func__
, "!((((sv_dat)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((sv_dat)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((sv_dat)->sv_flags & 0xff)) == SVt_PVLV))"
)), (sv_dat)->sv_flags |= (0x00000100|0x00001000))
;
11644 SvIV_set(sv_dat, 1)do { ((PL_valid_types_IV_set[((svtype)((sv_dat)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11644
, __func__, "PL_valid_types_IV_set[SvTYPE(sv_dat) & SVt_MASK]"
)); ((!((((sv_dat)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((sv_dat)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((sv_dat)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11644, __func__
, "!isGV_with_GP(sv_dat)")); (((XPVIV*) (sv_dat)->sv_any)->
xiv_u.xivu_iv = (1)); } while (0)
;
11645 }
11646#ifdef DEBUGGING
11647 /* Yes this does cause a memory leak in debugging Perls
11648 * */
11649 if (!av_store(RExC_paren_name_list,Perl_av_store( (pRExC_state->paren_name_list),(pRExC_state
->npar),Perl_SvREFCNT_inc_NN(((SV *)({ void *_p = (svname)
; _p; }))))
11650 RExC_npar, SvREFCNT_inc_NN(svname))Perl_av_store( (pRExC_state->paren_name_list),(pRExC_state
->npar),Perl_SvREFCNT_inc_NN(((SV *)({ void *_p = (svname)
; _p; }))))
)
11651 SvREFCNT_dec_NN(svname)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (svname); _p; })));
11652#endif
11653
11654 /*sv_dump(sv_dat);*/
11655 }
11656 nextchar(pRExC_state)S_nextchar( pRExC_state);
11657 paren = 1;
11658 goto capturing_parens;
11659 }
11660
11661 RExC_seen(pRExC_state->seen) |= REG_LOOKBEHIND_SEEN0x00000002;
11662 RExC_in_lookaround(pRExC_state->in_lookaround)++;
11663 RExC_parse(pRExC_state->parse)++;
11664 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
11665 vFAIL("Sequence (?... not terminated")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Sequence (?... not terminated", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11665, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11666 }
11667 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
11668 break;
11669 case '=': /* (?=...) */
11670 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
11671 RExC_in_lookaround(pRExC_state->in_lookaround)++;
11672 break;
11673 case '!': /* (?!...) */
11674 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
11675 /* check if we're really just a "FAIL" assertion */
11676 skip_to_be_ignored_text(pRExC_state, &RExC_parse,S_skip_to_be_ignored_text( pRExC_state,&(pRExC_state->
parse),(0))
11677 FALSE /* Don't force to /x */ )S_skip_to_be_ignored_text( pRExC_state,&(pRExC_state->
parse),(0))
;
11678 if (*RExC_parse(pRExC_state->parse) == ')') {
11679 ret=reganode(pRExC_state, OPFAIL, 0)S_reganode( pRExC_state,97,0);
11680 nextchar(pRExC_state)S_nextchar( pRExC_state);
11681 return ret;
11682 }
11683 RExC_in_lookaround(pRExC_state->in_lookaround)++;
11684 break;
11685 case '|': /* (?|...) */
11686 /* branch reset, behave like a (?:...) except that
11687 buffers in alternations share the same numbers */
11688 paren = ':';
11689 after_freeze = freeze_paren = RExC_npar(pRExC_state->npar);
11690
11691 /* XXX This construct currently requires an extra pass.
11692 * Investigation would be required to see if that could be
11693 * changed */
11694 REQUIRE_PARENS_PASSdo { if (! ((pRExC_state->total_par) > 0)) (pRExC_state
->total_par) = -1; } while (0)
;
11695 break;
11696 case ':': /* (?:...) */
11697 case '>': /* (?>...) */
11698 break;
11699 case '$': /* (?$...) */
11700 case '@': /* (?@...) */
11701 vFAIL2("Sequence (?%c...) not implemented", (int)paren)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (?%c...) not implemented"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)paren, (int)((
(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11701, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11702 break;
11703 case '0' : /* (?0) */
11704 case 'R' : /* (?R) */
11705 if (RExC_parse(pRExC_state->parse) == RExC_end(pRExC_state->end) || *RExC_parse(pRExC_state->parse) != ')')
11706 FAIL("Sequence (?R) not terminated")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Sequence (?R) not terminated"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
11707 num = 0;
11708 RExC_seen(pRExC_state->seen) |= REG_RECURSE_SEEN0x00000020;
11709
11710 /* XXX These constructs currently require an extra pass.
11711 * It probably could be changed */
11712 REQUIRE_PARENS_PASSdo { if (! ((pRExC_state->total_par) > 0)) (pRExC_state
->total_par) = -1; } while (0)
;
11713
11714 *flagp |= POSTPONED0x08;
11715 goto gen_recurse_regop;
11716 /*notreached*/
11717 /* named and numeric backreferences */
11718 case '&': /* (?&NAME) */
11719 parse_start = RExC_parse(pRExC_state->parse) - 1;
11720 named_recursion:
11721 {
11722 SV *sv_dat = reg_scan_name(pRExC_state,S_reg_scan_name( pRExC_state,2)
11723 REG_RSN_RETURN_DATA)S_reg_scan_name( pRExC_state,2);
11724 num = sv_dat ? *((I32 *)SvPVX(sv_dat)(*({ SV *const _svpvx = ((SV *)({ void *_p = (sv_dat); _p; })
); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 11724
, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 11724, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 11724, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
) : 0;
11725 }
11726 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end) || *RExC_parse(pRExC_state->parse) != ')')
11727 vFAIL("Sequence (?&... not terminated")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Sequence (?&... not terminated", (int)(
((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1
: (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11727, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11728 goto gen_recurse_regop;
11729 /* NOTREACHED */
11730 case '+':
11731 if (! inRANGE(RExC_parse[0], '1', '9')(((('9') >= ('1')) ? (void)0 : __assert2("re_comp.c", 11731
, __func__, "('9') >= ('1')")), ( (sizeof((pRExC_state->
parse)[0]) == sizeof(U8)) ? ((((NV) (('1')) >= 0) ? (void)
0 : __assert2("re_comp.c", 11731, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11731, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U8) ((pRExC_state->parse)[0])))) - ((('1')) | 0))) <=
(((U64) (((('9') - ('1'))) | 0))))) : (sizeof((pRExC_state->
parse)[0]) == sizeof(U32)) ? ((((NV) (('1')) >= 0) ? (void
)0 : __assert2("re_comp.c", 11731, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11731, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U32) ((pRExC_state->parse)[0])))) - ((('1')) | 0)))
<= (((U64) (((('9') - ('1'))) | 0))))) : (((sizeof((pRExC_state
->parse)[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 11731, __func__, "sizeof((pRExC_state->parse)[0]) == sizeof(U64)"
)), ((((NV) (('1')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11731, __func__, "(NV) (('1')) >= 0")), (((NV) ((('9') -
('1'))) >= 0) ? (void)0 : __assert2("re_comp.c", 11731, __func__
, "(NV) ((('9') - ('1'))) >= 0")), (((U64) (((((U64) ((pRExC_state
->parse)[0])))) - ((('1')) | 0))) <= (((U64) (((('9') -
('1'))) | 0))))))))
) {
11732 RExC_parse(pRExC_state->parse)++;
11733 vFAIL("Illegal pattern")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Illegal pattern", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11733, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11734 }
11735 goto parse_recursion;
11736 /* NOTREACHED*/
11737 case '-': /* (?-1) */
11738 if (! inRANGE(RExC_parse[0], '1', '9')(((('9') >= ('1')) ? (void)0 : __assert2("re_comp.c", 11738
, __func__, "('9') >= ('1')")), ( (sizeof((pRExC_state->
parse)[0]) == sizeof(U8)) ? ((((NV) (('1')) >= 0) ? (void)
0 : __assert2("re_comp.c", 11738, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11738, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U8) ((pRExC_state->parse)[0])))) - ((('1')) | 0))) <=
(((U64) (((('9') - ('1'))) | 0))))) : (sizeof((pRExC_state->
parse)[0]) == sizeof(U32)) ? ((((NV) (('1')) >= 0) ? (void
)0 : __assert2("re_comp.c", 11738, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11738, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U32) ((pRExC_state->parse)[0])))) - ((('1')) | 0)))
<= (((U64) (((('9') - ('1'))) | 0))))) : (((sizeof((pRExC_state
->parse)[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 11738, __func__, "sizeof((pRExC_state->parse)[0]) == sizeof(U64)"
)), ((((NV) (('1')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11738, __func__, "(NV) (('1')) >= 0")), (((NV) ((('9') -
('1'))) >= 0) ? (void)0 : __assert2("re_comp.c", 11738, __func__
, "(NV) ((('9') - ('1'))) >= 0")), (((U64) (((((U64) ((pRExC_state
->parse)[0])))) - ((('1')) | 0))) <= (((U64) (((('9') -
('1'))) | 0))))))))
) {
11739 RExC_parse(pRExC_state->parse)--; /* rewind to let it be handled later */
11740 goto parse_flags;
11741 }
11742 /* FALLTHROUGH */
11743 case '1': case '2': case '3': case '4': /* (?1) */
11744 case '5': case '6': case '7': case '8': case '9':
11745 RExC_parse(pRExC_state->parse) = (char *) seqstart + 1; /* Point to the digit */
11746 parse_recursion:
11747 {
11748 bool_Bool is_neg = FALSE(0);
11749 UV unum;
11750 parse_start = RExC_parse(pRExC_state->parse) - 1; /* MJD */
11751 if (*RExC_parse(pRExC_state->parse) == '-') {
11752 RExC_parse(pRExC_state->parse)++;
11753 is_neg = TRUE(1);
11754 }
11755 endptr = RExC_end(pRExC_state->end);
11756 if (grok_atoUVPerl_grok_atoUV(RExC_parse(pRExC_state->parse), &unum, &endptr)
11757 && unum <= I32_MAX0x7fffffff
11758 ) {
11759 num = (I32)unum;
11760 RExC_parse(pRExC_state->parse) = (char*)endptr;
11761 }
11762 else { /* Overflow, or something like that. Position
11763 beyond all digits for the message */
11764 while (RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end) && isDIGIT(*RExC_parse)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 11764
, __func__, "('9') >= ('0')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 11764, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11764, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 11764, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11764, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 11764, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 11764, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 11764, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'
))) | 0))))))))
) {
11765 RExC_parse(pRExC_state->parse)++;
11766 }
11767 vFAIL(impossible_group)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", impossible_group, (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11767, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11768 }
11769 if (is_neg) {
11770 /* -num is always representable on 1 and 2's complement
11771 * machines */
11772 num = -num;
11773 }
11774 }
11775 if (*RExC_parse(pRExC_state->parse)!=')')
11776 vFAIL("Expecting close bracket")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Expecting close bracket", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11776, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11777
11778 gen_recurse_regop:
11779 if (paren == '-' || paren == '+') {
11780
11781 /* Don't overflow */
11782 if (UNLIKELY(I32_MAX - RExC_npar < num)__builtin_expect(((0x7fffffff - (pRExC_state->npar) < num
) ? (_Bool)1 : (_Bool)0),(0))
) {
11783 RExC_parse(pRExC_state->parse)++;
11784 vFAIL(impossible_group)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", impossible_group, (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11784, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11785 }
11786
11787 /*
11788 Diagram of capture buffer numbering.
11789 Top line is the normal capture buffer numbers
11790 Bottom line is the negative indexing as from
11791 the X (the (?-2))
11792
11793 1 2 3 4 5 X Y 6 7
11794 /(a(x)y)(a(b(c(?+2)d)e)f)(g(h))/
11795 /(a(x)y)(a(b(c(?-2)d)e)f)(g(h))/
11796 - 5 4 3 2 1 X Y x x
11797
11798 Resolve to absolute group. Recall that RExC_npar is +1 of
11799 the actual parenthesis group number. For lookahead, we
11800 have to compensate for that. Using the above example, when
11801 we get to Y in the parse, num is 2 and RExC_npar is 6. We
11802 want 7 for +2, and 4 for -2.
11803 */
11804 if ( paren == '+' ) {
11805 num--;
11806 }
11807
11808 num += RExC_npar(pRExC_state->npar);
11809
11810 if (paren == '-' && num < 1) {
11811 RExC_parse(pRExC_state->parse)++;
11812 vFAIL(non_existent_group_msg)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", non_existent_group_msg, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11812, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11813 }
11814 }
11815
11816 if (num >= RExC_npar(pRExC_state->npar)) {
11817
11818 /* It might be a forward reference; we can't fail until we
11819 * know, by completing the parse to get all the groups, and
11820 * then reparsing */
11821 if (ALL_PARENS_COUNTED((pRExC_state->total_par) > 0)) {
11822 if (num >= RExC_total_parens(pRExC_state->total_par)) {
11823 RExC_parse(pRExC_state->parse)++;
11824 vFAIL(non_existent_group_msg)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", non_existent_group_msg, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11824, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11825 }
11826 }
11827 else {
11828 REQUIRE_PARENS_PASSdo { if (! ((pRExC_state->total_par) > 0)) (pRExC_state
->total_par) = -1; } while (0)
;
11829 }
11830 }
11831
11832 /* We keep track how many GOSUB items we have produced.
11833 To start off the ARG2L() of the GOSUB holds its "id",
11834 which is used later in conjunction with RExC_recurse
11835 to calculate the offset we need to jump for the GOSUB,
11836 which it will store in the final representation.
11837 We have to defer the actual calculation until much later
11838 as the regop may move.
11839 */
11840 ret = reg2Lanode(pRExC_state, GOSUB, num, RExC_recurse_count)S_reg2Lanode( pRExC_state,92,num,(pRExC_state->recurse_count
))
;
11841 RExC_recurse_count(pRExC_state->recurse_count)++;
11842 DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Recurse #%"
"lu" " to %" "ld" "\n", 22, "| |", (int)(depth * 2 + 1), ""
, (UV)((((struct regnode_1 *)((pRExC_state->emit_start) + (
ret)))->arg1)), (IV)((((struct regnode_2L *)((pRExC_state->
emit_start) + (ret)))->arg2)));} while (0)
11843 "%*s%*s Recurse #%" UVuf " to %" IVdf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Recurse #%"
"lu" " to %" "ld" "\n", 22, "| |", (int)(depth * 2 + 1), ""
, (UV)((((struct regnode_1 *)((pRExC_state->emit_start) + (
ret)))->arg1)), (IV)((((struct regnode_2L *)((pRExC_state->
emit_start) + (ret)))->arg2)));} while (0)
11844 22, "| |", (int)(depth * 2 + 1), "",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Recurse #%"
"lu" " to %" "ld" "\n", 22, "| |", (int)(depth * 2 + 1), ""
, (UV)((((struct regnode_1 *)((pRExC_state->emit_start) + (
ret)))->arg1)), (IV)((((struct regnode_2L *)((pRExC_state->
emit_start) + (ret)))->arg2)));} while (0)
11845 (UV)ARG(REGNODE_p(ret)),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Recurse #%"
"lu" " to %" "ld" "\n", 22, "| |", (int)(depth * 2 + 1), ""
, (UV)((((struct regnode_1 *)((pRExC_state->emit_start) + (
ret)))->arg1)), (IV)((((struct regnode_2L *)((pRExC_state->
emit_start) + (ret)))->arg2)));} while (0)
11846 (IV)ARG2L(REGNODE_p(ret))))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Recurse #%"
"lu" " to %" "ld" "\n", 22, "| |", (int)(depth * 2 + 1), ""
, (UV)((((struct regnode_1 *)((pRExC_state->emit_start) + (
ret)))->arg1)), (IV)((((struct regnode_2L *)((pRExC_state->
emit_start) + (ret)))->arg2)));} while (0)
;
11847 RExC_seen(pRExC_state->seen) |= REG_RECURSE_SEEN0x00000020;
11848
11849 Set_Node_Length(REGNODE_p(ret),do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 11850, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1 + regarglen[((((pRExC_state->emit_start
) + (ret)))->type)]));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1 + regarglen[((((pRExC_state->emit_start
) + (ret)))->type)]); } } while (0)
11850 1 + regarglen[OP(REGNODE_p(ret))])do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 11850, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1 + regarglen[((((pRExC_state->emit_start
) + (ret)))->type)]));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1 + regarglen[((((pRExC_state->emit_start
) + (ret)))->type)]); } } while (0)
; /* MJD */
11851 Set_Node_Offset(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 11851, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start)-(pRExC_state->start)));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start)-(pRExC_state->start
)); } } while (0)
; /* MJD */
11852
11853 *flagp |= POSTPONED0x08;
11854 assert(*RExC_parse == ')')((*(pRExC_state->parse) == ')') ? (void)0 : __assert2("re_comp.c"
, 11854, __func__, "*RExC_parse == ')'"))
;
11855 nextchar(pRExC_state)S_nextchar( pRExC_state);
11856 return ret;
11857
11858 /* NOTREACHED */
11859
11860 case '?': /* (??...) */
11861 is_logical = 1;
11862 if (*RExC_parse(pRExC_state->parse) != '{') {
11863 RExC_parse(pRExC_state->parse) += SKIP_IF_CHAR(RExC_parse, RExC_end)(!*((pRExC_state->parse)) ? 0 : (((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0) ? (((((pRExC_state->end)) >= ((pRExC_state
->parse))) ? (void)0 : __assert2("re_comp.c", 11863, __func__
, "((pRExC_state->end)) >= ((pRExC_state->parse))"))
, (((pRExC_state->end)) - ((pRExC_state->parse))) <=
0 ? 0 : ((((((pRExC_state->end)) - ((pRExC_state->parse
))))<(PL_utf8skip[*(const U8*)((pRExC_state->parse))]))
?((((pRExC_state->end)) - ((pRExC_state->parse)))):(PL_utf8skip
[*(const U8*)((pRExC_state->parse))]))) : 1)
;
11864 /* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
11865 vFAIL2utf8f(do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%" "d%" "lu" "%4p"
"...) not recognized" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((pRExC_state->parse)-seqstart), (void
*)(seqstart), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11867, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11866 "Sequence (%" UTF8f "...) not recognized",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%" "d%" "lu" "%4p"
"...) not recognized" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((pRExC_state->parse)-seqstart), (void
*)(seqstart), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11867, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
11867 UTF8fARG(UTF, RExC_parse-seqstart, seqstart))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (%" "d%" "lu" "%4p"
"...) not recognized" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((pRExC_state->parse)-seqstart), (void
*)(seqstart), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (
_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11867, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
11868 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 11868
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
11869 }
11870 *flagp |= POSTPONED0x08;
11871 paren = '{';
11872 RExC_parse(pRExC_state->parse)++;
11873 /* FALLTHROUGH */
11874 case '{': /* (?{...}) */
11875 {
11876 U32 n = 0;
11877 struct reg_code_block *cb;
11878 OP * o;
11879
11880 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
11881
11882 if ( !pRExC_state->code_blocks
11883 || pRExC_state->code_index
11884 >= pRExC_state->code_blocks->count
11885 || pRExC_state->code_blocks->cb[pRExC_state->code_index].start
11886 != (STRLEN)((RExC_parse(pRExC_state->parse) -3 - (is_logical ? 1 : 0))
11887 - RExC_start(pRExC_state->start))
11888 ) {
11889 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_USE_RE_EVAL(1U<<(((0 +12)+2)+16)))
11890 FAIL("panic: Sequence (?{...}): no code block found\n")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "panic: Sequence (?{...}): no code block found\n"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
11891 FAIL("Eval-group not allowed at runtime, use re 'eval'")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Eval-group not allowed at runtime, use re 'eval'"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
11892 }
11893 /* this is a pre-compiled code block (?{...}) */
11894 cb = &pRExC_state->code_blocks->cb[pRExC_state->code_index];
11895 RExC_parse(pRExC_state->parse) = RExC_start(pRExC_state->start) + cb->end;
11896 o = cb->block;
11897 if (cb->src_regex) {
11898 n = add_dataS_add_data(pRExC_state, STR_WITH_LEN("rl")("" "rl" ""), (sizeof("rl")-1));
11899 RExC_rxi(pRExC_state->rxi)->data->data[n] =
11900 (void*)SvREFCNT_inc((SV*)cb->src_regex)Perl_SvREFCNT_inc(((SV *)({ void *_p = ((SV*)cb->src_regex
); _p; })))
;
11901 RExC_rxi(pRExC_state->rxi)->data->data[n+1] = (void*)o;
11902 }
11903 else {
11904 n = add_dataS_add_data(pRExC_state,
11905 (RExC_pm_flags(pRExC_state->pm_flags) & PMf_HAS_CV(1U<<(((0 +12)+2)+13))) ? "L" : "l", 1);
11906 RExC_rxi(pRExC_state->rxi)->data->data[n] = (void*)o;
11907 }
11908 pRExC_state->code_index++;
11909 nextchar(pRExC_state)S_nextchar( pRExC_state);
11910
11911 if (is_logical) {
11912 regnode_offset eval;
11913 ret = reg_node(pRExC_state, LOGICAL)S_reg_node( pRExC_state,86);
11914
11915 eval = reg2Lanode(pRExC_state, EVAL,S_reg2Lanode( pRExC_state,84,n,(pRExC_state->flags) & (
(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2)
)|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<(
0 +10))))
11916 n,S_reg2Lanode( pRExC_state,84,n,(pRExC_state->flags) & (
(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2)
)|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<(
0 +10))))
11917
11918 /* for later propagation into (??{})S_reg2Lanode( pRExC_state,84,n,(pRExC_state->flags) & (
(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2)
)|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<(
0 +10))))
11919 * return value */S_reg2Lanode( pRExC_state,84,n,(pRExC_state->flags) & (
(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2)
)|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<(
0 +10))))
11920 RExC_flags & RXf_PMf_COMPILETIMES_reg2Lanode( pRExC_state,84,n,(pRExC_state->flags) & (
(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2)
)|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<(
0 +10))))
11921 )S_reg2Lanode( pRExC_state,84,n,(pRExC_state->flags) & (
(1U << (0 +0))|(1U << (0 +1))|(1U << (0 +2)
)|(1U << (0 +3))|(1U << (0 +4))|(1U << (0 +
6))|(1U << (0 +5))|(7U << (((0)+7)))|(1U<<(
0 +10))))
;
11922 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = 2;
11923 if (! REGTAIL(pRExC_state, ret, eval)S_regtail( (pRExC_state),(ret),(eval),depth+1)) {
11924 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
11925 }
11926 /* deal with the length of this later - MJD */
11927 return ret;
11928 }
11929 ret = reg2Lanode(pRExC_state, EVAL, n, 0)S_reg2Lanode( pRExC_state,84,n,0);
11930 Set_Node_Length(REGNODE_p(ret), RExC_parse - parse_start + 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 11930, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - parse_start + 1
));} while (0); if((((((pRExC_state->emit_start) + (ret)))
- (pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - parse_start +
1); } } while (0)
;
11931 Set_Node_Offset(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 11931, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start)-(pRExC_state->start)));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start)-(pRExC_state->start
)); } } while (0)
;
11932 return ret;
11933 }
11934 case '(': /* (?(?{...})...) and (?(?=...)...) */
11935 {
11936 int is_define= 0;
11937 const int DEFINE_len = sizeof("DEFINE") - 1;
11938 if ( RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end) - 1
11939 && ( ( RExC_parse(pRExC_state->parse)[0] == '?' /* (?(?...)) */
11940 && ( RExC_parse(pRExC_state->parse)[1] == '='
11941 || RExC_parse(pRExC_state->parse)[1] == '!'
11942 || RExC_parse(pRExC_state->parse)[1] == '<'
11943 || RExC_parse(pRExC_state->parse)[1] == '{'))
11944 || ( RExC_parse(pRExC_state->parse)[0] == '*' /* (?(*...)) */
11945 && ( memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("pla:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "pla:" "")), sizeof("pla:")-1) == 0))
11946 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("pla:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "pla:" "")), sizeof("pla:")-1) == 0))
11947 "pla:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("pla:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "pla:" "")), sizeof("pla:")-1) == 0))
11948 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("plb:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "plb:" "")), sizeof("plb:")-1) == 0))
11949 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("plb:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "plb:" "")), sizeof("plb:")-1) == 0))
11950 "plb:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("plb:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "plb:" "")), sizeof("plb:")-1) == 0))
11951 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("nla:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "nla:" "")), sizeof("nla:")-1) == 0))
11952 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("nla:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "nla:" "")), sizeof("nla:")-1) == 0))
11953 "nla:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("nla:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "nla:" "")), sizeof("nla:")-1) == 0))
11954 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("nlb:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "nlb:" "")), sizeof("nlb:")-1) == 0))
11955 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("nlb:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "nlb:" "")), sizeof("nlb:")-1) == 0))
11956 "nlb:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("nlb:") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse) + 1)), ((const
void *) ("" "nlb:" "")), sizeof("nlb:")-1) == 0))
11957 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("positive_lookahead:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "positive_lookahead:" "")), sizeof
("positive_lookahead:")-1) == 0))
11958 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("positive_lookahead:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "positive_lookahead:" "")), sizeof
("positive_lookahead:")-1) == 0))
11959 "positive_lookahead:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("positive_lookahead:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "positive_lookahead:" "")), sizeof
("positive_lookahead:")-1) == 0))
11960 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("positive_lookbehind:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "positive_lookbehind:" "")), sizeof
("positive_lookbehind:")-1) == 0))
11961 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("positive_lookbehind:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "positive_lookbehind:" "")), sizeof
("positive_lookbehind:")-1) == 0))
11962 "positive_lookbehind:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("positive_lookbehind:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "positive_lookbehind:" "")), sizeof
("positive_lookbehind:")-1) == 0))
11963 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("negative_lookahead:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "negative_lookahead:" "")), sizeof
("negative_lookahead:")-1) == 0))
11964 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("negative_lookahead:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "negative_lookahead:" "")), sizeof
("negative_lookahead:")-1) == 0))
11965 "negative_lookahead:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("negative_lookahead:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "negative_lookahead:" "")), sizeof
("negative_lookahead:")-1) == 0))
11966 || memBEGINs(RExC_parse + 1,( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("negative_lookbehind:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "negative_lookbehind:" "")), sizeof
("negative_lookbehind:")-1) == 0))
11967 (Size_t) (RExC_end - (RExC_parse + 1)),( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("negative_lookbehind:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "negative_lookbehind:" "")), sizeof
("negative_lookbehind:")-1) == 0))
11968 "negative_lookbehind:")( (ptrdiff_t) ((size_t) ((pRExC_state->end) - ((pRExC_state
->parse) + 1))) >= (ptrdiff_t) sizeof("negative_lookbehind:"
) - 1 && (memcmp(((const void *) ((pRExC_state->parse
) + 1)), ((const void *) ("" "negative_lookbehind:" "")), sizeof
("negative_lookbehind:")-1) == 0))
)))
11969 ) { /* Lookahead or eval. */
11970 I32 flag;
11971 regnode_offset tail;
11972
11973 ret = reg_node(pRExC_state, LOGICAL)S_reg_node( pRExC_state,86);
11974 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = 1;
11975
11976 tail = reg(pRExC_state, 1, &flag, depth+1)S_reg( pRExC_state,1,&flag,depth+1);
11977 RETURN_FAIL_ON_RESTART(flag, flagp)do { if ((flag) & (0x20|0x40|(0))) { *(flagp) = (flag) &
(0x20|0x40|(0)); return 0; } } while (0)
;
11978 if (! REGTAIL(pRExC_state, ret, tail)S_regtail( (pRExC_state),(ret),(tail),depth+1)) {
11979 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
11980 }
11981 goto insert_if;
11982 }
11983 else if ( RExC_parse(pRExC_state->parse)[0] == '<' /* (?(<NAME>)...) */
11984 || RExC_parse(pRExC_state->parse)[0] == '\'' ) /* (?('NAME')...) */
11985 {
11986 char ch = RExC_parse(pRExC_state->parse)[0] == '<' ? '>' : '\'';
11987 char *name_start= RExC_parse(pRExC_state->parse)++;
11988 U32 num = 0;
11989 SV *sv_dat=reg_scan_name(pRExC_state, REG_RSN_RETURN_DATA)S_reg_scan_name( pRExC_state,2);
11990 if ( RExC_parse(pRExC_state->parse) == name_start
11991 || RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)
11992 || *RExC_parse(pRExC_state->parse) != ch)
11993 {
11994 vFAIL2("Sequence (?(%c... not terminated",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (?(%c... not terminated"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (ch == '>' ? '<'
: ch), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)
0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11995, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
11995 (ch == '>' ? '<' : ch))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence (?(%c... not terminated"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (ch == '>' ? '<'
: ch), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)
0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 11995, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
11996 }
11997 RExC_parse(pRExC_state->parse)++;
11998 if (sv_dat) {
11999 num = add_dataS_add_data( pRExC_state, STR_WITH_LEN("S")("" "S" ""), (sizeof("S")-1));
12000 RExC_rxi(pRExC_state->rxi)->data->data[num]=(void*)sv_dat;
12001 SvREFCNT_inc_simple_void_NN(sv_dat)(void)(++(((SV *)({ void *_p = (sv_dat); _p; })))->sv_refcnt
)
;
12002 }
12003 ret = reganode(pRExC_state, GROUPPN, num)S_reganode( pRExC_state,93,num);
12004 goto insert_if_check_paren;
12005 }
12006 else if (memBEGINs(RExC_parse,( (ptrdiff_t) ((STRLEN) ((pRExC_state->end) - (pRExC_state
->parse))) >= (ptrdiff_t) sizeof("DEFINE") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse))), ((const void
*) ("" "DEFINE" "")), sizeof("DEFINE")-1) == 0))
12007 (STRLEN) (RExC_end - RExC_parse),( (ptrdiff_t) ((STRLEN) ((pRExC_state->end) - (pRExC_state
->parse))) >= (ptrdiff_t) sizeof("DEFINE") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse))), ((const void
*) ("" "DEFINE" "")), sizeof("DEFINE")-1) == 0))
12008 "DEFINE")( (ptrdiff_t) ((STRLEN) ((pRExC_state->end) - (pRExC_state
->parse))) >= (ptrdiff_t) sizeof("DEFINE") - 1 &&
(memcmp(((const void *) ((pRExC_state->parse))), ((const void
*) ("" "DEFINE" "")), sizeof("DEFINE")-1) == 0))
)
12009 {
12010 ret = reganode(pRExC_state, DEFINEP, 0)S_reganode( pRExC_state,95,0);
12011 RExC_parse(pRExC_state->parse) += DEFINE_len;
12012 is_define = 1;
12013 goto insert_if_check_paren;
12014 }
12015 else if (RExC_parse(pRExC_state->parse)[0] == 'R') {
12016 RExC_parse(pRExC_state->parse)++;
12017 /* parno == 0 => /(?(R)YES|NO)/ "in any form of recursion OR eval"
12018 * parno == 1 => /(?(R0)YES|NO)/ "in GOSUB (?0) / (?R)"
12019 * parno == 2 => /(?(R1)YES|NO)/ "in GOSUB (?1) (parno-1)"
12020 */
12021 parno = 0;
12022 if (RExC_parse(pRExC_state->parse)[0] == '0') {
12023 parno = 1;
12024 RExC_parse(pRExC_state->parse)++;
12025 }
12026 else if (inRANGE(RExC_parse[0], '1', '9')(((('9') >= ('1')) ? (void)0 : __assert2("re_comp.c", 12026
, __func__, "('9') >= ('1')")), ( (sizeof((pRExC_state->
parse)[0]) == sizeof(U8)) ? ((((NV) (('1')) >= 0) ? (void)
0 : __assert2("re_comp.c", 12026, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12026, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U8) ((pRExC_state->parse)[0])))) - ((('1')) | 0))) <=
(((U64) (((('9') - ('1'))) | 0))))) : (sizeof((pRExC_state->
parse)[0]) == sizeof(U32)) ? ((((NV) (('1')) >= 0) ? (void
)0 : __assert2("re_comp.c", 12026, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12026, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U32) ((pRExC_state->parse)[0])))) - ((('1')) | 0)))
<= (((U64) (((('9') - ('1'))) | 0))))) : (((sizeof((pRExC_state
->parse)[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 12026, __func__, "sizeof((pRExC_state->parse)[0]) == sizeof(U64)"
)), ((((NV) (('1')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12026, __func__, "(NV) (('1')) >= 0")), (((NV) ((('9') -
('1'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12026, __func__
, "(NV) ((('9') - ('1'))) >= 0")), (((U64) (((((U64) ((pRExC_state
->parse)[0])))) - ((('1')) | 0))) <= (((U64) (((('9') -
('1'))) | 0))))))))
) {
12027 UV uv;
12028 endptr = RExC_end(pRExC_state->end);
12029 if (grok_atoUVPerl_grok_atoUV(RExC_parse(pRExC_state->parse), &uv, &endptr)
12030 && uv <= I32_MAX0x7fffffff
12031 ) {
12032 parno = (I32)uv + 1;
12033 RExC_parse(pRExC_state->parse) = (char*)endptr;
12034 }
12035 /* else "Switch condition not recognized" below */
12036 } else if (RExC_parse(pRExC_state->parse)[0] == '&') {
12037 SV *sv_dat;
12038 RExC_parse(pRExC_state->parse)++;
12039 sv_dat = reg_scan_name(pRExC_state,S_reg_scan_name( pRExC_state,2)
12040 REG_RSN_RETURN_DATA)S_reg_scan_name( pRExC_state,2);
12041 if (sv_dat)
12042 parno = 1 + *((I32 *)SvPVX(sv_dat)(*({ SV *const _svpvx = ((SV *)({ void *_p = (sv_dat); _p; })
); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags &
0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 12042
, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 12042, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 12042, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
);
12043 }
12044 ret = reganode(pRExC_state, INSUBP, parno)S_reganode( pRExC_state,94,parno);
12045 goto insert_if_check_paren;
12046 }
12047 else if (inRANGE(RExC_parse[0], '1', '9')(((('9') >= ('1')) ? (void)0 : __assert2("re_comp.c", 12047
, __func__, "('9') >= ('1')")), ( (sizeof((pRExC_state->
parse)[0]) == sizeof(U8)) ? ((((NV) (('1')) >= 0) ? (void)
0 : __assert2("re_comp.c", 12047, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12047, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U8) ((pRExC_state->parse)[0])))) - ((('1')) | 0))) <=
(((U64) (((('9') - ('1'))) | 0))))) : (sizeof((pRExC_state->
parse)[0]) == sizeof(U32)) ? ((((NV) (('1')) >= 0) ? (void
)0 : __assert2("re_comp.c", 12047, __func__, "(NV) (('1')) >= 0"
)), (((NV) ((('9') - ('1'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12047, __func__, "(NV) ((('9') - ('1'))) >= 0")), (((U64
) (((((U32) ((pRExC_state->parse)[0])))) - ((('1')) | 0)))
<= (((U64) (((('9') - ('1'))) | 0))))) : (((sizeof((pRExC_state
->parse)[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 12047, __func__, "sizeof((pRExC_state->parse)[0]) == sizeof(U64)"
)), ((((NV) (('1')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12047, __func__, "(NV) (('1')) >= 0")), (((NV) ((('9') -
('1'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12047, __func__
, "(NV) ((('9') - ('1'))) >= 0")), (((U64) (((((U64) ((pRExC_state
->parse)[0])))) - ((('1')) | 0))) <= (((U64) (((('9') -
('1'))) | 0))))))))
) {
12048 /* (?(1)...) */
12049 char c;
12050 UV uv;
12051 endptr = RExC_end(pRExC_state->end);
12052 if (grok_atoUVPerl_grok_atoUV(RExC_parse(pRExC_state->parse), &uv, &endptr)
12053 && uv <= I32_MAX0x7fffffff
12054 ) {
12055 parno = (I32)uv;
12056 RExC_parse(pRExC_state->parse) = (char*)endptr;
12057 }
12058 else {
12059 vFAIL("panic: grok_atoUV returned FALSE")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "panic: grok_atoUV returned FALSE", (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12059, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12060 }
12061 ret = reganode(pRExC_state, GROUPP, parno)S_reganode( pRExC_state,83,parno);
12062
12063 insert_if_check_paren:
12064 if (UCHARAT(RExC_parse)((int)*(const U8*)((pRExC_state->parse))) != ')') {
12065 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
12066 ? UTF8_SAFE_SKIP(RExC_parse, RExC_end)(((((pRExC_state->end)) >= ((pRExC_state->parse))) ?
(void)0 : __assert2("re_comp.c", 12066, __func__, "((pRExC_state->end)) >= ((pRExC_state->parse))"
)), (((pRExC_state->end)) - ((pRExC_state->parse))) <=
0 ? 0 : ((((((pRExC_state->end)) - ((pRExC_state->parse
))))<(PL_utf8skip[*(const U8*)((pRExC_state->parse))]))
?((((pRExC_state->end)) - ((pRExC_state->parse)))):(PL_utf8skip
[*(const U8*)((pRExC_state->parse))])))
12067 : 1;
12068 vFAIL("Switch condition not recognized")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Switch condition not recognized", (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12068, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12069 }
12070 nextchar(pRExC_state)S_nextchar( pRExC_state);
12071 insert_if:
12072 if (! REGTAIL(pRExC_state, ret, reganode(pRExC_state,S_regtail( (pRExC_state),(ret),(S_reganode( pRExC_state,82,0)
),depth+1)
12073 IFTHEN, 0))S_regtail( (pRExC_state),(ret),(S_reganode( pRExC_state,82,0)
),depth+1)
)
12074 {
12075 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12076 }
12077 br = regbranch(pRExC_state, &flags, 1, depth+1)S_regbranch( pRExC_state,&flags,1,depth+1);
12078 if (br == 0) {
12079 RETURN_FAIL_ON_RESTART(flags,flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
12080 FAIL2("panic: regbranch returned failure, flags=%#" UVxf,do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regbranch returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
12081 (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regbranch returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
;
12082 } else
12083 if (! REGTAIL(pRExC_state, br, reganode(pRExC_state,S_regtail( (pRExC_state),(br),(S_reganode( pRExC_state,77,0))
,depth+1)
12084 LONGJMP, 0))S_regtail( (pRExC_state),(br),(S_reganode( pRExC_state,77,0))
,depth+1)
)
12085 {
12086 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12087 }
12088 c = UCHARAT(RExC_parse)((int)*(const U8*)((pRExC_state->parse)));
12089 nextchar(pRExC_state)S_nextchar( pRExC_state);
12090 if (flags&HASWIDTH0x01)
12091 *flagp |= HASWIDTH0x01;
12092 if (c == '|') {
12093 if (is_define)
12094 vFAIL("(?(DEFINE)....) does not allow branches")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "(?(DEFINE)....) does not allow branches", (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12094, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12095
12096 /* Fake one for optimizer. */
12097 lastbr = reganode(pRExC_state, IFTHEN, 0)S_reganode( pRExC_state,82,0);
12098
12099 if (!regbranch(pRExC_state, &flags, 1, depth+1)S_regbranch( pRExC_state,&flags,1,depth+1)) {
12100 RETURN_FAIL_ON_RESTART(flags, flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
12101 FAIL2("panic: regbranch returned failure, flags=%#" UVxf,do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regbranch returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
12102 (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regbranch returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
;
12103 }
12104 if (! REGTAIL(pRExC_state, ret, lastbr)S_regtail( (pRExC_state),(ret),(lastbr),depth+1)) {
12105 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12106 }
12107 if (flags&HASWIDTH0x01)
12108 *flagp |= HASWIDTH0x01;
12109 c = UCHARAT(RExC_parse)((int)*(const U8*)((pRExC_state->parse)));
12110 nextchar(pRExC_state)S_nextchar( pRExC_state);
12111 }
12112 else
12113 lastbr = 0;
12114 if (c != ')') {
12115 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end))
12116 vFAIL("Switch (?(condition)... not terminated")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Switch (?(condition)... not terminated", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12116, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12117 else
12118 vFAIL("Switch (?(condition)... contains too many branches")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Switch (?(condition)... contains too many branches"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12118, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12119 }
12120 ender = reg_node(pRExC_state, TAIL)S_reg_node( pRExC_state,55);
12121 if (! REGTAIL(pRExC_state, br, ender)S_regtail( (pRExC_state),(br),(ender),depth+1)) {
12122 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12123 }
12124 if (lastbr) {
12125 if (! REGTAIL(pRExC_state, lastbr, ender)S_regtail( (pRExC_state),(lastbr),(ender),depth+1)) {
12126 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12127 }
12128 if (! REGTAIL(pRExC_state,S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
12129 REGNODE_OFFSET(S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
12130 NEXTOPER(S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
12131 NEXTOPER(REGNODE_p(lastbr)))),S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
12132 ender)S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
)
12133 {
12134 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12135 }
12136 }
12137 else
12138 if (! REGTAIL(pRExC_state, ret, ender)S_regtail( (pRExC_state),(ret),(ender),depth+1)) {
12139 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12140 }
12141#if 0 /* Removing this doesn't cause failures in the test suite -- khw */
12142 RExC_size(pRExC_state->size)++; /* XXX WHY do we need this?!!
12143 For large programs it seems to be required
12144 but I can't figure out why. -- dmq*/
12145#endif
12146 return ret;
12147 }
12148 RExC_parse(pRExC_state->parse) += UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)
12149 ? UTF8_SAFE_SKIP(RExC_parse, RExC_end)(((((pRExC_state->end)) >= ((pRExC_state->parse))) ?
(void)0 : __assert2("re_comp.c", 12149, __func__, "((pRExC_state->end)) >= ((pRExC_state->parse))"
)), (((pRExC_state->end)) - ((pRExC_state->parse))) <=
0 ? 0 : ((((((pRExC_state->end)) - ((pRExC_state->parse
))))<(PL_utf8skip[*(const U8*)((pRExC_state->parse))]))
?((((pRExC_state->end)) - ((pRExC_state->parse)))):(PL_utf8skip
[*(const U8*)((pRExC_state->parse))])))
12150 : 1;
12151 vFAIL("Unknown switch condition (?(...))")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unknown switch condition (?(...))", (int)((
(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12151, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12152 }
12153 case '[': /* (?[ ... ]) */
12154 return handle_regex_sets(pRExC_state, NULL, flagp, depth+1,S_handle_regex_sets( pRExC_state,((void*)0),flagp,depth+1,oregcomp_parse
)
12155 oregcomp_parse)S_handle_regex_sets( pRExC_state,((void*)0),flagp,depth+1,oregcomp_parse
)
;
12156 case 0: /* A NUL */
12157 RExC_parse(pRExC_state->parse)--; /* for vFAIL to print correctly */
12158 vFAIL("Sequence (? incomplete")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Sequence (? incomplete", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12158, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12159 break;
12160
12161 case ')':
12162 if (RExC_strict(pRExC_state->strict)) { /* [perl #132851] */
12163 ckWARNreg(RExC_parse, "Empty (?) without any modifiers")do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12163, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Empty (?) without any modifiers" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12163, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
12164 }
12165 /* FALLTHROUGH */
12166 case '*': /* If you want to support (?*...), first reconcile with GH #17363 */
12167 /* FALLTHROUGH */
12168 default: /* e.g., (?i) */
12169 RExC_parse(pRExC_state->parse) = (char *) seqstart + 1;
12170 parse_flags:
12171 parse_lparen_question_flags(pRExC_state)S_parse_lparen_question_flags( pRExC_state);
12172 if (UCHARAT(RExC_parse)((int)*(const U8*)((pRExC_state->parse))) != ':') {
12173 if (RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end))
12174 nextchar(pRExC_state)S_nextchar( pRExC_state);
12175 *flagp = TRYAGAIN0x10;
12176 return 0;
12177 }
12178 paren = ':';
12179 nextchar(pRExC_state)S_nextchar( pRExC_state);
12180 ret = 0;
12181 goto parse_rest;
12182 } /* end switch */
12183 }
12184 else if (!(RExC_flags(pRExC_state->flags) & RXf_PMf_NOCAPTURE(1U << (0 +5)))) { /* (...) */
12185 capturing_parens:
12186 parno = RExC_npar(pRExC_state->npar);
12187 RExC_npar(pRExC_state->npar)++;
12188 if (! ALL_PARENS_COUNTED((pRExC_state->total_par) > 0)) {
12189 /* If we are in our first pass through (and maybe only pass),
12190 * we need to allocate memory for the capturing parentheses
12191 * data structures.
12192 */
12193
12194 if (!RExC_parens_buf_size(pRExC_state->parens_buf_size)) {
12195 /* first guess at number of parens we might encounter */
12196 RExC_parens_buf_size(pRExC_state->parens_buf_size) = 10;
12197
12198 /* setup RExC_open_parens, which holds the address of each
12199 * OPEN tag, and to make things simpler for the 0 index the
12200 * start of the program - this is used later for offsets */
12201 Newxz(RExC_open_parens, RExC_parens_buf_size,((pRExC_state->open_parens) = ((void)(__builtin_expect((((
(( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesyscalloc(((pRExC_state->parens_buf_size)),sizeof
(regnode_offset)))))
12202 regnode_offset)((pRExC_state->open_parens) = ((void)(__builtin_expect((((
(( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesyscalloc(((pRExC_state->parens_buf_size)),sizeof
(regnode_offset)))))
;
12203 RExC_open_parens(pRExC_state->open_parens)[0] = 1; /* +1 for REG_MAGIC */
12204
12205 /* setup RExC_close_parens, which holds the address of each
12206 * CLOSE tag, and to make things simpler for the 0 index
12207 * the end of the program - this is used later for offsets
12208 * */
12209 Newxz(RExC_close_parens, RExC_parens_buf_size,((pRExC_state->close_parens) = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesyscalloc(((pRExC_state->parens_buf_size)),sizeof
(regnode_offset)))))
12210 regnode_offset)((pRExC_state->close_parens) = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesyscalloc(((pRExC_state->parens_buf_size)),sizeof
(regnode_offset)))))
;
12211 /* we dont know where end op starts yet, so we dont need to
12212 * set RExC_close_parens[0] like we do RExC_open_parens[0]
12213 * above */
12214 }
12215 else if (RExC_npar(pRExC_state->npar) > RExC_parens_buf_size(pRExC_state->parens_buf_size)) {
12216 I32 old_size = RExC_parens_buf_size(pRExC_state->parens_buf_size);
12217
12218 RExC_parens_buf_size(pRExC_state->parens_buf_size) *= 2;
12219
12220 Renew(RExC_open_parens, RExC_parens_buf_size,((pRExC_state->open_parens) = ((void)(__builtin_expect((((
(( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesysrealloc((void *)((pRExC_state->open_parens)
),(size_t)(((pRExC_state->parens_buf_size))*sizeof(regnode_offset
))))))
12221 regnode_offset)((pRExC_state->open_parens) = ((void)(__builtin_expect((((
(( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesysrealloc((void *)((pRExC_state->open_parens)
),(size_t)(((pRExC_state->parens_buf_size))*sizeof(regnode_offset
))))))
;
12222 Zero(RExC_open_parens + old_size,((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->parens_buf_size) - old_size) || sizeof(regnode_offset) >
((size_t)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->
parens_buf_size) - old_size)))) ? (size_t)((pRExC_state->parens_buf_size
) - old_size) : ((size_t)-1)/sizeof(regnode_offset)) > ((size_t
)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->open_parens
) + old_size)) != 0) ? (void)0 : __assert2("re_comp.c", 12223
, __func__, "((void*)((pRExC_state->open_parens) + old_size)) != 0"
)), (void)memset((char*)((pRExC_state->open_parens) + old_size
),0,((pRExC_state->parens_buf_size) - old_size) * sizeof(regnode_offset
)))
12223 RExC_parens_buf_size - old_size, regnode_offset)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->parens_buf_size) - old_size) || sizeof(regnode_offset) >
((size_t)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->
parens_buf_size) - old_size)))) ? (size_t)((pRExC_state->parens_buf_size
) - old_size) : ((size_t)-1)/sizeof(regnode_offset)) > ((size_t
)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->open_parens
) + old_size)) != 0) ? (void)0 : __assert2("re_comp.c", 12223
, __func__, "((void*)((pRExC_state->open_parens) + old_size)) != 0"
)), (void)memset((char*)((pRExC_state->open_parens) + old_size
),0,((pRExC_state->parens_buf_size) - old_size) * sizeof(regnode_offset
)))
;
12224
12225 Renew(RExC_close_parens, RExC_parens_buf_size,((pRExC_state->close_parens) = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesysrealloc((void *)((pRExC_state->close_parens
)),(size_t)(((pRExC_state->parens_buf_size))*sizeof(regnode_offset
))))))
12226 regnode_offset)((pRExC_state->close_parens) = ((void)(__builtin_expect(((
((( sizeof(size_t) < sizeof((pRExC_state->parens_buf_size
)) || sizeof(regnode_offset) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof((pRExC_state->parens_buf_size))))) ? (size_t
)((pRExC_state->parens_buf_size)) : ((size_t)-1)/sizeof(regnode_offset
)) > ((size_t)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool
)0),(0)) && (Perl_croak_memory_wrap(),0)), (regnode_offset
*)(Perl_safesysrealloc((void *)((pRExC_state->close_parens
)),(size_t)(((pRExC_state->parens_buf_size))*sizeof(regnode_offset
))))))
;
12227 Zero(RExC_close_parens + old_size,((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->parens_buf_size) - old_size) || sizeof(regnode_offset) >
((size_t)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->
parens_buf_size) - old_size)))) ? (size_t)((pRExC_state->parens_buf_size
) - old_size) : ((size_t)-1)/sizeof(regnode_offset)) > ((size_t
)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->close_parens
) + old_size)) != 0) ? (void)0 : __assert2("re_comp.c", 12228
, __func__, "((void*)((pRExC_state->close_parens) + old_size)) != 0"
)), (void)memset((char*)((pRExC_state->close_parens) + old_size
),0,((pRExC_state->parens_buf_size) - old_size) * sizeof(regnode_offset
)))
12228 RExC_parens_buf_size - old_size, regnode_offset)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof((pRExC_state
->parens_buf_size) - old_size) || sizeof(regnode_offset) >
((size_t)1 << 8*(sizeof(size_t) - sizeof((pRExC_state->
parens_buf_size) - old_size)))) ? (size_t)((pRExC_state->parens_buf_size
) - old_size) : ((size_t)-1)/sizeof(regnode_offset)) > ((size_t
)-1)/sizeof(regnode_offset))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)((pRExC_state->close_parens
) + old_size)) != 0) ? (void)0 : __assert2("re_comp.c", 12228
, __func__, "((void*)((pRExC_state->close_parens) + old_size)) != 0"
)), (void)memset((char*)((pRExC_state->close_parens) + old_size
),0,((pRExC_state->parens_buf_size) - old_size) * sizeof(regnode_offset
)))
;
12229 }
12230 }
12231
12232 ret = reganode(pRExC_state, OPEN, parno)S_reganode( pRExC_state,63,parno);
12233 if (!RExC_nestroot(pRExC_state->nestroot))
12234 RExC_nestroot(pRExC_state->nestroot) = parno;
12235 if (RExC_open_parens(pRExC_state->open_parens) && !RExC_open_parens(pRExC_state->open_parens)[parno])
12236 {
12237 DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting open paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ret);} while (0)
12238 "%*s%*s Setting open paren #%" IVdf " to %zu\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting open paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ret);} while (0)
12239 22, "| |", (int)(depth * 2 + 1), "",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting open paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ret);} while (0)
12240 (IV)parno, ret))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting open paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ret);} while (0)
;
12241 RExC_open_parens(pRExC_state->open_parens)[parno]= ret;
12242 }
12243
12244 Set_Node_Length(REGNODE_p(ret), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12244, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
; /* MJD */
12245 Set_Node_Offset(REGNODE_p(ret), RExC_parse)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 12245, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(((pRExC_state->parse))-(pRExC_state->
start)));} while (0); if((((((pRExC_state->emit_start) + (
ret))) - (pRExC_state->emit_start))) < 0) { Perl_croak(
"value of node is %d in Offset macro", (int)(((((pRExC_state
->emit_start) + (ret))) - (pRExC_state->emit_start))));
} else { ((pRExC_state->rxi)->u.offsets)[2*(((((pRExC_state
->emit_start) + (ret))) - (pRExC_state->emit_start)))-1
] = (((pRExC_state->parse))-(pRExC_state->start)); } } while
(0)
; /* MJD */
12246 is_open = 1;
12247 } else {
12248 /* with RXf_PMf_NOCAPTURE treat (...) as (?:...) */
12249 paren = ':';
12250 ret = 0;
12251 }
12252 }
12253 else /* ! paren */
12254 ret = 0;
12255
12256 parse_rest:
12257 /* Pick up the branches, linking them together. */
12258 parse_start = RExC_parse(pRExC_state->parse); /* MJD */
12259 br = regbranch(pRExC_state, &flags, 1, depth+1)S_regbranch( pRExC_state,&flags,1,depth+1);
12260
12261 /* branch_len = (paren != 0); */
12262
12263 if (br == 0) {
12264 RETURN_FAIL_ON_RESTART(flags, flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
12265 FAIL2("panic: regbranch returned failure, flags=%#" UVxf, (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regbranch returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
;
12266 }
12267 if (*RExC_parse(pRExC_state->parse) == '|') {
12268 if (RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ)) {
12269 reginsert(pRExC_state, BRANCHJ, br, depth+1)S_reginsert( pRExC_state,78,br,depth+1);
12270 }
12271 else { /* MJD */
12272 reginsert(pRExC_state, BRANCH, br, depth+1)S_reginsert( pRExC_state,39,br,depth+1);
12273 Set_Node_Length(REGNODE_p(br), paren != 0)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12273, (int
)(((((pRExC_state->emit_start) + (br))) - (pRExC_state->
emit_start))), (int)(paren != 0));} while (0); if((((((pRExC_state
->emit_start) + (br))) - (pRExC_state->emit_start))) <
0) { Perl_croak( "value of node is %d in Length macro", (int
)(((((pRExC_state->emit_start) + (br))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (br))) - (pRExC_state->
emit_start)))] = (paren != 0); } } while (0)
;
12274 Set_Node_Offset_To_R(br, parse_start-RExC_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 12274, (int
)(br), (int)(parse_start-(pRExC_state->start)));} while (0
); if((br) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(br)); } else { ((pRExC_state->rxi)->u.offsets)[
2*(br)-1] = (parse_start-(pRExC_state->start)); } } while (
0)
;
12275 }
12276 have_branch = 1;
12277 }
12278 else if (paren == ':') {
12279 *flagp |= flags&SIMPLE0x02;
12280 }
12281 if (is_open) { /* Starts with OPEN. */
12282 if (! REGTAIL(pRExC_state, ret, br)S_regtail( (pRExC_state),(ret),(br),depth+1)) { /* OPEN -> first. */
12283 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12284 }
12285 }
12286 else if (paren != '?') /* Not Conditional */
12287 ret = br;
12288 *flagp |= flags & (SPSTART0x04 | HASWIDTH0x01 | POSTPONED0x08);
12289 lastbr = br;
12290 while (*RExC_parse(pRExC_state->parse) == '|') {
12291 if (RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ)) {
12292 bool_Bool shut_gcc_up;
12293
12294 ender = reganode(pRExC_state, LONGJMP, 0)S_reganode( pRExC_state,77,0);
12295
12296 /* Append to the previous. */
12297 shut_gcc_up = REGTAIL(pRExC_state,S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
12298 REGNODE_OFFSET(NEXTOPER(NEXTOPER(REGNODE_p(lastbr)))),S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
12299 ender)S_regtail( (pRExC_state),(((((((((pRExC_state->emit_start)
+ (lastbr))) + 1)) + 1)) - (pRExC_state->emit_start))),(ender
),depth+1)
;
12300 PERL_UNUSED_VAR(shut_gcc_up)((void)sizeof(shut_gcc_up));
12301 }
12302 nextchar(pRExC_state)S_nextchar( pRExC_state);
12303 if (freeze_paren) {
12304 if (RExC_npar(pRExC_state->npar) > after_freeze)
12305 after_freeze = RExC_npar(pRExC_state->npar);
12306 RExC_npar(pRExC_state->npar) = freeze_paren;
12307 }
12308 br = regbranch(pRExC_state, &flags, 0, depth+1)S_regbranch( pRExC_state,&flags,0,depth+1);
12309
12310 if (br == 0) {
12311 RETURN_FAIL_ON_RESTART(flags, flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
12312 FAIL2("panic: regbranch returned failure, flags=%#" UVxf, (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regbranch returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
;
12313 }
12314 if (! REGTAIL(pRExC_state, lastbr, br)S_regtail( (pRExC_state),(lastbr),(br),depth+1)) { /* BRANCH -> BRANCH. */
12315 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12316 }
12317 lastbr = br;
12318 *flagp |= flags & (SPSTART0x04 | HASWIDTH0x01 | POSTPONED0x08);
12319 }
12320
12321 if (have_branch || paren != ':') {
12322 regnode * br;
12323
12324 /* Make a closing node, and hook it on the end. */
12325 switch (paren) {
12326 case ':':
12327 ender = reg_node(pRExC_state, TAIL)S_reg_node( pRExC_state,55);
12328 break;
12329 case 1: case 2:
12330 ender = reganode(pRExC_state, CLOSE, parno)S_reganode( pRExC_state,64,parno);
12331 if ( RExC_close_parens(pRExC_state->close_parens) ) {
12332 DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ender);} while (0)
12333 "%*s%*s Setting close paren #%" IVdf " to %zu\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ender);} while (0)
12334 22, "| |", (int)(depth * 2 + 1), "",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ender);} while (0)
12335 (IV)parno, ender))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #%"
"ld" " to %zu\n", 22, "| |", (int)(depth * 2 + 1), "", (IV
)parno, ender);} while (0)
;
12336 RExC_close_parens(pRExC_state->close_parens)[parno]= ender;
12337 if (RExC_nestroot(pRExC_state->nestroot) == parno)
12338 RExC_nestroot(pRExC_state->nestroot) = 0;
12339 }
12340 Set_Node_Offset(REGNODE_p(ender), RExC_parse+1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 12340, (int
)(((((pRExC_state->emit_start) + (ender))) - (pRExC_state->
emit_start))), (int)(((pRExC_state->parse)+1)-(pRExC_state
->start)));} while (0); if((((((pRExC_state->emit_start
) + (ender))) - (pRExC_state->emit_start))) < 0) { Perl_croak
( "value of node is %d in Offset macro", (int)(((((pRExC_state
->emit_start) + (ender))) - (pRExC_state->emit_start)))
); } else { ((pRExC_state->rxi)->u.offsets)[2*(((((pRExC_state
->emit_start) + (ender))) - (pRExC_state->emit_start)))
-1] = (((pRExC_state->parse)+1)-(pRExC_state->start)); }
} while (0)
; /* MJD */
12341 Set_Node_Length(REGNODE_p(ender), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12341, (int
)(((((pRExC_state->emit_start) + (ender))) - (pRExC_state->
emit_start))), (int)(1));} while (0); if((((((pRExC_state->
emit_start) + (ender))) - (pRExC_state->emit_start))) <
0) { Perl_croak( "value of node is %d in Length macro", (int
)(((((pRExC_state->emit_start) + (ender))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ender))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
; /* MJD */
12342 break;
12343 case 's':
12344 ender = reg_node(pRExC_state, SRCLOSE)S_reg_node( pRExC_state,66);
12345 RExC_in_script_run(pRExC_state->in_script_run) = 0;
12346 break;
12347 case '<':
12348 case 'a':
12349 case 'A':
12350 case 'b':
12351 case 'B':
12352 case ',':
12353 case '=':
12354 case '!':
12355 *flagp &= ~HASWIDTH0x01;
12356 /* FALLTHROUGH */
12357 case 't': /* aTomic */
12358 case '>':
12359 ender = reg_node(pRExC_state, SUCCEED)S_reg_node( pRExC_state,1);
12360 break;
12361 case 0:
12362 ender = reg_node(pRExC_state, END)S_reg_node( pRExC_state,0);
12363 assert(!RExC_end_op)((!(pRExC_state->end_op)) ? (void)0 : __assert2("re_comp.c"
, 12363, __func__, "!RExC_end_op"))
; /* there can only be one! */
12364 RExC_end_op(pRExC_state->end_op) = REGNODE_p(ender)((pRExC_state->emit_start) + (ender));
12365 if (RExC_close_parens(pRExC_state->close_parens)) {
12366 DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #0 (END) to %zu\n"
, 22, "| |", (int)(depth * 2 + 1), "", ender);} while (0)
12367 "%*s%*s Setting close paren #0 (END) to %zu\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #0 (END) to %zu\n"
, 22, "| |", (int)(depth * 2 + 1), "", ender);} while (0)
12368 22, "| |", (int)(depth * 2 + 1), "",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #0 (END) to %zu\n"
, 22, "| |", (int)(depth * 2 + 1), "", ender);} while (0)
12369 ender))do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || ((0x0100000|0x000002) == (re_debug_flags
& (0x0100000|0x000002)))) Perl_re_printf( "%*s%*s Setting close paren #0 (END) to %zu\n"
, 22, "| |", (int)(depth * 2 + 1), "", ender);} while (0)
;
12370
12371 RExC_close_parens(pRExC_state->close_parens)[0]= ender;
12372 }
12373 break;
12374 }
12375 DEBUG_PARSE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12376 DEBUG_PARSE_MSG("lsbr");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12377 regprop(RExC_rx, RExC_mysv1, REGNODE_p(lastbr), NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12378 regprop(RExC_rx, RExC_mysv2, REGNODE_p(ender), NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12379 Perl_re_printf( aTHX_ "~ tying lastbr %s (%" IVdf ") to ender %s (%" IVdf ") offset %" IVdf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12380 SvPV_nolen_const(RExC_mysv1),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12381 (IV)lastbr,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12382 SvPV_nolen_const(RExC_mysv2),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12383 (IV)ender,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12384 (IV)(ender - lastbr)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12385 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
12386 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("lsbr") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),((pRExC_state->emit_start
) + (lastbr)),((void*)0),pRExC_state); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv2),((pRExC_state->emit_start
) + (ender)),((void*)0),pRExC_state); Perl_re_printf( "~ tying lastbr %s (%"
"ld" ") to ender %s (%" "ld" ") offset %" "ld" "\n", (((((pRExC_state
->mysv1))->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((const char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv
)) : Perl_sv_2pv_flags( (pRExC_state->mysv1),0,2|32)), (IV
)lastbr, (((((pRExC_state->mysv2))->sv_flags & (0x00000400
|0x00200000)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state
->mysv2))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state
->mysv2),0,2|32)), (IV)ender, (IV)(ender - lastbr) ); };} while
(0)
;
12387 if (! REGTAIL(pRExC_state, lastbr, ender)S_regtail( (pRExC_state),(lastbr),(ender),depth+1)) {
12388 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12389 }
12390
12391 if (have_branch) {
12392 char is_nothing= 1;
12393 if (depth==1)
12394 RExC_seen(pRExC_state->seen) |= REG_TOP_LEVEL_BRANCHES_SEEN0x00000040;
12395
12396 /* Hook the tails of the branches to the closing node. */
12397 for (br = REGNODE_p(ret)((pRExC_state->emit_start) + (ret)); br; br = regnext(br)Perl_regnext( br)) {
12398 const U8 op = PL_regkind[OP(br)((br)->type)];
12399 if (op == BRANCH39) {
12400 if (! REGTAIL_STUDY(pRExC_state,S_regtail_study( (pRExC_state),(((((br) + 1)) - (pRExC_state->
emit_start))),(ender),depth+1)
12401 REGNODE_OFFSET(NEXTOPER(br)),S_regtail_study( (pRExC_state),(((((br) + 1)) - (pRExC_state->
emit_start))),(ender),depth+1)
12402 ender)S_regtail_study( (pRExC_state),(((((br) + 1)) - (pRExC_state->
emit_start))),(ender),depth+1)
)
12403 {
12404 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12405 }
12406 if ( OP(NEXTOPER(br))((((br) + 1))->type) != NOTHING54
12407 || regnext(NEXTOPER(br))Perl_regnext( ((br) + 1)) != REGNODE_p(ender)((pRExC_state->emit_start) + (ender)))
12408 is_nothing= 0;
12409 }
12410 else if (op == BRANCHJ78) {
12411 bool_Bool shut_gcc_up = REGTAIL_STUDY(pRExC_state,S_regtail_study( (pRExC_state),(((((((br) + 1)) + 1)) - (pRExC_state
->emit_start))),(ender),depth+1)
12412 REGNODE_OFFSET(NEXTOPER(NEXTOPER(br))),S_regtail_study( (pRExC_state),(((((((br) + 1)) + 1)) - (pRExC_state
->emit_start))),(ender),depth+1)
12413 ender)S_regtail_study( (pRExC_state),(((((((br) + 1)) + 1)) - (pRExC_state
->emit_start))),(ender),depth+1)
;
12414 PERL_UNUSED_VAR(shut_gcc_up)((void)sizeof(shut_gcc_up));
12415 /* for now we always disable this optimisation * /
12416 if ( OP(NEXTOPER(NEXTOPER(br))) != NOTHING
12417 || regnext(NEXTOPER(NEXTOPER(br))) != REGNODE_p(ender))
12418 */
12419 is_nothing= 0;
12420 }
12421 }
12422 if (is_nothing) {
12423 regnode * ret_as_regnode = REGNODE_p(ret)((pRExC_state->emit_start) + (ret));
12424 br= PL_regkind[OP(ret_as_regnode)((ret_as_regnode)->type)] != BRANCH39
12425 ? regnext(ret_as_regnode)Perl_regnext( ret_as_regnode)
12426 : ret_as_regnode;
12427 DEBUG_PARSE_r({do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12428 DEBUG_PARSE_MSG("NADA");do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12429 regprop(RExC_rx, RExC_mysv1, ret_as_regnode,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12430 NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12431 regprop(RExC_rx, RExC_mysv2, REGNODE_p(ender),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12432 NULL, pRExC_state);do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12433 Perl_re_printf( aTHX_ "~ converting ret %s (%" IVdf ") to ender %s (%" IVdf ") offset %" IVdf "\n",do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12434 SvPV_nolen_const(RExC_mysv1),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12435 (IV)REG_NODE_NUM(ret_as_regnode),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12436 SvPV_nolen_const(RExC_mysv2),do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12437 (IV)ender,do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12438 (IV)(ender - ret)do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12439 );do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
12440 })do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", ("NADA") ); (pRExC_state->
lastnum)=(pRExC_state->emit); (pRExC_state->lastparse)=
(pRExC_state->parse); };} while (0); my_regprop( (pRExC_state
->rx),(pRExC_state->mysv1),ret_as_regnode,((void*)0),pRExC_state
); my_regprop( (pRExC_state->rx),(pRExC_state->mysv2),(
(pRExC_state->emit_start) + (ender)),((void*)0),pRExC_state
); Perl_re_printf( "~ converting ret %s (%" "ld" ") to ender %s (%"
"ld" ") offset %" "ld" "\n", (((((pRExC_state->mysv1))->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((const
char*)(0 + ((pRExC_state->mysv1))->sv_u.svu_pv)) : Perl_sv_2pv_flags
( (pRExC_state->mysv1),0,2|32)), (IV)((ret_as_regnode) ? (
int)((ret_as_regnode)-(pRExC_state->emit_start)) : -1), ((
(((pRExC_state->mysv2))->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((const char*)(0 + ((pRExC_state->mysv2
))->sv_u.svu_pv)) : Perl_sv_2pv_flags( (pRExC_state->mysv2
),0,2|32)), (IV)ender, (IV)(ender - ret) ); };} while (0)
;
12441 OP(br)((br)->type)= NOTHING54;
12442 if (OP(REGNODE_p(ender))((((pRExC_state->emit_start) + (ender)))->type) == TAIL55) {
12443 NEXT_OFF(br)((br)->next_off)= 0;
12444 RExC_emit(pRExC_state->emit)= REGNODE_OFFSET(br)((br) - (pRExC_state->emit_start)) + 1;
12445 } else {
12446 regnode *opt;
12447 for ( opt= br + 1; opt < REGNODE_p(ender)((pRExC_state->emit_start) + (ender)) ; opt++ )
12448 OP(opt)((opt)->type)= OPTIMIZED107;
12449 NEXT_OFF(br)((br)->next_off)= REGNODE_p(ender)((pRExC_state->emit_start) + (ender)) - br;
12450 }
12451 }
12452 }
12453 }
12454
12455 {
12456 const char *p;
12457 /* Even/odd or x=don't care: 010101x10x */
12458 static const char parens[] = "=!aA<,>Bbt";
12459 /* flag below is set to 0 up through 'A'; 1 for larger */
12460
12461 if (paren && (p = strchr(parens, paren))) {
12462 U8 node = ((p - parens) % 2) ? UNLESSM80 : IFMATCH79;
12463 int flag = (p - parens) > 3;
12464
12465 if (paren == '>' || paren == 't') {
12466 node = SUSPEND81, flag = 0;
12467 }
12468
12469 reginsert(pRExC_state, node, ret, depth+1)S_reginsert( pRExC_state,node,ret,depth+1);
12470 Set_Node_Cur_Length(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12470, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - parse_start));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - parse_start)
; } } while (0)
;
12471 Set_Node_Offset(REGNODE_p(ret), parse_start + 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 12471, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start + 1)-(pRExC_state->start
)));} while (0); if((((((pRExC_state->emit_start) + (ret))
) - (pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start + 1)-(pRExC_state->start
)); } } while (0)
;
12472 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = flag;
12473 if (! REGTAIL_STUDY(pRExC_state, ret, reg_node(pRExC_state, TAIL))S_regtail_study( (pRExC_state),(ret),(S_reg_node( pRExC_state
,55)),depth+1)
)
12474 {
12475 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12476 }
12477 }
12478 }
12479
12480 /* Check for proper termination. */
12481 if (paren) {
12482 /* restore original flags, but keep (?p) and, if we've encountered
12483 * something in the parse that changes /d rules into /u, keep the /u */
12484 RExC_flags(pRExC_state->flags) = oregflags | (RExC_flags(pRExC_state->flags) & RXf_PMf_KEEPCOPY(1U << (0 +6)));
12485 if (DEPENDS_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)
&& toUSE_UNI_CHARSET_NOT_DEPENDS((pRExC_state->uni_semantics) || (((pRExC_state->utf8))
? (_Bool)1 : (_Bool)0))
) {
12486 set_regex_charset(&RExC_flags(pRExC_state->flags), REGEX_UNICODE_CHARSET);
12487 }
12488 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end) || UCHARAT(RExC_parse)((int)*(const U8*)((pRExC_state->parse))) != ')') {
12489 RExC_parse(pRExC_state->parse) = oregcomp_parse;
12490 vFAIL("Unmatched (")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unmatched (", (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 12490, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
12491 }
12492 nextchar(pRExC_state)S_nextchar( pRExC_state);
12493 }
12494 else if (!paren && RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end)) {
12495 if (*RExC_parse(pRExC_state->parse) == ')') {
12496 RExC_parse(pRExC_state->parse)++;
12497 vFAIL("Unmatched )")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unmatched )", (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 12497, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
12498 }
12499 else
12500 FAIL("Junk on end of regexp")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Junk on end of regexp"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
; /* "Can't happen". */
12501 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 12501
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /* NOTREACHED */
12502 }
12503
12504 if (after_freeze > RExC_npar(pRExC_state->npar))
12505 RExC_npar(pRExC_state->npar) = after_freeze;
12506
12507 RExC_in_lookaround(pRExC_state->in_lookaround) = was_in_lookaround;
12508
12509 return(ret);
12510}
12511
12512/*
12513 - regbranch - one alternative of an | operator
12514 *
12515 * Implements the concatenation operator.
12516 *
12517 * On success, returns the offset at which any next node should be placed into
12518 * the regex engine program being compiled.
12519 *
12520 * Returns 0 otherwise, setting flagp to RESTART_PARSE if the parse needs
12521 * to be restarted, or'd with NEED_UTF8 if the pattern needs to be upgraded to
12522 * UTF-8
12523 */
12524STATICstatic regnode_offset
12525S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
12526{
12527 regnode_offset ret;
12528 regnode_offset chain = 0;
12529 regnode_offset latest;
12530 I32 flags = 0, c = 0;
12531 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 12531, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 12531, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
12532
12533 PERL_ARGS_ASSERT_REGBRANCH((pRExC_state) ? (void)0 : __assert2("re_comp.c", 12533, __func__
, "pRExC_state")); ((flagp) ? (void)0 : __assert2("re_comp.c"
, 12533, __func__, "flagp"))
;
12534
12535 DEBUG_PARSE("brnc")do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (("brnc")) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
;
12536
12537 if (first)
12538 ret = 0;
12539 else {
12540 if (RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ))
12541 ret = reganode(pRExC_state, BRANCHJ, 0)S_reganode( pRExC_state,78,0);
12542 else {
12543 ret = reg_node(pRExC_state, BRANCH)S_reg_node( pRExC_state,39);
12544 Set_Node_Length(REGNODE_p(ret), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12544, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
;
12545 }
12546 }
12547
12548 *flagp = WORST0; /* Tentatively. */
12549
12550 skip_to_be_ignored_text(pRExC_state, &RExC_parse,S_skip_to_be_ignored_text( pRExC_state,&(pRExC_state->
parse),(0))
12551 FALSE /* Don't force to /x */ )S_skip_to_be_ignored_text( pRExC_state,&(pRExC_state->
parse),(0))
;
12552 while (RExC_parse(pRExC_state->parse) < RExC_end(pRExC_state->end) && *RExC_parse(pRExC_state->parse) != '|' && *RExC_parse(pRExC_state->parse) != ')') {
12553 flags &= ~TRYAGAIN0x10;
12554 latest = regpiece(pRExC_state, &flags, depth+1)S_regpiece( pRExC_state,&flags,depth+1);
12555 if (latest == 0) {
12556 if (flags & TRYAGAIN0x10)
12557 continue;
12558 RETURN_FAIL_ON_RESTART(flags, flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
12559 FAIL2("panic: regpiece returned failure, flags=%#" UVxf, (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regpiece returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
;
12560 }
12561 else if (ret == 0)
12562 ret = latest;
12563 *flagp |= flags&(HASWIDTH0x01|POSTPONED0x08);
12564 if (chain == 0) /* First piece. */
12565 *flagp |= flags&SPSTART0x04;
12566 else {
12567 /* FIXME adding one for every branch after the first is probably
12568 * excessive now we have TRIE support. (hv) */
12569 MARK_NAUGHTY(1)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (1)
;
12570 if (! REGTAIL(pRExC_state, chain, latest)S_regtail( (pRExC_state),(chain),(latest),depth+1)) {
12571 /* XXX We could just redo this branch, but figuring out what
12572 * bookkeeping needs to be reset is a pain, and it's likely
12573 * that other branches that goto END will also be too large */
12574 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12575 }
12576 }
12577 chain = latest;
12578 c++;
12579 }
12580 if (chain == 0) { /* Loop ran zero times. */
12581 chain = reg_node(pRExC_state, NOTHING)S_reg_node( pRExC_state,54);
12582 if (ret == 0)
12583 ret = chain;
12584 }
12585 if (c == 1) {
12586 *flagp |= flags&SIMPLE0x02;
12587 }
12588
12589 return ret;
12590}
12591
12592/*
12593 - regpiece - something followed by possible quantifier * + ? {n,m}
12594 *
12595 * Note that the branching code sequences used for ? and the general cases
12596 * of * and + are somewhat optimized: they use the same NOTHING node as
12597 * both the endmarker for their branch list and the body of the last branch.
12598 * It might seem that this node could be dispensed with entirely, but the
12599 * endmarker role is not redundant.
12600 *
12601 * On success, returns the offset at which any next node should be placed into
12602 * the regex engine program being compiled.
12603 *
12604 * Returns 0 otherwise, with *flagp set to indicate why:
12605 * TRYAGAIN if regatom() returns 0 with TRYAGAIN.
12606 * RESTART_PARSE if the parse needs to be restarted, or'd with
12607 * NEED_UTF8 if the pattern needs to be upgraded to UTF-8.
12608 */
12609STATICstatic regnode_offset
12610S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
12611{
12612 regnode_offset ret;
12613 char op;
12614 char *next;
12615 I32 flags;
12616 const char * const origparse = RExC_parse(pRExC_state->parse);
12617 I32 min;
12618 I32 max = REG_INFTY0xffff;
12619#ifdef RE_TRACK_PATTERN_OFFSETS
12620 char *parse_start;
12621#endif
12622 const char *maxpos = NULL((void*)0);
12623 UV uv;
12624
12625 /* Save the original in case we change the emitted regop to a FAIL. */
12626 const regnode_offset orig_emit = RExC_emit(pRExC_state->emit);
12627
12628 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 12628, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 12628, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
12629
12630 PERL_ARGS_ASSERT_REGPIECE((pRExC_state) ? (void)0 : __assert2("re_comp.c", 12630, __func__
, "pRExC_state")); ((flagp) ? (void)0 : __assert2("re_comp.c"
, 12630, __func__, "flagp"))
;
12631
12632 DEBUG_PARSE("piec")do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (("piec")) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
;
12633
12634 ret = regatom(pRExC_state, &flags, depth+1)S_regatom( pRExC_state,&flags,depth+1);
12635 if (ret == 0) {
12636 RETURN_FAIL_ON_RESTART_OR_FLAGS(flags, flagp, TRYAGAIN)do { if ((flags) & (0x20|0x40|(0x10))) { *(flagp) = (flags
) & (0x20|0x40|(0x10)); return 0; } } while (0)
;
12637 FAIL2("panic: regatom returned failure, flags=%#" UVxf, (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regatom returned failure, flags=%#" "lx"
" in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int)((((
(pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)(len), (void*)((pRExC_state->precomp)), ellipses
); } while (0)
;
12638 }
12639
12640 op = *RExC_parse(pRExC_state->parse);
12641
12642 if (op == '{' && regcurlyS_regcurly(RExC_parse(pRExC_state->parse))) {
12643 maxpos = NULL((void*)0);
12644#ifdef RE_TRACK_PATTERN_OFFSETS
12645 parse_start = RExC_parse(pRExC_state->parse); /* MJD */
12646#endif
12647 next = RExC_parse(pRExC_state->parse) + 1;
12648 while (isDIGIT(*next)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 12648
, __func__, "('9') >= ('0')")), ( (sizeof(*next) == sizeof
(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12648, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12648, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U8) (*next
)))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))
))) : (sizeof(*next) == sizeof(U32)) ? ((((NV) (('0')) >= 0
) ? (void)0 : __assert2("re_comp.c", 12648, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12648, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*next)))) - ((('0')) | 0))) <= (((U64) (((('9'
) - ('0'))) | 0))))) : (((sizeof(*next) == sizeof(U64)) ? (void
)0 : __assert2("re_comp.c", 12648, __func__, "sizeof(*next) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12648, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12648, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*next
)))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))
))))))
|| *next == ',') {
12649 if (*next == ',') {
12650 if (maxpos)
12651 break;
12652 else
12653 maxpos = next;
12654 }
12655 next++;
12656 }
12657 if (*next == '}') { /* got one */
12658 const char* endptr;
12659 if (!maxpos)
12660 maxpos = next;
12661 RExC_parse(pRExC_state->parse)++;
12662 if (isDIGIT(*RExC_parse)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 12662
, __func__, "('9') >= ('0')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 12662, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12662, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 12662, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12662, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 12662, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12662, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12662, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'
))) | 0))))))))
) {
12663 endptr = RExC_end(pRExC_state->end);
12664 if (!grok_atoUVPerl_grok_atoUV(RExC_parse(pRExC_state->parse), &uv, &endptr))
12665 vFAIL("Invalid quantifier in {,}")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Invalid quantifier in {,}", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12665, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12666 if (uv >= REG_INFTY0xffff)
12667 vFAIL2("Quantifier in {,} bigger than %d", REG_INFTY - 1)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Quantifier in {,} bigger than %d"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", 0xffff - 1, (int)((
(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12667, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12668 min = (I32)uv;
12669 } else {
12670 min = 0;
12671 }
12672 if (*maxpos == ',')
12673 maxpos++;
12674 else
12675 maxpos = RExC_parse(pRExC_state->parse);
12676 if (isDIGIT(*maxpos)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 12676
, __func__, "('9') >= ('0')")), ( (sizeof(*maxpos) == sizeof
(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12676, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12676, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U8) (*maxpos
)))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))
))) : (sizeof(*maxpos) == sizeof(U32)) ? ((((NV) (('0')) >=
0) ? (void)0 : __assert2("re_comp.c", 12676, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12676, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*maxpos)))) - ((('0')) | 0))) <= (((U64) ((((
'9') - ('0'))) | 0))))) : (((sizeof(*maxpos) == sizeof(U64)) ?
(void)0 : __assert2("re_comp.c", 12676, __func__, "sizeof(*maxpos) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 12676, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 12676, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*maxpos
)))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))
))))))
) {
12677 endptr = RExC_end(pRExC_state->end);
12678 if (!grok_atoUVPerl_grok_atoUV(maxpos, &uv, &endptr))
12679 vFAIL("Invalid quantifier in {,}")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Invalid quantifier in {,}", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12679, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12680 if (uv >= REG_INFTY0xffff)
12681 vFAIL2("Quantifier in {,} bigger than %d", REG_INFTY - 1)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Quantifier in {,} bigger than %d"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", 0xffff - 1, (int)((
(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12681, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12682 max = (I32)uv;
12683 } else {
12684 max = REG_INFTY0xffff; /* meaning "infinity" */
12685 }
12686 RExC_parse(pRExC_state->parse) = next;
12687 nextchar(pRExC_state)S_nextchar( pRExC_state);
12688 if (max < min) { /* If can't match, warn and optimize to fail
12689 unconditionally */
12690 reginsert(pRExC_state, OPFAIL, orig_emit, depth+1)S_reginsert( pRExC_state,97,orig_emit,depth+1);
12691 ckWARNreg(RExC_parse, "Quantifier {n,m} with n > m can't match")do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12691, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Quantifier {n,m} with n > m can't match" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12691, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
12692 NEXT_OFF(REGNODE_p(orig_emit))((((pRExC_state->emit_start) + (orig_emit)))->next_off) =
12693 regarglen[OPFAIL97] + NODE_STEP_REGNODE1;
12694 return ret;
12695 }
12696 else if (min == max && *RExC_parse(pRExC_state->parse) == '?')
12697 {
12698 ckWARN2reg(RExC_parse + 1,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12700, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Useless use of greediness modifier '%c'" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", *(pRExC_state->parse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12700, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
12699 "Useless use of greediness modifier '%c'",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12700, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Useless use of greediness modifier '%c'" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", *(pRExC_state->parse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12700, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
12700 *RExC_parse)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12700, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Useless use of greediness modifier '%c'" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", *(pRExC_state->parse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12700, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
;
12701 }
12702
12703 do_curly:
12704 if ((flags&SIMPLE0x02)) {
12705 if (min == 0 && max == REG_INFTY0xffff) {
12706
12707 /* Going from 0..inf is currently forbidden in wildcard
12708 * subpatterns. The only reason is to make it harder to
12709 * write patterns that take a long long time to halt, and
12710 * because the use of this construct isn't necessary in
12711 * matching Unicode property values */
12712 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
12713 RExC_parse(pRExC_state->parse)++;
12714 /* diag_listed_as: Use of %s is not allowed in Unicode
12715 property wildcard subpatterns in regex; marked by
12716 <-- HERE in m/%s/ */
12717 vFAIL("Use of quantifier '*' is not allowed in"do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Use of quantifier '*' is not allowed in" " Unicode property wildcard subpatterns"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12718, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
12718 " Unicode property wildcard subpatterns")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Use of quantifier '*' is not allowed in" " Unicode property wildcard subpatterns"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12718, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12719 /* Note, don't need to worry about {0,}, as a '}' isn't
12720 * legal at all in wildcards, so wouldn't get this far
12721 * */
12722 }
12723 reginsert(pRExC_state, STAR, ret, depth+1)S_reginsert( pRExC_state,56,ret,depth+1);
12724 MARK_NAUGHTY(4)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (4)
;
12725 RExC_seen(pRExC_state->seen) |= REG_UNBOUNDED_QUANTIFIER_SEEN0x00001000;
12726 goto nest_check;
12727 }
12728 if (min == 1 && max == REG_INFTY0xffff) {
12729 reginsert(pRExC_state, PLUS, ret, depth+1)S_reginsert( pRExC_state,57,ret,depth+1);
12730 MARK_NAUGHTY(3)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (3)
;
12731 RExC_seen(pRExC_state->seen) |= REG_UNBOUNDED_QUANTIFIER_SEEN0x00001000;
12732 goto nest_check;
12733 }
12734 MARK_NAUGHTY_EXP(2, 2)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (pRExC_state->naughty) / (2) + (2)
;
12735 reginsert(pRExC_state, CURLY, ret, depth+1)S_reginsert( pRExC_state,58,ret,depth+1);
12736 Set_Node_Offset(REGNODE_p(ret), parse_start+1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 12736, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start+1)-(pRExC_state->start))
);} while (0); if((((((pRExC_state->emit_start) + (ret))) -
(pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start+1)-(pRExC_state->start
)); } } while (0)
; /* MJD */
12737 Set_Node_Cur_Length(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12737, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - parse_start));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - parse_start)
; } } while (0)
;
12738 }
12739 else {
12740 const regnode_offset w = reg_node(pRExC_state, WHILEM)S_reg_node( pRExC_state,62);
12741
12742 FLAGS(REGNODE_p(w))((((pRExC_state->emit_start) + (w)))->flags) = 0;
12743 if (! REGTAIL(pRExC_state, ret, w)S_regtail( (pRExC_state),(ret),(w),depth+1)) {
12744 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12745 }
12746 if (RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ)) {
12747 reginsert(pRExC_state, LONGJMP, ret, depth+1)S_reginsert( pRExC_state,77,ret,depth+1);
12748 reginsert(pRExC_state, NOTHING, ret, depth+1)S_reginsert( pRExC_state,54,ret,depth+1);
12749 NEXT_OFF(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->next_off) = 3; /* Go over LONGJMP. */
12750 }
12751 reginsert(pRExC_state, CURLYX, ret, depth+1)S_reginsert( pRExC_state,61,ret,depth+1);
12752 /* MJD hk */
12753 Set_Node_Offset(REGNODE_p(ret), parse_start+1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 12753, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start+1)-(pRExC_state->start))
);} while (0); if((((((pRExC_state->emit_start) + (ret))) -
(pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start+1)-(pRExC_state->start
)); } } while (0)
;
12754 Set_Node_Length(REGNODE_p(ret),do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12755, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(op == '{' ? ((pRExC_state->parse) - parse_start
) : 1));} while (0); if((((((pRExC_state->emit_start) + (ret
))) - (pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (op == '{' ? ((pRExC_state->parse) -
parse_start) : 1); } } while (0)
12755 op == '{' ? (RExC_parse - parse_start) : 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 12755, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(op == '{' ? ((pRExC_state->parse) - parse_start
) : 1));} while (0); if((((((pRExC_state->emit_start) + (ret
))) - (pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (op == '{' ? ((pRExC_state->parse) -
parse_start) : 1); } } while (0)
;
12756
12757 if (RExC_use_BRANCHJ(pRExC_state->use_BRANCHJ))
12758 NEXT_OFF(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->next_off) = 3; /* Go over NOTHING to
12759 LONGJMP. */
12760 if (! REGTAIL(pRExC_state, ret, reg_node(pRExC_state,S_regtail( (pRExC_state),(ret),(S_reg_node( pRExC_state,54)),
depth+1)
12761 NOTHING))S_regtail( (pRExC_state),(ret),(S_reg_node( pRExC_state,54)),
depth+1)
)
12762 {
12763 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12764 }
12765 RExC_whilem_seen(pRExC_state->whilem_seen)++;
12766 MARK_NAUGHTY_EXP(1, 4)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (pRExC_state->naughty) / (1) + (4)
; /* compound interest */
12767 }
12768 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = 0;
12769
12770 if (min > 0)
12771 *flagp = WORST0;
12772 if (max > 0)
12773 *flagp |= HASWIDTH0x01;
12774 ARG1_SET(REGNODE_p(ret), (U16)min)(((((struct regnode_2 *)((pRExC_state->emit_start) + (ret)
))->arg1)) = (((U16)min)))
;
12775 ARG2_SET(REGNODE_p(ret), (U16)max)(((((struct regnode_2 *)((pRExC_state->emit_start) + (ret)
))->arg2)) = (((U16)max)))
;
12776 if (max == REG_INFTY0xffff)
12777 RExC_seen(pRExC_state->seen) |= REG_UNBOUNDED_QUANTIFIER_SEEN0x00001000;
12778
12779 goto nest_check;
12780 }
12781 }
12782
12783 if (!ISMULT1(op)((op) == '*' || (op) == '+' || (op) == '?')) {
12784 *flagp = flags;
12785 return(ret);
12786 }
12787
12788#if 0 /* Now runtime fix should be reliable. */
12789
12790 /* if this is reinstated, don't forget to put this back into perldiag:
12791
12792 =item Regexp *+ operand could be empty at {#} in regex m/%s/
12793
12794 (F) The part of the regexp subject to either the * or + quantifier
12795 could match an empty string. The {#} shows in the regular
12796 expression about where the problem was discovered.
12797
12798 */
12799
12800 if (!(flags&HASWIDTH0x01) && op != '?')
12801 vFAIL("Regexp *+ operand could be empty")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Regexp *+ operand could be empty", (int)(((
((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 :
(_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((
pRExC_state->parse) - (pRExC_state->copy_start))) > (
pRExC_state->precomp_end)) ? (pRExC_state->precomp_end)
- (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12801, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12802#endif
12803
12804#ifdef RE_TRACK_PATTERN_OFFSETS
12805 parse_start = RExC_parse(pRExC_state->parse);
12806#endif
12807 nextchar(pRExC_state)S_nextchar( pRExC_state);
12808
12809 *flagp = (op != '+') ? (WORST0|SPSTART0x04|HASWIDTH0x01) : (WORST0|HASWIDTH0x01);
12810
12811 if (op == '*') {
12812 min = 0;
12813 goto do_curly;
12814 }
12815 else if (op == '+') {
12816 min = 1;
12817 goto do_curly;
12818 }
12819 else if (op == '?') {
12820 min = 0; max = 1;
12821 goto do_curly;
12822 }
12823 nest_check:
12824 if (!(flags&(HASWIDTH0x01|POSTPONED0x08)) && max > REG_INFTY0xffff/3) {
12825 if (origparse[0] == '\\' && origparse[1] == 'K') {
12826 vFAIL2utf8f(do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "%" "d%" "lu" "%4p" " is forbidden - matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12831, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
12827 "%" UTF8f " is forbidden - matches null string many times",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "%" "d%" "lu" "%4p" " is forbidden - matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12831, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
12828 UTF8fARG(UTF, (RExC_parse >= origparsedo { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "%" "d%" "lu" "%4p" " is forbidden - matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12831, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
12829 ? RExC_parse - origparsedo { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "%" "d%" "lu" "%4p" " is forbidden - matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12831, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
12830 : 0),do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "%" "d%" "lu" "%4p" " is forbidden - matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12831, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
12831 origparse))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "%" "d%" "lu" "%4p" " is forbidden - matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12831, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
12832 /* NOT-REACHED */
12833 } else {
12834 ckWARN2reg(RExC_parse,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12839, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "%" "d%" "lu" "%4p" " matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12839, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
12835 "%" UTF8f " matches null string many times",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12839, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "%" "d%" "lu" "%4p" " matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12839, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
12836 UTF8fARG(UTF, (RExC_parse >= origparsedo { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12839, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "%" "d%" "lu" "%4p" " matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12839, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
12837 ? RExC_parse - origparsedo { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12839, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "%" "d%" "lu" "%4p" " matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12839, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
12838 : 0),do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12839, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "%" "d%" "lu" "%4p" " matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12839, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
12839 origparse))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 12839, (pRExC_state->parse
)); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "%" "d%" "lu" "%4p" " matches null string many times"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(((pRExC_state->parse) >= origparse ? (pRExC_state->
parse) - origparse : 0)), (void*)(origparse), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12839, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); do
{ if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { (pRExC_state->
latest_warn_offset ) = ((((pRExC_state->precomp))>(((((
pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
))))?((pRExC_state->precomp)):(((((pRExC_state->precomp_end
))<(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start)))))?((pRExC_state->
precomp_end)):(((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
12840 }
12841 }
12842
12843 if (*RExC_parse(pRExC_state->parse) == '?') {
12844 nextchar(pRExC_state)S_nextchar( pRExC_state);
12845 reginsert(pRExC_state, MINMOD, ret, depth+1)S_reginsert( pRExC_state,85,ret,depth+1);
12846 if (! REGTAIL(pRExC_state, ret, ret + NODE_STEP_REGNODE)S_regtail( (pRExC_state),(ret),(ret + 1),depth+1)) {
12847 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12848 }
12849 }
12850 else if (*RExC_parse(pRExC_state->parse) == '+') {
12851 regnode_offset ender;
12852 nextchar(pRExC_state)S_nextchar( pRExC_state);
12853 ender = reg_node(pRExC_state, SUCCEED)S_reg_node( pRExC_state,1);
12854 if (! REGTAIL(pRExC_state, ret, ender)S_regtail( (pRExC_state),(ret),(ender),depth+1)) {
12855 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12856 }
12857 reginsert(pRExC_state, SUSPEND, ret, depth+1)S_reginsert( pRExC_state,81,ret,depth+1);
12858 ender = reg_node(pRExC_state, TAIL)S_reg_node( pRExC_state,55);
12859 if (! REGTAIL(pRExC_state, ret, ender)S_regtail( (pRExC_state),(ret),(ender),depth+1)) {
12860 REQUIRE_BRANCHJ(flagp, 0)do { (pRExC_state->use_BRANCHJ) = 1; *flagp |= 0x20; return
0; } while (0)
;
12861 }
12862 }
12863
12864 if (ISMULT2(RExC_parse)((*(pRExC_state->parse)) == '*' || (*(pRExC_state->parse
)) == '+' || (*(pRExC_state->parse)) == '?' || ((*(pRExC_state
->parse)) == '{' && S_regcurly((pRExC_state->parse
))))
) {
12865 RExC_parse(pRExC_state->parse)++;
12866 vFAIL("Nested quantifiers")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Nested quantifiers", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 12866, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
12867 }
12868
12869 return(ret);
12870}
12871
12872STATICstatic bool_Bool
12873S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
12874 regnode_offset * node_p,
12875 UV * code_point_p,
12876 int * cp_count,
12877 I32 * flagp,
12878 const bool_Bool strict,
12879 const U32 depth
12880 )
12881{
12882 /* This routine teases apart the various meanings of \N and returns
12883 * accordingly. The input parameters constrain which meaning(s) is/are valid
12884 * in the current context.
12885 *
12886 * Exactly one of <node_p> and <code_point_p> must be non-NULL.
12887 *
12888 * If <code_point_p> is not NULL, the context is expecting the result to be a
12889 * single code point. If this \N instance turns out to a single code point,
12890 * the function returns TRUE and sets *code_point_p to that code point.
12891 *
12892 * If <node_p> is not NULL, the context is expecting the result to be one of
12893 * the things representable by a regnode. If this \N instance turns out to be
12894 * one such, the function generates the regnode, returns TRUE and sets *node_p
12895 * to point to the offset of that regnode into the regex engine program being
12896 * compiled.
12897 *
12898 * If this instance of \N isn't legal in any context, this function will
12899 * generate a fatal error and not return.
12900 *
12901 * On input, RExC_parse should point to the first char following the \N at the
12902 * time of the call. On successful return, RExC_parse will have been updated
12903 * to point to just after the sequence identified by this routine. Also
12904 * *flagp has been updated as needed.
12905 *
12906 * When there is some problem with the current context and this \N instance,
12907 * the function returns FALSE, without advancing RExC_parse, nor setting
12908 * *node_p, nor *code_point_p, nor *flagp.
12909 *
12910 * If <cp_count> is not NULL, the caller wants to know the length (in code
12911 * points) that this \N sequence matches. This is set, and the input is
12912 * parsed for errors, even if the function returns FALSE, as detailed below.
12913 *
12914 * There are 6 possibilities here, as detailed in the next 6 paragraphs.
12915 *
12916 * Probably the most common case is for the \N to specify a single code point.
12917 * *cp_count will be set to 1, and *code_point_p will be set to that code
12918 * point.
12919 *
12920 * Another possibility is for the input to be an empty \N{}. This is no
12921 * longer accepted, and will generate a fatal error.
12922 *
12923 * Another possibility is for a custom charnames handler to be in effect which
12924 * translates the input name to an empty string. *cp_count will be set to 0.
12925 * *node_p will be set to a generated NOTHING node.
12926 *
12927 * Still another possibility is for the \N to mean [^\n]. *cp_count will be
12928 * set to 0. *node_p will be set to a generated REG_ANY node.
12929 *
12930 * The fifth possibility is that \N resolves to a sequence of more than one
12931 * code points. *cp_count will be set to the number of code points in the
12932 * sequence. *node_p will be set to a generated node returned by this
12933 * function calling S_reg().
12934 *
12935 * The final possibility is that it is premature to be calling this function;
12936 * the parse needs to be restarted. This can happen when this changes from
12937 * /d to /u rules, or when the pattern needs to be upgraded to UTF-8. The
12938 * latter occurs only when the fifth possibility would otherwise be in
12939 * effect, and is because one of those code points requires the pattern to be
12940 * recompiled as UTF-8. The function returns FALSE, and sets the
12941 * RESTART_PARSE and NEED_UTF8 flags in *flagp, as appropriate. When this
12942 * happens, the caller needs to desist from continuing parsing, and return
12943 * this information to its caller. This is not set for when there is only one
12944 * code point, as this can be called as part of an ANYOF node, and they can
12945 * store above-Latin1 code points without the pattern having to be in UTF-8.
12946 *
12947 * For non-single-quoted regexes, the tokenizer has resolved character and
12948 * sequence names inside \N{...} into their Unicode values, normalizing the
12949 * result into what we should see here: '\N{U+c1.c2...}', where c1... are the
12950 * hex-represented code points in the sequence. This is done there because
12951 * the names can vary based on what charnames pragma is in scope at the time,
12952 * so we need a way to take a snapshot of what they resolve to at the time of
12953 * the original parse. [perl #56444].
12954 *
12955 * That parsing is skipped for single-quoted regexes, so here we may get
12956 * '\N{NAME}', which is parsed now. If the single-quoted regex is something
12957 * like '\N{U+41}', that code point is Unicode, and has to be translated into
12958 * the native character set for non-ASCII platforms. The other possibilities
12959 * are already native, so no translation is done. */
12960
12961 char * endbrace; /* points to '}' following the name */
12962 char* p = RExC_parse(pRExC_state->parse); /* Temporary */
12963
12964 SV * substitute_parse = NULL((void*)0);
12965 char *orig_end;
12966 char *save_start;
12967 I32 flags;
12968
12969 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 12969, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 12969, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
12970
12971 PERL_ARGS_ASSERT_GROK_BSLASH_N((pRExC_state) ? (void)0 : __assert2("re_comp.c", 12971, __func__
, "pRExC_state")); ((flagp) ? (void)0 : __assert2("re_comp.c"
, 12971, __func__, "flagp"))
;
12972
12973 assert(cBOOL(node_p) ^ cBOOL(code_point_p))((((node_p) ? (_Bool)1 : (_Bool)0) ^ ((code_point_p) ? (_Bool
)1 : (_Bool)0)) ? (void)0 : __assert2("re_comp.c", 12973, __func__
, "cBOOL(node_p) ^ cBOOL(code_point_p)"))
; /* Exactly one should be set */
12974 assert(! (node_p && cp_count))((! (node_p && cp_count)) ? (void)0 : __assert2("re_comp.c"
, 12974, __func__, "! (node_p && cp_count)"))
; /* At most 1 should be set */
12975
12976 if (cp_count) { /* Initialize return for the most common case */
12977 *cp_count = 1;
12978 }
12979
12980 /* The [^\n] meaning of \N ignores spaces and comments under the /x
12981 * modifier. The other meanings do not, so use a temporary until we find
12982 * out which we are being called with */
12983 skip_to_be_ignored_text(pRExC_state, &p,S_skip_to_be_ignored_text( pRExC_state,&p,(0))
12984 FALSE /* Don't force to /x */ )S_skip_to_be_ignored_text( pRExC_state,&p,(0));
12985
12986 /* Disambiguate between \N meaning a named character versus \N meaning
12987 * [^\n]. The latter is assumed when the {...} following the \N is a legal
12988 * quantifier, or if there is no '{' at all */
12989 if (*p != '{' || regcurlyS_regcurly(p)) {
12990 RExC_parse(pRExC_state->parse) = p;
12991 if (cp_count) {
12992 *cp_count = -1;
12993 }
12994
12995 if (! node_p) {
12996 return FALSE(0);
12997 }
12998
12999 *node_p = reg_node(pRExC_state, REG_ANY)S_reg_node( pRExC_state,16);
13000 *flagp |= HASWIDTH0x01|SIMPLE0x02;
13001 MARK_NAUGHTY(1)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (1)
;
13002 Set_Node_Length(REGNODE_p(*(node_p)), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 13002, (int
)(((((pRExC_state->emit_start) + (*(node_p)))) - (pRExC_state
->emit_start))), (int)(1));} while (0); if((((((pRExC_state
->emit_start) + (*(node_p)))) - (pRExC_state->emit_start
))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (*(node_p)))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (*(node_p)))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
; /* MJD */
13003 return TRUE(1);
13004 }
13005
13006 /* The test above made sure that the next real character is a '{', but
13007 * under the /x modifier, it could be separated by space (or a comment and
13008 * \n) and this is not allowed (for consistency with \x{...} and the
13009 * tokenizer handling of \N{NAME}). */
13010 if (*RExC_parse(pRExC_state->parse) != '{') {
13011 vFAIL("Missing braces on \\N{}")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Missing braces on \\N{}", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13011, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13012 }
13013
13014 RExC_parse(pRExC_state->parse)++; /* Skip past the '{' */
13015
13016 endbrace = (char *) memchr(RExC_parse(pRExC_state->parse), '}', RExC_end(pRExC_state->end) - RExC_parse(pRExC_state->parse));
13017 if (! endbrace) { /* no trailing brace */
13018 vFAIL2("Missing right brace on \\%c{}", 'N')do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Missing right brace on \\%c{}"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", 'N', (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13018, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13019 }
13020
13021 /* Here, we have decided it should be a named character or sequence. These
13022 * imply Unicode semantics */
13023 REQUIRE_UNI_RULES(flagp, FALSE)do { if ((get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)) { set_regex_charset(&(pRExC_state->flags), REGEX_UNICODE_CHARSET
); (pRExC_state->uni_semantics) = 1; if ((pRExC_state->
seen_d_op) && __builtin_expect(((! ((pRExC_state->
total_par) < 0)) ? (_Bool)1 : (_Bool)0),(1))) { *flagp |= 0x20
; return (0); } } } while (0)
;
13024
13025 /* \N{_} is what toke.c returns to us to indicate a name that evaluates to
13026 * nothing at all (not allowed under strict) */
13027 if (endbrace - RExC_parse(pRExC_state->parse) == 1 && *RExC_parse(pRExC_state->parse) == '_') {
13028 RExC_parse(pRExC_state->parse) = endbrace;
13029 if (strict) {
13030 RExC_parse(pRExC_state->parse)++; /* Position after the "}" */
13031 vFAIL("Zero length \\N{}")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Zero length \\N{}", (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13031, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13032 }
13033
13034 if (cp_count) {
13035 *cp_count = 0;
13036 }
13037 nextchar(pRExC_state)S_nextchar( pRExC_state);
13038 if (! node_p) {
13039 return FALSE(0);
13040 }
13041
13042 *node_p = reg_node(pRExC_state, NOTHING)S_reg_node( pRExC_state,54);
13043 return TRUE(1);
13044 }
13045
13046 if (endbrace - RExC_parse(pRExC_state->parse) < 2 || ! strBEGINs(RExC_parse, "U+")(strncmp((pRExC_state->parse),"" "U+" "", sizeof("U+")-1) ==
0)
) {
13047
13048 /* Here, the name isn't of the form U+.... This can happen if the
13049 * pattern is single-quoted, so didn't get evaluated in toke.c. Now
13050 * is the time to find out what the name means */
13051
13052 const STRLEN name_len = endbrace - RExC_parse(pRExC_state->parse);
13053 SV * value_sv; /* What does this name evaluate to */
13054 SV ** value_svp;
13055 const U8 * value; /* string of name's value */
13056 STRLEN value_len; /* and its length */
13057
13058 /* RExC_unlexed_names is a hash of names that weren't evaluated by
13059 * toke.c, and their values. Make sure is initialized */
13060 if (! RExC_unlexed_names(pRExC_state->unlexed_names)) {
13061 RExC_unlexed_names(pRExC_state->unlexed_names) = newHV()((HV *)({ void *_p = (Perl_newSV_type( SVt_PVHV)); _p; }));
13062 }
13063
13064 /* If we have already seen this name in this pattern, use that. This
13065 * allows us to only call the charnames handler once per name per
13066 * pattern. A broken or malicious handler could return something
13067 * different each time, which could cause the results to vary depending
13068 * on if something gets added or subtracted from the pattern that
13069 * causes the number of passes to change, for example */
13070 if ((value_svp = hv_fetch(RExC_unlexed_names, RExC_parse,((SV**) Perl_hv_common_key_len( ((pRExC_state->unlexed_names
)),((pRExC_state->parse)),(name_len),(0) ? (0x20 | 0x10) :
0x20,((void*)0),0))
13071 name_len, 0)((SV**) Perl_hv_common_key_len( ((pRExC_state->unlexed_names
)),((pRExC_state->parse)),(name_len),(0) ? (0x20 | 0x10) :
0x20,((void*)0),0))
))
13072 {
13073 value_sv = *value_svp;
13074 }
13075 else { /* Otherwise we have to go out and get the name */
13076 const char * error_msg = NULL((void*)0);
13077 value_sv = get_and_check_backslash_N_name(RExC_parse, endbrace,Perl_get_and_check_backslash_N_name( (pRExC_state->parse),
endbrace,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),&
error_msg)
13078 UTF,Perl_get_and_check_backslash_N_name( (pRExC_state->parse),
endbrace,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),&
error_msg)
13079 &error_msg)Perl_get_and_check_backslash_N_name( (pRExC_state->parse),
endbrace,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),&
error_msg)
;
13080 if (error_msg) {
13081 RExC_parse(pRExC_state->parse) = endbrace;
13082 vFAIL(error_msg)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", error_msg, (int)(((((pRExC_state->utf8)) ?
(_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 13082, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
13083 }
13084
13085 /* If no error message, should have gotten a valid return */
13086 assert (value_sv)((value_sv) ? (void)0 : __assert2("re_comp.c", 13086, __func__
, "value_sv"))
;
13087
13088 /* Save the name's meaning for later use */
13089 if (! hv_store(RExC_unlexed_names, RExC_parse, name_len,((SV**) Perl_hv_common_key_len( ((pRExC_state->unlexed_names
)),((pRExC_state->parse)),(name_len),(0x04|0x20),(value_sv
),(0)))
13090 value_sv, 0)((SV**) Perl_hv_common_key_len( ((pRExC_state->unlexed_names
)),((pRExC_state->parse)),(name_len),(0x04|0x20),(value_sv
),(0)))
)
13091 {
13092 Perl_croak(aTHX_ "panic: hv_store() unexpectedly failed");
13093 }
13094 }
13095
13096 /* Here, we have the value the name evaluates to in 'value_sv' */
13097 value = (U8 *) SvPV(value_sv, value_len)((((value_sv)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((value_len = (*({ const SV *const _svcur = (const SV *)(
value_sv); ((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
13097, __func__, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]"
)); ((!((((_svcur)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svcur)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 13097, __func__
, "!isGV_with_GP(_svcur)")); ((!(((svtype)((_svcur)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svcur)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 13097, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))), (*({ SV *const _svpvx = ((SV *)({ void *
_p = (value_sv); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx
)->sv_flags & 0xff)) & 0x1f]) ? (void)0 : __assert2
("re_comp.c", 13097, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 13097, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 13097, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))) : Perl_sv_2pv_flags
( value_sv,&value_len,2))
;
13098
13099 /* See if the result is one code point vs 0 or multiple */
13100 if (inRANGE(value_len, 1, ((UV) SvUTF8(value_sv)((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) >= (1)) ? (void)0 : __assert2(
"re_comp.c", 13102, __func__, "(((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) >= (1)"
)), ( (sizeof(value_len) == sizeof(U8)) ? ((((NV) ((1)) >=
0) ? (void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0"
)), (((NV) (((((UV) ((value_sv)->sv_flags & 0x20000000
) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0) ?
(void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U8) (value_len)))) - (((1)) | 0))) <= (((
U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))) : (sizeof(value_len
) == sizeof(U32)) ? ((((NV) ((1)) >= 0) ? (void)0 : __assert2
("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0")), (((NV)
(((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) >= 0) ? (void)0 : __assert2
("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U32) (value_len)))) - (((1)) | 0))) <= ((
(U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))) : (((sizeof(value_len
) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 13102, __func__
, "sizeof(value_len) == sizeof(U64)")), ((((NV) ((1)) >= 0
) ? (void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0"
)), (((NV) (((((UV) ((value_sv)->sv_flags & 0x20000000
) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0) ?
(void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U64) (value_len)))) - (((1)) | 0))) <= ((
(U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))))))
13101 ? UTF8SKIP(value)((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) >= (1)) ? (void)0 : __assert2(
"re_comp.c", 13102, __func__, "(((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) >= (1)"
)), ( (sizeof(value_len) == sizeof(U8)) ? ((((NV) ((1)) >=
0) ? (void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0"
)), (((NV) (((((UV) ((value_sv)->sv_flags & 0x20000000
) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0) ?
(void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U8) (value_len)))) - (((1)) | 0))) <= (((
U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))) : (sizeof(value_len
) == sizeof(U32)) ? ((((NV) ((1)) >= 0) ? (void)0 : __assert2
("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0")), (((NV)
(((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) >= 0) ? (void)0 : __assert2
("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U32) (value_len)))) - (((1)) | 0))) <= ((
(U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))) : (((sizeof(value_len
) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 13102, __func__
, "sizeof(value_len) == sizeof(U64)")), ((((NV) ((1)) >= 0
) ? (void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0"
)), (((NV) (((((UV) ((value_sv)->sv_flags & 0x20000000
) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0) ?
(void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U64) (value_len)))) - (((1)) | 0))) <= ((
(U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))))))
13102 : 1))((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) >= (1)) ? (void)0 : __assert2(
"re_comp.c", 13102, __func__, "(((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) >= (1)"
)), ( (sizeof(value_len) == sizeof(U8)) ? ((((NV) ((1)) >=
0) ? (void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0"
)), (((NV) (((((UV) ((value_sv)->sv_flags & 0x20000000
) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0) ?
(void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U8) (value_len)))) - (((1)) | 0))) <= (((
U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))) : (sizeof(value_len
) == sizeof(U32)) ? ((((NV) ((1)) >= 0) ? (void)0 : __assert2
("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0")), (((NV)
(((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) >= 0) ? (void)0 : __assert2
("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U32) (value_len)))) - (((1)) | 0))) <= ((
(U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))) : (((sizeof(value_len
) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c", 13102, __func__
, "sizeof(value_len) == sizeof(U64)")), ((((NV) ((1)) >= 0
) ? (void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) ((1)) >= 0"
)), (((NV) (((((UV) ((value_sv)->sv_flags & 0x20000000
) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0) ?
(void)0 : __assert2("re_comp.c", 13102, __func__, "(NV) (((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip[*(const U8*)(value)] : 1)) - (1))) >= 0"
)), (((U64) (((((U64) (value_len)))) - (((1)) | 0))) <= ((
(U64) ((((((UV) ((value_sv)->sv_flags & 0x20000000) ? PL_utf8skip
[*(const U8*)(value)] : 1)) - (1))) | 0))))))))
)
13103 {
13104 /* Here, exactly one code point. If that isn't what is wanted,
13105 * fail */
13106 if (! code_point_p) {
13107 RExC_parse(pRExC_state->parse) = p;
13108 return FALSE(0);
13109 }
13110
13111 /* Convert from string to numeric code point */
13112 *code_point_p = (SvUTF8(value_sv)((value_sv)->sv_flags & 0x20000000))
13113 ? valid_utf8_to_uvchrPerl_valid_utf8_to_uvchr(value, NULL((void*)0))
13114 : *value;
13115
13116 /* Have parsed this entire single code point \N{...}. *cp_count
13117 * has already been set to 1, so don't do it again. */
13118 RExC_parse(pRExC_state->parse) = endbrace;
13119 nextchar(pRExC_state)S_nextchar( pRExC_state);
13120 return TRUE(1);
13121 } /* End of is a single code point */
13122
13123 /* Count the code points, if caller desires. The API says to do this
13124 * even if we will later return FALSE */
13125 if (cp_count) {
13126 *cp_count = 0;
13127
13128 *cp_count = (SvUTF8(value_sv)((value_sv)->sv_flags & 0x20000000))
13129 ? utf8_length(value, value + value_len)Perl_utf8_length( value,value + value_len)
13130 : value_len;
13131 }
13132
13133 /* Fail if caller doesn't want to handle a multi-code-point sequence.
13134 * But don't back the pointer up if the caller wants to know how many
13135 * code points there are (they need to handle it themselves in this
13136 * case). */
13137 if (! node_p) {
13138 if (! cp_count) {
13139 RExC_parse(pRExC_state->parse) = p;
13140 }
13141 return FALSE(0);
13142 }
13143
13144 /* Convert this to a sub-pattern of the form "(?: ... )", and then call
13145 * reg recursively to parse it. That way, it retains its atomicness,
13146 * while not having to worry about any special handling that some code
13147 * points may have. */
13148
13149 substitute_parse = newSVpvs("?:")Perl_newSVpvn( ("" "?:" ""), (sizeof("?:")-1));
13150 sv_catsv(substitute_parse, value_sv)Perl_sv_catsv_flags( substitute_parse,value_sv,2);
13151 sv_catpv(substitute_parse, ")")Perl_sv_catpv( substitute_parse,")");
13152
13153 /* The value should already be native, so no need to convert on EBCDIC
13154 * platforms.*/
13155 assert(! RExC_recode_x_to_native)((! (pRExC_state->recode_x_to_native)) ? (void)0 : __assert2
("re_comp.c", 13155, __func__, "! RExC_recode_x_to_native"))
;
13156
13157 }
13158 else { /* \N{U+...} */
13159 Size_tsize_t count = 0; /* code point count kept internally */
13160
13161 /* We can get to here when the input is \N{U+...} or when toke.c has
13162 * converted a name to the \N{U+...} form. This include changing a
13163 * name that evaluates to multiple code points to \N{U+c1.c2.c3 ...} */
13164
13165 RExC_parse(pRExC_state->parse) += 2; /* Skip past the 'U+' */
13166
13167 /* Code points are separated by dots. The '}' terminates the whole
13168 * thing. */
13169
13170 do { /* Loop until the ending brace */
13171 I32 flags = PERL_SCAN_SILENT_OVERFLOW0x80
13172 | PERL_SCAN_SILENT_ILLDIGIT0x08
13173 | PERL_SCAN_NOTIFY_ILLDIGIT0x40
13174 | PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES(0x100|0x01)
13175 | PERL_SCAN_DISALLOW_PREFIX0x02;
13176 STRLEN len = endbrace - RExC_parse(pRExC_state->parse);
13177 NV overflow_value;
13178 char * start_digit = RExC_parse(pRExC_state->parse);
13179 UV cp = grok_hex(RExC_parse, &len, &flags, &overflow_value)Perl_grok_bin_oct_hex( (pRExC_state->parse),&len,&
flags,&overflow_value,4,12,'x')
;
13180
13181 if (len == 0) {
13182 RExC_parse(pRExC_state->parse)++;
13183 bad_NU:
13184 vFAIL("Invalid hexadecimal number in \\N{U+...}")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Invalid hexadecimal number in \\N{U+...}", (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13184, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13185 }
13186
13187 RExC_parse(pRExC_state->parse) += len;
13188
13189 if (cp > MAX_LEGAL_CP((UV)((IV) ((~(UV)0) >> 1)))) {
13190 vFAIL(form_cp_too_large_msg(16, start_digit, len, 0))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", Perl_form_cp_too_large_msg( 16,start_digit,len
,0), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13190, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13191 }
13192
13193 if (RExC_parse(pRExC_state->parse) >= endbrace) { /* Got to the closing '}' */
13194 if (count) {
13195 goto do_concat;
13196 }
13197
13198 /* Here, is a single code point; fail if doesn't want that */
13199 if (! code_point_p) {
13200 RExC_parse(pRExC_state->parse) = p;
13201 return FALSE(0);
13202 }
13203
13204 /* A single code point is easy to handle; just return it */
13205 *code_point_p = UNI_TO_NATIVE(cp)((UV) ((cp) | 0));
13206 RExC_parse(pRExC_state->parse) = endbrace;
13207 nextchar(pRExC_state)S_nextchar( pRExC_state);
13208 return TRUE(1);
13209 }
13210
13211 /* Here, the parse stopped bfore the ending brace. This is legal
13212 * only if that character is a dot separating code points, like a
13213 * multiple character sequence (of the form "\N{U+c1.c2. ... }".
13214 * So the next character must be a dot (and the one after that
13215 * can't be the endbrace, or we'd have something like \N{U+100.} )
13216 * */
13217 if (*RExC_parse(pRExC_state->parse) != '.' || RExC_parse(pRExC_state->parse) + 1 >= endbrace) {
13218 RExC_parse(pRExC_state->parse) += (RExC_orig_utf8(pRExC_state->orig_utf8)) /* point to after 1st invalid */
13219 ? UTF8SKIP(RExC_parse)PL_utf8skip[*(const U8*)((pRExC_state->parse))]
13220 : 1;
13221 RExC_parse(pRExC_state->parse) = MIN(endbrace, RExC_parse)(((endbrace)<((pRExC_state->parse)))?(endbrace):((pRExC_state
->parse)))
;/* Guard against
13222 malformed utf8 */
13223 goto bad_NU;
13224 }
13225
13226 /* Here, looks like its really a multiple character sequence. Fail
13227 * if that's not what the caller wants. But continue with counting
13228 * and error checking if they still want a count */
13229 if (! node_p && ! cp_count) {
13230 return FALSE(0);
13231 }
13232
13233 /* What is done here is to convert this to a sub-pattern of the
13234 * form \x{char1}\x{char2}... and then call reg recursively to
13235 * parse it (enclosing in "(?: ... )" ). That way, it retains its
13236 * atomicness, while not having to worry about special handling
13237 * that some code points may have. We don't create a subpattern,
13238 * but go through the motions of code point counting and error
13239 * checking, if the caller doesn't want a node returned. */
13240
13241 if (node_p && ! substitute_parse) {
13242 substitute_parse = newSVpvs("?:")Perl_newSVpvn( ("" "?:" ""), (sizeof("?:")-1));
13243 }
13244
13245 do_concat:
13246
13247 if (node_p) {
13248 /* Convert to notation the rest of the code understands */
13249 sv_catpvs(substitute_parse, "\\x{")Perl_sv_catpvn_flags( substitute_parse, ("" "\\x{" ""), (sizeof
("\\x{")-1), 2)
;
13250 sv_catpvn(substitute_parse, start_digit,Perl_sv_catpvn_flags( substitute_parse,start_digit,(pRExC_state
->parse) - start_digit,2)
13251 RExC_parse - start_digit)Perl_sv_catpvn_flags( substitute_parse,start_digit,(pRExC_state
->parse) - start_digit,2)
;
13252 sv_catpvs(substitute_parse, "}")Perl_sv_catpvn_flags( substitute_parse, ("" "}" ""), (sizeof(
"}")-1), 2)
;
13253 }
13254
13255 /* Move to after the dot (or ending brace the final time through.)
13256 * */
13257 RExC_parse(pRExC_state->parse)++;
13258 count++;
13259
13260 } while (RExC_parse(pRExC_state->parse) < endbrace);
13261
13262 if (! node_p) { /* Doesn't want the node */
13263 assert (cp_count)((cp_count) ? (void)0 : __assert2("re_comp.c", 13263, __func__
, "cp_count"))
;
13264
13265 *cp_count = count;
13266 return FALSE(0);
13267 }
13268
13269 sv_catpvs(substitute_parse, ")")Perl_sv_catpvn_flags( substitute_parse, ("" ")" ""), (sizeof(
")")-1), 2)
;
13270
13271 /* The values are Unicode, and therefore have to be converted to native
13272 * on a non-Unicode (meaning non-ASCII) platform. */
13273 SET_recode_x_to_native(1)(void)0;
13274 }
13275
13276 /* Here, we have the string the name evaluates to, ready to be parsed,
13277 * stored in 'substitute_parse' as a series of valid "\x{...}\x{...}"
13278 * constructs. This can be called from within a substitute parse already.
13279 * The error reporting mechanism doesn't work for 2 levels of this, but the
13280 * code above has validated this new construct, so there should be no
13281 * errors generated by the below. And this isn' an exact copy, so the
13282 * mechanism to seamlessly deal with this won't work, so turn off warnings
13283 * during it */
13284 save_start = RExC_start(pRExC_state->start);
13285 orig_end = RExC_end(pRExC_state->end);
13286
13287 RExC_parse(pRExC_state->parse) = RExC_start(pRExC_state->start) = SvPVX(substitute_parse)(*({ SV *const _svpvx = ((SV *)({ void *_p = (substitute_parse
); _p; })); ((PL_valid_types_PVX[((svtype)((_svpvx)->sv_flags
& 0xff)) & 0x1f]) ? (void)0 : __assert2("re_comp.c",
13287, __func__, "PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]"
)); ((!((((_svpvx)->sv_flags & (0x00004000|0x00008000)
) == 0x00008000) && (((svtype)((_svpvx)->sv_flags &
0xff)) == SVt_PVGV || ((svtype)((_svpvx)->sv_flags & 0xff
)) == SVt_PVLV))) ? (void)0 : __assert2("re_comp.c", 13287, __func__
, "!isGV_with_GP(_svpvx)")); ((!(((svtype)((_svpvx)->sv_flags
& 0xff)) == SVt_PVIO && !(((XPVIO*) (_svpvx)->
sv_any)->xio_flags & 64))) ? (void)0 : __assert2("re_comp.c"
, 13287, __func__, "!(SvTYPE(_svpvx) == SVt_PVIO && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))"
)); &((_svpvx)->sv_u.svu_pv); }))
;
13288 RExC_end(pRExC_state->end) = RExC_parse(pRExC_state->parse) + SvCUR(substitute_parse)(*({ const SV *const _svcur = (const SV *)(substitute_parse);
((PL_valid_types_PVX[((svtype)((_svcur)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 13288, __func__
, "PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]")); ((!(
(((_svcur)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svcur)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 13288, __func__, "!isGV_with_GP(_svcur)"
)); ((!(((svtype)((_svcur)->sv_flags & 0xff)) == SVt_PVIO
&& !(((XPVIO*) (_svcur)->sv_any)->xio_flags &
64))) ? (void)0 : __assert2("re_comp.c", 13288, __func__, "!(SvTYPE(_svcur) == SVt_PVIO && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))"
)); &(((XPV*) ({ void *_p = ((_svcur)->sv_any); _p; })
)->xpv_cur); }))
;
13289 TURN_OFF_WARNINGS_IN_SUBSTITUTE_PARSEdo { (pRExC_state->save_copy_start) = (pRExC_state->copy_start
); (pRExC_state->copy_start) = ((void*)0); } while (0)
;
13290
13291 *node_p = reg(pRExC_state, 1, &flags, depth+1)S_reg( pRExC_state,1,&flags,depth+1);
13292
13293 /* Restore the saved values */
13294 RESTORE_WARNINGS(pRExC_state->copy_start) = (pRExC_state->save_copy_start
)
;
13295 RExC_start(pRExC_state->start) = save_start;
13296 RExC_parse(pRExC_state->parse) = endbrace;
13297 RExC_end(pRExC_state->end) = orig_end;
13298 SET_recode_x_to_native(0)(void)0;
13299
13300 SvREFCNT_dec_NN(substitute_parse)Perl_SvREFCNT_dec_NN( ((SV *)({ void *_p = (substitute_parse)
; _p; })))
;
13301
13302 if (! *node_p) {
13303 RETURN_FAIL_ON_RESTART(flags, flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
13304 FAIL2("panic: reg returned failure to grok_bslash_N, flags=%#" UVxf,do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: reg returned failure to grok_bslash_N, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
13305 (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: reg returned failure to grok_bslash_N, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
;
13306 }
13307 *flagp |= flags&(HASWIDTH0x01|SPSTART0x04|SIMPLE0x02|POSTPONED0x08);
13308
13309 nextchar(pRExC_state)S_nextchar( pRExC_state);
13310
13311 return TRUE(1);
13312}
13313
13314
13315STATICstatic U8
13316S_compute_EXACTish(RExC_state_t *pRExC_state)
13317{
13318 U8 op;
13319
13320 PERL_ARGS_ASSERT_COMPUTE_EXACTISH((pRExC_state) ? (void)0 : __assert2("re_comp.c", 13320, __func__
, "pRExC_state"))
;
13321
13322 if (! FOLD(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
) {
13323 return (LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
)
13324 ? EXACTL42
13325 : EXACT40;
13326 }
13327
13328 op = get_regex_charset(RExC_flags(pRExC_state->flags));
13329 if (op >= REGEX_ASCII_RESTRICTED_CHARSET) {
13330 op--; /* /a is same as /u, and map /aa's offset to what /a's would have
13331 been, so there is no hole */
13332 }
13333
13334 return op + EXACTF43;
13335}
13336
13337STATICstatic bool_Bool
13338S_new_regcurly(const char *s, const char *e)
13339{
13340 /* This is a temporary function designed to match the most lenient form of
13341 * a {m,n} quantifier we ever envision, with either number omitted, and
13342 * spaces anywhere between/before/after them.
13343 *
13344 * If this function fails, then the string it matches is very unlikely to
13345 * ever be considered a valid quantifier, so we can allow the '{' that
13346 * begins it to be considered as a literal */
13347
13348 bool_Bool has_min = FALSE(0);
13349 bool_Bool has_max = FALSE(0);
13350
13351 PERL_ARGS_ASSERT_NEW_REGCURLY((s) ? (void)0 : __assert2("re_comp.c", 13351, __func__, "s")
); ((e) ? (void)0 : __assert2("re_comp.c", 13351, __func__, "e"
))
;
13352
13353 if (s >= e || *s++ != '{')
13354 return FALSE(0);
13355
13356 while (s < e && isSPACE(*s)(( (sizeof(*s) == 1) || !(((U64)((*s) | 0)) & ~0xFF)) &&
((PL_charclass[(U8) (*s)] & ((1U << (10)) | (1U <<
(14)))) == ((1U << (10)) | (1U << (14)))))
) {
13357 s++;
13358 }
13359 while (s < e && isDIGIT(*s)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 13359
, __func__, "('9') >= ('0')")), ( (sizeof(*s) == sizeof(U8
)) ? ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13359, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13359, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U8) (*s)))
) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0)))))
: (sizeof(*s) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (
void)0 : __assert2("re_comp.c", 13359, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13359, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*s)))) - ((('0')) | 0))) <= (((U64) (((('9') -
('0'))) | 0))))) : (((sizeof(*s) == sizeof(U64)) ? (void)0 :
__assert2("re_comp.c", 13359, __func__, "sizeof(*s) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13359, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13359, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*s))
)) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))))
))))
) {
13360 has_min = TRUE(1);
13361 s++;
13362 }
13363 while (s < e && isSPACE(*s)(( (sizeof(*s) == 1) || !(((U64)((*s) | 0)) & ~0xFF)) &&
((PL_charclass[(U8) (*s)] & ((1U << (10)) | (1U <<
(14)))) == ((1U << (10)) | (1U << (14)))))
) {
13364 s++;
13365 }
13366
13367 if (*s == ',') {
13368 s++;
13369 while (s < e && isSPACE(*s)(( (sizeof(*s) == 1) || !(((U64)((*s) | 0)) & ~0xFF)) &&
((PL_charclass[(U8) (*s)] & ((1U << (10)) | (1U <<
(14)))) == ((1U << (10)) | (1U << (14)))))
) {
13370 s++;
13371 }
13372 while (s < e && isDIGIT(*s)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 13372
, __func__, "('9') >= ('0')")), ( (sizeof(*s) == sizeof(U8
)) ? ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13372, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13372, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U8) (*s)))
) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0)))))
: (sizeof(*s) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (
void)0 : __assert2("re_comp.c", 13372, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13372, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*s)))) - ((('0')) | 0))) <= (((U64) (((('9') -
('0'))) | 0))))) : (((sizeof(*s) == sizeof(U64)) ? (void)0 :
__assert2("re_comp.c", 13372, __func__, "sizeof(*s) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13372, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13372, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*s))
)) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))))
))))
) {
13373 has_max = TRUE(1);
13374 s++;
13375 }
13376 while (s < e && isSPACE(*s)(( (sizeof(*s) == 1) || !(((U64)((*s) | 0)) & ~0xFF)) &&
((PL_charclass[(U8) (*s)] & ((1U << (10)) | (1U <<
(14)))) == ((1U << (10)) | (1U << (14)))))
) {
13377 s++;
13378 }
13379 }
13380
13381 return s < e && *s == '}' && (has_min || has_max);
13382}
13383
13384/* Parse backref decimal value, unless it's too big to sensibly be a backref,
13385 * in which case return I32_MAX (rather than possibly 32-bit wrapping) */
13386
13387static I32
13388S_backref_value(char *p, char *e)
13389{
13390 const char* endptr = e;
13391 UV val;
13392 if (grok_atoUVPerl_grok_atoUV(p, &val, &endptr) && val <= I32_MAX0x7fffffff)
13393 return (I32)val;
13394 return I32_MAX0x7fffffff;
13395}
13396
13397
13398/*
13399 - regatom - the lowest level
13400
13401 Try to identify anything special at the start of the current parse position.
13402 If there is, then handle it as required. This may involve generating a
13403 single regop, such as for an assertion; or it may involve recursing, such as
13404 to handle a () structure.
13405
13406 If the string doesn't start with something special then we gobble up
13407 as much literal text as we can. If we encounter a quantifier, we have to
13408 back off the final literal character, as that quantifier applies to just it
13409 and not to the whole string of literals.
13410
13411 Once we have been able to handle whatever type of thing started the
13412 sequence, we return the offset into the regex engine program being compiled
13413 at which any next regnode should be placed.
13414
13415 Returns 0, setting *flagp to TRYAGAIN if reg() returns 0 with TRYAGAIN.
13416 Returns 0, setting *flagp to RESTART_PARSE if the parse needs to be
13417 restarted, or'd with NEED_UTF8 if the pattern needs to be upgraded to UTF-8
13418 Otherwise does not return 0.
13419
13420 Note: we have to be careful with escapes, as they can be both literal
13421 and special, and in the case of \10 and friends, context determines which.
13422
13423 A summary of the code structure is:
13424
13425 switch (first_byte) {
13426 cases for each special:
13427 handle this special;
13428 break;
13429 case '\\':
13430 switch (2nd byte) {
13431 cases for each unambiguous special:
13432 handle this special;
13433 break;
13434 cases for each ambigous special/literal:
13435 disambiguate;
13436 if (special) handle here
13437 else goto defchar;
13438 default: // unambiguously literal:
13439 goto defchar;
13440 }
13441 default: // is a literal char
13442 // FALL THROUGH
13443 defchar:
13444 create EXACTish node for literal;
13445 while (more input and node isn't full) {
13446 switch (input_byte) {
13447 cases for each special;
13448 make sure parse pointer is set so that the next call to
13449 regatom will see this special first
13450 goto loopdone; // EXACTish node terminated by prev. char
13451 default:
13452 append char to EXACTISH node;
13453 }
13454 get next input byte;
13455 }
13456 loopdone:
13457 }
13458 return the generated node;
13459
13460 Specifically there are two separate switches for handling
13461 escape sequences, with the one for handling literal escapes requiring
13462 a dummy entry for all of the special escapes that are actually handled
13463 by the other.
13464
13465*/
13466
13467STATICstatic regnode_offset
13468S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
13469{
13470 dVARstruct Perl___notused_struct;
13471 regnode_offset ret = 0;
13472 I32 flags = 0;
13473 char *parse_start;
13474 U8 op;
13475 int invert = 0;
13476
13477 DECLARE_AND_GET_RE_DEBUG_FLAGSvolatile IV re_debug_flags = 0; ((void)sizeof(re_debug_flags)
); do { SV * re_debug_flags_sv = ((void*)0); re_debug_flags_sv
= PL_curcop ? Perl_get_sv( "\022E_DEBUG_FLAGS",0x01) : ((void
*)0); if (re_debug_flags_sv) { if (!((re_debug_flags_sv)->
sv_flags & 0x00000100)) Perl_sv_setuv( re_debug_flags_sv,
0x000008 | 0x00FF00); re_debug_flags=((((re_debug_flags_sv)->
sv_flags & (0x00000100|0x00200000)) == 0x00000100) ? (*({
const SV *const _svivx = (const SV *)(re_debug_flags_sv); ((
PL_valid_types_IVX[((svtype)((_svivx)->sv_flags & 0xff
)) & 0x1f]) ? (void)0 : __assert2("re_comp.c", 13477, __func__
, "PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]")); ((!(
(((_svivx)->sv_flags & (0x00004000|0x00008000)) == 0x00008000
) && (((svtype)((_svivx)->sv_flags & 0xff)) ==
SVt_PVGV || ((svtype)((_svivx)->sv_flags & 0xff)) == SVt_PVLV
))) ? (void)0 : __assert2("re_comp.c", 13477, __func__, "!isGV_with_GP(_svivx)"
)); &(((XPVIV*) ({ void *_p = ((_svivx)->sv_any); _p; }
))->xiv_u.xivu_iv); })) : Perl_sv_2iv_flags( re_debug_flags_sv
,2)); } } while (0)
;
13478
13479 *flagp = WORST0; /* Tentatively. */
13480
13481 DEBUG_PARSE("atom")do {if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool
)1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { do
{if (__builtin_expect(((PL_debug & 0x00100000) ? (_Bool)
1 : (_Bool)0),(0)) || (re_debug_flags & (0x000001))) { if
((pRExC_state->lastparse)!=(pRExC_state->parse)) { Perl_re_printf
( "%s", Perl_pv_pretty( (pRExC_state->mysv1), (pRExC_state
->parse), (pRExC_state->end) - (pRExC_state->parse),
16, "", "", 0x000200 | 0x000002 | 0x000004 | 0x008000 | 0x000008
) ); } else Perl_re_printf( "%16s",""); if ((pRExC_state->
lastnum)!=(pRExC_state->emit)) Perl_re_printf( "|%4zu", (pRExC_state
->emit)); else Perl_re_printf( "|%4s",""); Perl_re_printf(
"|%*s%-4s", (int)((depth*2)), "", (("atom")) ); (pRExC_state
->lastnum)=(pRExC_state->emit); (pRExC_state->lastparse
)=(pRExC_state->parse); };} while (0); Perl_re_printf( "%4s"
,"\n"); };} while (0)
;
13482
13483 PERL_ARGS_ASSERT_REGATOM((pRExC_state) ? (void)0 : __assert2("re_comp.c", 13483, __func__
, "pRExC_state")); ((flagp) ? (void)0 : __assert2("re_comp.c"
, 13483, __func__, "flagp"))
;
13484
13485 tryagain:
13486 parse_start = RExC_parse(pRExC_state->parse);
13487 assert(RExC_parse < RExC_end)(((pRExC_state->parse) < (pRExC_state->end)) ? (void
)0 : __assert2("re_comp.c", 13487, __func__, "RExC_parse < RExC_end"
))
;
13488 switch ((U8)*RExC_parse(pRExC_state->parse)) {
13489 case '^':
13490 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
13491 nextchar(pRExC_state)S_nextchar( pRExC_state);
13492 if (RExC_flags(pRExC_state->flags) & RXf_PMf_MULTILINE(1U << (0 +0)))
13493 ret = reg_node(pRExC_state, MBOL)S_reg_node( pRExC_state,3);
13494 else
13495 ret = reg_node(pRExC_state, SBOL)S_reg_node( pRExC_state,2);
13496 Set_Node_Length(REGNODE_p(ret), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 13496, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
; /* MJD */
13497 break;
13498 case '$':
13499 nextchar(pRExC_state)S_nextchar( pRExC_state);
13500 if (*RExC_parse(pRExC_state->parse))
13501 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
13502 if (RExC_flags(pRExC_state->flags) & RXf_PMf_MULTILINE(1U << (0 +0)))
13503 ret = reg_node(pRExC_state, MEOL)S_reg_node( pRExC_state,5);
13504 else
13505 ret = reg_node(pRExC_state, SEOL)S_reg_node( pRExC_state,4);
13506 Set_Node_Length(REGNODE_p(ret), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 13506, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
; /* MJD */
13507 break;
13508 case '.':
13509 nextchar(pRExC_state)S_nextchar( pRExC_state);
13510 if (RExC_flags(pRExC_state->flags) & RXf_PMf_SINGLELINE(1U << (0 +1)))
13511 ret = reg_node(pRExC_state, SANY)S_reg_node( pRExC_state,17);
13512 else
13513 ret = reg_node(pRExC_state, REG_ANY)S_reg_node( pRExC_state,16);
13514 *flagp |= HASWIDTH0x01|SIMPLE0x02;
13515 MARK_NAUGHTY(1)if ((pRExC_state->naughty) < (10)) (pRExC_state->naughty
) += (1)
;
13516 Set_Node_Length(REGNODE_p(ret), 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 13516, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)(1));} while (0); if((((((pRExC_state->
emit_start) + (ret))) - (pRExC_state->emit_start))) < 0
) { Perl_croak( "value of node is %d in Length macro", (int)(
((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = (1); } } while (0)
; /* MJD */
13517 break;
13518 case '[':
13519 {
13520 char * const oregcomp_parse = ++RExC_parse(pRExC_state->parse);
13521 ret = regclass(pRExC_state, flagp, depth+1,S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13522 FALSE, /* means parse the whole char class */S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13523 TRUE, /* allow multi-char folds */S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13524 FALSE, /* don't silence non-portable warnings. */S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13525 (bool) RExC_strict,S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13526 TRUE, /* Allow an optimized regnode result */S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13527 NULL)S_regclass( pRExC_state,flagp,depth+1,(0),(1),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
;
13528 if (ret == 0) {
13529 RETURN_FAIL_ON_RESTART_FLAGP(flagp)if (((*(flagp)) & (0x20))) return 0;
13530 FAIL2("panic: regclass returned failure to regatom, flags=%#" UVxf,do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regclass returned failure to regatom, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) *flagp, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
13531 (UV) *flagp)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regclass returned failure to regatom, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) *flagp, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
;
13532 }
13533 if (*RExC_parse(pRExC_state->parse) != ']') {
13534 RExC_parse(pRExC_state->parse) = oregcomp_parse;
13535 vFAIL("Unmatched [")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unmatched [", (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 13535, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
13536 }
13537 nextchar(pRExC_state)S_nextchar( pRExC_state);
13538 Set_Node_Length(REGNODE_p(ret), RExC_parse - oregcomp_parse + 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 13538, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - oregcomp_parse
+ 1));} while (0); if((((((pRExC_state->emit_start) + (ret
))) - (pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - oregcomp_parse
+ 1); } } while (0)
; /* MJD */
13539 break;
13540 }
13541 case '(':
13542 nextchar(pRExC_state)S_nextchar( pRExC_state);
13543 ret = reg(pRExC_state, 2, &flags, depth+1)S_reg( pRExC_state,2,&flags,depth+1);
13544 if (ret == 0) {
13545 if (flags & TRYAGAIN0x10) {
13546 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
13547 /* Make parent create an empty node if needed. */
13548 *flagp |= TRYAGAIN0x10;
13549 return(0);
13550 }
13551 goto tryagain;
13552 }
13553 RETURN_FAIL_ON_RESTART(flags, flagp)do { if ((flags) & (0x20|0x40|(0))) { *(flagp) = (flags) &
(0x20|0x40|(0)); return 0; } } while (0)
;
13554 FAIL2("panic: reg returned failure to regatom, flags=%#" UVxf,do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: reg returned failure to regatom, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
13555 (UV) flags)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: reg returned failure to regatom, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) flags, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
;
13556 }
13557 *flagp |= flags&(HASWIDTH0x01|SPSTART0x04|SIMPLE0x02|POSTPONED0x08);
13558 break;
13559 case '|':
13560 case ')':
13561 if (flags & TRYAGAIN0x10) {
13562 *flagp |= TRYAGAIN0x10;
13563 return 0;
13564 }
13565 vFAIL("Internal urp")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Internal urp", (int)(((((pRExC_state->utf8
)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 13565, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
13566 /* Supposed to be caught earlier. */
13567 break;
13568 case '?':
13569 case '+':
13570 case '*':
13571 RExC_parse(pRExC_state->parse)++;
13572 vFAIL("Quantifier follows nothing")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Quantifier follows nothing", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13572, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13573 break;
13574 case '\\':
13575 /* Special Escapes
13576
13577 This switch handles escape sequences that resolve to some kind
13578 of special regop and not to literal text. Escape sequences that
13579 resolve to literal text are handled below in the switch marked
13580 "Literal Escapes".
13581
13582 Every entry in this switch *must* have a corresponding entry
13583 in the literal escape switch. However, the opposite is not
13584 required, as the default for this switch is to jump to the
13585 literal text handling code.
13586 */
13587 RExC_parse(pRExC_state->parse)++;
13588 switch ((U8)*RExC_parse(pRExC_state->parse)) {
13589 /* Special Escapes */
13590 case 'A':
13591 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
13592 /* Under wildcards, this is changed to match \n; should be
13593 * invisible to the user, as they have to compile under /m */
13594 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
13595 ret = reg_node(pRExC_state, MBOL)S_reg_node( pRExC_state,3);
13596 }
13597 else {
13598 ret = reg_node(pRExC_state, SBOL)S_reg_node( pRExC_state,2);
13599 /* SBOL is shared with /^/ so we set the flags so we can tell
13600 * /\A/ from /^/ in split. */
13601 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = 1;
13602 *flagp |= SIMPLE0x02; /* Wrong, but too late to fix for 5.32 */
13603 }
13604 goto finish_meta_pat;
13605 case 'G':
13606 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
13607 RExC_parse(pRExC_state->parse)++;
13608 /* diag_listed_as: Use of %s is not allowed in Unicode property
13609 wildcard subpatterns in regex; marked by <-- HERE in m/%s/
13610 */
13611 vFAIL("Use of '\\G' is not allowed in Unicode property"do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Use of '\\G' is not allowed in Unicode property"
" wildcard subpatterns", (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 13612, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
13612 " wildcard subpatterns")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Use of '\\G' is not allowed in Unicode property"
" wildcard subpatterns", (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 13612, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
13613 }
13614 ret = reg_node(pRExC_state, GPOS)S_reg_node( pRExC_state,7);
13615 RExC_seen(pRExC_state->seen) |= REG_GPOS_SEEN0x00000004;
13616 *flagp |= SIMPLE0x02;
13617 goto finish_meta_pat;
13618 case 'K':
13619 if (!RExC_in_lookaround(pRExC_state->in_lookaround)) {
13620 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
13621 ret = reg_node(pRExC_state, KEEPS)S_reg_node( pRExC_state,105);
13622 *flagp |= SIMPLE0x02;
13623 /* XXX:dmq : disabling in-place substitution seems to
13624 * be necessary here to avoid cases of memory corruption, as
13625 * with: C<$_="x" x 80; s/x\K/y/> -- rgs
13626 */
13627 RExC_seen(pRExC_state->seen) |= REG_LOOKBEHIND_SEEN0x00000002;
13628 goto finish_meta_pat;
13629 }
13630 else {
13631 ++RExC_parse(pRExC_state->parse); /* advance past the 'K' */
13632 vFAIL("\\K not permitted in lookahead/lookbehind")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "\\K not permitted in lookahead/lookbehind",
(int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13632, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13633 }
13634 case 'Z':
13635 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
13636 /* See comment under \A above */
13637 ret = reg_node(pRExC_state, MEOL)S_reg_node( pRExC_state,5);
13638 }
13639 else {
13640 ret = reg_node(pRExC_state, SEOL)S_reg_node( pRExC_state,4);
13641 *flagp |= SIMPLE0x02; /* Wrong, but too late to fix for 5.32 */
13642 }
13643 RExC_seen_zerolen(pRExC_state->seen_zerolen)++; /* Do not optimize RE away */
13644 goto finish_meta_pat;
13645 case 'z':
13646 if (RExC_pm_flags(pRExC_state->pm_flags) & PMf_WILDCARD(1U<<(((0 +12)+2)+17))) {
13647 /* See comment under \A above */
13648 ret = reg_node(pRExC_state, MEOL)S_reg_node( pRExC_state,5);
13649 }
13650 else {
13651 ret = reg_node(pRExC_state, EOS)S_reg_node( pRExC_state,6);
13652 *flagp |= SIMPLE0x02; /* Wrong, but too late to fix for 5.32 */
13653 }
13654 RExC_seen_zerolen(pRExC_state->seen_zerolen)++; /* Do not optimize RE away */
13655 goto finish_meta_pat;
13656 case 'C':
13657 vFAIL("\\C no longer supported")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "\\C no longer supported", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13657, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13658 case 'X':
13659 ret = reg_node(pRExC_state, CLUMP)S_reg_node( pRExC_state,38);
13660 *flagp |= HASWIDTH0x01;
13661 goto finish_meta_pat;
13662
13663 case 'B':
13664 invert = 1;
13665 /* FALLTHROUGH */
13666 case 'b':
13667 {
13668 U8 flags = 0;
13669 regex_charset charset = get_regex_charset(RExC_flags(pRExC_state->flags));
13670
13671 RExC_seen_zerolen(pRExC_state->seen_zerolen)++;
13672 RExC_seen(pRExC_state->seen) |= REG_LOOKBEHIND_SEEN0x00000002;
13673 op = BOUND8 + charset;
13674
13675 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end) || *(RExC_parse(pRExC_state->parse) + 1) != '{') {
13676 flags = TRADITIONAL_BOUND;
13677 if (op > BOUNDA11) { /* /aa is same as /a */
13678 op = BOUNDA11;
13679 }
13680 }
13681 else {
13682 STRLEN length;
13683 char name = *RExC_parse(pRExC_state->parse);
13684 char * endbrace = NULL((void*)0);
13685 RExC_parse(pRExC_state->parse) += 2;
13686 endbrace = (char *) memchr(RExC_parse(pRExC_state->parse), '}', RExC_end(pRExC_state->end) - RExC_parse(pRExC_state->parse));
13687
13688 if (! endbrace) {
13689 vFAIL2("Missing right brace on \\%c{}", name)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Missing right brace on \\%c{}"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", name, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13689, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13690 }
13691 /* XXX Need to decide whether to take spaces or not. Should be
13692 * consistent with \p{}, but that currently is SPACE, which
13693 * means vertical too, which seems wrong
13694 * while (isBLANK(*RExC_parse)) {
13695 RExC_parse++;
13696 }*/
13697 if (endbrace == RExC_parse(pRExC_state->parse)) {
13698 RExC_parse(pRExC_state->parse)++; /* After the '}' */
13699 vFAIL2("Empty \\%c{}", name)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Empty \\%c{}" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", name, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 13699, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
13700 }
13701 length = endbrace - RExC_parse(pRExC_state->parse);
13702 /*while (isBLANK(*(RExC_parse + length - 1))) {
13703 length--;
13704 }*/
13705 switch (*RExC_parse(pRExC_state->parse)) {
13706 case 'g':
13707 if ( length != 1
13708 && (memNEs(RExC_parse + 1, length - 1, "cb")(! (((sizeof("cb")-1) == (length - 1)) && (memcmp(((const
void *) (((pRExC_state->parse) + 1))), ((const void *) ((
"" "cb" ""))), (sizeof("cb")-1)) == 0)))
))
13709 {
13710 goto bad_bound_type;
13711 }
13712 flags = GCB_BOUND;
13713 break;
13714 case 'l':
13715 if (length != 2 || *(RExC_parse(pRExC_state->parse) + 1) != 'b') {
13716 goto bad_bound_type;
13717 }
13718 flags = LB_BOUND;
13719 break;
13720 case 's':
13721 if (length != 2 || *(RExC_parse(pRExC_state->parse) + 1) != 'b') {
13722 goto bad_bound_type;
13723 }
13724 flags = SB_BOUND;
13725 break;
13726 case 'w':
13727 if (length != 2 || *(RExC_parse(pRExC_state->parse) + 1) != 'b') {
13728 goto bad_bound_type;
13729 }
13730 flags = WB_BOUND;
13731 break;
13732 default:
13733 bad_bound_type:
13734 RExC_parse(pRExC_state->parse) = endbrace;
13735 vFAIL2utf8f(do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "'%" "d%" "lu" "%4p" "' is an unknown bound type"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(length), (void*)(endbrace - length), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13737, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
13736 "'%" UTF8f "' is an unknown bound type",do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "'%" "d%" "lu" "%4p" "' is an unknown bound type"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(length), (void*)(endbrace - length), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13737, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
13737 UTF8fARG(UTF, length, endbrace - length))do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "'%" "d%" "lu" "%4p" "' is an unknown bound type"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)(length), (void*)(endbrace - length), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13737, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0)
;
13738 NOT_REACHEDdo { ((!"UNREACHABLE") ? (void)0 : __assert2("re_comp.c", 13738
, __func__, "!\"UNREACHABLE\"")); __builtin_unreachable(); } while
(0)
; /*NOTREACHED*/
13739 }
13740 RExC_parse(pRExC_state->parse) = endbrace;
13741 REQUIRE_UNI_RULES(flagp, 0)do { if ((get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)) { set_regex_charset(&(pRExC_state->flags), REGEX_UNICODE_CHARSET
); (pRExC_state->uni_semantics) = 1; if ((pRExC_state->
seen_d_op) && __builtin_expect(((! ((pRExC_state->
total_par) < 0)) ? (_Bool)1 : (_Bool)0),(1))) { *flagp |= 0x20
; return 0; } } } while (0)
;
13742
13743 if (op == BOUND8) {
13744 op = BOUNDU10;
13745 }
13746 else if (op >= BOUNDA11) { /* /aa is same as /a */
13747 op = BOUNDU10;
13748 length += 4;
13749
13750 /* Don't have to worry about UTF-8, in this message because
13751 * to get here the contents of the \b must be ASCII */
13752 ckWARN4reg(RExC_parse + 1, /* Include the '}' in msg */do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
13753 "Using /u for '%.*s' instead of /%s",do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
13754 (unsigned) length,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
13755 endbrace - length + 1,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
13756 (charset == REGEX_ASCII_RESTRICTED_CHARSET)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
13757 ? ASCII_RESTRICT_PAT_MODSdo { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
13758 : ASCII_MORE_RESTRICT_PAT_MODS)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 13758, (pRExC_state->parse
) + 1); } if (( (pRExC_state->copy_start) && ((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))) - (pRExC_state->precomp)) > (ptrdiff_t
) (pRExC_state->latest_warn_offset ))) { if ((PL_curcop &&
!((PL_curcop->cop_warnings) == ((void*)0) || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_ALL || (PL_curcop->
cop_warnings) == (STRLEN *) &PL_WARN_NONE) && (((
((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((20 )) & 0xFF
))+1) / 8)] & (1 << ((2*((((20 )) & 0xFF))+1) %
8)))) || (((((20 )) >>8) & 0xFF) && (((((U8
*)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>8
) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
8) & 0xFF))+1) % 8)))) || (((((20 )) >>16) & 0xFF
) && (((((U8 *)(PL_curcop->cop_warnings + 1))[((2*
(((((20 )) >>16) & 0xFF))+1) / 8)] & (1 <<
((2*(((((20 )) >>16) & 0xFF))+1) % 8)))) || (((((20
)) >>24) & 0xFF) && ((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*(((((20 )) >>24) & 0xFF))+1)
/ 8)] & (1 << ((2*(((((20 )) >>24) & 0xFF
))+1) % 8)))))))))))) do { if ((pRExC_state->rx_sv)) Perl_save_pushptr
( (void *)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p
; }))),11); if ((pRExC_state->open_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->open_parens))),10); if ((
pRExC_state->close_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->close_parens))),10); } while (0); Perl_ck_warner
( (20 ), "Using /u for '%.*s' instead of /%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", (unsigned) length, endbrace - length + 1, (charset
== REGEX_ASCII_RESTRICTED_CHARSET) ? "a" : "aa", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) + 1 - (pRExC_state->copy_start))) -
(pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13758, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start))) - (pRExC_state
->precomp)), ((int) ((pRExC_state->end) - (pRExC_state->
start))), (pRExC_state->start)), 0))), (void*)((pRExC_state
->precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 :
(_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? 0 : (pRExC_state->
precomp_end) - ((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))), (void*)(((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) : ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) + 1 - (pRExC_state->copy_start)))) - (pRExC_state
->precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))?((pRExC_state->precomp_end)):(((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) + 1 - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) + 1 - (pRExC_state->copy_start
))))))) - (pRExC_state->precomp); } } while (0); } } while
(0)
;
13759 }
13760 }
13761
13762 if (op == BOUND8) {
13763 RExC_seen_d_op(pRExC_state->seen_d_op) = TRUE(1);
13764 }
13765 else if (op == BOUNDL9) {
13766 RExC_contains_locale(pRExC_state->contains_locale) = 1;
13767 }
13768
13769 if (invert) {
13770 op += NBOUND12 - BOUND8;
13771 }
13772
13773 ret = reg_node(pRExC_state, op)S_reg_node( pRExC_state,op);
13774 FLAGS(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->flags) = flags;
13775
13776 *flagp |= SIMPLE0x02;
13777
13778 goto finish_meta_pat;
13779 }
13780
13781 case 'R':
13782 ret = reg_node(pRExC_state, LNBREAK)S_reg_node( pRExC_state,106);
13783 *flagp |= HASWIDTH0x01|SIMPLE0x02;
13784 goto finish_meta_pat;
13785
13786 case 'd':
13787 case 'D':
13788 case 'h':
13789 case 'H':
13790 case 'p':
13791 case 'P':
13792 case 's':
13793 case 'S':
13794 case 'v':
13795 case 'V':
13796 case 'w':
13797 case 'W':
13798 /* These all have the same meaning inside [brackets], and it knows
13799 * how to do the best optimizations for them. So, pretend we found
13800 * these within brackets, and let it do the work */
13801 RExC_parse(pRExC_state->parse)--;
13802
13803 ret = regclass(pRExC_state, flagp, depth+1,S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13804 TRUE, /* means just parse this element */S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13805 FALSE, /* don't allow multi-char folds */S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13806 FALSE, /* don't silence non-portable warnings. ItS_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13807 would be a bug if these returnedS_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13808 non-portables */S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13809 (bool) RExC_strict,S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13810 TRUE, /* Allow an optimized regnode result */S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
13811 NULL)S_regclass( pRExC_state,flagp,depth+1,(1),(0),(0),(_Bool) (pRExC_state
->strict),(1),((void*)0))
;
13812 RETURN_FAIL_ON_RESTART_FLAGP(flagp)if (((*(flagp)) & (0x20))) return 0;
13813 /* regclass() can only return RESTART_PARSE and NEED_UTF8 if
13814 * multi-char folds are allowed. */
13815 if (!ret)
13816 FAIL2("panic: regclass returned failure to regatom, flags=%#" UVxf,do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regclass returned failure to regatom, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) *flagp, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
13817 (UV) *flagp)do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "panic: regclass returned failure to regatom, flags=%#"
"lx" " in regex m/%" "d%" "lu" "%4p" "%s/", (UV) *flagp, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp))
, ellipses); } while (0)
;
13818
13819 RExC_parse(pRExC_state->parse)--; /* regclass() leaves this one too far ahead */
13820
13821 finish_meta_pat:
13822 /* The escapes above that don't take a parameter can't be
13823 * followed by a '{'. But 'pX', 'p{foo}' and
13824 * correspondingly 'P' can be */
13825 if ( RExC_parse(pRExC_state->parse) - parse_start == 1
13826 && UCHARAT(RExC_parse + 1)((int)*(const U8*)((pRExC_state->parse) + 1)) == '{'
13827 && UNLIKELY(! new_regcurly(RExC_parse + 1, RExC_end))__builtin_expect(((! S_new_regcurly((pRExC_state->parse) +
1, (pRExC_state->end))) ? (_Bool)1 : (_Bool)0),(0))
)
13828 {
13829 RExC_parse(pRExC_state->parse) += 2;
13830 vFAIL("Unescaped left brace in regex is illegal here")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unescaped left brace in regex is illegal here"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13830, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13831 }
13832 Set_Node_Offset(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 13832, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start)-(pRExC_state->start)));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start)-(pRExC_state->start
)); } } while (0)
;
13833 Set_Node_Length(REGNODE_p(ret), RExC_parse - parse_start + 1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 13833, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - parse_start + 1
));} while (0); if((((((pRExC_state->emit_start) + (ret)))
- (pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - parse_start +
1); } } while (0)
; /* MJD */
13834 nextchar(pRExC_state)S_nextchar( pRExC_state);
13835 break;
13836 case 'N':
13837 /* Handle \N, \N{} and \N{NAMED SEQUENCE} (the latter meaning the
13838 * \N{...} evaluates to a sequence of more than one code points).
13839 * The function call below returns a regnode, which is our result.
13840 * The parameters cause it to fail if the \N{} evaluates to a
13841 * single code point; we handle those like any other literal. The
13842 * reason that the multicharacter case is handled here and not as
13843 * part of the EXACtish code is because of quantifiers. In
13844 * /\N{BLAH}+/, the '+' applies to the whole thing, and doing it
13845 * this way makes that Just Happen. dmq.
13846 * join_exact() will join this up with adjacent EXACTish nodes
13847 * later on, if appropriate. */
13848 ++RExC_parse(pRExC_state->parse);
13849 if (grok_bslash_N(pRExC_state,S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13850 &ret, /* Want a regnode returned */S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13851 NULL, /* Fail if evaluates to a single codeS_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13852 point */S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13853 NULL, /* Don't need a count of how many codeS_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13854 points */S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13855 flagp,S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13856 RExC_strict,S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13857 depth)S_grok_bslash_N( pRExC_state,&ret,((void*)0),((void*)0),flagp
,(pRExC_state->strict),depth)
13858 ) {
13859 break;
13860 }
13861
13862 RETURN_FAIL_ON_RESTART_FLAGP(flagp)if (((*(flagp)) & (0x20))) return 0;
13863
13864 /* Here, evaluates to a single code point. Go get that */
13865 RExC_parse(pRExC_state->parse) = parse_start;
13866 goto defchar;
13867
13868 case 'k': /* Handle \k<NAME> and \k'NAME' */
13869 parse_named_seq:
13870 {
13871 char ch;
13872 if ( RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end) - 1
13873 || (( ch = RExC_parse(pRExC_state->parse)[1]) != '<'
13874 && ch != '\''
13875 && ch != '{'))
13876 {
13877 RExC_parse(pRExC_state->parse)++;
13878 /* diag_listed_as: Sequence \%s... not terminated in regex; marked by <-- HERE in m/%s/ */
13879 vFAIL2("Sequence %.2s... not terminated", parse_start)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { S_re_croak( (((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0), "Sequence %.2s... not terminated"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", parse_start, (int)(
((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1
: (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) >
(pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13879, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13880 } else {
13881 RExC_parse(pRExC_state->parse) += 2;
13882 ret = handle_named_backref(pRExC_state,S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13883 flagp,S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13884 parse_start,S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13885 (ch == '<')S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13886 ? '>'S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13887 : (ch == '{')S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13888 ? '}'S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
13889 : '\'')S_handle_named_backref( pRExC_state,flagp,parse_start,(ch == '<'
) ? '>' : (ch == '{') ? '}' : '\'')
;
13890 }
13891 break;
13892 }
13893 case 'g':
13894 case '1': case '2': case '3': case '4':
13895 case '5': case '6': case '7': case '8': case '9':
13896 {
13897 I32 num;
13898 bool_Bool hasbrace = 0;
13899
13900 if (*RExC_parse(pRExC_state->parse) == 'g') {
13901 bool_Bool isrel = 0;
13902
13903 RExC_parse(pRExC_state->parse)++;
13904 if (*RExC_parse(pRExC_state->parse) == '{') {
13905 RExC_parse(pRExC_state->parse)++;
13906 hasbrace = 1;
13907 }
13908 if (*RExC_parse(pRExC_state->parse) == '-') {
13909 RExC_parse(pRExC_state->parse)++;
13910 isrel = 1;
13911 }
13912 if (hasbrace && !isDIGIT(*RExC_parse)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 13912
, __func__, "('9') >= ('0')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 13912, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13912, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 13912, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13912, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 13912, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13912, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13912, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'
))) | 0))))))))
) {
13913 if (isrel) RExC_parse(pRExC_state->parse)--;
13914 RExC_parse(pRExC_state->parse) -= 2;
13915 goto parse_named_seq;
13916 }
13917
13918 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end)) {
13919 goto unterminated_g;
13920 }
13921 num = S_backref_value(RExC_parse(pRExC_state->parse), RExC_end(pRExC_state->end));
13922 if (num == 0)
13923 vFAIL("Reference to invalid group 0")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Reference to invalid group 0", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13923, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13924 else if (num == I32_MAX0x7fffffff) {
13925 if (isDIGIT(*RExC_parse)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 13925
, __func__, "('9') >= ('0')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 13925, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13925, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 13925, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13925, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 13925, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13925, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13925, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'
))) | 0))))))))
)
13926 vFAIL("Reference to nonexistent group")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Reference to nonexistent group", (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13926, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13927 else
13928 unterminated_g:
13929 vFAIL("Unterminated \\g... pattern")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unterminated \\g... pattern", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13929, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13930 }
13931
13932 if (isrel) {
13933 num = RExC_npar(pRExC_state->npar) - num;
13934 if (num < 1)
13935 vFAIL("Reference to nonexistent or unclosed group")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Reference to nonexistent or unclosed group"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13935, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13936 }
13937 }
13938 else {
13939 num = S_backref_value(RExC_parse(pRExC_state->parse), RExC_end(pRExC_state->end));
13940 /* bare \NNN might be backref or octal - if it is larger
13941 * than or equal RExC_npar then it is assumed to be an
13942 * octal escape. Note RExC_npar is +1 from the actual
13943 * number of parens. */
13944 /* Note we do NOT check if num == I32_MAX here, as that is
13945 * handled by the RExC_npar check */
13946
13947 if (
13948 /* any numeric escape < 10 is always a backref */
13949 num > 9
13950 /* any numeric escape < RExC_npar is a backref */
13951 && num >= RExC_npar(pRExC_state->npar)
13952 /* cannot be an octal escape if it starts with 8 */
13953 && *RExC_parse(pRExC_state->parse) != '8'
13954 /* cannot be an octal escape if it starts with 9 */
13955 && *RExC_parse(pRExC_state->parse) != '9'
13956 ) {
13957 /* Probably not meant to be a backref, instead likely
13958 * to be an octal character escape, e.g. \35 or \777.
13959 * The above logic should make it obvious why using
13960 * octal escapes in patterns is problematic. - Yves */
13961 RExC_parse(pRExC_state->parse) = parse_start;
13962 goto defchar;
13963 }
13964 }
13965
13966 /* At this point RExC_parse points at a numeric escape like
13967 * \12 or \88 or something similar, which we should NOT treat
13968 * as an octal escape. It may or may not be a valid backref
13969 * escape. For instance \88888888 is unlikely to be a valid
13970 * backref. */
13971 while (isDIGIT(*RExC_parse)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 13971
, __func__, "('9') >= ('0')")), ( (sizeof(*(pRExC_state->
parse)) == sizeof(U8)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 13971, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13971, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U8) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (sizeof(*(pRExC_state->
parse)) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (void)0 :
__assert2("re_comp.c", 13971, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13971, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*(pRExC_state->parse))))) - ((('0')) | 0))) <=
(((U64) (((('9') - ('0'))) | 0))))) : (((sizeof(*(pRExC_state
->parse)) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 13971, __func__, "sizeof(*(pRExC_state->parse)) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 13971, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 13971, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*(pRExC_state
->parse))))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'
))) | 0))))))))
)
13972 RExC_parse(pRExC_state->parse)++;
13973 if (hasbrace) {
13974 if (*RExC_parse(pRExC_state->parse) != '}')
13975 vFAIL("Unterminated \\g{...} pattern")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unterminated \\g{...} pattern", (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
((pRExC_state->parse) - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13975, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13976 RExC_parse(pRExC_state->parse)++;
13977 }
13978 if (num >= (I32)RExC_npar(pRExC_state->npar)) {
13979
13980 /* It might be a forward reference; we can't fail until we
13981 * know, by completing the parse to get all the groups, and
13982 * then reparsing */
13983 if (ALL_PARENS_COUNTED((pRExC_state->total_par) > 0)) {
13984 if (num >= RExC_total_parens(pRExC_state->total_par)) {
13985 vFAIL("Reference to nonexistent group")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Reference to nonexistent group", (int)(((((
pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (
_Bool)0), (UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state
->precomp) : (((((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))) - (pRExC_state
->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 13985, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
13986 }
13987 }
13988 else {
13989 REQUIRE_PARENS_PASSdo { if (! ((pRExC_state->total_par) > 0)) (pRExC_state
->total_par) = -1; } while (0)
;
13990 }
13991 }
13992 RExC_sawback(pRExC_state->sawback) = 1;
13993 ret = reganode(pRExC_state,S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
13994 ((! FOLD)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
13995 ? REFS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
13996 : (ASCII_FOLD_RESTRICTED)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
13997 ? REFFAS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
13998 : (AT_LEAST_UNI_SEMANTICS)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
13999 ? REFFUS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
14000 : (LOC)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
14001 ? REFFLS_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
14002 : REFF),S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
14003 num)S_reganode( pRExC_state,((! (((pRExC_state->flags) & (
1U << (0 +2))) ? (_Bool)1 : (_Bool)0)) ? 67 : ((get_regex_charset
((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 71 : ((get_regex_charset((pRExC_state->flags)) >= REGEX_UNICODE_CHARSET
)) ? 70 : ((get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)) ? 69 : 68),num)
;
14004 if (OP(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->type) == REFF68) {
14005 RExC_seen_d_op(pRExC_state->seen_d_op) = TRUE(1);
14006 }
14007 *flagp |= HASWIDTH0x01;
14008
14009 /* override incorrect value set in reganode MJD */
14010 Set_Node_Offset(REGNODE_p(ret), parse_start)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) offset of node %d is %d.\n", 14010, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((parse_start)-(pRExC_state->start)));
} while (0); if((((((pRExC_state->emit_start) + (ret))) - (
pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Offset macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))-1] = ((parse_start)-(pRExC_state->start
)); } } while (0)
;
14011 Set_Node_Cur_Length(REGNODE_p(ret), parse_start-1)do { do {if (__builtin_expect(((PL_debug & 0x00100000) ? (
_Bool)1 : (_Bool)0),(0)) || (re_debug_flags & (0x0040000)
)) Perl_warn ("** (%d) size of node %d is %d.\n", 14011, (int
)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state->
emit_start))), (int)((pRExC_state->parse) - parse_start-1)
);} while (0); if((((((pRExC_state->emit_start) + (ret))) -
(pRExC_state->emit_start))) < 0) { Perl_croak( "value of node is %d in Length macro"
, (int)(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))); } else { ((pRExC_state->rxi)->u.offsets
)[2*(((((pRExC_state->emit_start) + (ret))) - (pRExC_state
->emit_start)))] = ((pRExC_state->parse) - parse_start-
1); } } while (0)
;
14012 skip_to_be_ignored_text(pRExC_state, &RExC_parse,S_skip_to_be_ignored_text( pRExC_state,&(pRExC_state->
parse),(0))
14013 FALSE /* Don't force to /x */ )S_skip_to_be_ignored_text( pRExC_state,&(pRExC_state->
parse),(0))
;
14014 }
14015 break;
14016 case '\0':
14017 if (RExC_parse(pRExC_state->parse) >= RExC_end(pRExC_state->end))
14018 FAIL("Trailing \\")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Trailing \\"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
14019 /* FALLTHROUGH */
14020 default:
14021 /* Do not generate "unrecognized" warnings here, we fall
14022 back into the quick-grab loop below */
14023 RExC_parse(pRExC_state->parse) = parse_start;
14024 goto defchar;
14025 } /* end of switch on a \foo sequence */
14026 break;
14027
14028 case '#':
14029
14030 /* '#' comments should have been spaced over before this function was
14031 * called */
14032 assert((RExC_flags & RXf_PMf_EXTENDED) == 0)((((pRExC_state->flags) & (1U << (0 +3))) == 0) ?
(void)0 : __assert2("re_comp.c", 14032, __func__, "(RExC_flags & RXf_PMf_EXTENDED) == 0"
))
;
14033 /*
14034 if (RExC_flags & RXf_PMf_EXTENDED) {
14035 RExC_parse = reg_skipcomment( pRExC_state, RExC_parse );
14036 if (RExC_parse < RExC_end)
14037 goto tryagain;
14038 }
14039 */
14040
14041 /* FALLTHROUGH */
14042
14043 default:
14044 defchar: {
14045
14046 /* Here, we have determined that the next thing is probably a
14047 * literal character. RExC_parse points to the first byte of its
14048 * definition. (It still may be an escape sequence that evaluates
14049 * to a single character) */
14050
14051 STRLEN len = 0;
14052 UV ender = 0;
14053 char *p;
14054 char *s, *old_s = NULL((void*)0), *old_old_s = NULL((void*)0);
14055 char *s0;
14056 U32 max_string_len = 255;
14057
14058 /* We may have to reparse the node, artificially stopping filling
14059 * it early, based on info gleaned in the first parse. This
14060 * variable gives where we stop. Make it above the normal stopping
14061 * place first time through; otherwise it would stop too early */
14062 U32 upper_fill = max_string_len + 1;
14063
14064 /* We start out as an EXACT node, even if under /i, until we find a
14065 * character which is in a fold. The algorithm now segregates into
14066 * separate nodes, characters that fold from those that don't under
14067 * /i. (This hopefully will create nodes that are fixed strings
14068 * even under /i, giving the optimizer something to grab on to.)
14069 * So, if a node has something in it and the next character is in
14070 * the opposite category, that node is closed up, and the function
14071 * returns. Then regatom is called again, and a new node is
14072 * created for the new category. */
14073 U8 node_type = EXACT40;
14074
14075 /* Assume the node will be fully used; the excess is given back at
14076 * the end. Under /i, we may need to temporarily add the fold of
14077 * an extra character or two at the end to check for splitting
14078 * multi-char folds, so allocate extra space for that. We can't
14079 * make any other length assumptions, as a byte input sequence
14080 * could shrink down. */
14081 Ptrdiff_tptrdiff_t current_string_nodes = STR_SZ(max_string_len(((max_string_len + ((! (((pRExC_state->flags) & (1U <<
(0 +2))) ? (_Bool)1 : (_Bool)0)) ? 0 : 2 * (((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (((13)>(3 * ((((U64)(0x10FFFF
)) < (((U8) (0xFF << 6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF
) < (32 * (1U << ( 6))) ? 2 : (UV) (0x10FFFF) < (
16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF) < ( 8 * (
1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) < ( 4 * (1U <<
(4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 * (1U << (5 *
6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U << (6 * 6)) ?
7 : 13))))?(13):(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13)))) : 2))) + sizeof
(regnode) - 1) / sizeof(regnode))
14082 + ((! FOLD)(((max_string_len + ((! (((pRExC_state->flags) & (1U <<
(0 +2))) ? (_Bool)1 : (_Bool)0)) ? 0 : 2 * (((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (((13)>(3 * ((((U64)(0x10FFFF
)) < (((U8) (0xFF << 6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF
) < (32 * (1U << ( 6))) ? 2 : (UV) (0x10FFFF) < (
16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF) < ( 8 * (
1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) < ( 4 * (1U <<
(4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 * (1U << (5 *
6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U << (6 * 6)) ?
7 : 13))))?(13):(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13)))) : 2))) + sizeof
(regnode) - 1) / sizeof(regnode))
14083 ? 0(((max_string_len + ((! (((pRExC_state->flags) & (1U <<
(0 +2))) ? (_Bool)1 : (_Bool)0)) ? 0 : 2 * (((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (((13)>(3 * ((((U64)(0x10FFFF
)) < (((U8) (0xFF << 6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF
) < (32 * (1U << ( 6))) ? 2 : (UV) (0x10FFFF) < (
16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF) < ( 8 * (
1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) < ( 4 * (1U <<
(4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 * (1U << (5 *
6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U << (6 * 6)) ?
7 : 13))))?(13):(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13)))) : 2))) + sizeof
(regnode) - 1) / sizeof(regnode))
14084 : 2 * ((UTF)(((max_string_len + ((! (((pRExC_state->flags) & (1U <<
(0 +2))) ? (_Bool)1 : (_Bool)0)) ? 0 : 2 * (((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (((13)>(3 * ((((U64)(0x10FFFF
)) < (((U8) (0xFF << 6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF
) < (32 * (1U << ( 6))) ? 2 : (UV) (0x10FFFF) < (
16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF) < ( 8 * (
1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) < ( 4 * (1U <<
(4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 * (1U << (5 *
6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U << (6 * 6)) ?
7 : 13))))?(13):(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13)))) : 2))) + sizeof
(regnode) - 1) / sizeof(regnode))
14085 ? UTF8_MAXBYTES_CASE(((max_string_len + ((! (((pRExC_state->flags) & (1U <<
(0 +2))) ? (_Bool)1 : (_Bool)0)) ? 0 : 2 * (((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (((13)>(3 * ((((U64)(0x10FFFF
)) < (((U8) (0xFF << 6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF
) < (32 * (1U << ( 6))) ? 2 : (UV) (0x10FFFF) < (
16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF) < ( 8 * (
1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) < ( 4 * (1U <<
(4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 * (1U << (5 *
6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U << (6 * 6)) ?
7 : 13))))?(13):(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13)))) : 2))) + sizeof
(regnode) - 1) / sizeof(regnode))
14086 /* Max non-UTF-8 expansion is 2 */ : 2)))(((max_string_len + ((! (((pRExC_state->flags) & (1U <<
(0 +2))) ? (_Bool)1 : (_Bool)0)) ? 0 : 2 * (((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (((13)>(3 * ((((U64)(0x10FFFF
)) < (((U8) (0xFF << 6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF
) < (32 * (1U << ( 6))) ? 2 : (UV) (0x10FFFF) < (
16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF) < ( 8 * (
1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) < ( 4 * (1U <<
(4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 * (1U << (5 *
6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U << (6 * 6)) ?
7 : 13))))?(13):(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13)))) : 2))) + sizeof
(regnode) - 1) / sizeof(regnode))
;
14087
14088 bool_Bool next_is_quantifier;
14089 char * oldp = NULL((void*)0);
14090
14091 /* We can convert EXACTF nodes to EXACTFU if they contain only
14092 * characters that match identically regardless of the target
14093 * string's UTF8ness. The reason to do this is that EXACTF is not
14094 * trie-able, EXACTFU is, and EXACTFU requires fewer operations at
14095 * runtime.
14096 *
14097 * Similarly, we can convert EXACTFL nodes to EXACTFLU8 if they
14098 * contain only above-Latin1 characters (hence must be in UTF8),
14099 * which don't participate in folds with Latin1-range characters,
14100 * as the latter's folds aren't known until runtime. */
14101 bool_Bool maybe_exactfu = FOLD(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
&& (DEPENDS_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)
|| LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
);
14102
14103 /* Single-character EXACTish nodes are almost always SIMPLE. This
14104 * allows us to override this as encountered */
14105 U8 maybe_SIMPLE = SIMPLE0x02;
14106
14107 /* Does this node contain something that can't match unless the
14108 * target string is (also) in UTF-8 */
14109 bool_Bool requires_utf8_target = FALSE(0);
14110
14111 /* The sequence 'ss' is problematic in non-UTF-8 patterns. */
14112 bool_Bool has_ss = FALSE(0);
14113
14114 /* So is the MICRO SIGN */
14115 bool_Bool has_micro_sign = FALSE(0);
14116
14117 /* Set when we fill up the current node and there is still more
14118 * text to process */
14119 bool_Bool overflowed;
14120
14121 /* Allocate an EXACT node. The node_type may change below to
14122 * another EXACTish node, but since the size of the node doesn't
14123 * change, it works */
14124 ret = regnode_guts(pRExC_state, node_type, current_string_nodes,S_regnode_guts( pRExC_state,node_type,current_string_nodes,"exact"
)
14125 "exact")S_regnode_guts( pRExC_state,node_type,current_string_nodes,"exact"
)
;
14126 FILL_NODE(ret, node_type)do { ((((pRExC_state->emit_start) + (ret)))->type) = node_type
; ((((pRExC_state->emit_start) + (ret)))->next_off) = 0
; } while (0)
;
14127 RExC_emit(pRExC_state->emit)++;
14128
14129 s = STRING(REGNODE_p(ret))((((((pRExC_state->emit_start) + (ret)))->type) == 41 ||
((((pRExC_state->emit_start) + (ret)))->type) == 51) ?
(((((((pRExC_state->emit_start) + (ret)))->type) == 41
|| ((((pRExC_state->emit_start) + (ret)))->type) == 51
) ? (void)0 : __assert2("re_comp.c", 14129, __func__, "((((pRExC_state->emit_start) + (ret)))->type) == 41 || ((((pRExC_state->emit_start) + (ret)))->type) == 51"
)), (((struct regnode_lstring *)((pRExC_state->emit_start)
+ (ret)))->string)) : (((((((pRExC_state->emit_start) +
(ret)))->type) != 41 && ((((pRExC_state->emit_start
) + (ret)))->type) != 51) ? (void)0 : __assert2("re_comp.c"
, 14129, __func__, "((((pRExC_state->emit_start) + (ret)))->type) != 41 && ((((pRExC_state->emit_start) + (ret)))->type) != 51"
)), ((struct regnode_string *)((pRExC_state->emit_start) +
(ret)))->string))
;
14130
14131 s0 = s;
14132
14133 reparse:
14134
14135 p = RExC_parse(pRExC_state->parse);
14136 len = 0;
14137 s = s0;
14138 node_type = EXACT40;
14139 oldp = NULL((void*)0);
14140 maybe_exactfu = FOLD(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
&& (DEPENDS_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)
|| LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
);
14141 maybe_SIMPLE = SIMPLE0x02;
14142 requires_utf8_target = FALSE(0);
14143 has_ss = FALSE(0);
14144 has_micro_sign = FALSE(0);
14145
14146 continue_parse:
14147
14148 /* This breaks under rare circumstances. If folding, we do not
14149 * want to split a node at a character that is a non-final in a
14150 * multi-char fold, as an input string could just happen to want to
14151 * match across the node boundary. The code at the end of the loop
14152 * looks for this, and backs off until it finds not such a
14153 * character, but it is possible (though extremely, extremely
14154 * unlikely) for all characters in the node to be non-final fold
14155 * ones, in which case we just leave the node fully filled, and
14156 * hope that it doesn't match the string in just the wrong place */
14157
14158 assert( ! UTF /* Is at the beginning of a character */((! (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) || ((((U64
)(((UV) (((((int)*(const U8*)((pRExC_state->parse)))) | 0)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0))) || ((((
(sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) ||
!(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)
) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 14160, __func__
, "( (sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((( (sizeof(((int)*(const U8*)((pRExC_state->parse))
)) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 14160
, __func__, "( (sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((((int)*(const U8*)((pRExC_state->parse)))) | 0
))) >= (((((U8) (0xFF << 6)) & 0xB0) >> 6)
| (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))))
? (void)0 : __assert2("re_comp.c", 14160, __func__, "! UTF || UTF8_IS_INVARIANT(UCHARAT(RExC_parse)) || UTF8_IS_START(UCHARAT(RExC_parse))"
))
14159 || UTF8_IS_INVARIANT(UCHARAT(RExC_parse))((! (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) || ((((U64
)(((UV) (((((int)*(const U8*)((pRExC_state->parse)))) | 0)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0))) || ((((
(sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) ||
!(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)
) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 14160, __func__
, "( (sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((( (sizeof(((int)*(const U8*)((pRExC_state->parse))
)) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 14160
, __func__, "( (sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((((int)*(const U8*)((pRExC_state->parse)))) | 0
))) >= (((((U8) (0xFF << 6)) & 0xB0) >> 6)
| (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))))
? (void)0 : __assert2("re_comp.c", 14160, __func__, "! UTF || UTF8_IS_INVARIANT(UCHARAT(RExC_parse)) || UTF8_IS_START(UCHARAT(RExC_parse))"
))
14160 || UTF8_IS_START(UCHARAT(RExC_parse)))((! (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0) || ((((U64
)(((UV) (((((int)*(const U8*)((pRExC_state->parse)))) | 0)
| 0)))) < (((U8) (0xFF << 6)) & 0xB0))) || ((((
(sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) ||
!(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)
) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 14160, __func__
, "( (sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((((( (sizeof(((int)*(const U8*)((pRExC_state->parse))
)) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse
)))) | 0)) & ~0xFF))) ? (void)0 : __assert2("re_comp.c", 14160
, __func__, "( (sizeof(((int)*(const U8*)((pRExC_state->parse)))) == 1) || !(((U64)((((int)*(const U8*)((pRExC_state->parse)))) | 0)) & ~0xFF))"
)), ((U8) ((((int)*(const U8*)((pRExC_state->parse)))) | 0
))) >= (((((U8) (0xFF << 6)) & 0xB0) >> 6)
| (((2) > 7) ? 0xFF : ((U8) (0xFE << (7-(2)))))))))
? (void)0 : __assert2("re_comp.c", 14160, __func__, "! UTF || UTF8_IS_INVARIANT(UCHARAT(RExC_parse)) || UTF8_IS_START(UCHARAT(RExC_parse))"
))
;
14161
14162 overflowed = FALSE(0);
14163
14164 /* Here, we have a literal character. Find the maximal string of
14165 * them in the input that we can fit into a single EXACTish node.
14166 * We quit at the first non-literal or when the node gets full, or
14167 * under /i the categorization of folding/non-folding character
14168 * changes */
14169 while (p < RExC_end(pRExC_state->end) && len < upper_fill) {
14170
14171 /* In most cases each iteration adds one byte to the output.
14172 * The exceptions override this */
14173 Size_tsize_t added_len = 1;
14174
14175 oldp = p;
14176 old_old_s = old_s;
14177 old_s = s;
14178
14179 /* White space has already been ignored */
14180 assert( (RExC_flags & RXf_PMf_EXTENDED) == 0((((pRExC_state->flags) & (1U << (0 +3))) == 0 ||
! ( ( __builtin_expect(((((pRExC_state->end)) > ((p)))
? (_Bool)1 : (_Bool)0),(1)) ) ? ( ( ((((0x0D) >= (0x09)) ?
(void)0 : __assert2("re_comp.c", 14181, __func__, "(0x0D) >= (0x09)"
)), ( (sizeof(((const U8*)(p))[0]) == sizeof(U8)) ? ((((NV) (
(0x09)) >= 0) ? (void)0 : __assert2("re_comp.c", 14181, __func__
, "(NV) ((0x09)) >= 0")), (((NV) (((0x0D) - (0x09))) >=
0) ? (void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) (((0x0D) - (0x09))) >= 0"
)), (((U64) (((((U8) (((const U8*)(p))[0])))) - (((0x09)) | 0
))) <= (((U64) ((((0x0D) - (0x09))) | 0))))) : (sizeof(((const
U8*)(p))[0]) == sizeof(U32)) ? ((((NV) ((0x09)) >= 0) ? (
void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) ((0x09)) >= 0"
)), (((NV) (((0x0D) - (0x09))) >= 0) ? (void)0 : __assert2
("re_comp.c", 14181, __func__, "(NV) (((0x0D) - (0x09))) >= 0"
)), (((U64) (((((U32) (((const U8*)(p))[0])))) - (((0x09)) | 0
))) <= (((U64) ((((0x0D) - (0x09))) | 0))))) : (((sizeof((
(const U8*)(p))[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "sizeof(((const U8*)(p))[0]) == sizeof(U64)"
)), ((((NV) ((0x09)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "(NV) ((0x09)) >= 0")), (((NV) (((0x0D)
- (0x09))) >= 0) ? (void)0 : __assert2("re_comp.c", 14181
, __func__, "(NV) (((0x0D) - (0x09))) >= 0")), (((U64) (((
((U64) (((const U8*)(p))[0])))) - (((0x09)) | 0))) <= (((U64
) ((((0x0D) - (0x09))) | 0)))))))) || 0x20 == ((const U8*)(p)
)[0] ) ? 1 : (! (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0) ) ? ( 0x85 == ((const U8*)(p))[0] ) : ( __builtin_expect(
(((((pRExC_state->end)) - ((p))) >= PL_utf8skip[*(const
U8*)((p))]) ? (_Bool)1 : (_Bool)0),(1)) ) ? ( ( 0xC2 == ((const
U8*)(p))[0] ) ? ( ( 0x85 == ((const U8*)(p))[1] ) ? 2 : 0 ) :
( ( ( 0xE2 == ((const U8*)(p))[0] ) && ( 0x80 == ((const
U8*)(p))[1] ) ) && ( ((((0x8F) >= (0x8E)) ? (void
)0 : __assert2("re_comp.c", 14181, __func__, "(0x8F) >= (0x8E)"
)), ( (sizeof(((const U8*)(p))[2]) == sizeof(U8)) ? ((((NV) (
(0x8E)) >= 0) ? (void)0 : __assert2("re_comp.c", 14181, __func__
, "(NV) ((0x8E)) >= 0")), (((NV) (((0x8F) - (0x8E))) >=
0) ? (void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) (((0x8F) - (0x8E))) >= 0"
)), (((U64) (((((U8) (((const U8*)(p))[2])))) - (((0x8E)) | 0
))) <= (((U64) ((((0x8F) - (0x8E))) | 0))))) : (sizeof(((const
U8*)(p))[2]) == sizeof(U32)) ? ((((NV) ((0x8E)) >= 0) ? (
void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) ((0x8E)) >= 0"
)), (((NV) (((0x8F) - (0x8E))) >= 0) ? (void)0 : __assert2
("re_comp.c", 14181, __func__, "(NV) (((0x8F) - (0x8E))) >= 0"
)), (((U64) (((((U32) (((const U8*)(p))[2])))) - (((0x8E)) | 0
))) <= (((U64) ((((0x8F) - (0x8E))) | 0))))) : (((sizeof((
(const U8*)(p))[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "sizeof(((const U8*)(p))[2]) == sizeof(U64)"
)), ((((NV) ((0x8E)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "(NV) ((0x8E)) >= 0")), (((NV) (((0x8F)
- (0x8E))) >= 0) ? (void)0 : __assert2("re_comp.c", 14181
, __func__, "(NV) (((0x8F) - (0x8E))) >= 0")), (((U64) (((
((U64) (((const U8*)(p))[2])))) - (((0x8E)) | 0))) <= (((U64
) ((((0x8F) - (0x8E))) | 0)))))))) || ((((0xA9) >= (0xA8))
? (void)0 : __assert2("re_comp.c", 14181, __func__, "(0xA9) >= (0xA8)"
)), ( (sizeof(((const U8*)(p))[2]) == sizeof(U8)) ? ((((NV) (
(0xA8)) >= 0) ? (void)0 : __assert2("re_comp.c", 14181, __func__
, "(NV) ((0xA8)) >= 0")), (((NV) (((0xA9) - (0xA8))) >=
0) ? (void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) (((0xA9) - (0xA8))) >= 0"
)), (((U64) (((((U8) (((const U8*)(p))[2])))) - (((0xA8)) | 0
))) <= (((U64) ((((0xA9) - (0xA8))) | 0))))) : (sizeof(((const
U8*)(p))[2]) == sizeof(U32)) ? ((((NV) ((0xA8)) >= 0) ? (
void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) ((0xA8)) >= 0"
)), (((NV) (((0xA9) - (0xA8))) >= 0) ? (void)0 : __assert2
("re_comp.c", 14181, __func__, "(NV) (((0xA9) - (0xA8))) >= 0"
)), (((U64) (((((U32) (((const U8*)(p))[2])))) - (((0xA8)) | 0
))) <= (((U64) ((((0xA9) - (0xA8))) | 0))))) : (((sizeof((
(const U8*)(p))[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "sizeof(((const U8*)(p))[2]) == sizeof(U64)"
)), ((((NV) ((0xA8)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "(NV) ((0xA8)) >= 0")), (((NV) (((0xA9)
- (0xA8))) >= 0) ? (void)0 : __assert2("re_comp.c", 14181
, __func__, "(NV) (((0xA9) - (0xA8))) >= 0")), (((U64) (((
((U64) (((const U8*)(p))[2])))) - (((0xA8)) | 0))) <= (((U64
) ((((0xA9) - (0xA8))) | 0)))))))) ) ) ? 3 : 0 ) : 0 ) : 0 ))
? (void)0 : __assert2("re_comp.c", 14181, __func__, "(RExC_flags & RXf_PMf_EXTENDED) == 0 || ! is_PATWS_safe((p), RExC_end, UTF)"
))
14181 || ! is_PATWS_safe((p), RExC_end, UTF))((((pRExC_state->flags) & (1U << (0 +3))) == 0 ||
! ( ( __builtin_expect(((((pRExC_state->end)) > ((p)))
? (_Bool)1 : (_Bool)0),(1)) ) ? ( ( ((((0x0D) >= (0x09)) ?
(void)0 : __assert2("re_comp.c", 14181, __func__, "(0x0D) >= (0x09)"
)), ( (sizeof(((const U8*)(p))[0]) == sizeof(U8)) ? ((((NV) (
(0x09)) >= 0) ? (void)0 : __assert2("re_comp.c", 14181, __func__
, "(NV) ((0x09)) >= 0")), (((NV) (((0x0D) - (0x09))) >=
0) ? (void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) (((0x0D) - (0x09))) >= 0"
)), (((U64) (((((U8) (((const U8*)(p))[0])))) - (((0x09)) | 0
))) <= (((U64) ((((0x0D) - (0x09))) | 0))))) : (sizeof(((const
U8*)(p))[0]) == sizeof(U32)) ? ((((NV) ((0x09)) >= 0) ? (
void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) ((0x09)) >= 0"
)), (((NV) (((0x0D) - (0x09))) >= 0) ? (void)0 : __assert2
("re_comp.c", 14181, __func__, "(NV) (((0x0D) - (0x09))) >= 0"
)), (((U64) (((((U32) (((const U8*)(p))[0])))) - (((0x09)) | 0
))) <= (((U64) ((((0x0D) - (0x09))) | 0))))) : (((sizeof((
(const U8*)(p))[0]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "sizeof(((const U8*)(p))[0]) == sizeof(U64)"
)), ((((NV) ((0x09)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "(NV) ((0x09)) >= 0")), (((NV) (((0x0D)
- (0x09))) >= 0) ? (void)0 : __assert2("re_comp.c", 14181
, __func__, "(NV) (((0x0D) - (0x09))) >= 0")), (((U64) (((
((U64) (((const U8*)(p))[0])))) - (((0x09)) | 0))) <= (((U64
) ((((0x0D) - (0x09))) | 0)))))))) || 0x20 == ((const U8*)(p)
)[0] ) ? 1 : (! (((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0) ) ? ( 0x85 == ((const U8*)(p))[0] ) : ( __builtin_expect(
(((((pRExC_state->end)) - ((p))) >= PL_utf8skip[*(const
U8*)((p))]) ? (_Bool)1 : (_Bool)0),(1)) ) ? ( ( 0xC2 == ((const
U8*)(p))[0] ) ? ( ( 0x85 == ((const U8*)(p))[1] ) ? 2 : 0 ) :
( ( ( 0xE2 == ((const U8*)(p))[0] ) && ( 0x80 == ((const
U8*)(p))[1] ) ) && ( ((((0x8F) >= (0x8E)) ? (void
)0 : __assert2("re_comp.c", 14181, __func__, "(0x8F) >= (0x8E)"
)), ( (sizeof(((const U8*)(p))[2]) == sizeof(U8)) ? ((((NV) (
(0x8E)) >= 0) ? (void)0 : __assert2("re_comp.c", 14181, __func__
, "(NV) ((0x8E)) >= 0")), (((NV) (((0x8F) - (0x8E))) >=
0) ? (void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) (((0x8F) - (0x8E))) >= 0"
)), (((U64) (((((U8) (((const U8*)(p))[2])))) - (((0x8E)) | 0
))) <= (((U64) ((((0x8F) - (0x8E))) | 0))))) : (sizeof(((const
U8*)(p))[2]) == sizeof(U32)) ? ((((NV) ((0x8E)) >= 0) ? (
void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) ((0x8E)) >= 0"
)), (((NV) (((0x8F) - (0x8E))) >= 0) ? (void)0 : __assert2
("re_comp.c", 14181, __func__, "(NV) (((0x8F) - (0x8E))) >= 0"
)), (((U64) (((((U32) (((const U8*)(p))[2])))) - (((0x8E)) | 0
))) <= (((U64) ((((0x8F) - (0x8E))) | 0))))) : (((sizeof((
(const U8*)(p))[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "sizeof(((const U8*)(p))[2]) == sizeof(U64)"
)), ((((NV) ((0x8E)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "(NV) ((0x8E)) >= 0")), (((NV) (((0x8F)
- (0x8E))) >= 0) ? (void)0 : __assert2("re_comp.c", 14181
, __func__, "(NV) (((0x8F) - (0x8E))) >= 0")), (((U64) (((
((U64) (((const U8*)(p))[2])))) - (((0x8E)) | 0))) <= (((U64
) ((((0x8F) - (0x8E))) | 0)))))))) || ((((0xA9) >= (0xA8))
? (void)0 : __assert2("re_comp.c", 14181, __func__, "(0xA9) >= (0xA8)"
)), ( (sizeof(((const U8*)(p))[2]) == sizeof(U8)) ? ((((NV) (
(0xA8)) >= 0) ? (void)0 : __assert2("re_comp.c", 14181, __func__
, "(NV) ((0xA8)) >= 0")), (((NV) (((0xA9) - (0xA8))) >=
0) ? (void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) (((0xA9) - (0xA8))) >= 0"
)), (((U64) (((((U8) (((const U8*)(p))[2])))) - (((0xA8)) | 0
))) <= (((U64) ((((0xA9) - (0xA8))) | 0))))) : (sizeof(((const
U8*)(p))[2]) == sizeof(U32)) ? ((((NV) ((0xA8)) >= 0) ? (
void)0 : __assert2("re_comp.c", 14181, __func__, "(NV) ((0xA8)) >= 0"
)), (((NV) (((0xA9) - (0xA8))) >= 0) ? (void)0 : __assert2
("re_comp.c", 14181, __func__, "(NV) (((0xA9) - (0xA8))) >= 0"
)), (((U64) (((((U32) (((const U8*)(p))[2])))) - (((0xA8)) | 0
))) <= (((U64) ((((0xA9) - (0xA8))) | 0))))) : (((sizeof((
(const U8*)(p))[2]) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "sizeof(((const U8*)(p))[2]) == sizeof(U64)"
)), ((((NV) ((0xA8)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14181, __func__, "(NV) ((0xA8)) >= 0")), (((NV) (((0xA9)
- (0xA8))) >= 0) ? (void)0 : __assert2("re_comp.c", 14181
, __func__, "(NV) (((0xA9) - (0xA8))) >= 0")), (((U64) (((
((U64) (((const U8*)(p))[2])))) - (((0xA8)) | 0))) <= (((U64
) ((((0xA9) - (0xA8))) | 0)))))))) ) ) ? 3 : 0 ) : 0 ) : 0 ))
? (void)0 : __assert2("re_comp.c", 14181, __func__, "(RExC_flags & RXf_PMf_EXTENDED) == 0 || ! is_PATWS_safe((p), RExC_end, UTF)"
))
;
14182
14183 switch ((U8)*p) {
14184 const char* message;
14185 U32 packed_warn;
14186 U8 grok_c_char;
14187
14188 case '^':
14189 case '$':
14190 case '.':
14191 case '[':
14192 case '(':
14193 case ')':
14194 case '|':
14195 goto loopdone;
14196 case '\\':
14197 /* Literal Escapes Switch
14198
14199 This switch is meant to handle escape sequences that
14200 resolve to a literal character.
14201
14202 Every escape sequence that represents something
14203 else, like an assertion or a char class, is handled
14204 in the switch marked 'Special Escapes' above in this
14205 routine, but also has an entry here as anything that
14206 isn't explicitly mentioned here will be treated as
14207 an unescaped equivalent literal.
14208 */
14209
14210 switch ((U8)*++p) {
14211
14212 /* These are all the special escapes. */
14213 case 'A': /* Start assertion */
14214 case 'b': case 'B': /* Word-boundary assertion*/
14215 case 'C': /* Single char !DANGEROUS! */
14216 case 'd': case 'D': /* digit class */
14217 case 'g': case 'G': /* generic-backref, pos assertion */
14218 case 'h': case 'H': /* HORIZWS */
14219 case 'k': case 'K': /* named backref, keep marker */
14220 case 'p': case 'P': /* Unicode property */
14221 case 'R': /* LNBREAK */
14222 case 's': case 'S': /* space class */
14223 case 'v': case 'V': /* VERTWS */
14224 case 'w': case 'W': /* word class */
14225 case 'X': /* eXtended Unicode "combining
14226 character sequence" */
14227 case 'z': case 'Z': /* End of line/string assertion */
14228 --p;
14229 goto loopdone;
14230
14231 /* Anything after here is an escape that resolves to a
14232 literal. (Except digits, which may or may not)
14233 */
14234 case 'n':
14235 ender = '\n';
14236 p++;
14237 break;
14238 case 'N': /* Handle a single-code point named character. */
14239 RExC_parse(pRExC_state->parse) = p + 1;
14240 if (! grok_bslash_N(pRExC_state,S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14241 NULL, /* Fail if evaluates toS_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14242 anything other than aS_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14243 single code point */S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14244 &ender, /* The returned single codeS_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14245 point */S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14246 NULL, /* Don't need a count ofS_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14247 how many code points */S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14248 flagp,S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14249 RExC_strict,S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14250 depth)S_grok_bslash_N( pRExC_state,((void*)0),&ender,((void*)0)
,flagp,(pRExC_state->strict),depth)
14251 ) {
14252 if (*flagp & NEED_UTF80x40)
14253 FAIL("panic: grok_bslash_N set NEED_UTF8")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "panic: grok_bslash_N set NEED_UTF8"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
14254 RETURN_FAIL_ON_RESTART_FLAGP(flagp)if (((*(flagp)) & (0x20))) return 0;
14255
14256 /* Here, it wasn't a single code point. Go close
14257 * up this EXACTish node. The switch() prior to
14258 * this switch handles the other cases */
14259 RExC_parse(pRExC_state->parse) = p = oldp;
14260 goto loopdone;
14261 }
14262 p = RExC_parse(pRExC_state->parse);
14263 RExC_parse(pRExC_state->parse) = parse_start;
14264
14265 /* The \N{} means the pattern, if previously /d,
14266 * becomes /u. That means it can't be an EXACTF node,
14267 * but an EXACTFU */
14268 if (node_type == EXACTF43) {
14269 node_type = EXACTFU45;
14270
14271 /* If the node already contains something that
14272 * differs between EXACTF and EXACTFU, reparse it
14273 * as EXACTFU */
14274 if (! maybe_exactfu) {
14275 len = 0;
14276 s = s0;
14277 goto reparse;
14278 }
14279 }
14280
14281 break;
14282 case 'r':
14283 ender = '\r';
14284 p++;
14285 break;
14286 case 't':
14287 ender = '\t';
14288 p++;
14289 break;
14290 case 'f':
14291 ender = '\f';
14292 p++;
14293 break;
14294 case 'e':
14295 ender = ESC_NATIVE0x1B;
14296 p++;
14297 break;
14298 case 'a':
14299 ender = '\a';
14300 p++;
14301 break;
14302 case 'o':
14303 if (! grok_bslash_o(&p,Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14304 RExC_end,Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14305 &ender,Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14306 &message,Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14307 &packed_warn,Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14308 (bool) RExC_strict,Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14309 FALSE, /* No illegal cp's */Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14310 UTF)Perl_grok_bslash_o( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
)
14311 {
14312 RExC_parse(pRExC_state->parse) = p; /* going to die anyway; point to
14313 exact spot of failure */
14314 vFAIL(message)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", message, (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14314, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
14315 }
14316
14317 if (message && TO_OUTPUT_WARNINGS(p)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start)))) -
(pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
) {
14318 warn_non_literal_string(p, packed_warn, message)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14318, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", message, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (p - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14318, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0)
;
14319 }
14320 break;
14321 case 'x':
14322 if (! grok_bslash_x(&p,Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14323 RExC_end,Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14324 &ender,Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14325 &message,Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14326 &packed_warn,Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14327 (bool) RExC_strict,Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14328 FALSE, /* No illegal cp's */Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14329 UTF)Perl_grok_bslash_x( &p,(pRExC_state->end),&ender,&
message,&packed_warn,(_Bool) (pRExC_state->strict),(0)
,(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
)
14330 {
14331 RExC_parse(pRExC_state->parse) = p; /* going to die anyway; point
14332 to exact spot of failure */
14333 vFAIL(message)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", message, (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14333, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
14334 }
14335
14336 if (message && TO_OUTPUT_WARNINGS(p)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start)))) -
(pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
) {
14337 warn_non_literal_string(p, packed_warn, message)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14337, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", message, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (p - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14337, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0)
;
14338 }
14339
14340#ifdef EBCDIC
14341 if (ender < 0x100) {
14342 if (RExC_recode_x_to_native(pRExC_state->recode_x_to_native)) {
14343 ender = LATIN1_TO_NATIVE(ender)(((( (sizeof(ender) == 1) || !(((U64)((ender) | 0)) & ~0xFF
))) ? (void)0 : __assert2("re_comp.c", 14343, __func__, "( (sizeof(ender) == 1) || !(((U64)((ender) | 0)) & ~0xFF))"
)), ((U8) ((ender) | 0)))
;
14344 }
14345 }
14346#endif
14347 break;
14348 case 'c':
14349 p++;
14350 if (! grok_bslash_c(*p, &grok_c_char,Perl_grok_bslash_c( *p,&grok_c_char,&message,&packed_warn
)
14351 &message, &packed_warn)Perl_grok_bslash_c( *p,&grok_c_char,&message,&packed_warn
)
)
14352 {
14353 /* going to die anyway; point to exact spot of
14354 * failure */
14355 RExC_parse(pRExC_state->parse) = p + ((UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0))
14356 ? UTF8_SAFE_SKIP(p, RExC_end)(((((pRExC_state->end)) >= (p)) ? (void)0 : __assert2("re_comp.c"
, 14356, __func__, "((pRExC_state->end)) >= (p)")), (((
pRExC_state->end)) - (p)) <= 0 ? 0 : ((((((pRExC_state->
end)) - (p)))<(PL_utf8skip[*(const U8*)(p)]))?((((pRExC_state
->end)) - (p))):(PL_utf8skip[*(const U8*)(p)])))
14357 : 1);
14358 vFAIL(message)do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", message, (int)(((((pRExC_state->utf8)) ? (
_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + ((pRExC_state->parse
) - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14358, (IV) (((pRExC_state->
copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) - (pRExC_state->precomp)), ((int) ((pRExC_state
->end) - (pRExC_state->start))), (pRExC_state->start
)), 0))), (void*)((pRExC_state->precomp)), (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start)))), (void*)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start))))); } while (0); } while
(0)
;
14359 }
14360
14361 ender = grok_c_char;
14362 p++;
14363 if (message && TO_OUTPUT_WARNINGS(p)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start)))) -
(pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
) {
14364 warn_non_literal_string(p, packed_warn, message)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14364, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((packed_warn) & 0xFF))+1) / 8)] & (1 <<
((2*(((packed_warn) & 0xFF))+1) % 8)))) || ((((packed_warn
) >>8) & 0xFF) && (((((U8 *)(PL_curcop->
cop_warnings + 1))[((2*((((packed_warn) >>8) & 0xFF
))+1) / 8)] & (1 << ((2*((((packed_warn) >>8)
& 0xFF))+1) % 8)))) || ((((packed_warn) >>16) &
0xFF) && (((((U8 *)(PL_curcop->cop_warnings + 1))
[((2*((((packed_warn) >>16) & 0xFF))+1) / 8)] &
(1 << ((2*((((packed_warn) >>16) & 0xFF))+1)
% 8)))) || ((((packed_warn) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*((((packed_warn
) >>24) & 0xFF))+1) / 8)] & (1 << ((2*(((
(packed_warn) >>24) & 0xFF))+1) % 8)))))))))))) do {
if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void *)(((SV
*)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),11); if (
(pRExC_state->open_parens)) Perl_save_pushptr( (void *)((char
*)((pRExC_state->open_parens))),10); if ((pRExC_state->
close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); Perl_warner( packed_warn
, "%s" " in regex; marked by " "<-- HERE" " in m/%" "d%" "lu"
"%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", message, (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) - (pRExC_state->precomp
) : (((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) - (pRExC_state->precomp)) >= 0) ? ((
(pRExC_state->copy_start_in_input) + (p - (pRExC_state->
copy_start))) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14364, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0)
;
14365 }
14366
14367 break;
14368 case '8': case '9': /* must be a backreference */
14369 --p;
14370 /* we have an escape like \8 which cannot be an octal escape
14371 * so we exit the loop, and let the outer loop handle this
14372 * escape which may or may not be a legitimate backref. */
14373 goto loopdone;
14374 case '1': case '2': case '3':case '4':
14375 case '5': case '6': case '7':
14376 /* When we parse backslash escapes there is ambiguity
14377 * between backreferences and octal escapes. Any escape
14378 * from \1 - \9 is a backreference, any multi-digit
14379 * escape which does not start with 0 and which when
14380 * evaluated as decimal could refer to an already
14381 * parsed capture buffer is a back reference. Anything
14382 * else is octal.
14383 *
14384 * Note this implies that \118 could be interpreted as
14385 * 118 OR as "\11" . "8" depending on whether there
14386 * were 118 capture buffers defined already in the
14387 * pattern. */
14388
14389 /* NOTE, RExC_npar is 1 more than the actual number of
14390 * parens we have seen so far, hence the "<" as opposed
14391 * to "<=" */
14392 if ( !isDIGIT(p[1])(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 14392
, __func__, "('9') >= ('0')")), ( (sizeof(p[1]) == sizeof(
U8)) ? ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14392, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14392, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U8) (p[1])
))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0)))
)) : (sizeof(p[1]) == sizeof(U32)) ? ((((NV) (('0')) >= 0)
? (void)0 : __assert2("re_comp.c", 14392, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14392, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (p[1])))) - ((('0')) | 0))) <= (((U64) (((('9'
) - ('0'))) | 0))))) : (((sizeof(p[1]) == sizeof(U64)) ? (void
)0 : __assert2("re_comp.c", 14392, __func__, "sizeof(p[1]) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14392, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14392, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (p[1]
)))) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))
))))))
|| S_backref_value(p, RExC_end(pRExC_state->end)) < RExC_npar(pRExC_state->npar))
14393 { /* Not to be treated as an octal constant, go
14394 find backref */
14395 --p;
14396 goto loopdone;
14397 }
14398 /* FALLTHROUGH */
14399 case '0':
14400 {
14401 I32 flags = PERL_SCAN_SILENT_ILLDIGIT0x08
14402 | PERL_SCAN_NOTIFY_ILLDIGIT0x40;
14403 STRLEN numlen = 3;
14404 ender = grok_oct(p, &numlen, &flags, NULL)(*(&flags) |= 0x02, Perl_grok_bin_oct_hex( p,&numlen,
&flags,((void*)0),3,24,'\0'))
;
14405 p += numlen;
14406 if ( (flags & PERL_SCAN_NOTIFY_ILLDIGIT0x40)
14407 && isDIGIT(*p)(((('9') >= ('0')) ? (void)0 : __assert2("re_comp.c", 14407
, __func__, "('9') >= ('0')")), ( (sizeof(*p) == sizeof(U8
)) ? ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14407, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14407, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U8) (*p)))
) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0)))))
: (sizeof(*p) == sizeof(U32)) ? ((((NV) (('0')) >= 0) ? (
void)0 : __assert2("re_comp.c", 14407, __func__, "(NV) (('0')) >= 0"
)), (((NV) ((('9') - ('0'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14407, __func__, "(NV) ((('9') - ('0'))) >= 0")), (((U64
) (((((U32) (*p)))) - ((('0')) | 0))) <= (((U64) (((('9') -
('0'))) | 0))))) : (((sizeof(*p) == sizeof(U64)) ? (void)0 :
__assert2("re_comp.c", 14407, __func__, "sizeof(*p) == sizeof(U64)"
)), ((((NV) (('0')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14407, __func__, "(NV) (('0')) >= 0")), (((NV) ((('9') -
('0'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14407, __func__
, "(NV) ((('9') - ('0'))) >= 0")), (((U64) (((((U64) (*p))
)) - ((('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))))
))))
/* like \08, \178 */
14408 && ckWARN(WARN_REGEXP)Perl_ckwarn( (20 )))
14409 {
14410 reg_warn_non_literal_string(do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14413, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), "%s" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", Perl_form_alien_digit_msg( 8,numlen,p,(pRExC_state->
end),(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),(0)), (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) >= 0) ? (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14413, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
14411 p + 1,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14413, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), "%s" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", Perl_form_alien_digit_msg( 8,numlen,p,(pRExC_state->
end),(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),(0)), (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) >= 0) ? (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14413, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
14412 form_alien_digit_msg(8, numlen, p,do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14413, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), "%s" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", Perl_form_alien_digit_msg( 8,numlen,p,(pRExC_state->
end),(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),(0)), (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) >= 0) ? (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14413, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
14413 RExC_end, UTF, FALSE))do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14413, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_warner( (20 ), "%s" " in regex; marked by " "<-- HERE"
" in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p"
"/", Perl_form_alien_digit_msg( 8,numlen,p,(pRExC_state->
end),(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0),(0)), (
int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) >= 0) ? (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14413, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
14414 }
14415 }
14416 break;
14417 case '\0':
14418 if (p >= RExC_end(pRExC_state->end))
14419 FAIL("Trailing \\")do { const char *ellipses = ""; IV len = (pRExC_state->precomp_end
) - (pRExC_state->precomp); do { if ((pRExC_state->rx_sv
)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); if (len > 127) { len = 127 - 10; ellipses = "..."; }
Perl_croak( "%s in regex m/%" "d%" "lu" "%4p" "%s/", "Trailing \\"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)(len), (void*)((pRExC_state->precomp
)), ellipses); } while (0)
;
14420 /* FALLTHROUGH */
14421 default:
14422 if (isALPHANUMERIC(*p)(( (sizeof(*p) == 1) || !(((U64)((*p) | 0)) & ~0xFF)) &&
((PL_charclass[(U8) (*p)] & ((1U << (7)) | (1U <<
(14)))) == ((1U << (7)) | (1U << (14)))))
) {
14423 /* An alpha followed by '{' is going to fail next
14424 * iteration, so don't output this warning in that
14425 * case */
14426 if (! isALPHA(*p)(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 14426
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(*p))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 14426, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14426, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U8) ((~('A' ^ 'a') & (*p)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') &
(*p))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 :
__assert2("re_comp.c", 14426, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14426, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) ((~('A' ^ 'a') & (*p)))))) - ((('A')) | 0))) <=
(((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a'
) & (*p))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14426, __func__, "sizeof((~('A' ^ 'a') & (*p))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14426, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14426, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*p)))))) - ((('A')) | 0))) <= (((U64) (((('Z'
) - ('A'))) | 0))))))))
|| *(p + 1) != '{') {
14427 ckWARN2reg(p + 1, "Unrecognized escape \\%.1s"do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14428, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Unrecognized escape \\%.1s" " passed through"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", p, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14428, (IV) (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
), ((int) ((pRExC_state->end) - (pRExC_state->start))),
(pRExC_state->start)), 0))), (void*)((pRExC_state->precomp
)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ?
(_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
14428 " passed through", p)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14428, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Unrecognized escape \\%.1s" " passed through"
" in regex; marked by " "<-- HERE" " in m/%" "d%" "lu" "%4p"
" <-- HERE " "%" "d%" "lu" "%4p" "/", p, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14428, (IV) (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
), ((int) ((pRExC_state->end) - (pRExC_state->start))),
(pRExC_state->start)), 0))), (void*)((pRExC_state->precomp
)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ?
(_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))) > (pRExC_state
->precomp_end)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))), (void*)((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? (pRExC_state->precomp_end) : ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))); do { if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { (pRExC_state->latest_warn_offset ) = ((((pRExC_state
->precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
14429 }
14430 }
14431 goto normal_default;
14432 } /* End of switch on '\' */
14433 break;
14434 case '{':
14435 /* Trying to gain new uses for '{' without breaking too
14436 * much existing code is hard. The solution currently
14437 * adopted is:
14438 * 1) If there is no ambiguity that a '{' should always
14439 * be taken literally, at the start of a construct, we
14440 * just do so.
14441 * 2) If the literal '{' conflicts with our desired use
14442 * of it as a metacharacter, we die. The deprecation
14443 * cycles for this have come and gone.
14444 * 3) If there is ambiguity, we raise a simple warning.
14445 * This could happen, for example, if the user
14446 * intended it to introduce a quantifier, but slightly
14447 * misspelled the quantifier. Without this warning,
14448 * the quantifier would silently be taken as a literal
14449 * string of characters instead of a meta construct */
14450 if (len || (p > RExC_start(pRExC_state->start) && isALPHA_A(*(p - 1))(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 14450
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(*(p - 1)))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void
)0 : __assert2("re_comp.c", 14450, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14450, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U8) ((~('A' ^ 'a') & (*(p - 1))))))) - ((('A')) | 0
))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A'
^ 'a') & (*(p - 1)))) == sizeof(U32)) ? ((((NV) (('A')) >=
0) ? (void)0 : __assert2("re_comp.c", 14450, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14450, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) ((~('A' ^ 'a') & (*(p - 1))))))) - ((('A')) |
0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((
~('A' ^ 'a') & (*(p - 1)))) == sizeof(U64)) ? (void)0 : __assert2
("re_comp.c", 14450, __func__, "sizeof((~('A' ^ 'a') & (*(p - 1)))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14450, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14450, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*(p - 1))))))) - ((('A')) | 0))) <= (((U64)
(((('Z') - ('A'))) | 0))))))))
)) {
14451 if ( RExC_strict(pRExC_state->strict)
14452 || ( p > parse_start + 1
14453 && isALPHA_A(*(p - 1))(((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 14453
, __func__, "('Z') >= ('A')")), ( (sizeof((~('A' ^ 'a') &
(*(p - 1)))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void
)0 : __assert2("re_comp.c", 14453, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14453, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U8) ((~('A' ^ 'a') & (*(p - 1))))))) - ((('A')) | 0
))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A'
^ 'a') & (*(p - 1)))) == sizeof(U32)) ? ((((NV) (('A')) >=
0) ? (void)0 : __assert2("re_comp.c", 14453, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14453, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) ((~('A' ^ 'a') & (*(p - 1))))))) - ((('A')) |
0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((
~('A' ^ 'a') & (*(p - 1)))) == sizeof(U64)) ? (void)0 : __assert2
("re_comp.c", 14453, __func__, "sizeof((~('A' ^ 'a') & (*(p - 1)))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14453, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14453, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*(p - 1))))))) - ((('A')) | 0))) <= (((U64)
(((('Z') - ('A'))) | 0))))))))
14454 && *(p - 2) == '\\')
14455 || new_regcurlyS_new_regcurly(p, RExC_end(pRExC_state->end)))
14456 {
14457 RExC_parse(pRExC_state->parse) = p + 1;
14458 vFAIL("Unescaped left brace in regex is "do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unescaped left brace in regex is " "illegal here"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14459, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
14459 "illegal here")do { do { if ((pRExC_state->rx_sv)) Perl_save_pushptr( (void
*)(((SV *)({ void *_p = ((pRExC_state->rx_sv)); _p; }))),
11); if ((pRExC_state->open_parens)) Perl_save_pushptr( (void
*)((char*)((pRExC_state->open_parens))),10); if ((pRExC_state
->close_parens)) Perl_save_pushptr( (void *)((char*)((pRExC_state
->close_parens))),10); } while (0); do { Perl_croak( "%s" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", "Unescaped left brace in regex is " "illegal here"
, (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (
_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) >= 0) ? (((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
- (pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14459, (IV) (((pRExC_state->copy_start_in_input) + ((pRExC_state
->parse) - (pRExC_state->copy_start))) - (pRExC_state->
precomp)), ((int) ((pRExC_state->end) - (pRExC_state->start
))), (pRExC_state->start)), 0))), (void*)((pRExC_state->
precomp)), (int)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool
)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input
) + ((pRExC_state->parse) - (pRExC_state->copy_start)))
> (pRExC_state->precomp_end)) ? 0 : (pRExC_state->precomp_end
) - ((pRExC_state->copy_start_in_input) + ((pRExC_state->
parse) - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + ((pRExC_state->parse) - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) : ((pRExC_state->copy_start_in_input) + (
(pRExC_state->parse) - (pRExC_state->copy_start))))); }
while (0); } while (0)
;
14460 }
14461 ckWARNreg(p + 1, "Unescaped left brace in regex is"do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14462, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Unescaped left brace in regex is"
" passed through" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) >= 0) ? (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14462, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
14462 " passed through")do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14462, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Unescaped left brace in regex is"
" passed through" " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", (int
)(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool
)1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) > (pRExC_state->
precomp_end)) ? (pRExC_state->precomp_end) - (pRExC_state->
precomp) : (((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) >= 0) ? (((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start))) - (pRExC_state->precomp)
) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14462, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
14463 }
14464 goto normal_default;
14465 case '}':
14466 case ']':
14467 if (p > RExC_parse(pRExC_state->parse) && RExC_strict(pRExC_state->strict)) {
14468 ckWARN2reg(p + 1, "Unescaped literal '%c'", *p)do { if (! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14468, p + 1); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))) - (pRExC_state->
precomp)) > (ptrdiff_t) (pRExC_state->latest_warn_offset
))) { if ((PL_curcop && !((PL_curcop->cop_warnings
) == ((void*)0) || (PL_curcop->cop_warnings) == (STRLEN *)
&PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *
) &PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((20 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((20 )) & 0xFF))+1) % 8)))) || (((((20 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((20 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((20 )) >>8) & 0xFF))+1) % 8)))) ||
(((((20 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((20 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((20 )) >>16) &
0xFF))+1) % 8)))) || (((((20 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((20 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((20 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (20 ), "Unescaped literal '%c'" " in regex; marked by "
"<-- HERE" " in m/%" "d%" "lu" "%4p" " <-- HERE " "%" "d%"
"lu" "%4p" "/", *p, (int)(((((pRExC_state->utf8)) ? (_Bool
)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) - (pRExC_state->precomp) : (((((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))) - (pRExC_state->
precomp)) >= 0) ? (((pRExC_state->copy_start_in_input) +
(p + 1 - (pRExC_state->copy_start))) - (pRExC_state->precomp
)) : (Perl_croak( "panic: %s: %d: negative offset: %" "ld" " trying to output message for "
" pattern %.*s", "re_comp.c", 14468, (IV) (((pRExC_state->
copy_start_in_input) + (p + 1 - (pRExC_state->copy_start))
) - (pRExC_state->precomp)), ((int) ((pRExC_state->end)
- (pRExC_state->start))), (pRExC_state->start)), 0))),
(void*)((pRExC_state->precomp)), (int)(((((pRExC_state->
utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (UV)((
((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? 0 : (
pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
))) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p + 1 - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p + 1
- (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
(pRExC_state->latest_warn_offset ) = ((((pRExC_state->
precomp))>(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start)))))))?((pRExC_state
->precomp)):(((((pRExC_state->precomp_end))<(((pRExC_state
->copy_start_in_input) + (p + 1 - (pRExC_state->copy_start
)))))?((pRExC_state->precomp_end)):(((pRExC_state->copy_start_in_input
) + (p + 1 - (pRExC_state->copy_start))))))) - (pRExC_state
->precomp); } } while (0); } } while (0)
;
14469 }
14470 /*FALLTHROUGH*/
14471 default: /* A literal character */
14472 normal_default:
14473 if (! UTF8_IS_INVARIANT(*p)((((U64)(((UV) (((*p) | 0) | 0)))) < (((U8) (0xFF <<
6)) & 0xB0)))
&& UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
14474 STRLEN numlen;
14475 ender = utf8n_to_uvchr((U8*)p, RExC_end - p,Perl_utf8n_to_uvchr_msgs((U8*)p, (pRExC_state->end) - p, &
numlen, 0, 0, 0)
14476 &numlen, UTF8_ALLOW_DEFAULT)Perl_utf8n_to_uvchr_msgs((U8*)p, (pRExC_state->end) - p, &
numlen, 0, 0, 0)
;
14477 p += numlen;
14478 }
14479 else
14480 ender = (U8) *p++;
14481 break;
14482 } /* End of switch on the literal */
14483
14484 /* Here, have looked at the literal character, and <ender>
14485 * contains its ordinal; <p> points to the character after it.
14486 * */
14487
14488 if (ender > 255) {
14489 REQUIRE_UTF8(flagp)do { if (!(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
*flagp = 0x20|0x40; return 0; } } while (0)
;
14490 if ( UNICODE_IS_PERL_EXTENDED(ender)__builtin_expect((((UV) (ender) > 0x7FFFFFFF) ? (_Bool)1 :
(_Bool)0),(0))
14491 && TO_OUTPUT_WARNINGS(p)( (pRExC_state->copy_start) && ((((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start)))) -
(pRExC_state->precomp)) > (ptrdiff_t) (pRExC_state->
latest_warn_offset ))
)
14492 {
14493 ckWARN2_non_literal_string(p,do { char * format; size_t format_size = strlen(PL_extended_cp_format
) + strlen(" in regex; marked by " "<-- HERE" " in m/%" "d%"
"lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/")+ 1; (format
= ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(
format_size) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(format_size)))) ? (size_t)(format_size) : (
(size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (
_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap()
,0)), (char*)(Perl_safesysmalloc((size_t)((format_size)*sizeof
(char)))))); strlcpy(format, PL_extended_cp_format, format_size
); strlcat(format, " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", format_size
); Perl_save_pushptr( (void *)((char*)(format)),10); do { if (
! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14496, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((17 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((17 )) & 0xFF))+1) % 8)))) || (((((17 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((17 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((17 )) >>8) & 0xFF))+1) % 8)))) ||
(((((17 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((17 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((17 )) >>16) &
0xFF))+1) % 8)))) || (((((17 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((17 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((17 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (17 ), format, ender, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14496, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0); } while (0)
14494 packWARN(WARN_PORTABLE),do { char * format; size_t format_size = strlen(PL_extended_cp_format
) + strlen(" in regex; marked by " "<-- HERE" " in m/%" "d%"
"lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/")+ 1; (format
= ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(
format_size) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(format_size)))) ? (size_t)(format_size) : (
(size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (
_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap()
,0)), (char*)(Perl_safesysmalloc((size_t)((format_size)*sizeof
(char)))))); strlcpy(format, PL_extended_cp_format, format_size
); strlcat(format, " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", format_size
); Perl_save_pushptr( (void *)((char*)(format)),10); do { if (
! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14496, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((17 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((17 )) & 0xFF))+1) % 8)))) || (((((17 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((17 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((17 )) >>8) & 0xFF))+1) % 8)))) ||
(((((17 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((17 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((17 )) >>16) &
0xFF))+1) % 8)))) || (((((17 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((17 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((17 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (17 ), format, ender, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14496, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0); } while (0)
14495 PL_extended_cp_format,do { char * format; size_t format_size = strlen(PL_extended_cp_format
) + strlen(" in regex; marked by " "<-- HERE" " in m/%" "d%"
"lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/")+ 1; (format
= ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(
format_size) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(format_size)))) ? (size_t)(format_size) : (
(size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (
_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap()
,0)), (char*)(Perl_safesysmalloc((size_t)((format_size)*sizeof
(char)))))); strlcpy(format, PL_extended_cp_format, format_size
); strlcat(format, " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", format_size
); Perl_save_pushptr( (void *)((char*)(format)),10); do { if (
! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14496, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((17 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((17 )) & 0xFF))+1) % 8)))) || (((((17 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((17 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((17 )) >>8) & 0xFF))+1) % 8)))) ||
(((((17 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((17 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((17 )) >>16) &
0xFF))+1) % 8)))) || (((((17 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((17 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((17 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (17 ), format, ender, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14496, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0); } while (0)
14496 ender)do { char * format; size_t format_size = strlen(PL_extended_cp_format
) + strlen(" in regex; marked by " "<-- HERE" " in m/%" "d%"
"lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/")+ 1; (format
= ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(
format_size) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(format_size)))) ? (size_t)(format_size) : (
(size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (
_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap()
,0)), (char*)(Perl_safesysmalloc((size_t)((format_size)*sizeof
(char)))))); strlcpy(format, PL_extended_cp_format, format_size
); strlcat(format, " in regex; marked by " "<-- HERE" " in m/%"
"d%" "lu" "%4p" " <-- HERE " "%" "d%" "lu" "%4p" "/", format_size
); Perl_save_pushptr( (void *)((char*)(format)),10); do { if (
! (pRExC_state->copy_start)) { Perl_croak( "panic! %s: %d: Tried to warn when none"
" expected at '%s'", "re_comp.c", 14496, p); } if (( (pRExC_state
->copy_start) && ((((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))) - (pRExC_state->precomp
)) > (ptrdiff_t) (pRExC_state->latest_warn_offset ))) {
if ((PL_curcop && !((PL_curcop->cop_warnings) == (
(void*)0) || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_ALL || (PL_curcop->cop_warnings) == (STRLEN *) &
PL_WARN_NONE) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*((((17 )) & 0xFF))+1) / 8)] & (1 << (
(2*((((17 )) & 0xFF))+1) % 8)))) || (((((17 )) >>8)
& 0xFF) && (((((U8 *)(PL_curcop->cop_warnings
+ 1))[((2*(((((17 )) >>8) & 0xFF))+1) / 8)] & (
1 << ((2*(((((17 )) >>8) & 0xFF))+1) % 8)))) ||
(((((17 )) >>16) & 0xFF) && (((((U8 *)(PL_curcop
->cop_warnings + 1))[((2*(((((17 )) >>16) & 0xFF
))+1) / 8)] & (1 << ((2*(((((17 )) >>16) &
0xFF))+1) % 8)))) || (((((17 )) >>24) & 0xFF) &&
((((U8 *)(PL_curcop->cop_warnings + 1))[((2*(((((17 )) >>
24) & 0xFF))+1) / 8)] & (1 << ((2*(((((17 )) >>
24) & 0xFF))+1) % 8)))))))))))) do { if ((pRExC_state->
rx_sv)) Perl_save_pushptr( (void *)(((SV *)({ void *_p = ((pRExC_state
->rx_sv)); _p; }))),11); if ((pRExC_state->open_parens)
) Perl_save_pushptr( (void *)((char*)((pRExC_state->open_parens
))),10); if ((pRExC_state->close_parens)) Perl_save_pushptr
( (void *)((char*)((pRExC_state->close_parens))),10); } while
(0); Perl_ck_warner( (17 ), format, ender, (int)(((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)1 : (_Bool)0), (
UV)((((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))) > (pRExC_state->precomp_end)) ? (pRExC_state
->precomp_end) - (pRExC_state->precomp) : (((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) - (pRExC_state->precomp)) >= 0) ? (((pRExC_state->
copy_start_in_input) + (p - (pRExC_state->copy_start))) - (
pRExC_state->precomp)) : (Perl_croak( "panic: %s: %d: negative offset: %"
"ld" " trying to output message for " " pattern %.*s", "re_comp.c"
, 14496, (IV) (((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start))) - (pRExC_state->precomp)), (
(int) ((pRExC_state->end) - (pRExC_state->start))), (pRExC_state
->start)), 0))), (void*)((pRExC_state->precomp)), (int)
(((((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) ? (_Bool)
1 : (_Bool)0), (UV)((((pRExC_state->copy_start_in_input) +
(p - (pRExC_state->copy_start))) > (pRExC_state->precomp_end
)) ? 0 : (pRExC_state->precomp_end) - ((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))), (void*)((((pRExC_state
->copy_start_in_input) + (p - (pRExC_state->copy_start)
)) > (pRExC_state->precomp_end)) ? (pRExC_state->precomp_end
) : ((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))); do { if (( (pRExC_state->copy_start)
&& ((((pRExC_state->copy_start_in_input) + (p - (
pRExC_state->copy_start)))) - (pRExC_state->precomp)) >
(ptrdiff_t) (pRExC_state->latest_warn_offset ))) { (pRExC_state
->latest_warn_offset ) = ((((pRExC_state->precomp))>
(((((pRExC_state->precomp_end))<(((pRExC_state->copy_start_in_input
) + (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start)))))))?((pRExC_state->precomp)):(((((pRExC_state
->precomp_end))<(((pRExC_state->copy_start_in_input)
+ (p - (pRExC_state->copy_start)))))?((pRExC_state->precomp_end
)):(((pRExC_state->copy_start_in_input) + (p - (pRExC_state
->copy_start))))))) - (pRExC_state->precomp); } } while
(0); } } while (0); } while (0)
;
14497 }
14498 }
14499
14500 /* We need to check if the next non-ignored thing is a
14501 * quantifier. Move <p> to after anything that should be
14502 * ignored, which, as a side effect, positions <p> for the next
14503 * loop iteration */
14504 skip_to_be_ignored_text(pRExC_state, &p,S_skip_to_be_ignored_text( pRExC_state,&p,(0))
14505 FALSE /* Don't force to /x */ )S_skip_to_be_ignored_text( pRExC_state,&p,(0));
14506
14507 /* If the next thing is a quantifier, it applies to this
14508 * character only, which means that this character has to be in
14509 * its own node and can't just be appended to the string in an
14510 * existing node, so if there are already other characters in
14511 * the node, close the node with just them, and set up to do
14512 * this character again next time through, when it will be the
14513 * only thing in its new node */
14514
14515 next_is_quantifier = LIKELY(p < RExC_end)__builtin_expect(((p < (pRExC_state->end)) ? (_Bool)1 :
(_Bool)0),(1))
14516 && UNLIKELY(ISMULT2(p))__builtin_expect(((((*p) == '*' || (*p) == '+' || (*p) == '?'
|| ((*p) == '{' && S_regcurly(p)))) ? (_Bool)1 : (_Bool
)0),(0))
;
14517
14518 if (next_is_quantifier && LIKELY(len)__builtin_expect(((len) ? (_Bool)1 : (_Bool)0),(1))) {
14519 p = oldp;
14520 goto loopdone;
14521 }
14522
14523 /* Ready to add 'ender' to the node */
14524
14525 if (! FOLD(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
) { /* The simple case, just append the literal */
14526 not_fold_common:
14527
14528 /* Don't output if it would overflow */
14529 if (UNLIKELY(len > max_string_len - ((UTF)__builtin_expect(((len > max_string_len - (((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? ( ((((U64)(((UV) ((ender
) | 0)))) < (((U8) (0xFF << 6)) & 0xB0))) ? 1 : (
(UV) (ender) < (32 * (1U << ( 6))) ? 2 : (UV) (ender
) < (16 * (1U << (2 * 6))) ? 3 : (UV) (ender) < (
8 * (1U << (3 * 6))) ? 4 : (UV) (ender) < ( 4 * (1U
<< (4 * 6))) ? 5 : (UV) (ender) < ( 2 * (1U <<
(5 * 6))) ? 6 : (UV) (ender) < ((UV) 1U << (6 * 6))
? 7 : 13)) : 1)) ? (_Bool)1 : (_Bool)0),(0))
14530 ? UVCHR_SKIP(ender)__builtin_expect(((len > max_string_len - (((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? ( ((((U64)(((UV) ((ender
) | 0)))) < (((U8) (0xFF << 6)) & 0xB0))) ? 1 : (
(UV) (ender) < (32 * (1U << ( 6))) ? 2 : (UV) (ender
) < (16 * (1U << (2 * 6))) ? 3 : (UV) (ender) < (
8 * (1U << (3 * 6))) ? 4 : (UV) (ender) < ( 4 * (1U
<< (4 * 6))) ? 5 : (UV) (ender) < ( 2 * (1U <<
(5 * 6))) ? 6 : (UV) (ender) < ((UV) 1U << (6 * 6))
? 7 : 13)) : 1)) ? (_Bool)1 : (_Bool)0),(0))
14531 : 1))__builtin_expect(((len > max_string_len - (((((pRExC_state
->utf8)) ? (_Bool)1 : (_Bool)0)) ? ( ((((U64)(((UV) ((ender
) | 0)))) < (((U8) (0xFF << 6)) & 0xB0))) ? 1 : (
(UV) (ender) < (32 * (1U << ( 6))) ? 2 : (UV) (ender
) < (16 * (1U << (2 * 6))) ? 3 : (UV) (ender) < (
8 * (1U << (3 * 6))) ? 4 : (UV) (ender) < ( 4 * (1U
<< (4 * 6))) ? 5 : (UV) (ender) < ( 2 * (1U <<
(5 * 6))) ? 6 : (UV) (ender) < ((UV) 1U << (6 * 6))
? 7 : 13)) : 1)) ? (_Bool)1 : (_Bool)0),(0))
)
14532 {
14533 overflowed = TRUE(1);
14534 break;
14535 }
14536
14537 if (UVCHR_IS_INVARIANT(ender)((((U64)(((UV) ((ender) | 0)))) < (((U8) (0xFF << 6)
) & 0xB0)))
|| ! UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
14538 *(s++) = (char) ender;
14539 }
14540 else {
14541 U8 * new_s = uvchr_to_utf8((U8*)s, ender)Perl_uvoffuni_to_utf8_flags_msgs( (U8*)s,((UV) ((ender) | 0))
,0,0)
;
14542 added_len = (char *) new_s - s;
14543 s = (char *) new_s;
14544
14545 if (ender > 255) {
14546 requires_utf8_target = TRUE(1);
14547 }
14548 }
14549 }
14550 else if (LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
&& is_PROBLEMATIC_LOCALE_FOLD_cp(ender)( ender <= 0xFF || ( 0xFF < ender && ( 0x130 ==
ender || ( 0x130 < ender && ( 0x131 == ender || (
0x131 < ender && ( 0x149 == ender || ( 0x149 <
ender && ( 0x178 == ender || ( 0x178 < ender &&
( 0x17F == ender || ( 0x17F < ender && ( 0x1F0 ==
ender || ( 0x1F0 < ender && ( 0x307 == ender || (
0x307 < ender && ( 0x39C == ender || ( 0x39C <
ender && ( 0x3BC == ender || ( 0x3BC < ender &&
( ((((0x1E9A) >= (0x1E96)) ? (void)0 : __assert2("re_comp.c"
, 14550, __func__, "(0x1E9A) >= (0x1E96)")), ( (sizeof(ender
) == sizeof(U8)) ? ((((NV) ((0x1E96)) >= 0) ? (void)0 : __assert2
("re_comp.c", 14550, __func__, "(NV) ((0x1E96)) >= 0")), (
((NV) (((0x1E9A) - (0x1E96))) >= 0) ? (void)0 : __assert2(
"re_comp.c", 14550, __func__, "(NV) (((0x1E9A) - (0x1E96))) >= 0"
)), (((U64) (((((U8) (ender)))) - (((0x1E96)) | 0))) <= ((
(U64) ((((0x1E9A) - (0x1E96))) | 0))))) : (sizeof(ender) == sizeof
(U32)) ? ((((NV) ((0x1E96)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14550, __func__, "(NV) ((0x1E96)) >= 0")), (((NV) (((0x1E9A
) - (0x1E96))) >= 0) ? (void)0 : __assert2("re_comp.c", 14550
, __func__, "(NV) (((0x1E9A) - (0x1E96))) >= 0")), (((U64)
(((((U32) (ender)))) - (((0x1E96)) | 0))) <= (((U64) ((((
0x1E9A) - (0x1E96))) | 0))))) : (((sizeof(ender) == sizeof(U64
)) ? (void)0 : __assert2("re_comp.c", 14550, __func__, "sizeof(ender) == sizeof(U64)"
)), ((((NV) ((0x1E96)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14550, __func__, "(NV) ((0x1E96)) >= 0")), (((NV) (((0x1E9A
) - (0x1E96))) >= 0) ? (void)0 : __assert2("re_comp.c", 14550
, __func__, "(NV) (((0x1E9A) - (0x1E96))) >= 0")), (((U64)
(((((U64) (ender)))) - (((0x1E96)) | 0))) <= (((U64) ((((
0x1E9A) - (0x1E96))) | 0)))))))) || ( 0x1E9A < ender &&
( 0x1E9E == ender || ( 0x1E9E < ender && ( 0x212A
== ender || ( 0x212A < ender && ( 0x212B == ender
|| ((((0xFB06) >= (0xFB00)) ? (void)0 : __assert2("re_comp.c"
, 14550, __func__, "(0xFB06) >= (0xFB00)")), ( (sizeof(ender
) == sizeof(U8)) ? ((((NV) ((0xFB00)) >= 0) ? (void)0 : __assert2
("re_comp.c", 14550, __func__, "(NV) ((0xFB00)) >= 0")), (
((NV) (((0xFB06) - (0xFB00))) >= 0) ? (void)0 : __assert2(
"re_comp.c", 14550, __func__, "(NV) (((0xFB06) - (0xFB00))) >= 0"
)), (((U64) (((((U8) (ender)))) - (((0xFB00)) | 0))) <= ((
(U64) ((((0xFB06) - (0xFB00))) | 0))))) : (sizeof(ender) == sizeof
(U32)) ? ((((NV) ((0xFB00)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14550, __func__, "(NV) ((0xFB00)) >= 0")), (((NV) (((0xFB06
) - (0xFB00))) >= 0) ? (void)0 : __assert2("re_comp.c", 14550
, __func__, "(NV) (((0xFB06) - (0xFB00))) >= 0")), (((U64)
(((((U32) (ender)))) - (((0xFB00)) | 0))) <= (((U64) ((((
0xFB06) - (0xFB00))) | 0))))) : (((sizeof(ender) == sizeof(U64
)) ? (void)0 : __assert2("re_comp.c", 14550, __func__, "sizeof(ender) == sizeof(U64)"
)), ((((NV) ((0xFB00)) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14550, __func__, "(NV) ((0xFB00)) >= 0")), (((NV) (((0xFB06
) - (0xFB00))) >= 0) ? (void)0 : __assert2("re_comp.c", 14550
, __func__, "(NV) (((0xFB06) - (0xFB00))) >= 0")), (((U64)
(((((U64) (ender)))) - (((0xFB00)) | 0))) <= (((U64) ((((
0xFB06) - (0xFB00))) | 0)))))))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
) ) ) ) ) ) ) ) ) ) ) )
) {
14551
14552 /* Here are folding under /l, and the code point is
14553 * problematic. If this is the first character in the
14554 * node, change the node type to folding. Otherwise, if
14555 * this is the first problematic character, close up the
14556 * existing node, so can start a new node with this one */
14557 if (! len) {
14558 node_type = EXACTFL44;
14559 RExC_contains_locale(pRExC_state->contains_locale) = 1;
14560 }
14561 else if (node_type == EXACT40) {
14562 p = oldp;
14563 goto loopdone;
14564 }
14565
14566 /* This problematic code point means we can't simplify
14567 * things */
14568 maybe_exactfu = FALSE(0);
14569
14570 /* Here, we are adding a problematic fold character.
14571 * "Problematic" in this context means that its fold isn't
14572 * known until runtime. (The non-problematic code points
14573 * are the above-Latin1 ones that fold to also all
14574 * above-Latin1. Their folds don't vary no matter what the
14575 * locale is.) But here we have characters whose fold
14576 * depends on the locale. We just add in the unfolded
14577 * character, and wait until runtime to fold it */
14578 goto not_fold_common;
14579 }
14580 else /* regular fold; see if actually is in a fold */
14581 if ( (ender < 256 && ! IS_IN_SOME_FOLD_L1(ender)((( (sizeof(ender) == 1) || !(((U64)((ender) | 0)) & ~0xFF
)) && (PL_charclass[(U8) (ender)] & (1U << (
22)))) ? (_Bool)1 : (_Bool)0)
)
14582 || (ender > 255
14583 && ! _invlist_contains_cpS__invlist_contains_cp(PL_in_some_fold, ender)))
14584 {
14585 /* Here, folding, but the character isn't in a fold.
14586 *
14587 * Start a new node if previous characters in the node were
14588 * folded */
14589 if (len && node_type != EXACT40) {
14590 p = oldp;
14591 goto loopdone;
14592 }
14593
14594 /* Here, continuing a node with non-folded characters. Add
14595 * this one */
14596 goto not_fold_common;
14597 }
14598 else { /* Here, does participate in some fold */
14599
14600 /* If this is the first character in the node, change its
14601 * type to folding. Otherwise, if this is the first
14602 * folding character in the node, close up the existing
14603 * node, so can start a new node with this one. */
14604 if (! len) {
14605 node_type = compute_EXACTishS_compute_EXACTish(pRExC_state);
14606 }
14607 else if (node_type == EXACT40) {
14608 p = oldp;
14609 goto loopdone;
14610 }
14611
14612 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) { /* Alway use the folded value for UTF-8
14613 patterns */
14614 if (UVCHR_IS_INVARIANT(ender)((((U64)(((UV) ((ender) | 0)))) < (((U8) (0xFF << 6)
) & 0xB0)))
) {
14615 if (UNLIKELY(len + 1 > max_string_len)__builtin_expect(((len + 1 > max_string_len) ? (_Bool)1 : (
_Bool)0),(0))
) {
14616 overflowed = TRUE(1);
14617 break;
14618 }
14619
14620 *(s)++ = (U8) toFOLD(ender)((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 14620
, __func__, "('Z') >= ('A')")), ( (sizeof(ender) == sizeof
(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14620, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14620, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) (ender
)))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))
))) : (sizeof(ender) == sizeof(U32)) ? ((((NV) (('A')) >= 0
) ? (void)0 : __assert2("re_comp.c", 14620, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14620, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) (ender)))) - ((('A')) | 0))) <= (((U64) (((('Z'
) - ('A'))) | 0))))) : (((sizeof(ender) == sizeof(U64)) ? (void
)0 : __assert2("re_comp.c", 14620, __func__, "sizeof(ender) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14620, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14620, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) (ender
)))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))
)))))) ? (U8)((ender) + ('a' - 'A')) : (ender))
;
14621 }
14622 else {
14623 UV folded = _to_uni_fold_flags(Perl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14624 ender,Perl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14625 (U8 *) s, /* We have allocated extra spacePerl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14626 in 's' so can't run off thePerl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14627 end */Perl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14628 &added_len,Perl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14629 FOLD_FLAGS_FULL | ((ASCII_FOLD_RESTRICTED)Perl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14630 ? FOLD_FLAGS_NOMIX_ASCIIPerl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
14631 : 0))Perl__to_uni_fold_flags( ender,(U8 *) s,&added_len,0x2 | (
((get_regex_charset((pRExC_state->flags)) == REGEX_ASCII_MORE_RESTRICTED_CHARSET
)) ? 0x4 : 0))
;
14632 if (UNLIKELY(len + added_len > max_string_len)__builtin_expect(((len + added_len > max_string_len) ? (_Bool
)1 : (_Bool)0),(0))
) {
14633 overflowed = TRUE(1);
14634 break;
14635 }
14636
14637 s += added_len;
14638
14639 if ( folded > 255
14640 && LIKELY(folded != GREEK_SMALL_LETTER_MU)__builtin_expect(((folded != 0x03BC) ? (_Bool)1 : (_Bool)0),(
1))
)
14641 {
14642 /* U+B5 folds to the MU, so its possible for a
14643 * non-UTF-8 target to match it */
14644 requires_utf8_target = TRUE(1);
14645 }
14646 }
14647 }
14648 else { /* Here is non-UTF8. */
14649
14650 /* The fold will be one or (rarely) two characters.
14651 * Check that there's room for at least a single one
14652 * before setting any flags, etc. Because otherwise an
14653 * overflowing character could cause a flag to be set
14654 * even though it doesn't end up in this node. (For
14655 * the two character fold, we check again, before
14656 * setting any flags) */
14657 if (UNLIKELY(len + 1 > max_string_len)__builtin_expect(((len + 1 > max_string_len) ? (_Bool)1 : (
_Bool)0),(0))
) {
14658 overflowed = TRUE(1);
14659 break;
14660 }
14661
14662#if UNICODE_MAJOR_VERSION13 > 3 /* no multifolds in early Unicode */ \
14663 || (UNICODE_MAJOR_VERSION13 == 3 && ( UNICODE_DOT_VERSION0 > 0) \
14664 || UNICODE_DOT_DOT_VERSION0 > 0)
14665
14666 /* On non-ancient Unicodes, check for the only possible
14667 * multi-char fold */
14668 if (UNLIKELY(ender == LATIN_SMALL_LETTER_SHARP_S)__builtin_expect(((ender == 0xDF) ? (_Bool)1 : (_Bool)0),(0))) {
14669
14670 /* This potential multi-char fold means the node
14671 * can't be simple (because it could match more
14672 * than a single char). And in some cases it will
14673 * match 'ss', so set that flag */
14674 maybe_SIMPLE = 0;
14675 has_ss = TRUE(1);
14676
14677 /* It can't change to be an EXACTFU (unless already
14678 * is one). We fold it iff under /u rules. */
14679 if (node_type != EXACTFU45) {
14680 maybe_exactfu = FALSE(0);
14681 }
14682 else {
14683 if (UNLIKELY(len + 2 > max_string_len)__builtin_expect(((len + 2 > max_string_len) ? (_Bool)1 : (
_Bool)0),(0))
) {
14684 overflowed = TRUE(1);
14685 break;
14686 }
14687
14688 *(s++) = 's';
14689 *(s++) = 's';
14690 added_len = 2;
14691
14692 goto done_with_this_char;
14693 }
14694 }
14695 else if ( UNLIKELY(isALPHA_FOLD_EQ(ender, 's'))__builtin_expect(((((((((('Z') >= ('A')) ? (void)0 : __assert2
("re_comp.c", 14695, __func__, "('Z') >= ('A')")), ( (sizeof
((~('A' ^ 'a') & (ender))) == sizeof(U8)) ? ((((NV) (('A'
)) >= 0) ? (void)0 : __assert2("re_comp.c", 14695, __func__
, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))) >= 0)
? (void)0 : __assert2("re_comp.c", 14695, __func__, "(NV) ((('Z') - ('A'))) >= 0"
)), (((U64) (((((U8) ((~('A' ^ 'a') & (ender)))))) - ((('A'
)) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof
((~('A' ^ 'a') & (ender))) == sizeof(U32)) ? ((((NV) (('A'
)) >= 0) ? (void)0 : __assert2("re_comp.c", 14695, __func__
, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))) >= 0)
? (void)0 : __assert2("re_comp.c", 14695, __func__, "(NV) ((('Z') - ('A'))) >= 0"
)), (((U64) (((((U32) ((~('A' ^ 'a') & (ender)))))) - (((
'A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof
((~('A' ^ 'a') & (ender))) == sizeof(U64)) ? (void)0 : __assert2
("re_comp.c", 14695, __func__, "sizeof((~('A' ^ 'a') & (ender))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14695, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14695, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (ender)))))) - ((('A')) | 0))) <= (((U64) ((
(('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void
)0 : __assert2("re_comp.c", 14695, __func__, "('Z') >= ('A')"
)), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((
((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c", 14695
, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))
) >= 0) ? (void)0 : __assert2("re_comp.c", 14695, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s')))
== sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2
("re_comp.c", 14695, __func__, "(NV) (('A')) >= 0")), (((NV
) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14695, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0)))
<= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A'
^ 'a') & ('s'))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14695, __func__, "sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14695, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14695, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))))))) ? (void)0 : __assert2("re_comp.c"
, 14695, __func__, "(((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & (ender))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & (ender)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & (ender))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & (ender)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & (ender))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"sizeof((~('A' ^ 'a') & (ender))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & (ender)))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14695, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))"
)), ((ender) & ~('A' ^ 'a')) == (('s') & ~('A' ^ 'a')
))) ? (_Bool)1 : (_Bool)0),(0))
14696 && LIKELY(len > 0)__builtin_expect(((len > 0) ? (_Bool)1 : (_Bool)0),(1))
14697 && UNLIKELY(isALPHA_FOLD_EQ(*(s-1), 's'))__builtin_expect(((((((((('Z') >= ('A')) ? (void)0 : __assert2
("re_comp.c", 14697, __func__, "('Z') >= ('A')")), ( (sizeof
((~('A' ^ 'a') & (*(s-1)))) == sizeof(U8)) ? ((((NV) (('A'
)) >= 0) ? (void)0 : __assert2("re_comp.c", 14697, __func__
, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))) >= 0)
? (void)0 : __assert2("re_comp.c", 14697, __func__, "(NV) ((('Z') - ('A'))) >= 0"
)), (((U64) (((((U8) ((~('A' ^ 'a') & (*(s-1))))))) - (((
'A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof
((~('A' ^ 'a') & (*(s-1)))) == sizeof(U32)) ? ((((NV) (('A'
)) >= 0) ? (void)0 : __assert2("re_comp.c", 14697, __func__
, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))) >= 0)
? (void)0 : __assert2("re_comp.c", 14697, __func__, "(NV) ((('Z') - ('A'))) >= 0"
)), (((U64) (((((U32) ((~('A' ^ 'a') & (*(s-1))))))) - ((
('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((
sizeof((~('A' ^ 'a') & (*(s-1)))) == sizeof(U64)) ? (void
)0 : __assert2("re_comp.c", 14697, __func__, "sizeof((~('A' ^ 'a') & (*(s-1)))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14697, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14697, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & (*(s-1))))))) - ((('A')) | 0))) <= (((U64) (
((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void
)0 : __assert2("re_comp.c", 14697, __func__, "('Z') >= ('A')"
)), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((
((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c", 14697
, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') - ('A'))
) >= 0) ? (void)0 : __assert2("re_comp.c", 14697, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s')))
== sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2
("re_comp.c", 14697, __func__, "(NV) (('A')) >= 0")), (((NV
) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14697, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0)))
<= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A'
^ 'a') & ('s'))) == sizeof(U64)) ? (void)0 : __assert2("re_comp.c"
, 14697, __func__, "sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14697, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14697, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) ((~('A'
^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) ((((
'Z') - ('A'))) | 0))))))))) ? (void)0 : __assert2("re_comp.c"
, 14697, __func__, "(((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & (*(s-1)))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & (*(s-1))))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & (*(s-1)))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & (*(s-1))))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & (*(s-1)))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"sizeof((~('A' ^ 'a') & (*(s-1)))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & (*(s-1))))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0)))))))) || (((('Z') >= ('A')) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"('Z') >= ('A')\")), ( (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U8) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U32)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U32) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))) : (((sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"sizeof((~('A' ^ 'a') & ('s'))) == sizeof(U64)\")), ((((NV) (('A')) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) (('A')) >= 0\")), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2(\"re_comp.c\", 14697, __func__, \"(NV) ((('Z') - ('A'))) >= 0\")), (((U64) (((((U64) ((~('A' ^ 'a') & ('s')))))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))))))))"
)), ((*(s-1)) & ~('A' ^ 'a')) == (('s') & ~('A' ^ 'a'
)))) ? (_Bool)1 : (_Bool)0),(0))
)
14698 {
14699 /* Also, the sequence 'ss' is special when not
14700 * under /u. If the target string is UTF-8, it
14701 * should match SHARP S; otherwise it won't. So,
14702 * here we have to exclude the possibility of this
14703 * node moving to /u.*/
14704 has_ss = TRUE(1);
14705 maybe_exactfu = FALSE(0);
14706 }
14707#endif
14708 /* Here, the fold will be a single character */
14709
14710 if (UNLIKELY(ender == MICRO_SIGN)__builtin_expect(((ender == 0xB5) ? (_Bool)1 : (_Bool)0),(0))) {
14711 has_micro_sign = TRUE(1);
14712 }
14713 else if (PL_fold[ender] != PL_fold_latin1[ender]) {
14714
14715 /* If the character's fold differs between /d and
14716 * /u, this can't change to be an EXACTFU node */
14717 maybe_exactfu = FALSE(0);
14718 }
14719
14720 *(s++) = (DEPENDS_SEMANTICS(get_regex_charset((pRExC_state->flags)) == REGEX_DEPENDS_CHARSET
)
)
14721 ? (char) toFOLD(ender)((((('Z') >= ('A')) ? (void)0 : __assert2("re_comp.c", 14721
, __func__, "('Z') >= ('A')")), ( (sizeof(ender) == sizeof
(U8)) ? ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14721, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14721, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U8) (ender
)))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))
))) : (sizeof(ender) == sizeof(U32)) ? ((((NV) (('A')) >= 0
) ? (void)0 : __assert2("re_comp.c", 14721, __func__, "(NV) (('A')) >= 0"
)), (((NV) ((('Z') - ('A'))) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14721, __func__, "(NV) ((('Z') - ('A'))) >= 0")), (((U64
) (((((U32) (ender)))) - ((('A')) | 0))) <= (((U64) (((('Z'
) - ('A'))) | 0))))) : (((sizeof(ender) == sizeof(U64)) ? (void
)0 : __assert2("re_comp.c", 14721, __func__, "sizeof(ender) == sizeof(U64)"
)), ((((NV) (('A')) >= 0) ? (void)0 : __assert2("re_comp.c"
, 14721, __func__, "(NV) (('A')) >= 0")), (((NV) ((('Z') -
('A'))) >= 0) ? (void)0 : __assert2("re_comp.c", 14721, __func__
, "(NV) ((('Z') - ('A'))) >= 0")), (((U64) (((((U64) (ender
)))) - ((('A')) | 0))) <= (((U64) (((('Z') - ('A'))) | 0))
)))))) ? (U8)((ender) + ('a' - 'A')) : (ender))
14722
14723 /* Under /u, the fold of any character in
14724 * the 0-255 range happens to be its
14725 * lowercase equivalent, except for LATIN
14726 * SMALL LETTER SHARP S, which was handled
14727 * above, and the MICRO SIGN, whose fold
14728 * requires UTF-8 to represent. */
14729 : (char) toLOWER_L1(ender)((! ( (sizeof(ender) == 1) || !(((U64)((ender) | 0)) & ~0xFF
))) ? (ender) : PL_latin1_lc[ (U8) (ender) ])
;
14730 }
14731 } /* End of adding current character to the node */
14732
14733 done_with_this_char:
14734
14735 len += added_len;
14736
14737 if (next_is_quantifier) {
14738
14739 /* Here, the next input is a quantifier, and to get here,
14740 * the current character is the only one in the node. */
14741 goto loopdone;
14742 }
14743
14744 } /* End of loop through literal characters */
14745
14746 /* Here we have either exhausted the input or run out of room in
14747 * the node. If the former, we are done. (If we encountered a
14748 * character that can't be in the node, transfer is made directly
14749 * to <loopdone>, and so we wouldn't have fallen off the end of the
14750 * loop.) */
14751 if (LIKELY(! overflowed)__builtin_expect(((! overflowed) ? (_Bool)1 : (_Bool)0),(1))) {
14752 goto loopdone;
14753 }
14754
14755 /* Here we have run out of room. We can grow plain EXACT and
14756 * LEXACT nodes. If the pattern is gigantic enough, though,
14757 * eventually we'll have to artificially chunk the pattern into
14758 * multiple nodes. */
14759 if (! LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
&& (node_type == EXACT40 || node_type == LEXACT41)) {
14760 Size_tsize_t overhead = 1 + regarglen[OP(REGNODE_p(ret))((((pRExC_state->emit_start) + (ret)))->type)];
14761 Size_tsize_t overhead_expansion = 0;
14762 char temp[256];
14763 Size_tsize_t max_nodes_for_string;
14764 Size_tsize_t achievable;
14765 SSize_tssize_t delta;
14766
14767 /* Here we couldn't fit the final character in the current
14768 * node, so it will have to be reparsed, no matter what else we
14769 * do */
14770 p = oldp;
14771
14772 /* If would have overflowed a regular EXACT node, switch
14773 * instead to an LEXACT. The code below is structured so that
14774 * the actual growing code is common to changing from an EXACT
14775 * or just increasing the LEXACT size. This means that we have
14776 * to save the string in the EXACT case before growing, and
14777 * then copy it afterwards to its new location */
14778 if (node_type == EXACT40) {
14779 overhead_expansion = regarglen[LEXACT41] - regarglen[EXACT40];
14780 RExC_emit(pRExC_state->emit) += overhead_expansion;
14781 Copy(s0, temp, len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(len)))) ? (size_t)(len) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)(temp)) != 0) ? (void
)0 : __assert2("re_comp.c", 14781, __func__, "((void*)(temp)) != 0"
)), ((((void*)(s0)) != 0) ? (void)0 : __assert2("re_comp.c", 14781
, __func__, "((void*)(s0)) != 0")), (void)memcpy((char*)(temp
),(const char*)(s0), (len) * sizeof(char)))
;
14782 }
14783
14784 /* Ready to grow. If it was a plain EXACT, the string was
14785 * saved, and the first few bytes of it overwritten by adding
14786 * an argument field. We assume, as we do elsewhere in this
14787 * file, that one byte of remaining input will translate into
14788 * one byte of output, and if that's too small, we grow again,
14789 * if too large the excess memory is freed at the end */
14790
14791 max_nodes_for_string = U16_MAX0xffff - overhead - overhead_expansion;
14792 achievable = MIN(max_nodes_for_string,(((max_nodes_for_string)<(current_string_nodes + ((((pRExC_state
->end) - p) + sizeof(regnode) - 1) / sizeof(regnode))))?(max_nodes_for_string
):(current_string_nodes + ((((pRExC_state->end) - p) + sizeof
(regnode) - 1) / sizeof(regnode))))
14793 current_string_nodes + STR_SZ(RExC_end - p))(((max_nodes_for_string)<(current_string_nodes + ((((pRExC_state
->end) - p) + sizeof(regnode) - 1) / sizeof(regnode))))?(max_nodes_for_string
):(current_string_nodes + ((((pRExC_state->end) - p) + sizeof
(regnode) - 1) / sizeof(regnode))))
;
14794 delta = achievable - current_string_nodes;
14795
14796 /* If there is just no more room, go finish up this chunk of
14797 * the pattern. */
14798 if (delta <= 0) {
14799 goto loopdone;
14800 }
14801
14802 change_engine_size(pRExC_state, delta + overhead_expansion)S_change_engine_size( pRExC_state,delta + overhead_expansion);
14803 current_string_nodes += delta;
14804 max_string_len
14805 = sizeof(struct regnode) * current_string_nodes;
14806 upper_fill = max_string_len + 1;
14807
14808 /* If the length was small, we know this was originally an
14809 * EXACT node now converted to LEXACT, and the string has to be
14810 * restored. Otherwise the string was untouched. 260 is just
14811 * a number safely above 255 so don't have to worry about
14812 * getting it precise */
14813 if (len < 260) {
14814 node_type = LEXACT41;
14815 FILL_NODE(ret, node_type)do { ((((pRExC_state->emit_start) + (ret)))->type) = node_type
; ((((pRExC_state->emit_start) + (ret)))->next_off) = 0
; } while (0)
;
14816 s0 = STRING(REGNODE_p(ret))((((((pRExC_state->emit_start) + (ret)))->type) == 41 ||
((((pRExC_state->emit_start) + (ret)))->type) == 51) ?
(((((((pRExC_state->emit_start) + (ret)))->type) == 41
|| ((((pRExC_state->emit_start) + (ret)))->type) == 51
) ? (void)0 : __assert2("re_comp.c", 14816, __func__, "((((pRExC_state->emit_start) + (ret)))->type) == 41 || ((((pRExC_state->emit_start) + (ret)))->type) == 51"
)), (((struct regnode_lstring *)((pRExC_state->emit_start)
+ (ret)))->string)) : (((((((pRExC_state->emit_start) +
(ret)))->type) != 41 && ((((pRExC_state->emit_start
) + (ret)))->type) != 51) ? (void)0 : __assert2("re_comp.c"
, 14816, __func__, "((((pRExC_state->emit_start) + (ret)))->type) != 41 && ((((pRExC_state->emit_start) + (ret)))->type) != 51"
)), ((struct regnode_string *)((pRExC_state->emit_start) +
(ret)))->string))
;
14817 Copy(temp, s0, len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(len)))) ? (size_t)(len) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((((void*)(s0)) != 0) ? (void
)0 : __assert2("re_comp.c", 14817, __func__, "((void*)(s0)) != 0"
)), ((((void*)(temp)) != 0) ? (void)0 : __assert2("re_comp.c"
, 14817, __func__, "((void*)(temp)) != 0")), (void)memcpy((char
*)(s0),(const char*)(temp), (len) * sizeof(char)))
;
14818 s = s0 + len;
14819 }
14820
14821 goto continue_parse;
14822 }
14823 else if (FOLD(((pRExC_state->flags) & (1U << (0 +2))) ? (_Bool
)1 : (_Bool)0)
) {
14824 bool_Bool splittable = FALSE(0);
14825 bool_Bool backed_up = FALSE(0);
14826 char * e; /* should this be U8? */
14827 char * s_start; /* should this be U8? */
14828
14829 /* Here is /i. Running out of room creates a problem if we are
14830 * folding, and the split happens in the middle of a
14831 * multi-character fold, as a match that should have occurred,
14832 * won't, due to the way nodes are matched, and our artificial
14833 * boundary. So back off until we aren't splitting such a
14834 * fold. If there is no such place to back off to, we end up
14835 * taking the entire node as-is. This can happen if the node
14836 * consists entirely of 'f' or entirely of 's' characters (or
14837 * things that fold to them) as 'ff' and 'ss' are
14838 * multi-character folds.
14839 *
14840 * The Unicode standard says that multi character folds consist
14841 * of either two or three characters. That means we would be
14842 * splitting one if the final character in the node is at the
14843 * beginning of either type, or is the second of a three
14844 * character fold.
14845 *
14846 * At this point:
14847 * ender is the code point of the character that won't fit
14848 * in the node
14849 * s points to just beyond the final byte in the node.
14850 * It's where we would place ender if there were
14851 * room, and where in fact we do place ender's fold
14852 * in the code below, as we've over-allocated space
14853 * for s0 (hence s) to allow for this
14854 * e starts at 's' and advances as we append things.
14855 * old_s is the same as 's'. (If ender had fit, 's' would
14856 * have been advanced to beyond it).
14857 * old_old_s points to the beginning byte of the final
14858 * character in the node
14859 * p points to the beginning byte in the input of the
14860 * character beyond 'ender'.
14861 * oldp points to the beginning byte in the input of
14862 * 'ender'.
14863 *
14864 * In the case of /il, we haven't folded anything that could be
14865 * affected by the locale. That means only above-Latin1
14866 * characters that fold to other above-latin1 characters get
14867 * folded at compile time. To check where a good place to
14868 * split nodes is, everything in it will have to be folded.
14869 * The boolean 'maybe_exactfu' keeps track in /il if there are
14870 * any unfolded characters in the node. */
14871 bool_Bool need_to_fold_loc = LOC(get_regex_charset((pRExC_state->flags)) == REGEX_LOCALE_CHARSET
)
&& ! maybe_exactfu;
14872
14873 /* If we do need to fold the node, we need a place to store the
14874 * folded copy, and a way to map back to the unfolded original
14875 * */
14876 char * locfold_buf = NULL((void*)0);
14877 Size_tsize_t * loc_correspondence = NULL((void*)0);
14878
14879 if (! need_to_fold_loc) { /* The normal case. Just
14880 initialize to the actual node */
14881 e = s;
14882 s_start = s0;
14883 s = old_old_s; /* Point to the beginning of the final char
14884 that fits in the node */
14885 }
14886 else {
14887
14888 /* Here, we have filled a /il node, and there are unfolded
14889 * characters in it. If the runtime locale turns out to be
14890 * UTF-8, there are possible multi-character folds, just
14891 * like when not under /l. The node hence can't terminate
14892 * in the middle of such a fold. To determine this, we
14893 * have to create a folded copy of this node. That means
14894 * reparsing the node, folding everything assuming a UTF-8
14895 * locale. (If at runtime it isn't such a locale, the
14896 * actions here wouldn't have been necessary, but we have
14897 * to assume the worst case.) If we find we need to back
14898 * off the folded string, we do so, and then map that
14899 * position back to the original unfolded node, which then
14900 * gets output, truncated at that spot */
14901
14902 char * redo_p = RExC_parse(pRExC_state->parse);
14903 char * redo_e;
14904 char * old_redo_e;
14905
14906 /* Allow enough space assuming a single byte input folds to
14907 * a single byte output, plus assume that the two unparsed
14908 * characters (that we may need) fold to the largest number
14909 * of bytes possible, plus extra for one more worst case
14910 * scenario. In the loop below, if we start eating into
14911 * that final spare space, we enlarge this initial space */
14912 Size_tsize_t size = max_string_len + (3 * UTF8_MAXBYTES_CASE(((13)>(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13))))?(13):(3 * ((((
U64)(0x10FFFF)) < (((U8) (0xFF << 6)) & 0xB0)) ?
1 : ((UV) (0x10FFFF) < (32 * (1U << ( 6))) ? 2 : (UV
) (0x10FFFF) < (16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF
) < ( 8 * (1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) <
( 4 * (1U << (4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 *
(1U << (5 * 6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U <<
(6 * 6)) ? 7 : 13))))
) + 1;
14913
14914 Newxz(locfold_buf, size, char)(locfold_buf = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(size) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(size)))) ? (size_t)(size) : ((size_t)-1)/sizeof
(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)
0),(0)) && (Perl_croak_memory_wrap(),0)), (char*)(Perl_safesyscalloc
((size),sizeof(char)))))
;
14915 Newxz(loc_correspondence, size, Size_t)(loc_correspondence = ((void)(__builtin_expect(((((( sizeof(size_t
) < sizeof(size) || sizeof(size_t) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(size)))) ? (size_t)(size) : ((size_t
)-1)/sizeof(size_t)) > ((size_t)-1)/sizeof(size_t))) ? (_Bool
)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)),
(size_t*)(Perl_safesyscalloc((size),sizeof(size_t)))))
;
14916
14917 /* Redo this node's parse, folding into 'locfold_buf' */
14918 redo_p = RExC_parse(pRExC_state->parse);
14919 old_redo_e = redo_e = locfold_buf;
14920 while (redo_p <= oldp) {
14921
14922 old_redo_e = redo_e;
14923 loc_correspondence[redo_e - locfold_buf]
14924 = redo_p - RExC_parse(pRExC_state->parse);
14925
14926 if (UTF(((pRExC_state->utf8)) ? (_Bool)1 : (_Bool)0)) {
14927 Size_tsize_t added_len;
14928
14929 (void) _to_utf8_fold_flags((U8 *) redo_p,Perl__to_utf8_fold_flags( (U8 *) redo_p,(U8 *) (pRExC_state->
end),(U8 *) redo_e,&added_len,0x2)
14930 (U8 *) RExC_end,Perl__to_utf8_fold_flags( (U8 *) redo_p,(U8 *) (pRExC_state->
end),(U8 *) redo_e,&added_len,0x2)
14931 (U8 *) redo_e,Perl__to_utf8_fold_flags( (U8 *) redo_p,(U8 *) (pRExC_state->
end),(U8 *) redo_e,&added_len,0x2)
14932 &added_len,Perl__to_utf8_fold_flags( (U8 *) redo_p,(U8 *) (pRExC_state->
end),(U8 *) redo_e,&added_len,0x2)
14933 FOLD_FLAGS_FULL)Perl__to_utf8_fold_flags( (U8 *) redo_p,(U8 *) (pRExC_state->
end),(U8 *) redo_e,&added_len,0x2)
;
14934 redo_e += added_len;
14935 redo_p += UTF8SKIP(redo_p)PL_utf8skip[*(const U8*)(redo_p)];
14936 }
14937 else {
14938
14939 /* Note that if this code is run on some ancient
14940 * Unicode versions, SHARP S doesn't fold to 'ss',
14941 * but rather than clutter the code with #ifdef's,
14942 * as is done above, we ignore that possibility.
14943 * This is ok because this code doesn't affect what
14944 * gets matched, but merely where the node gets
14945 * split */
14946 if (UCHARAT(redo_p)((int)*(const U8*)(redo_p)) != LATIN_SMALL_LETTER_SHARP_S0xDF) {
14947 *redo_e++ = toLOWER_L1(UCHARAT(redo_p))((! ( (sizeof(((int)*(const U8*)(redo_p))) == 1) || !(((U64)(
(((int)*(const U8*)(redo_p))) | 0)) & ~0xFF))) ? (((int)*
(const U8*)(redo_p))) : PL_latin1_lc[ (U8) (((int)*(const U8*
)(redo_p))) ])
;
14948 }
14949 else {
14950 *redo_e++ = 's';
14951 *redo_e++ = 's';
14952 }
14953 redo_p++;
14954 }
14955
14956
14957 /* If we're getting so close to the end that a
14958 * worst-case fold in the next character would cause us
14959 * to overflow, increase, assuming one byte output byte
14960 * per one byte input one, plus room for another worst
14961 * case fold */
14962 if ( redo_p <= oldp
14963 && redo_e > locfold_buf + size
14964 - (UTF8_MAXBYTES_CASE(((13)>(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13))))?(13):(3 * ((((
U64)(0x10FFFF)) < (((U8) (0xFF << 6)) & 0xB0)) ?
1 : ((UV) (0x10FFFF) < (32 * (1U << ( 6))) ? 2 : (UV
) (0x10FFFF) < (16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF
) < ( 8 * (1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) <
( 4 * (1U << (4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 *
(1U << (5 * 6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U <<
(6 * 6)) ? 7 : 13))))
+ 1))
14965 {
14966 Size_tsize_t new_size = size
14967 + (oldp - redo_p)
14968 + UTF8_MAXBYTES_CASE(((13)>(3 * ((((U64)(0x10FFFF)) < (((U8) (0xFF <<
6)) & 0xB0)) ? 1 : ((UV) (0x10FFFF) < (32 * (1U <<
( 6))) ? 2 : (UV) (0x10FFFF) < (16 * (1U << (2 * 6)
)) ? 3 : (UV) (0x10FFFF) < ( 8 * (1U << (3 * 6))) ? 4
: (UV) (0x10FFFF) < ( 4 * (1U << (4 * 6))) ? 5 : (UV
) (0x10FFFF) < ( 2 * (1U << (5 * 6))) ? 6 : (UV) (0x10FFFF
) < ((UV) 1U << (6 * 6)) ? 7 : 13))))?(13):(3 * ((((
U64)(0x10FFFF)) < (((U8) (0xFF << 6)) & 0xB0)) ?
1 : ((UV) (0x10FFFF) < (32 * (1U << ( 6))) ? 2 : (UV
) (0x10FFFF) < (16 * (1U << (2 * 6))) ? 3 : (UV) (0x10FFFF
) < ( 8 * (1U << (3 * 6))) ? 4 : (UV) (0x10FFFF) <
( 4 * (1U << (4 * 6))) ? 5 : (UV) (0x10FFFF) < ( 2 *
(1U << (5 * 6))) ? 6 : (UV) (0x10FFFF) < ((UV) 1U <<
(6 * 6)) ? 7 : 13))))
+ 1;
14969 Ptrdiff_tptrdiff_t e_offset = redo_e - locfold_buf;
14970
14971 Renew(locfold_buf, new_size, char)(locfold_buf = ((void)(__builtin_expect(((((( sizeof(size_t) <
sizeof(new_size) || sizeof(char) > ((size_t)1 << 8*
(sizeof(size_t) - sizeof(new_size)))) ? (size_t)(new_size) : (
(size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (
_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap()
,0)), (char*)(Perl_safesysrealloc((void *)(locfold_buf),(size_t
)((new_size)*sizeof(char))))))
;
14972 Renew(loc_correspondence, new_size, Size_t)(loc_correspondence = ((void)(__builtin_expect(((((( sizeof(size_t
) < sizeof(new_size) || sizeof(size_t) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(new_size)))) ? (size_t)(new_size)
: ((size_t)-1)/sizeof(size_t)) > ((size_t)-1)/sizeof(size_t
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), (size_t*)(Perl_safesysrealloc((void *)(loc_correspondence
),(size_t)((new_size)*sizeof(size_t))))))
;
14973 size = new_size;
14974
14975 redo_e = locfold_buf + e_offset;
14976 }
14977 }
14978
14979 /* Set so that things are in terms of the folded, temporary
14980 * string */
14981 s = old_redo_e;
14982 s_start = locfold_buf;
14983 e = redo_e;
14984