Lines Matching defs:md

48 #define NLBLOCK md             /* Block containing newline information */
59 /* The md->capture_last field uses the lower 16 bits for the last captured
73 /* Values for setting in md->match_function_type to indicate two special types
124 is_subject TRUE if printing from within md->start_subject
125 md pointer to matching data block, if is_subject is TRUE
131 pchars(const pcre_uchar *p, int length, BOOL is_subject, match_data *md)
134 BOOL utf = md->utf;
135 if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
156 md points to match data block
165 match_ref(int offset, register PCRE_PUCHAR eptr, int length, match_data *md,
169 register PCRE_PUCHAR p = md->start_subject + md->offset_vector[offset];
171 BOOL utf = md->utf;
175 if (eptr >= md->end_subject)
180 pchars(eptr, length, TRUE, md);
183 pchars(p, length, FALSE, md);
215 if (eptr >= md->end_subject) return -2; /* Partial match */
239 if (eptr >= md->end_subject) return -2; /* Partial match */
242 if (TABLE_GET(cp, md->lcc, cp) != TABLE_GET(cc, md->lcc, cc)) return -1;
256 if (eptr >= md->end_subject) return -2; /* Partial match */
344 the "rd" argument of RMATCH isn't actually used in this definition. It's the md
474 if (md->partial != 0 && eptr >= md->end_subject && \
475 eptr > md->start_used_ptr) \
477 md->hitend = TRUE; \
478 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL); \
482 if (md->partial != 0 && eptr > md->start_used_ptr) \
484 md->hitend = TRUE; \
485 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL); \
490 the md structure (e.g. utf, end_subject) into individual variables to improve
500 md pointer to "static" info for the match
514 PCRE_PUCHAR mstart, int offset_top, match_data *md, eptrblock *eptrb,
538 heapframe *frame = (heapframe *)md->match_frames_base;
716 utf = md->utf; /* Local copy of the flag */
724 if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT);
725 if (rdepth >= md->match_limit_recursion) RRETURN(PCRE_ERROR_RECURSIONLIMIT);
728 string, the variable md->match_function_type is set to MATCH_CBEGROUP. It is
739 if (md->match_function_type == MATCH_CBEGROUP)
744 md->match_function_type = 0;
757 md->nomatch_mark = ecode + 2;
758 md->mark = NULL; /* In case previously set by assertion */
759 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode] + ecode[1], offset_top, md,
762 md->mark == NULL) md->mark = ecode + 2;
766 argument. It is passed back in md->start_match_ptr (an overloading of that
772 STRCMP_UC_UC_TEST(ecode + 2, md->start_match_ptr) == 0)
774 md->start_match_ptr = eptr;
783 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
789 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
795 md->nomatch_mark = ecode + 2;
796 md->mark = NULL; /* In case previously set by assertion */
797 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode] + ecode[1], offset_top, md,
800 md->mark == NULL) md->mark = ecode + 2;
805 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
808 md->start_match_ptr = eptr; /* Pass back current position */
816 SKIP_ARG gets to top level, the match is re-run with md->ignore_skip_arg
820 md->skip_arg_count++;
821 if (md->skip_arg_count <= md->ignore_skip_arg)
826 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode] + ecode[1], offset_top, md,
830 /* Pass back the current skip name by overloading md->start_match_ptr and
833 with md->ignore_skip_arg set to the value of md->skip_arg_count. */
835 md->start_match_ptr = ecode + 2;
843 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
846 md->start_match_ptr = ecode;
850 md->nomatch_mark = ecode + 2;
851 md->mark = NULL; /* In case previously set by assertion */
853 md, eptrb, RM58);
855 md->mark == NULL) md->mark = ecode + 2;
857 md->start_match_ptr = ecode;
876 save_mark = md->mark;
879 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, eptrb, RM64);
882 mstart = md->start_match_ptr;
888 if (md->start_match_ptr < next &&
895 md->mark = save_mark;
908 offset_top = md->end_offset_top;
909 eptr = md->end_match_ptr;
928 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, eptrb, RM65);
935 RMATCH(eptr, prev, offset_top, md, eptrb, RM66);
964 pchars(eptr, 16, TRUE, md);
968 if (offset < md->offset_max)
970 save_offset1 = md->offset_vector[offset];
971 save_offset2 = md->offset_vector[offset+1];
972 save_offset3 = md->offset_vector[md->offset_end - number];
973 save_capture_last = md->capture_last;
974 save_mark = md->mark;
977 md->offset_vector[md->offset_end - number] =
978 (int)(eptr - md->start_subject);
982 if (op >= OP_SBRA) md->match_function_type = MATCH_CBEGROUP;
983 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
1001 if (md->start_match_ptr < next &&
1009 md->capture_last = save_capture_last;
1011 md->mark = save_mark;
1016 md->offset_vector[offset] = save_offset1;
1017 md->offset_vector[offset+1] = save_offset2;
1018 md->offset_vector[md->offset_end - number] = save_offset3;
1052 reached. This is tested by comparing md->once_target with the start of the
1064 md->match_function_type = MATCH_CBEGROUP;
1070 else if (!md->hasthen && ecode[GET(ecode, 1)] != OP_ALT)
1078 save_mark = md->mark;
1079 save_capture_last = md->capture_last;
1080 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md, eptrb,
1089 if (md->start_match_ptr < next &&
1104 if (md->once_target == scode) rrc = MATCH_NOMATCH;
1109 md->mark = save_mark;
1111 md->capture_last = save_capture_last;
1135 pchars(eptr, 16, TRUE, md);
1139 if (offset < md->offset_max)
1142 code_offset = (int)(ecode - md->start_code);
1144 save_offset1 = md->offset_vector[offset];
1145 save_offset2 = md->offset_vector[offset+1];
1146 save_offset3 = md->offset_vector[md->offset_end - number];
1147 save_capture_last = md->capture_last;
1162 md->offset_vector[md->offset_end - number] =
1163 (int)(eptr - md->start_subject);
1164 if (op >= OP_SBRA) md->match_function_type = MATCH_CBEGROUP;
1165 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
1169 offset_top = md->end_offset_top;
1170 ecode = md->start_code + code_offset;
1171 save_capture_last = md->capture_last;
1173 mstart = md->start_match_ptr; /* In case \K changed it */
1174 if (eptr == md->end_match_ptr) /* Matched an empty string */
1179 eptr = md->end_match_ptr;
1189 if (md->start_match_ptr < next &&
1195 md->capture_last = save_capture_last;
1202 md->offset_vector[offset] = save_offset1;
1203 md->offset_vector[offset+1] = save_offset2;
1204 md->offset_vector[md->offset_end - number] = save_offset3;
1238 code_offset = (int)(ecode - md->start_code);
1239 save_capture_last = md->capture_last;
1243 if (op >= OP_SBRA) md->match_function_type = MATCH_CBEGROUP;
1244 RMATCH(eptr, ecode + PRIV(OP_lengths)[*ecode], offset_top, md,
1248 offset_top = md->end_offset_top;
1249 ecode = md->start_code + code_offset;
1251 mstart = md->start_match_ptr; /* In case \K reset it */
1252 if (eptr == md->end_match_ptr) /* Matched an empty string */
1257 eptr = md->end_match_ptr;
1267 if (md->start_match_ptr < next &&
1275 md->capture_last = save_capture_last;
1313 cb.offset_vector = md->offset_vector;
1315 cb.subject = (PCRE_SPTR)md->start_subject;
1317 cb.subject = (PCRE_SPTR16)md->start_subject;
1319 cb.subject = (PCRE_SPTR32)md->start_subject;
1321 cb.subject_length = (int)(md->end_subject - md->start_subject);
1322 cb.start_match = (int)(mstart - md->start_subject);
1323 cb.current_position = (int)(eptr - md->start_subject);
1327 cb.capture_last = md->capture_last & CAPLMASK;
1330 cb.callout_data = md->callout_data;
1331 cb.mark = md->nomatch_mark;
1349 if (md->recursive != NULL) /* Not recursing => FALSE */
1352 condition = (recno == RREF_ANY || recno == md->recursive->group_num);
1357 if (md->recursive != NULL)
1360 pcre_uchar *slot = md->name_table + GET2(ecode, 1) * md->name_entry_size;
1364 condition = recno == md->recursive->group_num;
1366 slot += md->name_entry_size;
1373 condition = offset < offset_top && md->offset_vector[offset] >= 0;
1379 pcre_uchar *slot = md->name_table + GET2(ecode, 1) * md->name_entry_size;
1383 condition = offset < offset_top && md->offset_vector[offset] >= 0;
1385 slot += md->name_entry_size;
1394 md->match_function_type to MATCH_CONDASSERT causes it to stop at the end
1398 md->match_function_type = MATCH_CONDASSERT;
1399 RMATCH(eptr, ecode, offset_top, md, NULL, RM3);
1402 if (md->end_offset_top > offset_top)
1403 offset_top = md->end_offset_top; /* Captures may have happened */
1446 md->match_function_type = MATCH_CBEGROUP;
1447 RMATCH(eptr, ecode, offset_top, md, eptrb, RM49);
1471 md->capture_last = (md->capture_last & OVFLMASK) | number;
1472 if (offset >= md->offset_max) md->capture_last |= OVFLBIT; else
1474 md->offset_vector[offset] =
1475 md->offset_vector[md->offset_end - number];
1476 md->offset_vector[offset+1] = (int)(eptr - md->start_subject);
1495 md->recursive == NULL &&
1496 (md->notempty ||
1497 (md->notempty_atstart &&
1498 mstart == md->start_subject + md->start_offset)))
1503 md->end_match_ptr = eptr; /* Record where we ended */
1504 md->end_offset_top = offset_top; /* and how many extracts were taken */
1505 md->start_match_ptr = mstart; /* and the start (\K can modify) */
1520 md->match_function type, and one of these opcodes will be the first opcode
1526 save_mark = md->mark;
1527 if (md->match_function_type == MATCH_CONDASSERT)
1530 md->match_function_type = 0;
1538 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, NULL, RM4);
1545 mstart = md->start_match_ptr; /* In case \K reset it */
1551 md->mark = save_mark;
1559 if (md->start_match_ptr < next &&
1589 offset_top = md->end_offset_top;
1597 save_mark = md->mark;
1598 if (md->match_function_type == MATCH_CONDASSERT)
1601 md->match_function_type = 0;
1609 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, NULL, RM5);
1610 md->mark = save_mark; /* Always restore the mark setting */
1626 if (md->start_match_ptr < next &&
1678 if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
1689 if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
1694 if (eptr < md->start_used_ptr) md->start_used_ptr = eptr;
1708 cb.offset_vector = md->offset_vector;
1710 cb.subject = (PCRE_SPTR)md->start_subject;
1712 cb.subject = (PCRE_SPTR16)md->start_subject;
1714 cb.subject = (PCRE_SPTR32)md->start_subject;
1716 cb.subject_length = (int)(md->end_subject - md->start_subject);
1717 cb.start_match = (int)(mstart - md->start_subject);
1718 cb.current_position = (int)(eptr - md->start_subject);
1722 cb.capture_last = md->capture_last & CAPLMASK;
1725 cb.callout_data = md->callout_data;
1726 cb.mark = md->nomatch_mark;
1755 callpat = md->start_code + GET(ecode, 1);
1756 recno = (callpat == md->start_code)? 0 :
1763 for (ri = md->recursive; ri != NULL; ri = ri->prevrec)
1770 new_recursive.saved_capture_last = md->capture_last;
1772 new_recursive.prevrec = md->recursive;
1773 md->recursive = &new_recursive;
1781 new_recursive.saved_max = md->offset_end;
1790 memcpy(new_recursive.offset_save, md->offset_vector,
1795 recursions, md->recursive might be changed, so reset it before looping.
1802 if (cbegroup) md->match_function_type = MATCH_CBEGROUP;
1804 md, eptrb, RM6);
1805 memcpy(md->offset_vector, new_recursive.offset_save,
1807 md->capture_last = new_recursive.saved_capture_last;
1808 md->recursive = new_recursive.prevrec;
1819 eptr = md->end_match_ptr;
1820 mstart = md->start_match_ptr;
1841 md->recursive = &new_recursive;
1847 md->recursive = new_recursive.prevrec;
1871 RMATCH(eptr, next, offset_top, md, eptrb, RM10);
1880 RMATCH(eptr, next + 1+LINK_SIZE, offset_top, md, eptrb, RM11);
1927 md->end_match_ptr = eptr; /* For ONCE_NC */
1928 md->end_offset_top = offset_top;
1929 md->start_match_ptr = mstart;
1930 RRETURN(MATCH_MATCH); /* Sets md->mark */
1954 if (md->recursive != NULL && md->recursive->group_num == number)
1956 md->end_match_ptr = eptr;
1957 md->start_match_ptr = mstart;
1963 md->capture_last = (md->capture_last & OVFLMASK) | number;
1964 if (offset >= md->offset_max) md->capture_last |= OVFLBIT; else
1978 register int *iptr = md->offset_vector + offset_top;
1979 register int *iend = md->offset_vector + offset;
1985 md->offset_vector[offset] =
1986 md->offset_vector[md->offset_end - number];
1987 md->offset_vector[offset+1] = (int)(eptr - md->start_subject);
1999 md->start_match_ptr = mstart; /* In case \K reset it */
2000 md->end_match_ptr = eptr;
2001 md->end_offset_top = offset_top;
2018 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, eptrb, RM12);
2020 md->once_target = prev; /* Level at which to change to MATCH_NOMATCH */
2035 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, eptrb, RM7);
2039 RMATCH(eptr, prev, offset_top, md, eptrb, RM8);
2041 md->once_target = prev; /* Level at which to change to MATCH_NOMATCH */
2046 RMATCH(eptr, prev, offset_top, md, eptrb, RM50);
2054 RMATCH(eptr, prev, offset_top, md, eptrb, RM13);
2055 if (rrc == MATCH_ONCE && md->once_target == prev) rrc = MATCH_NOMATCH;
2059 RMATCH(eptr, ecode + 1 + LINK_SIZE, offset_top, md, eptrb, RM9);
2061 md->once_target = prev;
2072 if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH);
2077 if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH);
2084 if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH);
2085 if (eptr != md->start_subject &&
2086 (eptr == md->end_subject || !WAS_NEWLINE(eptr)))
2094 if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH);
2109 if (eptr < md->end_subject)
2113 if (md->partial != 0 &&
2114 eptr + 1 >= md->end_subject &&
2119 md->hitend = TRUE;
2120 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2127 if (md->noteol) RRETURN(MATCH_NOMATCH);
2137 if (md->noteol) RRETURN(MATCH_NOMATCH);
2138 if (!md->endonly) goto ASSERT_NL_OR_EOS;
2145 if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH);
2154 if (eptr < md->end_subject &&
2155 (!IS_NEWLINE(eptr) || eptr != md->end_subject - md->nllen))
2157 if (md->partial != 0 &&
2158 eptr + 1 >= md->end_subject &&
2163 md->hitend = TRUE;
2164 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2191 if (eptr == md->start_subject) prev_is_word = FALSE; else
2195 if (lastptr < md->start_used_ptr) md->start_used_ptr = lastptr;
2198 if (md->use_ucp)
2208 prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
2213 if (eptr >= md->end_subject)
2222 if (md->use_ucp)
2232 cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
2244 if (eptr == md->start_subject) prev_is_word = FALSE; else
2246 if (eptr <= md->start_used_ptr) md->start_used_ptr = eptr - 1;
2248 if (md->use_ucp)
2260 && ((md->ctypes[eptr[-1]] & ctype_word) != 0);
2265 if (eptr >= md->end_subject)
2272 if (md->use_ucp)
2284 && ((md->ctypes[*eptr] & ctype_word) != 0);
2300 if (md->partial != 0 &&
2301 eptr + 1 >= md->end_subject &&
2306 md->hitend = TRUE;
2307 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2315 if (eptr >= md->end_subject) /* DO NOT merge the eptr++ here; it must */
2322 if (utf) ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
2331 if (eptr >= md->end_subject) /* DO NOT merge the eptr++ here; it must */
2341 if (eptr >= md->end_subject)
2351 (md->ctypes[c] & ctype_digit) != 0
2358 if (eptr >= md->end_subject)
2368 (md->ctypes[c] & ctype_digit) == 0
2375 if (eptr >= md->end_subject)
2385 (md->ctypes[c] & ctype_space) != 0
2392 if (eptr >= md->end_subject)
2402 (md->ctypes[c] & ctype_space) == 0
2409 if (eptr >= md->end_subject)
2419 (md->ctypes[c] & ctype_word) != 0
2426 if (eptr >= md->end_subject)
2436 (md->ctypes[c] & ctype_word) == 0
2443 if (eptr >= md->end_subject)
2454 if (eptr >= md->end_subject)
2471 if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH);
2478 if (eptr >= md->end_subject)
2493 if (eptr >= md->end_subject)
2508 if (eptr >= md->end_subject)
2523 if (eptr >= md->end_subject)
2543 if (eptr >= md->end_subject)
2648 if (eptr >= md->end_subject)
2658 while (eptr < md->end_subject)
2702 pcre_uchar *slot = md->name_table + GET2(ecode, 1) * md->name_entry_size;
2708 length = (md->jscript_compat)? 0 : -1;
2714 if (offset < offset_top && md->offset_vector[offset] >= 0)
2716 length = md->offset_vector[offset+1] - md->offset_vector[offset];
2719 slot += md->name_entry_size;
2729 if (offset >= offset_top || md->offset_vector[offset] < 0)
2730 length = (md->jscript_compat)? 0 : -1;
2732 length = md->offset_vector[offset+1] - md->offset_vector[offset];
2762 if ((length = match_ref(offset, eptr, length, md, caseless)) < 0)
2764 if (length == -2) eptr = md->end_subject; /* Partial match */
2788 if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)
2790 if (slength == -2) eptr = md->end_subject; /* Partial match */
2809 RMATCH(eptr, ecode, offset_top, md, eptrb, RM14);
2812 if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)
2814 if (slength == -2) eptr = md->end_subject; /* Partial match */
2831 if ((slength = match_ref(offset, eptr, length, md, caseless)) < 0)
2836 if (slength == -2 && md->partial != 0 &&
2837 md->end_subject > md->start_used_ptr)
2839 md->hitend = TRUE;
2840 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
2849 RMATCH(eptr, ecode, offset_top, md, eptrb, RM15);
2919 if (eptr >= md->end_subject)
2939 if (eptr >= md->end_subject)
2971 RMATCH(eptr, ecode, offset_top, md, eptrb, RM16);
2974 if (eptr >= md->end_subject)
2994 RMATCH(eptr, ecode, offset_top, md, eptrb, RM17);
2997 if (eptr >= md->end_subject)
3028 if (eptr >= md->end_subject)
3047 RMATCH(eptr, ecode, offset_top, md, eptrb, RM18);
3059 if (eptr >= md->end_subject)
3080 RMATCH(eptr, ecode, offset_top, md, eptrb, RM19);
3143 if (eptr >= md->end_subject)
3164 RMATCH(eptr, ecode, offset_top, md, eptrb, RM20);
3167 if (eptr >= md->end_subject)
3186 if (eptr >= md->end_subject)
3204 RMATCH(eptr, ecode, offset_top, md, eptrb, RM21);
3227 if (length > md->end_subject - eptr)
3238 if (md->end_subject - eptr < 1)
3252 if (eptr >= md->end_subject)
3273 if (md->lcc[fc] != TABLE_GET(cc, md->lcc, cc)) RRETURN(MATCH_NOMATCH);
3305 if (TABLE_GET(ecode[1], md->lcc, ecode[1])
3306 != TABLE_GET(*eptr, md->lcc, *eptr)) RRETURN(MATCH_NOMATCH);
3418 if (eptr <= md->end_subject - length &&
3422 eptr <= md->end_subject - oclength &&
3438 RMATCH(eptr, ecode, offset_top, md, eptrb, RM22);
3441 if (eptr <= md->end_subject - length &&
3445 eptr <= md->end_subject - oclength &&
3462 if (eptr <= md->end_subject - length &&
3466 eptr <= md->end_subject - oclength &&
3480 RMATCH(eptr, ecode, offset_top, md, eptrb, RM23);
3518 foc = md->fcc[fc];
3530 foc = TABLE_GET(fc, md->fcc, fc);
3536 if (eptr >= md->end_subject)
3551 RMATCH(eptr, ecode, offset_top, md, eptrb, RM24);
3554 if (eptr >= md->end_subject)
3571 if (eptr >= md->end_subject)
3584 RMATCH(eptr, ecode, offset_top, md, eptrb, RM25);
3598 if (eptr >= md->end_subject)
3612 RMATCH(eptr, ecode, offset_top, md, eptrb, RM26);
3615 if (eptr >= md->end_subject)
3629 if (eptr >= md->end_subject)
3641 RMATCH(eptr, ecode, offset_top, md, eptrb, RM27);
3655 if (eptr >= md->end_subject)
3683 och = TABLE_GET(ch, md->fcc, ch);
3692 if (ch == c || (op == OP_NOTI && TABLE_GET(ch, md->fcc, ch) == c))
3799 foc = TABLE_GET(fc, md->fcc, fc);
3807 if (eptr >= md->end_subject)
3822 if (eptr >= md->end_subject)
3842 RMATCH(eptr, ecode, offset_top, md, eptrb, RM28);
3845 if (eptr >= md->end_subject)
3860 RMATCH(eptr, ecode, offset_top, md, eptrb, RM29);
3863 if (eptr >= md->end_subject)
3888 if (eptr >= md->end_subject)
3901 RMATCH(eptr, ecode, offset_top, md, eptrb, RM30);
3913 if (eptr >= md->end_subject)
3925 RMATCH(eptr, ecode, offset_top, md, eptrb, RM31);
3944 if (eptr >= md->end_subject)
3959 if (eptr >= md->end_subject)
3978 RMATCH(eptr, ecode, offset_top, md, eptrb, RM32);
3981 if (eptr >= md->end_subject)
3996 RMATCH(eptr, ecode, offset_top, md, eptrb, RM33);
3999 if (eptr >= md->end_subject)
4023 if (eptr >= md->end_subject)
4036 RMATCH(eptr, ecode, offset_top, md, eptrb, RM34);
4048 if (eptr >= md->end_subject)
4060 RMATCH(eptr, ecode, offset_top, md, eptrb, RM35);
4162 if (eptr >= md->end_subject)
4175 if (eptr >= md->end_subject)
4192 if (eptr >= md->end_subject)
4206 if (eptr >= md->end_subject)
4220 if (eptr >= md->end_subject)
4235 if (eptr >= md->end_subject)
4255 if (eptr >= md->end_subject)
4280 if (eptr >= md->end_subject)
4297 if (eptr >= md->end_subject)
4317 if (eptr >= md->end_subject)
4344 if (eptr >= md->end_subject)
4354 while (eptr < md->end_subject)
4379 if (eptr >= md->end_subject)
4385 if (md->partial != 0 &&
4386 eptr + 1 >= md->end_subject &&
4391 md->hitend = TRUE;
4392 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
4395 ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
4402 if (eptr >= md->end_subject)
4408 ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
4413 if (eptr > md->end_subject - min) RRETURN(MATCH_NOMATCH);
4420 if (eptr >= md->end_subject)
4431 if (eptr < md->end_subject && UCHAR21(eptr) == CHAR_LF) eptr++;
4444 if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH);
4453 if (eptr >= md->end_subject)
4470 if (eptr >= md->end_subject)
4487 if (eptr >= md->end_subject)
4504 if (eptr >= md->end_subject)
4521 if (eptr >= md->end_subject)
4527 if (c < 128 && (md->ctypes[c] & ctype_digit) != 0)
4536 if (eptr >= md->end_subject)
4542 if (cc >= 128 || (md->ctypes[cc] & ctype_digit) == 0)
4553 if (eptr >= md->end_subject)
4559 if (cc < 128 && (md->ctypes[cc] & ctype_space) != 0)
4562 ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
4570 if (eptr >= md->end_subject)
4576 if (cc >= 128 || (md->ctypes[cc] & ctype_space) == 0)
4587 if (eptr >= md->end_subject)
4593 if (cc < 128 && (md->ctypes[cc] & ctype_word) != 0)
4596 ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
4604 if (eptr >= md->end_subject)
4610 if (cc >= 128 || (md->ctypes[cc] & ctype_word) == 0)
4632 if (eptr >= md->end_subject)
4638 if (md->partial != 0 &&
4639 eptr + 1 >= md->end_subject &&
4644 md->hitend = TRUE;
4645 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
4652 if (eptr > md->end_subject - min)
4661 if (eptr > md->end_subject - min)
4672 if (eptr >= md->end_subject)
4682 if (eptr < md->end_subject && *eptr == CHAR_LF) eptr++;
4695 if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH);
4704 if (eptr >= md->end_subject)
4724 if (eptr >= md->end_subject)
4744 if (eptr >= md->end_subject)
4764 if (eptr >= md->end_subject)
4784 if (eptr >= md->end_subject)
4789 if (MAX_255(*eptr) && (md->ctypes[*eptr] & ctype_digit) != 0)
4798 if (eptr >= md->end_subject)
4803 if (!MAX_255(*eptr) || (md->ctypes[*eptr] & ctype_digit) == 0)
4812 if (eptr >= md->end_subject)
4817 if (MAX_255(*eptr) && (md->ctypes[*eptr] & ctype_space) != 0)
4826 if (eptr >= md->end_subject)
4831 if (!MAX_255(*eptr) || (md->ctypes[*eptr] & ctype_space) == 0)
4840 if (eptr >= md->end_subject)
4845 if (MAX_255(*eptr) && (md->ctypes[*eptr] & ctype_word) != 0)
4854 if (eptr >= md->end_subject)
4859 if (!MAX_255(*eptr) || (md->ctypes[*eptr] & ctype_word) == 0)
4888 RMATCH(eptr, ecode, offset_top, md, eptrb, RM36);
4891 if (eptr >= md->end_subject)
4905 RMATCH(eptr, ecode, offset_top, md, eptrb, RM37);
4908 if (eptr >= md->end_subject)
4925 RMATCH(eptr, ecode, offset_top, md, eptrb, RM38);
4928 if (eptr >= md->end_subject)
4942 RMATCH(eptr, ecode, offset_top, md, eptrb, RM39);
4945 if (eptr >= md->end_subject)
4959 RMATCH(eptr, ecode, offset_top, md, eptrb, RM40);
4962 if (eptr >= md->end_subject)
4977 RMATCH(eptr, ecode, offset_top, md, eptrb, RM59);
4980 if (eptr >= md->end_subject)
5000 RMATCH(eptr, ecode, offset_top, md, eptrb, RM61);
5003 if (eptr >= md->end_subject)
5028 RMATCH(eptr, ecode, offset_top, md, eptrb, RM62);
5031 if (eptr >= md->end_subject)
5050 RMATCH(eptr, ecode, offset_top, md, eptrb, RM67);
5053 if (eptr >= md->end_subject)
5073 RMATCH(eptr, ecode, offset_top, md, eptrb, RM60);
5076 if (eptr >= md->end_subject)
5102 RMATCH(eptr, ecode, offset_top, md, eptrb, RM41);
5105 if (eptr >= md->end_subject)
5115 while (eptr < md->end_subject)
5136 RMATCH(eptr, ecode, offset_top, md, eptrb, RM42);
5139 if (eptr >= md->end_subject)
5150 if (md->partial != 0 && /* Take care with CRLF partial */
5151 eptr >= md->end_subject &&
5156 md->hitend = TRUE;
5157 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5170 if (eptr < md->end_subject && UCHAR21(eptr) == CHAR_LF) eptr++;
5183 if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH);
5221 if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
5226 if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0)
5231 if (c < 256 && (md->ctypes[c] & ctype_space) != 0)
5236 if (c >= 256 || (md->ctypes[c] & ctype_space) == 0)
5241 if (c < 256 && (md->ctypes[c] & ctype_word) != 0)
5246 if (c >= 256 || (md->ctypes[c] & ctype_word) == 0)
5261 RMATCH(eptr, ecode, offset_top, md, eptrb, RM43);
5264 if (eptr >= md->end_subject)
5275 if (md->partial != 0 && /* Take care with CRLF partial */
5276 eptr >= md->end_subject &&
5281 md->hitend = TRUE;
5282 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5295 if (eptr < md->end_subject && *eptr == CHAR_LF) eptr++;
5308 if (md->bsr_anycrlf) RRETURN(MATCH_NOMATCH);
5362 if (MAX_255(c) && (md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
5366 if (!MAX_255(c) || (md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
5370 if (MAX_255(c) && (md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
5374 if (!MAX_255(c) || (md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
5378 if (MAX_255(c) && (md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH);
5382 if (!MAX_255(c) || (md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH);
5410 if (eptr >= md->end_subject)
5426 if (eptr >= md->end_subject)
5445 if (eptr >= md->end_subject)
5460 if (eptr >= md->end_subject)
5475 if (eptr >= md->end_subject)
5491 if (eptr >= md->end_subject)
5513 if (eptr >= md->end_subject)
5541 if (eptr >= md->end_subject)
5560 if (eptr >= md->end_subject)
5583 if (eptr >= md->end_subject)
5607 RMATCH(eptr, ecode, offset_top, md, eptrb, RM44);
5621 if (eptr >= md->end_subject)
5631 while (eptr < md->end_subject)
5654 RMATCH(eptr, ecode, offset_top, md, eptrb, RM45);
5697 if (eptr >= md->end_subject)
5703 if (md->partial != 0 && /* Take care with CRLF partial */
5704 eptr + 1 >= md->end_subject &&
5709 md->hitend = TRUE;
5710 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5713 ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
5722 if (eptr >= md->end_subject)
5728 ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
5733 eptr = md->end_subject; /* Unlimited UTF-8 repeat */
5742 if (c > (unsigned int)(md->end_subject - eptr))
5744 eptr = md->end_subject;
5754 if (eptr >= md->end_subject)
5762 if (++eptr >= md->end_subject) break;
5768 (md->bsr_anycrlf ||
5786 if (eptr >= md->end_subject)
5808 if (eptr >= md->end_subject)
5828 if (eptr >= md->end_subject)
5834 if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;
5843 if (eptr >= md->end_subject)
5849 if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;
5858 if (eptr >= md->end_subject)
5864 if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;
5873 if (eptr >= md->end_subject)
5879 if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;
5888 if (eptr >= md->end_subject)
5894 if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;
5903 if (eptr >= md->end_subject)
5909 if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;
5922 RMATCH(eptr, ecode, offset_top, md, eptrb, RM46);
5939 if (eptr >= md->end_subject)
5945 if (md->partial != 0 && /* Take care with CRLF partial */
5946 eptr + 1 >= md->end_subject &&
5951 md->hitend = TRUE;
5952 if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
5961 if (c > (unsigned int)(md->end_subject - eptr))
5963 eptr = md->end_subject;
5972 if (eptr >= md->end_subject)
5980 if (++eptr >= md->end_subject) break;
5985 if (c != CHAR_LF && (md->bsr_anycrlf ||
5999 if (eptr >= md->end_subject)
6020 if (eptr >= md->end_subject)
6041 if (eptr >= md->end_subject)
6062 if (eptr >= md->end_subject)
6083 if (eptr >= md->end_subject)
6088 if (MAX_255(*eptr) && (md->ctypes[*eptr] & ctype_digit) != 0) break;
6096 if (eptr >= md->end_subject)
6101 if (!MAX_255(*eptr) || (md->ctypes[*eptr] & ctype_digit) == 0) break;
6109 if (eptr >= md->end_subject)
6114 if (MAX_255(*eptr) && (md->ctypes[*eptr] & ctype_space) != 0) break;
6122 if (eptr >= md->end_subject)
6127 if (!MAX_255(*eptr) || (md->ctypes[*eptr] & ctype_space) == 0) break;
6135 if (eptr >= md->end_subject)
6140 if (MAX_255(*eptr) && (md->ctypes[*eptr] & ctype_word) != 0) break;
6148 if (eptr >= md->end_subject)
6153 if (!MAX_255(*eptr) || (md->ctypes[*eptr] & ctype_word) == 0) break;
6166 RMATCH(eptr, ecode, offset_top, md, eptrb, RM47);
6364 match_data *md = &match_block;
6380 md->match_frames_base = &frame_zero;
6416 follows immediately afterwards. Other values in the md block are used only
6421 utf = md->utf = (re->options & PCRE_UTF8) != 0;
6422 md->partial = ((options & PCRE_PARTIAL_HARD) != 0)? 2 :
6441 return (errorcode <= PCRE_UTF8_ERR5 && md->partial > 1)?
6444 return (errorcode <= PCRE_UTF16_ERR1 && md->partial > 1)?
6484 md->name_table = (pcre_uchar *)re + re->name_table_offset;
6485 md->name_count = re->name_count;
6486 md->name_entry_size = re->name_entry_size;
6492 md->match_limit = MATCH_LIMIT;
6493 md->match_limit_recursion = MATCH_LIMIT_RECURSION;
6494 md->callout_data = NULL;
6508 md->match_limit = extra_data->match_limit;
6510 md->match_limit_recursion = extra_data->match_limit_recursion;
6512 md->callout_data = extra_data->callout_data;
6518 if ((re->flags & PCRE_MLSET) != 0 && re->limit_match < md->match_limit)
6519 md->match_limit = re->limit_match;
6522 re->limit_recursion < md->match_limit_recursion)
6523 md->match_limit_recursion = re->limit_recursion;
6539 md->start_code = (const pcre_uchar *)re + re->name_table_offset +
6542 md->start_subject = (PCRE_PUCHAR)subject;
6543 md->start_offset = start_offset;
6544 md->end_subject = md->start_subject + length;
6545 end_subject = md->end_subject;
6547 md->endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
6548 md->use_ucp = (re->options & PCRE_UCP) != 0;
6549 md->jscript_compat = (re->options & PCRE_JAVASCRIPT_COMPAT) != 0;
6550 md->ignore_skip_arg = 0;
6555 md->notbol = (options & PCRE_NOTBOL) != 0;
6556 md->noteol = (options & PCRE_NOTEOL) != 0;
6557 md->notempty = (options & PCRE_NOTEMPTY) != 0;
6558 md->notempty_atstart = (options & PCRE_NOTEMPTY_ATSTART) != 0;
6560 md->hitend = FALSE;
6561 md->mark = md->nomatch_mark = NULL; /* In case never set */
6563 md->recursive = NULL; /* No recursion at top level */
6564 md->hasthen = (re->flags & PCRE_HASTHEN) != 0;
6566 md->lcc = tables + lcc_offset;
6567 md->fcc = tables + fcc_offset;
6568 md->ctypes = tables + ctypes_offset;
6576 md->bsr_anycrlf = (re->options & PCRE_BSR_ANYCRLF) != 0;
6579 md->bsr_anycrlf = TRUE;
6581 md->bsr_anycrlf = FALSE;
6586 md->bsr_anycrlf = TRUE;
6590 md->bsr_anycrlf = FALSE;
6614 md->nltype = NLTYPE_ANYCRLF;
6618 md->nltype = NLTYPE_ANY;
6622 md->nltype = NLTYPE_FIXED;
6625 md->nllen = 2;
6626 md->nl[0] = (newline >> 8) & 255;
6627 md->nl[1] = newline & 255;
6631 md->nllen = 1;
6632 md->nl[0] = newline;
6640 if (md->partial && (re->flags & PCRE_NOPARTIAL) != 0)
6654 md->offset_vector = (int *)(PUBL(malloc))(ocount * sizeof(int));
6655 if (md->offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
6659 else md->offset_vector = offsets;
6660 md->offset_end = ocount;
6661 md->offset_max = (2*ocount)/3;
6662 md->capture_last = 0;
6670 if (md->offset_vector != NULL)
6672 register int *iptr = md->offset_vector + ocount;
6674 if (iend < md->offset_vector + 2) iend = md->offset_vector + 2;
6676 md->offset_vector[0] = md->offset_vector[1] = -1;
6693 first_char2 = TABLE_GET(first_char, md->fcc, first_char);
6715 req_char2 = TABLE_GET(req_char, md->fcc, req_char);
6746 while (t < md->end_subject && !IS_NEWLINE(t))
6754 while (t < md->end_subject && !IS_NEWLINE(t)) t++;
6785 if (start_match > md->start_subject + start_offset)
6807 (md->nltype == NLTYPE_ANY || md->nltype == NLTYPE_ANYCRLF) &&
6837 if (((options | re->options) & PCRE_NO_START_OPTIMIZE) == 0 && !md->partial)
6910 pchars(start_match, end_subject - start_match, TRUE, md);
6917 md->start_match_ptr = start_match;
6918 md->start_used_ptr = start_match;
6919 md->match_call_count = 0;
6920 md->match_function_type = 0;
6921 md->end_offset_top = 0;
6922 md->skip_arg_count = 0;
6923 rc = match(start_match, md->start_code, start_match, 2, md, NULL, 0);
6924 if (md->hitend && start_partial == NULL)
6926 start_partial = md->start_used_ptr;
6941 md->ignore_skip_arg = md->skip_arg_count;
6948 if (md->start_match_ptr > start_match)
6950 new_start_match = md->start_match_ptr;
6961 md->ignore_skip_arg = 0;
7014 (md->nltype == NLTYPE_ANY ||
7015 md->nltype == NLTYPE_ANYCRLF ||
7016 md->nllen == 2))
7019 md->mark = NULL; /* Reset for start of next match attempt */
7050 memcpy(offsets + 2, md->offset_vector + 2,
7054 if (md->end_offset_top > arg_offset_max) md->capture_last |= OVFLBIT;
7056 (PUBL(free))(md->offset_vector);
7062 rc = ((md->capture_last & OVFLBIT) != 0 &&
7063 md->end_offset_top >= arg_offset_max)?
7064 0 : md->end_offset_top/2;
7075 if (md->end_offset_top/2 <= re->top_bracket && offsets != NULL)
7080 iptr = offsets + md->end_offset_top;
7086 md->start_match_ptr might be modified if \K was encountered on the success
7091 offsets[0] = (int)(md->start_match_ptr - md->start_subject);
7092 offsets[1] = (int)(md->end_match_ptr - md->start_subject);
7098 *(extra_data->mark) = (pcre_uchar *)md->mark;
7112 (PUBL(free))(md->offset_vector);
7131 md->mark = NULL;
7153 *(extra_data->mark) = (pcre_uchar *)md->nomatch_mark;