| 211 |
**************************************************************************** |
**************************************************************************** |
| 212 |
***************************************************************************/ |
***************************************************************************/ |
| 213 |
|
|
| 214 |
|
/* Numbers for RMATCH calls. When this list is changed, the code at HEAP_RETURN |
| 215 |
/* Numbers for RMATCH calls */ |
below must be updated in sync. */ |
| 216 |
|
|
| 217 |
enum { RM1=1, RM2, RM3, RM4, RM5, RM6, RM7, RM8, RM9, RM10, |
enum { RM1=1, RM2, RM3, RM4, RM5, RM6, RM7, RM8, RM9, RM10, |
| 218 |
RM11, RM12, RM13, RM14, RM15, RM16, RM17, RM18, RM19, RM20, |
RM11, RM12, RM13, RM14, RM15, RM16, RM17, RM18, RM19, RM20, |
| 219 |
RM21, RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30, |
RM21, RM22, RM23, RM24, RM25, RM26, RM27, RM28, RM29, RM30, |
| 220 |
RM31, RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39, RM40, |
RM31, RM32, RM33, RM34, RM35, RM36, RM37, RM38, RM39, RM40, |
| 221 |
RM41, RM42, RM43, RM44, RM45, RM46, RM47, RM48, RM49, RM50, |
RM41, RM42, RM43, RM44, RM45, RM46, RM47, RM48, RM49, RM50, |
| 222 |
RM51, RM52, RM53 }; |
RM51, RM52, RM53, RM54 }; |
|
|
|
| 223 |
|
|
| 224 |
/* These versions of the macros use the stack, as normal. There are debugging |
/* These versions of the macros use the stack, as normal. There are debugging |
| 225 |
versions and production versions. Note that the "rw" argument of RMATCH isn't |
versions and production versions. Note that the "rw" argument of RMATCH isn't |
| 621 |
switch(op) |
switch(op) |
| 622 |
{ |
{ |
| 623 |
case OP_FAIL: |
case OP_FAIL: |
| 624 |
return MATCH_NOMATCH; |
RRETURN(MATCH_NOMATCH); |
| 625 |
|
|
| 626 |
case OP_PRUNE: |
case OP_PRUNE: |
| 627 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
| 628 |
ims, eptrb, flags, RM51); |
ims, eptrb, flags, RM51); |
| 629 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 630 |
return MATCH_PRUNE; |
RRETURN(MATCH_PRUNE); |
| 631 |
|
|
| 632 |
case OP_COMMIT: |
case OP_COMMIT: |
| 633 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
| 634 |
ims, eptrb, flags, RM52); |
ims, eptrb, flags, RM52); |
| 635 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 636 |
return MATCH_COMMIT; |
RRETURN(MATCH_COMMIT); |
| 637 |
|
|
| 638 |
case OP_SKIP: |
case OP_SKIP: |
| 639 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
| 640 |
ims, eptrb, flags, RM53); |
ims, eptrb, flags, RM53); |
| 641 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 642 |
md->start_match_ptr = eptr; /* Pass back current position */ |
md->start_match_ptr = eptr; /* Pass back current position */ |
| 643 |
return MATCH_SKIP; |
RRETURN(MATCH_SKIP); |
| 644 |
|
|
| 645 |
case OP_THEN: |
case OP_THEN: |
| 646 |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
RMATCH(eptr, ecode + _pcre_OP_lengths[*ecode], offset_top, md, |
| 647 |
ims, eptrb, flags, RM53); |
ims, eptrb, flags, RM54); |
| 648 |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
if (rrc != MATCH_NOMATCH) RRETURN(rrc); |
| 649 |
return MATCH_THEN; |
RRETURN(MATCH_THEN); |
| 650 |
|
|
| 651 |
/* 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 |
| 652 |
the current subject position in the working slot at the top of the vector. |
the current subject position in the working slot at the top of the vector. |
| 4228 |
LBL(17) LBL(18) LBL(19) LBL(20) LBL(21) LBL(22) LBL(23) LBL(24) |
LBL(17) LBL(18) LBL(19) LBL(20) LBL(21) LBL(22) LBL(23) LBL(24) |
| 4229 |
LBL(25) LBL(26) LBL(27) LBL(28) LBL(29) LBL(30) LBL(31) LBL(32) |
LBL(25) LBL(26) LBL(27) LBL(28) LBL(29) LBL(30) LBL(31) LBL(32) |
| 4230 |
LBL(33) LBL(34) LBL(35) LBL(36) LBL(37) LBL(38) LBL(39) LBL(40) |
LBL(33) LBL(34) LBL(35) LBL(36) LBL(37) LBL(38) LBL(39) LBL(40) |
| 4231 |
LBL(41) LBL(42) LBL(43) LBL(44) LBL(45) LBL(46) LBL(47) |
LBL(41) LBL(42) LBL(43) LBL(44) LBL(45) LBL(46) LBL(47) LBL(48) |
| 4232 |
|
LBL(49) LBL(50) LBL(51) LBL(52) LBL(53) LBL(54) |
| 4233 |
default: |
default: |
| 4234 |
DPRINTF(("jump error in pcre match: label %d non-existent\n", frame->Xwhere)); |
DPRINTF(("jump error in pcre match: label %d non-existent\n", frame->Xwhere)); |
| 4235 |
return PCRE_ERROR_INTERNAL; |
return PCRE_ERROR_INTERNAL; |