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; |