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!"
|
||||
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):
|
||||
err = "Called @coexist twice"
|
||||
block = """
|
||||
|
|
|
@ -5614,6 +5614,10 @@ class DSLParser:
|
|||
function_name = fields.pop()
|
||||
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)
|
||||
if self.kind is METHOD_INIT and not return_converter:
|
||||
return_converter = init_return_converter()
|
||||
|
|
Loading…
Reference in New Issue