@@ -3951,28 +3951,33 @@ def getmethparlist(ob):
39513951    function definition and the second is suitable for use in function 
39523952    call.  The "self" parameter is not included. 
39533953    """ 
3954-     defText  =  callText   =   "" 
3954+     orig_sig  =  inspect . signature ( ob ) 
39553955    # bit of a hack for methods - turn it into a function 
39563956    # but we drop the "self" param. 
39573957    # Try and build one for Python defined functions 
3958-     args , varargs , varkw  =  inspect .getargs (ob .__code__ )
3959-     items2  =  args [1 :]
3960-     realArgs  =  args [1 :]
3961-     defaults  =  ob .__defaults__  or  []
3962-     defaults  =  ["=%r"  %  (value ,) for  value  in  defaults ]
3963-     defaults  =  ["" ] *  (len (realArgs )- len (defaults )) +  defaults 
3964-     items1  =  [arg  +  dflt  for  arg , dflt  in  zip (realArgs , defaults )]
3965-     if  varargs  is  not None :
3966-         items1 .append ("*"  +  varargs )
3967-         items2 .append ("*"  +  varargs )
3968-     if  varkw  is  not None :
3969-         items1 .append ("**"  +  varkw )
3970-         items2 .append ("**"  +  varkw )
3971-     defText  =  ", " .join (items1 )
3972-     defText  =  "(%s)"  %  defText 
3973-     callText  =  ", " .join (items2 )
3974-     callText  =  "(%s)"  %  callText 
3975-     return  defText , callText 
3958+     func_sig  =  orig_sig .replace (
3959+         parameters = list (orig_sig .parameters .values ())[1 :],
3960+     )
3961+ 
3962+     call_args  =  []
3963+     for  param  in  func_sig .parameters .values ():
3964+         match  param .kind :
3965+             case  (
3966+                 inspect .Parameter .POSITIONAL_ONLY 
3967+                 |  inspect .Parameter .POSITIONAL_OR_KEYWORD 
3968+             ):
3969+                 call_args .append (param .name )
3970+             case  inspect .Parameter .VAR_POSITIONAL :
3971+                 call_args .append (f'*{ param .name }  )
3972+             case  inspect .Parameter .KEYWORD_ONLY :
3973+                 call_args .append (f'{ param .name } { param .name }  )
3974+             case  inspect .Parameter .VAR_KEYWORD :
3975+                 call_args .append (f'**{ param .name }  )
3976+             case  _:
3977+                 raise  RuntimeError ('Unsupported parameter kind' , param .kind )
3978+     call_text  =  f'({ ', ' .join (call_args )}  
3979+ 
3980+     return  str (func_sig ), call_text 
39763981
39773982def  _turtle_docrevise (docstr ):
39783983    """To reduce docstrings from RawTurtle class for functions 
0 commit comments