aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/PySide2/support/signature/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'sources/pyside2/PySide2/support/signature/parser.py')
-rw-r--r--sources/pyside2/PySide2/support/signature/parser.py39
1 files changed, 20 insertions, 19 deletions
diff --git a/sources/pyside2/PySide2/support/signature/parser.py b/sources/pyside2/PySide2/support/signature/parser.py
index 0224095b5..0b81dba54 100644
--- a/sources/pyside2/PySide2/support/signature/parser.py
+++ b/sources/pyside2/PySide2/support/signature/parser.py
@@ -117,45 +117,46 @@ def _parse_line(line):
ret["multi"] = int(multi)
return ret
-def _resolve_number(thing):
+def make_good_value(thing, valtype):
try:
+ if thing.endswith("()"):
+ thing = 'Default("{}")'.format(thing[:-2])
+ else:
+ ret = eval(thing, namespace)
+ if valtype and repr(ret).startswith("<"):
+ thing = 'Instance("{}")'.format(thing)
return eval(thing, namespace)
- except Exception:
- return None
+ except (SyntaxError, TypeError, NameError):
+ pass
def try_to_guess(thing, valtype):
- res = _resolve_number(thing)
- if res is not None:
- return res
if "." not in thing and "(" not in thing:
text = "{}.{}".format(valtype, thing)
- try:
- return eval(text, namespace)
- except Exception:
- pass
+ ret = make_good_value(text, valtype)
+ if ret is not None:
+ return ret
typewords = valtype.split(".")
valwords = thing.split(".")
- braceless = valwords[0]
+ braceless = valwords[0] # Yes, not -1. Relevant is the overlapped word.
if "(" in braceless:
braceless = braceless[:braceless.index("(")]
for idx, w in enumerate(typewords):
if w == braceless:
text = ".".join(typewords[:idx] + valwords)
- try:
- return eval(text, namespace)
- except Exception:
- pass
+ ret = make_good_value(text, valtype)
+ if ret is not None:
+ return ret
return None
def _resolve_value(thing, valtype, line):
+ if thing in ("0", "None") and valtype:
+ thing = "zero({})".format(valtype)
if thing in type_map:
return type_map[thing]
- try:
- res = eval(thing, namespace)
+ res = make_good_value(thing, valtype)
+ if res is not None:
type_map[thing] = res
return res
- except Exception:
- pass
res = try_to_guess(thing, valtype) if valtype else None
if res is not None:
type_map[thing] = res