diff options
| author | Christian Tismer <tismer@stackless.com> | 2024-09-11 18:45:28 +0200 |
|---|---|---|
| committer | Christian Tismer <tismer@stackless.com> | 2024-09-12 05:29:12 +0200 |
| commit | db7671bf763a57968e707b9892feaa5806873a05 (patch) | |
| tree | 1c8b75953f6d64535657776a07c325cae3f08a80 | |
| parent | 407cc58614a822c46b4ac5c18d15a28cd17b633f (diff) | |
type hints: Remove duplicate multi-signature entries
Multi-arity signatures are codes as lists of signatures.
For quite a while, it was hard to check these lists
efficiently for duplications.
This is now easily possible after the defaults were made
hash-able. It turned out that some defaults were dicts.
A number of more rigorous fixes to signatures will follow.
Errors before: 333
Errors after: 294
Task-number: PYSIDE-2846
Change-Id: Ic51341663f4e44d7df76c3e27992ab10d940af5d
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
| -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 |
