Browse Source
bpo-43908: Make re types immutable (GH-25697)
Co-authored-by: Victor Stinner <vstinner@python.org>
pull/25808/head
Erlend Egeberg Aasland
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
17 additions and
3 deletions
-
Lib/test/test_re.py
-
Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst
-
Modules/_sre.c
|
|
|
@ -2190,6 +2190,18 @@ class ImplementationTest(unittest.TestCase): |
|
|
|
Test implementation details of the re module. |
|
|
|
""" |
|
|
|
|
|
|
|
@cpython_only |
|
|
|
def test_immutable(self): |
|
|
|
# bpo-43908: check that re types are immutable |
|
|
|
with self.assertRaises(TypeError): |
|
|
|
re.Match.foo = 1 |
|
|
|
with self.assertRaises(TypeError): |
|
|
|
re.Pattern.foo = 1 |
|
|
|
with self.assertRaises(TypeError): |
|
|
|
pat = re.compile("") |
|
|
|
tp = type(pat.scanner("")) |
|
|
|
tp.foo = 1 |
|
|
|
|
|
|
|
def test_overlap_table(self): |
|
|
|
f = sre_compile._generate_overlap_table |
|
|
|
self.assertEqual(f(""), []) |
|
|
|
|
|
|
|
@ -0,0 +1,2 @@ |
|
|
|
Make :mod:`re` types immutable. Patch by |
|
|
|
Erlend E. Aasland. |
|
|
|
@ -2690,7 +2690,7 @@ static PyType_Spec pattern_spec = { |
|
|
|
.name = "re.Pattern", |
|
|
|
.basicsize = sizeof(PatternObject), |
|
|
|
.itemsize = sizeof(SRE_CODE), |
|
|
|
.flags = Py_TPFLAGS_DEFAULT, |
|
|
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, |
|
|
|
.slots = pattern_slots, |
|
|
|
}; |
|
|
|
|
|
|
|
@ -2755,7 +2755,7 @@ static PyType_Spec match_spec = { |
|
|
|
.name = "re.Match", |
|
|
|
.basicsize = sizeof(MatchObject), |
|
|
|
.itemsize = sizeof(Py_ssize_t), |
|
|
|
.flags = Py_TPFLAGS_DEFAULT, |
|
|
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, |
|
|
|
.slots = match_slots, |
|
|
|
}; |
|
|
|
|
|
|
|
@ -2781,7 +2781,7 @@ static PyType_Slot scanner_slots[] = { |
|
|
|
static PyType_Spec scanner_spec = { |
|
|
|
.name = "_" SRE_MODULE ".SRE_Scanner", |
|
|
|
.basicsize = sizeof(ScannerObject), |
|
|
|
.flags = Py_TPFLAGS_DEFAULT, |
|
|
|
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, |
|
|
|
.slots = scanner_slots, |
|
|
|
}; |
|
|
|
|
|
|
|
|