Commit c1a68363 authored by Alexander Belopolsky's avatar Alexander Belopolsky

Issue #10193: Simplified instrospection used by turtle module

parent 7424dd35
......@@ -109,6 +109,7 @@ import types
import math
import time
import os
import inspect
from os.path import isfile, split, join
from copy import deepcopy
......@@ -3889,31 +3890,35 @@ except:
def getmethparlist(ob):
"Get strings describing the arguments for the given object"
argText1 = argText2 = ""
"""Get strings describing the arguments for the given object
Returns a pair of strings representing function parameter lists
including parenthesis. The first string is suitable for use in
function definition and the second is suitable for use in function
call. The "self" parameter is not included.
"""
defText = callText = ""
# bit of a hack for methods - turn it into a function
# but we drop the "self" param.
# Try and build one for Python defined functions
argOffset = 1
counter = ob.__code__.co_argcount
items2 = list(ob.__code__.co_varnames[argOffset:counter])
realArgs = ob.__code__.co_varnames[argOffset:counter]
args, varargs, varkw = inspect.getargs(ob.__code__)
items2 = args[1:]
realArgs = args[1:]
defaults = ob.__defaults__ or []
defaults = list(map(lambda name: "=%s" % repr(name), defaults))
defaults = ["=%r" % (value,) for value in defaults]
defaults = [""] * (len(realArgs)-len(defaults)) + defaults
items1 = list(map(lambda arg, dflt: arg+dflt, realArgs, defaults))
if ob.__code__.co_flags & 0x4:
items1.append("*"+ob.__code__.co_varnames[counter])
items2.append("*"+ob.__code__.co_varnames[counter])
counter += 1
if ob.__code__.co_flags & 0x8:
items1.append("**"+ob.__code__.co_varnames[counter])
items2.append("**"+ob.__code__.co_varnames[counter])
argText1 = ", ".join(items1)
argText1 = "(%s)" % argText1
argText2 = ", ".join(items2)
argText2 = "(%s)" % argText2
return argText1, argText2
items1 = [arg + dflt for arg, dflt in zip(realArgs, defaults)]
if varargs is not None:
items1.append("*" + varargs)
items2.append("*" + varargs)
if varkw is not None:
items1.append("**" + varkw)
items2.append("**" + varkw)
defText = ", ".join(items1)
defText = "(%s)" % defText
callText = ", ".join(items2)
callText = "(%s)" % callText
return defText, callText
def _turtle_docrevise(docstr):
"""To reduce docstrings from RawTurtle class for functions
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment