mirror of https://github.com/python/cpython
gh-112205: Require @getter and @setter to be methods (#113278)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
e51b400945
commit
6a69b80d1b
|
@ -2249,6 +2249,17 @@ class ClinicParserTest(TestCase):
|
||||||
expected_error = "Cannot apply both @getter and @setter to the same function!"
|
expected_error = "Cannot apply both @getter and @setter to the same function!"
|
||||||
self.expect_failure(block, expected_error, lineno=3)
|
self.expect_failure(block, expected_error, lineno=3)
|
||||||
|
|
||||||
|
def test_getset_no_class(self):
|
||||||
|
for annotation in "@getter", "@setter":
|
||||||
|
with self.subTest(annotation=annotation):
|
||||||
|
block = f"""
|
||||||
|
module m
|
||||||
|
{annotation}
|
||||||
|
m.func
|
||||||
|
"""
|
||||||
|
expected_error = "@getter and @setter must be methods"
|
||||||
|
self.expect_failure(block, expected_error, lineno=2)
|
||||||
|
|
||||||
def test_duplicate_coexist(self):
|
def test_duplicate_coexist(self):
|
||||||
err = "Called @coexist twice"
|
err = "Called @coexist twice"
|
||||||
block = """
|
block = """
|
||||||
|
|
|
@ -5614,6 +5614,10 @@ class DSLParser:
|
||||||
function_name = fields.pop()
|
function_name = fields.pop()
|
||||||
module, cls = self.clinic._module_and_class(fields)
|
module, cls = self.clinic._module_and_class(fields)
|
||||||
|
|
||||||
|
if self.kind in {GETTER, SETTER}:
|
||||||
|
if not cls:
|
||||||
|
fail("@getter and @setter must be methods")
|
||||||
|
|
||||||
self.update_function_kind(full_name)
|
self.update_function_kind(full_name)
|
||||||
if self.kind is METHOD_INIT and not return_converter:
|
if self.kind is METHOD_INIT and not return_converter:
|
||||||
return_converter = init_return_converter()
|
return_converter = init_return_converter()
|
||||||
|
|
Loading…
Reference in New Issue