Lines Matching refs:pattern
202 LOCAL(Py_ssize_t) SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel);
205 SRE(count)(SRE_STATE* state, const SRE_CODE* pattern, Py_ssize_t maxcount)
217 switch (pattern[0]) {
221 TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
222 while (ptr < end && SRE(charset)(state, pattern + 2, *ptr))
228 TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
236 TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr));
242 chr = pattern[1];
243 TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
256 chr = pattern[1];
257 TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
264 chr = pattern[1];
265 TRACE(("|%p|%p|COUNT LITERAL_UNI_IGNORE %d\n", pattern, ptr, chr));
272 chr = pattern[1];
273 TRACE(("|%p|%p|COUNT LITERAL_LOC_IGNORE %d\n", pattern, ptr, chr));
280 chr = pattern[1];
281 TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
294 chr = pattern[1];
295 TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
302 chr = pattern[1];
303 TRACE(("|%p|%p|COUNT NOT_LITERAL_UNI_IGNORE %d\n", pattern, ptr, chr));
310 chr = pattern[1];
311 TRACE(("|%p|%p|COUNT NOT_LITERAL_LOC_IGNORE %d\n", pattern, ptr, chr));
317 /* repeated single character pattern */
318 TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
320 i = SRE(match)(state, pattern, 0);
326 TRACE(("|%p|%p|COUNT %zd\n", pattern, ptr,
331 TRACE(("|%p|%p|COUNT %zd\n", pattern, ptr,
491 ctx->pattern = pattern; \
494 nextctx->pattern = nextpattern; \
498 pattern = nextpattern; \
503 pattern = ctx->pattern; \
520 const SRE_CODE* pattern;
550 goto *sre_targets[*pattern++]; \
557 /* check if string matches the given pattern. returns <0 for
560 SRE(match)(SRE_STATE* state, const SRE_CODE* pattern, int toplevel)
571 TRACE(("|%p|%p|ENTER\n", pattern, state->ptr));
588 if (pattern[0] == SRE_OP_INFO) {
591 if (pattern[3] && (uintptr_t)(end - ptr) < pattern[3]) {
593 end - ptr, (Py_ssize_t) pattern[3]));
596 pattern += pattern[1] + 1;
604 switch (*pattern++)
611 TRACE(("|%p|%p|MARK %d\n", pattern,
612 ptr, pattern[0]));
614 int i = pattern[0];
629 pattern++;
635 TRACE(("|%p|%p|LITERAL %d\n", pattern,
636 ptr, *pattern));
637 if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0])
639 pattern++;
646 TRACE(("|%p|%p|NOT_LITERAL %d\n", pattern,
647 ptr, *pattern));
648 if (ptr >= end || (SRE_CODE) ptr[0] == pattern[0])
650 pattern++;
655 /* end of pattern */
656 TRACE(("|%p|%p|SUCCESS\n", pattern, ptr));
669 TRACE(("|%p|%p|AT %d\n", pattern, ptr, *pattern));
670 if (!SRE(at)(state, ptr, *pattern))
672 pattern++;
678 TRACE(("|%p|%p|CATEGORY %d\n", pattern,
679 ptr, *pattern));
680 if (ptr >= end || !sre_category(pattern[0], ptr[0]))
682 pattern++;
689 TRACE(("|%p|%p|ANY\n", pattern, ptr));
698 TRACE(("|%p|%p|ANY_ALL\n", pattern, ptr));
707 TRACE(("|%p|%p|IN\n", pattern, ptr));
709 !SRE(charset)(state, pattern + 1, *ptr))
711 pattern += pattern[0];
717 pattern, ptr, pattern[0]));
719 sre_lower_ascii(*ptr) != *pattern)
721 pattern++;
727 pattern, ptr, pattern[0]));
729 sre_lower_unicode(*ptr) != *pattern)
731 pattern++;
737 pattern, ptr, pattern[0]));
739 || !char_loc_ignore(*pattern, *ptr))
741 pattern++;
747 pattern, ptr, *pattern));
749 sre_lower_ascii(*ptr) == *pattern)
751 pattern++;
757 pattern, ptr, *pattern));
759 sre_lower_unicode(*ptr) == *pattern)
761 pattern++;
767 pattern, ptr, *pattern));
769 || char_loc_ignore(*pattern, *ptr))
771 pattern++;
776 TRACE(("|%p|%p|IN_IGNORE\n", pattern, ptr));
778 || !SRE(charset)(state, pattern+1,
781 pattern += pattern[0];
786 TRACE(("|%p|%p|IN_UNI_IGNORE\n", pattern, ptr));
788 || !SRE(charset)(state, pattern+1,
791 pattern += pattern[0];
796 TRACE(("|%p|%p|IN_LOC_IGNORE\n", pattern, ptr));
798 || !SRE(charset_loc_ignore)(state, pattern+1, *ptr))
800 pattern += pattern[0];
808 TRACE(("|%p|%p|JUMP %d\n", pattern,
809 ptr, pattern[0]));
810 pattern += pattern[0];
816 TRACE(("|%p|%p|BRANCH\n", pattern, ptr));
820 for (; pattern[0]; pattern += pattern[0]) {
821 if (pattern[1] == SRE_OP_LITERAL &&
823 (SRE_CODE) *ptr != pattern[2]))
825 if (pattern[1] == SRE_OP_IN &&
827 !SRE(charset)(state, pattern + 3,
831 DO_JUMP(JUMP_BRANCH, jump_branch, pattern+1);
856 TRACE(("|%p|%p|REPEAT_ONE %d %d\n", pattern, ptr,
857 pattern[1], pattern[2]));
859 if ((Py_ssize_t) pattern[1] > end - ptr)
864 ret = SRE(count)(state, pattern+3, pattern[2]);
872 string. check if the rest of the pattern matches,
875 if (ctx->count < (Py_ssize_t) pattern[1])
878 if (pattern[pattern[0]] == SRE_OP_SUCCESS &&
891 if (pattern[pattern[0]] == SRE_OP_LITERAL) {
893 the rest of the pattern cannot possibly match */
894 ctx->u.chr = pattern[pattern[0]+1];
896 while (ctx->count >= (Py_ssize_t) pattern[1] &&
901 if (ctx->count < (Py_ssize_t) pattern[1])
905 pattern+pattern[0]);
923 while (ctx->count >= (Py_ssize_t) pattern[1]) {
926 pattern+pattern[0]);
955 TRACE(("|%p|%p|MIN_REPEAT_ONE %d %d\n", pattern, ptr,
956 pattern[1], pattern[2]));
958 if ((Py_ssize_t) pattern[1] > end - ptr)
963 if (pattern[1] == 0)
966 /* count using pattern min as the maximum */
967 ret = SRE(count)(state, pattern+3, pattern[1]);
970 if (ret < (Py_ssize_t) pattern[1])
978 if (pattern[pattern[0]] == SRE_OP_SUCCESS &&
993 while ((Py_ssize_t)pattern[2] == SRE_MAXREPEAT
994 || ctx->count <= (Py_ssize_t)pattern[2]) {
997 pattern+pattern[0]);
1009 ret = SRE(count)(state, pattern+3, 1);
1035 TRACE(("|%p|%p|POSSESSIVE_REPEAT_ONE %d %d\n", pattern,
1036 ptr, pattern[1], pattern[2]));
1038 if (ptr + pattern[1] > end) {
1044 ret = SRE(count)(state, pattern + 3, pattern[2]);
1052 string. check if the rest of the pattern matches,
1056 if (ctx->count < (Py_ssize_t) pattern[1]) {
1060 /* Update the pattern to point to the next op code */
1061 pattern += pattern[0];
1065 if (*pattern == SRE_OP_SUCCESS &&
1082 TRACE(("|%p|%p|REPEAT %d %d\n", pattern, ptr,
1083 pattern[1], pattern[2]));
1094 ctx->u.rep->pattern = pattern;
1100 DO_JUMP(JUMP_REPEAT, jump_repeat, pattern+pattern[0]);
1125 TRACE(("|%p|%p|MAX_UNTIL %zd\n", pattern,
1128 if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
1132 ctx->u.rep->pattern+3);
1142 if ((ctx->count < (Py_ssize_t) ctx->u.rep->pattern[2] ||
1143 ctx->u.rep->pattern[2] == SRE_MAXREPEAT) &&
1154 ctx->u.rep->pattern+3);
1170 DO_JUMP(JUMP_MAX_UNTIL_3, jump_max_until_3, pattern);
1189 TRACE(("|%p|%p|MIN_UNTIL %zd %p\n", pattern,
1190 ptr, ctx->count, ctx->u.rep->pattern));
1192 if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
1196 ctx->u.rep->pattern+3);
1213 DO_JUMP(JUMP_MIN_UNTIL_2, jump_min_until_2, pattern);
1229 if ((ctx->count >= (Py_ssize_t) ctx->u.rep->pattern[2]
1230 && ctx->u.rep->pattern[2] != SRE_MAXREPEAT) ||
1239 ctx->u.rep->pattern+3);
1251 /* <POSSESSIVE_REPEAT> <skip> <1=min> <2=max> pattern
1253 TRACE(("|%p|%p|POSSESSIVE_REPEAT %d %d\n", pattern,
1254 ptr, pattern[1], pattern[2]));
1264 while (ctx->count < (Py_ssize_t)pattern[1]) {
1267 &pattern[3]);
1283 /* Keep trying to parse the <pattern> sub-pattern until the
1285 while ((ctx->count < (Py_ssize_t)pattern[2] ||
1286 (Py_ssize_t)pattern[2] == SRE_MAXREPEAT) &&
1314 &pattern[3]);
1343 /* Jump to end of pattern indicated by skip, and then skip
1345 pattern += pattern[0] + 1;
1351 /* <ATOMIC_GROUP> <skip> pattern <SUCCESS> tail */
1352 TRACE(("|%p|%p|ATOMIC_GROUP\n", pattern, ptr));
1363 &pattern[1]);
1375 /* Jump to end of pattern indicated by skip, and then skip
1377 pattern += pattern[0];
1383 TRACE(("|%p|%p|GROUPREF %d\n", pattern,
1384 ptr, pattern[0]));
1386 int groupref = pattern[0] * 2;
1402 pattern++;
1407 TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", pattern,
1408 ptr, pattern[0]));
1410 int groupref = pattern[0] * 2;
1427 pattern++;
1432 TRACE(("|%p|%p|GROUPREF_UNI_IGNORE %d\n", pattern,
1433 ptr, pattern[0]));
1435 int groupref = pattern[0] * 2;
1452 pattern++;
1457 TRACE(("|%p|%p|GROUPREF_LOC_IGNORE %d\n", pattern,
1458 ptr, pattern[0]));
1460 int groupref = pattern[0] * 2;
1477 pattern++;
1481 TRACE(("|%p|%p|GROUPREF_EXISTS %d\n", pattern,
1482 ptr, pattern[0]));
1485 int groupref = pattern[0] * 2;
1487 pattern += pattern[1];
1493 pattern += pattern[1];
1498 pattern += 2;
1503 /* <ASSERT> <skip> <back> <pattern> */
1504 TRACE(("|%p|%p|ASSERT %d\n", pattern,
1505 ptr, pattern[1]));
1506 if (ptr - (SRE_CHAR *)state->beginning < (Py_ssize_t)pattern[1])
1508 state->ptr = ptr - pattern[1];
1509 DO_JUMP0(JUMP_ASSERT, jump_assert, pattern+2);
1511 pattern += pattern[0];
1516 /* <ASSERT_NOT> <skip> <back> <pattern> */
1517 TRACE(("|%p|%p|ASSERT_NOT %d\n", pattern,
1518 ptr, pattern[1]));
1519 if (ptr - (SRE_CHAR *)state->beginning >= (Py_ssize_t)pattern[1]) {
1520 state->ptr = ptr - pattern[1];
1525 DO_JUMP0(JUMP_ASSERT_NOT, jump_assert_not, pattern+2);
1536 pattern += pattern[0];
1541 TRACE(("|%p|%p|FAILURE\n", pattern, ptr));
1554 TRACE(("|%p|%p|UNKNOWN %d\n", pattern, ptr,
1555 pattern[-1]));
1570 TRACE(("|%p|%p|JUMP_MAX_UNTIL_2\n", pattern, ptr));
1573 TRACE(("|%p|%p|JUMP_MAX_UNTIL_3\n", pattern, ptr));
1576 TRACE(("|%p|%p|JUMP_MIN_UNTIL_2\n", pattern, ptr));
1579 TRACE(("|%p|%p|JUMP_MIN_UNTIL_3\n", pattern, ptr));
1582 TRACE(("|%p|%p|JUMP_BRANCH\n", pattern, ptr));
1585 TRACE(("|%p|%p|JUMP_MAX_UNTIL_1\n", pattern, ptr));
1588 TRACE(("|%p|%p|JUMP_MIN_UNTIL_1\n", pattern, ptr));
1591 TRACE(("|%p|%p|JUMP_POSS_REPEAT_1\n", pattern, ptr));
1594 TRACE(("|%p|%p|JUMP_POSS_REPEAT_2\n", pattern, ptr));
1597 TRACE(("|%p|%p|JUMP_REPEAT\n", pattern, ptr));
1600 TRACE(("|%p|%p|JUMP_REPEAT_ONE_1\n", pattern, ptr));
1603 TRACE(("|%p|%p|JUMP_REPEAT_ONE_2\n", pattern, ptr));
1606 TRACE(("|%p|%p|JUMP_MIN_REPEAT_ONE\n", pattern, ptr));
1609 TRACE(("|%p|%p|JUMP_ATOMIC_GROUP\n", pattern, ptr));
1612 TRACE(("|%p|%p|JUMP_ASSERT\n", pattern, ptr));
1615 TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", pattern, ptr));
1618 TRACE(("|%p|%p|RETURN %zd\n", pattern,
1631 SRE(search)(SRE_STATE* state, SRE_CODE* pattern)
1646 if (pattern[0] == SRE_OP_INFO) {
1650 flags = pattern[2];
1652 if (pattern[3] && end - ptr < (Py_ssize_t)pattern[3]) {
1654 (unsigned int)(end - ptr), pattern[3]));
1657 if (pattern[3] > 1) {
1660 end -= pattern[3] - 1;
1666 /* pattern starts with a known prefix */
1668 prefix_len = pattern[5];
1669 prefix_skip = pattern[6];
1670 prefix = pattern + 7;
1673 /* pattern starts with a character from a known set */
1675 charset = pattern + 5;
1677 pattern += 1 + pattern[1];
1685 /* pattern starts with a literal character */
1698 TRACE(("|%p|%p|SEARCH LITERAL\n", pattern, ptr));
1703 status = SRE(match)(state, pattern + 2*prefix_skip, 0);
1713 /* pattern starts with a known prefix. use the overlap
1744 TRACE(("|%p|%p|SEARCH SCAN\n", pattern, ptr));
1749 status = SRE(match)(state, pattern + 2*prefix_skip, 0);
1764 /* pattern starts with a character from a known set */
1772 TRACE(("|%p|%p|SEARCH CHARSET\n", pattern, ptr));
1775 status = SRE(match)(state, pattern, 0);
1784 TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
1786 status = SRE(match)(state, pattern, 1);
1788 if (status == 0 && pattern[0] == SRE_OP_AT &&
1789 (pattern[1] == SRE_AT_BEGINNING ||
1790 pattern[1] == SRE_AT_BEGINNING_STRING))
1798 TRACE(("|%p|%p|SEARCH\n", pattern, ptr));
1800 status = SRE(match)(state, pattern, 0);