| 6 |
and semantics are as close as possible to those of the Perl 5 language. |
and semantics are as close as possible to those of the Perl 5 language. |
| 7 |
|
|
| 8 |
Written by Philip Hazel |
Written by Philip Hazel |
| 9 |
Copyright (c) 1997-2008 University of Cambridge |
Copyright (c) 1997-2009 University of Cambridge |
| 10 |
|
|
| 11 |
----------------------------------------------------------------------------- |
----------------------------------------------------------------------------- |
| 12 |
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
| 4926 |
both phases. |
both phases. |
| 4927 |
|
|
| 4928 |
If we are not at the pattern start, compile code to change the ims |
If we are not at the pattern start, compile code to change the ims |
| 4929 |
options if this setting actually changes any of them, and reset the |
options if this setting actually changes any of them, and reset the |
| 4930 |
greedy defaults and the case value for firstbyte and reqbyte. */ |
greedy defaults and the case value for firstbyte and reqbyte. */ |
| 4931 |
|
|
| 4932 |
if (*ptr == ')') |
if (*ptr == ')') |
| 4950 |
|
|
| 4951 |
/* Change options at this level, and pass them back for use |
/* Change options at this level, and pass them back for use |
| 4952 |
in subsequent branches. When not at the start of the pattern, this |
in subsequent branches. When not at the start of the pattern, this |
| 4953 |
information is also necessary so that a resetting item can be |
information is also necessary so that a resetting item can be |
| 4954 |
compiled at the end of a group (if we are in a group). */ |
compiled at the end of a group (if we are in a group). */ |
| 4955 |
|
|
| 4956 |
*optionsptr = options = newoptions; |
*optionsptr = options = newoptions; |
| 5810 |
const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code], |
const uschar *scode = first_significant_code(code + _pcre_OP_lengths[*code], |
| 5811 |
NULL, 0, FALSE); |
NULL, 0, FALSE); |
| 5812 |
register int op = *scode; |
register int op = *scode; |
| 5813 |
|
|
| 5814 |
|
/* If we are at the start of a conditional assertion group, *both* the |
| 5815 |
|
conditional assertion *and* what follows the condition must satisfy the test |
| 5816 |
|
for start of line. Other kinds of condition fail. Note that there may be an |
| 5817 |
|
auto-callout at the start of a condition. */ |
| 5818 |
|
|
| 5819 |
|
if (op == OP_COND) |
| 5820 |
|
{ |
| 5821 |
|
scode += 1 + LINK_SIZE; |
| 5822 |
|
if (*scode == OP_CALLOUT) scode += _pcre_OP_lengths[OP_CALLOUT]; |
| 5823 |
|
switch (*scode) |
| 5824 |
|
{ |
| 5825 |
|
case OP_CREF: |
| 5826 |
|
case OP_RREF: |
| 5827 |
|
case OP_DEF: |
| 5828 |
|
return FALSE; |
| 5829 |
|
|
| 5830 |
|
default: /* Assertion */ |
| 5831 |
|
if (!is_startline(scode, bracket_map, backref_map)) return FALSE; |
| 5832 |
|
do scode += GET(scode, 1); while (*scode == OP_ALT); |
| 5833 |
|
scode += 1 + LINK_SIZE; |
| 5834 |
|
break; |
| 5835 |
|
} |
| 5836 |
|
scode = first_significant_code(scode, NULL, 0, FALSE); |
| 5837 |
|
op = *scode; |
| 5838 |
|
} |
| 5839 |
|
|
| 5840 |
/* Non-capturing brackets */ |
/* Non-capturing brackets */ |
| 5841 |
|
|
| 5855 |
|
|
| 5856 |
/* Other brackets */ |
/* Other brackets */ |
| 5857 |
|
|
| 5858 |
else if (op == OP_ASSERT || op == OP_ONCE || op == OP_COND) |
else if (op == OP_ASSERT || op == OP_ONCE) |
| 5859 |
{ if (!is_startline(scode, bracket_map, backref_map)) return FALSE; } |
{ |
| 5860 |
|
if (!is_startline(scode, bracket_map, backref_map)) return FALSE; |
| 5861 |
|
} |
| 5862 |
|
|
| 5863 |
/* .* means "start at start or after \n" if it isn't in brackets that |
/* .* means "start at start or after \n" if it isn't in brackets that |
| 5864 |
may be referenced. */ |
may be referenced. */ |