@@ -1674,18 +1674,8 @@ def render_function(
16741674 full_name = f .full_name
16751675 template_dict = {'full_name' : full_name }
16761676 template_dict ['name' ] = f .displayname
1677-
1678- if f .c_basename :
1679- c_basename = f .c_basename
1680- else :
1681- fields = full_name .split ("." )
1682- if fields [- 1 ] == '__new__' :
1683- fields .pop ()
1684- c_basename = "_" .join (fields )
1685-
1686- template_dict ['c_basename' ] = c_basename
1687-
1688- template_dict ['methoddef_name' ] = c_basename .upper () + "_METHODDEF"
1677+ template_dict ['c_basename' ] = f .c_basename
1678+ template_dict ['methoddef_name' ] = f .c_basename .upper () + "_METHODDEF"
16891679
16901680 template_dict ['docstring' ] = self .docstring_for_c_string (f )
16911681
@@ -2653,7 +2643,7 @@ class Function:
26532643 name : str
26542644 module : Module | Clinic
26552645 cls : Class | None
2656- c_basename : str | None
2646+ c_basename : str
26572647 full_name : str
26582648 return_converter : CReturnConverter
26592649 kind : FunctionKind
@@ -4840,6 +4830,22 @@ def state_dsl_start(self, line: str) -> None:
48404830
48414831 self .next (self .state_modulename_name , line )
48424832
4833+ @staticmethod
4834+ def parse_names (line : str ) -> tuple [str , str ]:
4835+ left , _ , right = line .partition (' as ' )
4836+ full_name = left .strip ()
4837+ c_basename = right .strip ()
4838+ if not c_basename :
4839+ fields = full_name .split ("." )
4840+ if fields [- 1 ] == '__new__' :
4841+ fields .pop ()
4842+ c_basename = "_" .join (fields )
4843+ if not is_legal_py_identifier (full_name ):
4844+ fail (f"Illegal function name: { full_name !r} " )
4845+ if not is_legal_c_identifier (c_basename ):
4846+ fail (f"Illegal C basename: { c_basename !r} " )
4847+ return full_name , c_basename
4848+
48434849 def state_modulename_name (self , line : str ) -> None :
48444850 # looking for declaration, which establishes the leftmost column
48454851 # line should be
@@ -4862,15 +4868,10 @@ def state_modulename_name(self, line: str) -> None:
48624868
48634869 # are we cloning?
48644870 before , equals , existing = line .rpartition ('=' )
4865- c_basename : str | None
48664871 if equals :
4867- full_name , _ , c_basename = before .partition (' as ' )
4868- full_name = full_name .strip ()
4869- c_basename = c_basename .strip ()
4872+ full_name , c_basename = self .parse_names (before )
48704873 existing = existing .strip ()
4871- if (is_legal_py_identifier (full_name ) and
4872- (not c_basename or is_legal_c_identifier (c_basename )) and
4873- is_legal_py_identifier (existing )):
4874+ if is_legal_py_identifier (existing ):
48744875 # we're cloning!
48754876 fields = [x .strip () for x in existing .split ('.' )]
48764877 function_name = fields .pop ()
@@ -4915,15 +4916,7 @@ def state_modulename_name(self, line: str) -> None:
49154916
49164917 line , _ , returns = line .partition ('->' )
49174918 returns = returns .strip ()
4918-
4919- full_name , _ , c_basename = line .partition (' as ' )
4920- full_name = full_name .strip ()
4921- c_basename = c_basename .strip () or None
4922-
4923- if not is_legal_py_identifier (full_name ):
4924- fail (f"Illegal function name: { full_name !r} " )
4925- if c_basename and not is_legal_c_identifier (c_basename ):
4926- fail (f"Illegal C basename: { c_basename !r} " )
4919+ full_name , c_basename = self .parse_names (line )
49274920
49284921 return_converter = None
49294922 if returns :
0 commit comments