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 |
787 |
|
|
788 |
case OP_COND: |
case OP_COND: |
789 |
case OP_SCOND: |
case OP_SCOND: |
790 |
|
/* Because of the way auto-callout works during compile, a callout item is |
791 |
|
inserted between OP_COND and an assertion condition. */ |
792 |
|
|
793 |
|
if (ecode[LINK_SIZE+1] == OP_CALLOUT) |
794 |
|
{ |
795 |
|
if (pcre_callout != NULL) |
796 |
|
{ |
797 |
|
pcre_callout_block cb; |
798 |
|
cb.version = 1; /* Version 1 of the callout block */ |
799 |
|
cb.callout_number = ecode[LINK_SIZE+2]; |
800 |
|
cb.offset_vector = md->offset_vector; |
801 |
|
cb.subject = (PCRE_SPTR)md->start_subject; |
802 |
|
cb.subject_length = md->end_subject - md->start_subject; |
803 |
|
cb.start_match = mstart - md->start_subject; |
804 |
|
cb.current_position = eptr - md->start_subject; |
805 |
|
cb.pattern_position = GET(ecode, LINK_SIZE + 3); |
806 |
|
cb.next_item_length = GET(ecode, 3 + 2*LINK_SIZE); |
807 |
|
cb.capture_top = offset_top/2; |
808 |
|
cb.capture_last = md->capture_last; |
809 |
|
cb.callout_data = md->callout_data; |
810 |
|
if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH); |
811 |
|
if (rrc < 0) RRETURN(rrc); |
812 |
|
} |
813 |
|
ecode += _pcre_OP_lengths[OP_CALLOUT]; |
814 |
|
} |
815 |
|
|
816 |
|
/* Now see what the actual condition is */ |
817 |
|
|
818 |
if (ecode[LINK_SIZE+1] == OP_RREF) /* Recursion test */ |
if (ecode[LINK_SIZE+1] == OP_RREF) /* Recursion test */ |
819 |
{ |
{ |
820 |
offset = GET2(ecode, LINK_SIZE + 2); /* Recursion group number*/ |
offset = GET2(ecode, LINK_SIZE + 2); /* Recursion group number*/ |