MCPcopy Index your code
hub / github.com/python/cpython / _compile

Function _compile

Lib/re/_compiler.py:39–219  ·  view source on GitHub ↗
(code, pattern, flags)

Source from the content-addressed store, hash-verified

37 return (flags | add_flags) & ~del_flags
38
39def _compile(code, pattern, flags):
40 # internal: compile a (sub)pattern
41 emit = code.append
42 _len = len
43 LITERAL_CODES = _LITERAL_CODES
44 REPEATING_CODES = _REPEATING_CODES
45 SUCCESS_CODES = _SUCCESS_CODES
46 ASSERT_CODES = _ASSERT_CODES
47 iscased = None
48 tolower = None
49 fixes = None
50 if flags & SRE_FLAG_IGNORECASE and not flags & SRE_FLAG_LOCALE:
51 if flags & SRE_FLAG_UNICODE:
52 iscased = _sre.unicode_iscased
53 tolower = _sre.unicode_tolower
54 fixes = _EXTRA_CASES
55 else:
56 iscased = _sre.ascii_iscased
57 tolower = _sre.ascii_tolower
58 for op, av in pattern:
59 if op in LITERAL_CODES:
60 if not flags & SRE_FLAG_IGNORECASE:
61 emit(op)
62 emit(av)
63 elif flags & SRE_FLAG_LOCALE:
64 emit(OP_LOCALE_IGNORE[op])
65 emit(av)
66 elif not iscased(av):
67 emit(op)
68 emit(av)
69 else:
70 lo = tolower(av)
71 if not fixes: # ascii
72 emit(OP_IGNORE[op])
73 emit(lo)
74 elif lo not in fixes:
75 emit(OP_UNICODE_IGNORE[op])
76 emit(lo)
77 else:
78 emit(IN_UNI_IGNORE)
79 skip = _len(code); emit(0)
80 if op is NOT_LITERAL:
81 emit(NEGATE)
82 for k in (lo,) + fixes[lo]:
83 emit(LITERAL)
84 emit(k)
85 emit(FAILURE)
86 code[skip] = _len(code) - skip
87 elif op is IN:
88 charset, hascased = _optimize_charset(av, iscased, tolower, fixes)
89 if not charset:
90 emit(FAILURE)
91 elif charset == _CHARSET_ALL:
92 emit(ANY_ALL)
93 else:
94 if flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE:
95 emit(IN_LOC_IGNORE)
96 elif not hascased:

Callers 1

_codeFunction · 0.70

Calls 8

_optimize_charsetFunction · 0.85
_compile_charsetFunction · 0.85
_simpleFunction · 0.85
_combine_flagsFunction · 0.85
PatternErrorClass · 0.85
getwidthMethod · 0.80
errorClass · 0.50
getMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…