| 295 |
#define RMATCH(ra,rb,rc,rd,re,rf,rg,rw)\ |
#define RMATCH(ra,rb,rc,rd,re,rf,rg,rw)\ |
| 296 |
{\ |
{\ |
| 297 |
heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\ |
heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\ |
| 298 |
|
if (newframe == NULL) RRETURN(PCRE_ERROR_NOMEMORY);\ |
| 299 |
frame->Xwhere = rw; \ |
frame->Xwhere = rw; \ |
| 300 |
newframe->Xeptr = ra;\ |
newframe->Xeptr = ra;\ |
| 301 |
newframe->Xecode = rb;\ |
newframe->Xecode = rb;\ |
| 489 |
|
|
| 490 |
#ifdef NO_RECURSE |
#ifdef NO_RECURSE |
| 491 |
heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe)); |
heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe)); |
| 492 |
|
if (frame == NULL) RRETURN(PCRE_ERROR_NOMEMORY); |
| 493 |
frame->Xprevframe = NULL; /* Marks the top level */ |
frame->Xprevframe = NULL; /* Marks the top level */ |
| 494 |
|
|
| 495 |
/* Copy in the original argument variables */ |
/* Copy in the original argument variables */ |
| 796 |
save_capture_last = md->capture_last; |
save_capture_last = md->capture_last; |
| 797 |
|
|
| 798 |
DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3)); |
DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3)); |
| 799 |
md->offset_vector[md->offset_end - number] = |
md->offset_vector[md->offset_end - number] = |
| 800 |
(int)(eptr - md->start_subject); |
(int)(eptr - md->start_subject); |
| 801 |
|
|
| 802 |
flags = (op == OP_SCBRA)? match_cbegroup : 0; |
flags = (op == OP_SCBRA)? match_cbegroup : 0; |
| 5959 |
while (start_match < end_subject) |
while (start_match < end_subject) |
| 5960 |
{ |
{ |
| 5961 |
register unsigned int c = *start_match; |
register unsigned int c = *start_match; |
| 5962 |
if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; |
if ((start_bits[c/8] & (1 << (c&7))) == 0) |
| 5963 |
else break; |
{ |
| 5964 |
|
start_match++; |
| 5965 |
|
#ifdef SUPPORT_UTF8 |
| 5966 |
|
if (utf8) |
| 5967 |
|
while(start_match < end_subject && (*start_match & 0xc0) == 0x80) |
| 5968 |
|
start_match++; |
| 5969 |
|
#endif |
| 5970 |
|
} |
| 5971 |
|
else break; |
| 5972 |
} |
} |
| 5973 |
} |
} |
| 5974 |
} /* Starting optimizations */ |
} /* Starting optimizations */ |
| 6069 |
|
|
| 6070 |
switch(rc) |
switch(rc) |
| 6071 |
{ |
{ |
| 6072 |
/* NOMATCH and PRUNE advance by one character. If MATCH_SKIP_ARG reaches |
/* SKIP passes back the next starting point explicitly, but if it is the |
| 6073 |
this level it means that a MARK that matched the SKIP's arg was not found. |
same as the match we have just done, treat it as NOMATCH. */ |
| 6074 |
We treat this as NOMATCH. THEN at this level acts exactly like PRUNE. */ |
|
| 6075 |
|
case MATCH_SKIP: |
| 6076 |
|
if (md->start_match_ptr != start_match) |
| 6077 |
|
{ |
| 6078 |
|
new_start_match = md->start_match_ptr; |
| 6079 |
|
break; |
| 6080 |
|
} |
| 6081 |
|
/* Fall through */ |
| 6082 |
|
|
| 6083 |
|
/* If MATCH_SKIP_ARG reaches this level it means that a MARK that matched |
| 6084 |
|
the SKIP's arg was not found. We also treat this as NOMATCH. */ |
| 6085 |
|
|
| 6086 |
|
case MATCH_SKIP_ARG: |
| 6087 |
|
/* Fall through */ |
| 6088 |
|
|
| 6089 |
|
/* NOMATCH and PRUNE advance by one character. THEN at this level acts |
| 6090 |
|
exactly like PRUNE. */ |
| 6091 |
|
|
| 6092 |
case MATCH_NOMATCH: |
case MATCH_NOMATCH: |
| 6093 |
case MATCH_PRUNE: |
case MATCH_PRUNE: |
|
case MATCH_SKIP_ARG: |
|
| 6094 |
case MATCH_THEN: |
case MATCH_THEN: |
| 6095 |
new_start_match = start_match + 1; |
new_start_match = start_match + 1; |
| 6096 |
#ifdef SUPPORT_UTF8 |
#ifdef SUPPORT_UTF8 |
| 6100 |
#endif |
#endif |
| 6101 |
break; |
break; |
| 6102 |
|
|
|
/* SKIP passes back the next starting point explicitly. */ |
|
|
|
|
|
case MATCH_SKIP: |
|
|
new_start_match = md->start_match_ptr; |
|
|
break; |
|
|
|
|
| 6103 |
/* COMMIT disables the bumpalong, but otherwise behaves as NOMATCH. */ |
/* COMMIT disables the bumpalong, but otherwise behaves as NOMATCH. */ |
| 6104 |
|
|
| 6105 |
case MATCH_COMMIT: |
case MATCH_COMMIT: |