| 748 |
|
|
| 749 |
md->start_match_ptr = ecode + 2; |
md->start_match_ptr = ecode + 2; |
| 750 |
RRETURN(MATCH_SKIP_ARG); |
RRETURN(MATCH_SKIP_ARG); |
| 751 |
|
|
| 752 |
|
/* For THEN (and THEN_ARG) we pass back the address of the bracket or |
| 753 |
|
the alt that is at the start of the current branch. This makes it possible |
| 754 |
|
to skip back past alternatives that precede the THEN within the current |
| 755 |
|
branch. */ |
| 756 |
|
|
| 757 |
case OP_THEN: |
case OP_THEN: |
| 758 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
| 759 |
ims, eptrb, flags, RM54); |
ims, eptrb, flags, RM54); |
| 760 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 761 |
|
md->start_match_ptr = ecode - GET(ecode, 1); |
| 762 |
MRRETURN(MATCH_THEN); |
MRRETURN(MATCH_THEN); |
| 763 |
|
|
| 764 |
case OP_THEN_ARG: |
case OP_THEN_ARG: |
| 765 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode] + ecode[1], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode] + ecode[1+LINK_SIZE], |
| 766 |
ims, eptrb, flags, RM58); |
offset_top, md, ims, eptrb, flags, RM58); |
| 767 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 768 |
md->mark = ecode + 2; |
md->start_match_ptr = ecode - GET(ecode, 1); |
| 769 |
|
md->mark = ecode + LINK_SIZE + 2; |
| 770 |
RRETURN(MATCH_THEN); |
RRETURN(MATCH_THEN); |
| 771 |
|
|
| 772 |
/* Handle a capturing bracket. If there is space in the offset vector, save |
/* Handle a capturing bracket. If there is space in the offset vector, save |
| 811 |
{ |
{ |
| 812 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
| 813 |
ims, eptrb, flags, RM1); |
ims, eptrb, flags, RM1); |
| 814 |
if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH && |
| 815 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 816 |
|
RRETURN(rrc); |
| 817 |
md->capture_last = save_capture_last; |
md->capture_last = save_capture_last; |
| 818 |
ecode += GET(ecode, 1); |
ecode += GET(ecode, 1); |
| 819 |
} |
} |
| 874 |
|
|
| 875 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, ims, |
| 876 |
eptrb, flags, RM2); |
eptrb, flags, RM2); |
| 877 |
if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH && |
| 878 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 879 |
|
RRETURN(rrc); |
| 880 |
ecode += GET(ecode, 1); |
ecode += GET(ecode, 1); |
| 881 |
} |
} |
| 882 |
/* Control never reaches here. */ |
/* Control never reaches here. */ |
| 1077 |
ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE + 2); |
ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE + 2); |
| 1078 |
while (*ecode == OP_ALT) ecode += GET(ecode, 1); |
while (*ecode == OP_ALT) ecode += GET(ecode, 1); |
| 1079 |
} |
} |
| 1080 |
else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) |
else if (rrc != MATCH_NOMATCH && |
| 1081 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 1082 |
{ |
{ |
| 1083 |
RRETURN(rrc); /* Need braces because of following else */ |
RRETURN(rrc); /* Need braces because of following else */ |
| 1084 |
} |
} |
| 1206 |
mstart = md->start_match_ptr; /* In case \K reset it */ |
mstart = md->start_match_ptr; /* In case \K reset it */ |
| 1207 |
break; |
break; |
| 1208 |
} |
} |
| 1209 |
if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH && |
| 1210 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 1211 |
|
RRETURN(rrc); |
| 1212 |
ecode += GET(ecode, 1); |
ecode += GET(ecode, 1); |
| 1213 |
} |
} |
| 1214 |
while (*ecode == OP_ALT); |
while (*ecode == OP_ALT); |
| 1242 |
do ecode += GET(ecode,1); while (*ecode == OP_ALT); |
do ecode += GET(ecode,1); while (*ecode == OP_ALT); |
| 1243 |
break; |
break; |
| 1244 |
} |
} |
| 1245 |
if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH && |
| 1246 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 1247 |
|
RRETURN(rrc); |
| 1248 |
ecode += GET(ecode,1); |
ecode += GET(ecode,1); |
| 1249 |
} |
} |
| 1250 |
while (*ecode == OP_ALT); |
while (*ecode == OP_ALT); |
| 1381 |
(pcre_free)(new_recursive.offset_save); |
(pcre_free)(new_recursive.offset_save); |
| 1382 |
MRRETURN(MATCH_MATCH); |
MRRETURN(MATCH_MATCH); |
| 1383 |
} |
} |
| 1384 |
else if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) |
else if (rrc != MATCH_NOMATCH && |
| 1385 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 1386 |
{ |
{ |
| 1387 |
DPRINTF(("Recursion gave error %d\n", rrc)); |
DPRINTF(("Recursion gave error %d\n", rrc)); |
| 1388 |
if (new_recursive.offset_save != stacksave) |
if (new_recursive.offset_save != stacksave) |
| 1425 |
mstart = md->start_match_ptr; |
mstart = md->start_match_ptr; |
| 1426 |
break; |
break; |
| 1427 |
} |
} |
| 1428 |
if (rrc != MATCH_NOMATCH && rrc != MATCH_THEN) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH && |
| 1429 |
|
(rrc != MATCH_THEN || md->start_match_ptr != ecode)) |
| 1430 |
|
RRETURN(rrc); |
| 1431 |
ecode += GET(ecode,1); |
ecode += GET(ecode,1); |
| 1432 |
} |
} |
| 1433 |
while (*ecode == OP_ALT); |
while (*ecode == OP_ALT); |