diff options
| -rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py | 9 | ||||
| -rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py | 9 |
2 files changed, 15 insertions, 3 deletions
diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py index 6fc8ff1b3..d07c8d8c6 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py @@ -182,9 +182,12 @@ def create_signature(props, key): # empty signatures string return if isinstance(props["multi"], list): - # multi sig: call recursively - return list(create_signature(elem, key) - for elem in props["multi"]) + # multi sig: call recursively. + # PYSIDE-2846: Fold duplicate signatures away + res = list(set(list(create_signature(elem, key) + for elem in props["multi"]))) + return res if len(res) > 1 else res[0] + if type(key) is tuple: _, modifier = key else: diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py index f3cf6ed51..896afe0f9 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/parser.py @@ -410,6 +410,11 @@ def handle_retvar(obj): return _handle_generic(obj, typing.List) +class Hashabledict(dict): + def __hash__(self): + return hash(frozenset(self)) + + def calculate_props(line): parsed = SimpleNamespace(**_parse_line(line.strip())) arglist = parsed.arglist @@ -426,6 +431,10 @@ def calculate_props(line): annotations[name] = _resolve_type(ann, line, 0, handle_argvar, parsed.funcname) if len(tup) == 3: default = _resolve_value(tup[2], ann, line) + # PYSIDE-2846: When creating signatures, the defaults should be hashable. + # For that to work, we use `Hashabledict`. + if type(default) is dict: + default = Hashabledict(default) _defaults.append(default) defaults = tuple(_defaults) returntype = parsed.returntype |
