@@ -859,9 +859,6 @@ def parser_body(
859859 limited_capi = False
860860
861861 parsearg : str | None
862- if f .kind in {GETTER , SETTER } and parameters :
863- fail (f"@{ f .kind .name .lower ()} method cannot define parameters" )
864-
865862 if not parameters :
866863 parser_code : list [str ] | None
867864 if f .kind is GETTER :
@@ -1615,12 +1612,9 @@ def render_function(
16151612 for converter in converters :
16161613 converter .set_template_dict (template_dict )
16171614
1618- f .return_converter .render (f , data )
1619- if f .kind is SETTER :
1620- # All setters return an int.
1621- template_dict ['impl_return_type' ] = 'int'
1622- else :
1623- template_dict ['impl_return_type' ] = f .return_converter .type
1615+ if f .kind not in {SETTER , METHOD_INIT }:
1616+ f .return_converter .render (f , data )
1617+ template_dict ['impl_return_type' ] = f .return_converter .type
16241618
16251619 template_dict ['declarations' ] = libclinic .format_escape ("\n " .join (data .declarations ))
16261620 template_dict ['initializers' ] = "\n \n " .join (data .initializers )
@@ -4565,20 +4559,6 @@ class int_return_converter(long_return_converter):
45654559 cast = '(long)'
45664560
45674561
4568- class init_return_converter (long_return_converter ):
4569- """
4570- Special return converter for __init__ functions.
4571- """
4572- type = 'int'
4573- cast = '(long)'
4574-
4575- def render (
4576- self ,
4577- function : Function ,
4578- data : CRenderData
4579- ) -> None : ...
4580-
4581-
45824562class unsigned_long_return_converter (long_return_converter ):
45834563 type = 'unsigned long'
45844564 conversion_fn = 'PyLong_FromUnsignedLong'
@@ -5111,8 +5091,8 @@ def resolve_return_converter(
51115091 except ValueError :
51125092 fail (f"Badly formed annotation for { full_name !r} : { forced_converter !r} " )
51135093
5114- if self .kind is METHOD_INIT :
5115- return init_return_converter ()
5094+ if self .kind in { METHOD_INIT , SETTER } :
5095+ return int_return_converter ()
51165096 return CReturnConverter ()
51175097
51185098 def parse_cloned_function (self , names : FunctionNames , existing : str ) -> None :
@@ -5294,6 +5274,11 @@ def state_parameters_start(self, line: str) -> None:
52945274 if not self .indent .infer (line ):
52955275 return self .next (self .state_function_docstring , line )
52965276
5277+ assert self .function is not None
5278+ if self .function .kind in {GETTER , SETTER }:
5279+ getset = self .function .kind .name .lower ()
5280+ fail (f"@{ getset } methods cannot define parameters" )
5281+
52975282 self .parameter_continuation = ''
52985283 return self .next (self .state_parameter , line )
52995284
0 commit comments