diff options
author | Renato Araujo Oliveira Filho <renato.araujo@kdab.com> | 2019-02-18 14:43:41 -0300 |
---|---|---|
committer | Renato Araujo Oliveira Filho <renato.araujo@kdab.com> | 2019-02-26 18:02:21 +0000 |
commit | 2dd12f480d35194eaa2c97638cf972a09803c68a (patch) | |
tree | b3eca28cdd9aaf496bc4a925d38e101839d94b14 /sources/shiboken2/tests/smartbinding/typesystem_smart.xml | |
parent | c6c1a3e099a8139137d6ef133d1d399ba1ee38bd (diff) |
Fix conversions of list of smart pointers to python
While converting smart pointers do not initialize the object with
default/minimal constructor.
Change-Id: Ie9400d8487accc0c90b0f0b31b855038ae698b5c
Task-Id: PYSIDE-947
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/shiboken2/tests/smartbinding/typesystem_smart.xml')
-rw-r--r-- | sources/shiboken2/tests/smartbinding/typesystem_smart.xml | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sources/shiboken2/tests/smartbinding/typesystem_smart.xml b/sources/shiboken2/tests/smartbinding/typesystem_smart.xml index b2deb18cb..aea1c2f73 100644 --- a/sources/shiboken2/tests/smartbinding/typesystem_smart.xml +++ b/sources/shiboken2/tests/smartbinding/typesystem_smart.xml @@ -5,6 +5,36 @@ <primitive-type name="float" /> <primitive-type name="bool" /> + <template name="cpplist_to_pylist_convertion"> + PyObject *%out = PyList_New(int(%in.size())); + int idx = 0; + for (const auto &cppItem : %in) + PyList_SET_ITEM(%out, idx++, %CONVERTTOPYTHON[%INTYPE_0](cppItem)); + return %out; + </template> + <template name="pyseq_to_cpplist_convertion"> + Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0)); + for (int i = 0, size = PySequence_Fast_GET_SIZE(seq.object()); i < size; ++i) { + PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), i); + %OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem); + %out.push_back(cppItem); + } + </template> + <container-type name="std::vector" type="list"> + <include file-name="list" location="global"/> + <conversion-rule> + <native-to-target> + <insert-template name="cpplist_to_pylist_convertion"/> + </native-to-target> + <target-to-native> + <add-conversion type="PySequence"> + <insert-template name="pyseq_to_cpplist_convertion"/> + </add-conversion> + </target-to-native> + </conversion-rule> + </container-type> + + <!-- Used in tests to check what C++ objects are allocated. --> <object-type name="Registry" /> |