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