aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/pyside6/PySide6/QtCore/typesystem_core_common.xml20
-rw-r--r--sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml2
-rw-r--r--sources/pyside6/PySide6/QtNetwork/typesystem_network.xml2
-rw-r--r--sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py34
-rw-r--r--sources/shiboken6/tests/samplebinding/typesystem_sample.xml6
5 files changed, 38 insertions, 26 deletions
diff --git a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
index 427d78998..2374055e2 100644
--- a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
+++ b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
@@ -1514,7 +1514,7 @@
<modify-function signature="^to.*\(.*QStringView.*$" remove="all"/>
</value-type>
<value-type name="QBitArray">
- <add-function signature="__len__">
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="beginning" file="../glue/qtcore.cpp" snippet="qbitarray-len"/>
</add-function>
<add-function signature="__getitem__">
@@ -1634,7 +1634,7 @@
<value-type name="QModelRoleDataSpan">
<modify-function signature="dataForRole(int)const" remove="all"/>
- <add-function signature="__len__">
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="beginning" file="../glue/qtcore.cpp"
snippet="qmodelroledataspan-len"/>
</add-function>
@@ -2014,7 +2014,7 @@
<modify-function signature="operator+(QByteArray,const char*)" remove="all"/>
<modify-function signature="operator+(const char*,QByteArray)" remove="all"/>
<modify-function signature="operator+(QByteArray,const char*)" remove="all"/>
- <add-function signature="operator+(PyBytes,QByteArray)">
+ <add-function signature="operator+(PyBytes,QByteArray)" return-type="QByteArray">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorplus-1"/>
</add-function>
<add-function signature="operator+(PyByteArray, QByteArray)" return-type="QByteArray">
@@ -2026,22 +2026,22 @@
<add-function signature="operator+=(PyByteArray)" return-type="QByteArray">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorplusequal"/>
</add-function>
- <add-function signature="operator==(PyUnicode)">
+ <add-function signature="operator==(PyUnicode)" return-type="bool">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorequalequal"/>
</add-function>
- <add-function signature="operator!=(PyUnicode)">
+ <add-function signature="operator!=(PyUnicode)" return-type="bool">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatornotequal"/>
</add-function>
- <add-function signature="operator&gt;(PyUnicode)">
+ <add-function signature="operator&gt;(PyUnicode)" return-type="bool">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorgreater"/>
</add-function>
- <add-function signature="operator&gt;=(PyUnicode)">
+ <add-function signature="operator&gt;=(PyUnicode)" return-type="bool">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorgreaterequal"/>
</add-function>
- <add-function signature="operator&lt;(PyUnicode)">
+ <add-function signature="operator&lt;(PyUnicode)" return-type="bool">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorlower"/>
</add-function>
- <add-function signature="operator&lt;=(PyUnicode)">
+ <add-function signature="operator&lt;=(PyUnicode)" return-type="bool">
<inject-code file="../glue/qtcore.cpp" snippet="qbytearray-operatorlowerequal"/>
</add-function>
<!-- ### -->
@@ -2206,7 +2206,7 @@
<add-function signature="__str__" return-type="str">
<inject-code class="target" position="beginning" file="../glue/qtcore.cpp" snippet="qbytearray-str"/>
</add-function>
- <add-function signature="__len__">
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="beginning" file="../glue/qtcore.cpp" snippet="qbytearray-len"/>
</add-function>
<add-function signature="__getitem__">
diff --git a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml
index 63ec8877a..39ecaf291 100644
--- a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml
+++ b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml
@@ -384,7 +384,7 @@
</value-type>
<value-type name="QRegion" >
<enum-type name="RegionType"/>
- <add-function signature="__len__">
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="beginning" file="../glue/qtgui.cpp" snippet="qregion-len"/>
</add-function>
<add-function signature="__getitem__">
diff --git a/sources/pyside6/PySide6/QtNetwork/typesystem_network.xml b/sources/pyside6/PySide6/QtNetwork/typesystem_network.xml
index c1cb999c2..7d8cda24f 100644
--- a/sources/pyside6/PySide6/QtNetwork/typesystem_network.xml
+++ b/sources/pyside6/PySide6/QtNetwork/typesystem_network.xml
@@ -297,7 +297,7 @@
</value-type>
<value-type name="QIPv6Address">
- <add-function signature="__len__">
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="beginning" file="../glue/qtnetwork.cpp" snippet="qipv6address-len"/>
</add-function>
<add-function signature="__getitem__">
diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py
index 49bc952c8..65f52bde6 100644
--- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py
+++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/layout.py
@@ -258,9 +258,25 @@ def sort_by_inheritance(signatures):
return signatures
-def _remove_ambiguous_signatures_body(signatures):
+def best_to_remove(signatures, idx1, idx2, name=None):
+ # Both have identical annotation.
+ sig1 = signatures[idx1]
+ sig2 = signatures[idx2]
+ ra1 = sig1.return_annotation
+ ra2 = sig2.return_annotation
+ # Both have equal return annotation.
+ if ra1 == ra2:
+ for p1, p2 in zip(sig1.parameters.values(), sig2.parameters.values()):
+ # Use the first with a default.
+ if p1.default is not _empty or p2.default is not _empty:
+ return idx1 if p1.default is not _empty else idx2
+ # Use the one with a return annotation.
+ return idx1 if ra1 is not None else idx2
+
+
+def _remove_ambiguous_signatures_body(signatures, name=None):
# By the sorting of signatures, duplicates will always be adjacent.
- last_ann = last_sig = None
+ last_ann = None
last_idx = -1
to_delete = []
found = False
@@ -270,14 +286,8 @@ def _remove_ambiguous_signatures_body(signatures):
annos.append(param.annotation)
if annos == last_ann:
found = True
- if sig.return_annotation is last_sig.return_annotation:
- # we can use any duplicate
- to_delete.append(idx)
- else:
- # delete the one which has non-empty result
- to_delete.append(idx if not sig.return_annotation else last_idx)
+ to_delete.append(best_to_remove(signatures, idx, last_idx, name))
last_ann = annos
- last_sig = sig
last_idx = idx
if not found:
@@ -296,7 +306,7 @@ def is_inconsistent_overload(signatures):
return count != 0 and count != len(signatures)
-def remove_ambiguous_signatures(signatures):
+def remove_ambiguous_signatures(signatures, name=None):
# This may run more than once because of indexing.
found, new_sigs = _remove_ambiguous_signatures_body(signatures)
while found:
@@ -313,10 +323,12 @@ def create_signature(props, key):
return
if isinstance(props["multi"], list):
# multi sig: call recursively.
+ # For debugging: Print the name!
+ # name = props["multi"][0]["fullname"]
res = list(create_signature(elem, key) for elem in props["multi"])
# PYSIDE-2846: Sort multi-signatures by inheritance in order to avoid shadowing.
res = sort_by_inheritance(res)
- res = remove_ambiguous_signatures(res)
+ res = remove_ambiguous_signatures(res, name=None)
return res if len(res) > 1 else res[0]
if type(key) is tuple:
diff --git a/sources/shiboken6/tests/samplebinding/typesystem_sample.xml b/sources/shiboken6/tests/samplebinding/typesystem_sample.xml
index 4ef2a5218..9a164e00d 100644
--- a/sources/shiboken6/tests/samplebinding/typesystem_sample.xml
+++ b/sources/shiboken6/tests/samplebinding/typesystem_sample.xml
@@ -2034,7 +2034,7 @@
%PYARG_0 = Shiboken::String::fromCString(%CPPSELF.cstring());
</inject-code>
</add-function>
- <add-function signature="__len__" >
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="end">
return %CPPSELF.size();
</inject-code>
@@ -2194,7 +2194,7 @@
</inject-code>
</add-function>
- <add-function signature="__len__">
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="beginning">
return %CPPSELF.size();
</inject-code>
@@ -2216,7 +2216,7 @@
<value-type name="StrList">
<enum-type name="CtorEnum"/>
- <add-function signature="__len__" >
+ <add-function signature="__len__" return-type="int">
<inject-code class="target" position="end">
return %CPPSELF.size();
</inject-code>