| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| | |
Change-Id: Ie346fe7d7ac85ce0b82806904044680713375bf0
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Even though we are certain of the comparison,
better to get rid of the warnings.
Change-Id: Iafa51b4c59c2315b24fc9092d18792f0c9297553
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The extraction of exists_{platf}_{version}_ci.py has been done
by editing the testresults of COIN test by hand.
Since the beginning of the year, this has become tedious, because
COIN now surrounds everything with time stamps.
This script scans the whole website and extracts all such files.
Creation of the generated python pages becomes really easy now.
The initial scan takes below 30 minutes.
Then it will only parse new URLs.
Task-number: PYSIDE-510
Change-Id: I1273f8a77596ced16c7a3653c89736c3e1796540
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|\|
| |
| |
| | |
Change-Id: Ie8025300580981c5349b31d4846a7f659481991d
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Using the size() method for that purpose can be expensive for standard
containers.
Task-number: PYSIDE-727
Change-Id: I0da34e271503384a741d856fff5e84fee67bc97f
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The operators cause compiler warnings about multiple versions and
missing return types. Replace them by a reset() method (modeled after
std::unique_ptr, QScopedPointer).
This implies some changes in the templates.
Change-Id: I21a8fb9b84ecdfecf9671fa113f1bb3c6483166f
Reviewed-by: Christian Tismer <tismer@stackless.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Add override
- Use = default for trivial constructors/destructors
- Delete copy and move constructors/assignment and move assignment
operators where not needed
- Use member initialization and remove constructors from simple structs
- Use explicit where applicable
Change-Id: Id293dd0008b05243e665347f12fd1dee3b1b70f7
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Remove else after return/continue/break; unindent code
or simplify return conditions
- Fix C-style casts
- Comment out unused parameter
Change-Id: Iea1106023829658cd1ce005fa02d0c8940504dfd
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|\|
| |
| |
| | |
Change-Id: I302543eef74bc1f3dc6340cdfab7510a66ea1b6a
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The signature module is an extension that generates full
introspection as a PySide feature. It is documented
in detail to make it usable and extensible for other developers.
Special care was taken about the interaction with the rest of
the project, related code that is based upon this module, and
the interaction with the COIN module.
Task-number: PYSIDE-510
Change-Id: I7b3052da71a6fe3bd6d9cb8cc47443cdf976d3b0
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
After the signature module has been around for quite a while,
there is no longer a reason to leave it optional.
At the same time, we set the minimum Python 3 version to 3.5 .
Some comments are reworked as well, but nothing real changed.
Task-number: PYSIDE-510
Change-Id: I9e960f390d507d24bb45f7028838755fe23e751d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|\|
| |
| |
| | |
Change-Id: Ide71a89ef173d6f3e1fa6960f7b15f1fd6cc1bf1
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The Python Limited API brings certain restrictions to PySide.
This document contains an overview and all relevant changes.
Furthermore, there are appendices which show how the
type transformation of the extended types was done
and how it was verified..
Task-number: PYSIDE-768
Change-Id: Ifd6fd3740c23deaed65cce1ba12f17e5f093f18f
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When types have attributes starting with two underscores but
ending with at most one, Python uses name mangling to create
a unique private variable.
PySide needs to obey this rule in the tp_getattro methods.
We implemented it as an optimized _Pep_PrivateMangle function that
solves the problem internally without exposing the _Py_Mangle
function.
Remark: I think the exclusion of the _Py_Mangle function is another
oversight in the Limited API.
Task-number: PYSIDE-772
Change-Id: I0bfc2418dae439e963a16e37443f2099c6980696
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It has been a problem to compile the file "typespec.*" when using
Python 2. For some reason, the name "slot" was not usable.
I cannot find out what it was and how it vanished, but now I could
remove the work-around without problems. Maybe it is due to some
different includes which don't define some macros?
Change-Id: If316c9c78a18cffcc5e4cac07610bd7f522db446
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Avoid potential clashes of Qt's "slots" macro when using
compilers that support the push_macro pragmas.
Change-Id: I33aaa7f4e11cb235344f3bfecd08b9d5ce434227
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|\|
| |
| |
| | |
Change-Id: I5dd997d995feae2ddf207eb213fb08233dece77c
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some formatting was not ok, some ordering of methods
was not perfect, some code vanished, bufferprocs had a bad
filename, and descrobject.h did not need a patch, anymore
since things were solved in signature.cpp .
Task-number: PYSIDE-560
Change-Id: Ibd1bedf0763ebb3fbbfd33a8e7cff4b5af6fab5e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Change the ref count map to a unordered_multimap and the remaining
lists to vectors.
A linked std::list is not suitable for the lists
used in libshiboken.
Task-number: PYSIDE-727
Change-Id: Ibd65486a58cf43ac66b981bea65597df5a732b63
Reviewed-by: Christian Tismer <tismer@stackless.com>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
|/
|
|
|
|
|
|
|
|
|
| |
Avoid repeated invocation of container.end() in the loop condition
by either assigning to a variable or use range-based-for where
possible.
Use auto for iterators to allow for changing the container type.
Task-number: PYSIDE-727
Change-Id: I5217207a3a7fb60823ccbcbf0915bf6cf21a3e4d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
While trying to document the Limited API Project,
it suddenly struck me:
We can make the patch much much simpler and implement it
without the necessity to have an extra PepType!
Now I am happy to continue the documentation, because
it is now no more improvable.
This version will last as long as the layout of
PyTypeObject does not change substantially. When that
happens, then we need to rewrite stuff with the according
PyType_GetSlot() access functions.
These access functions will until then be complete enough
so that we can live without the tricks like inventing a reduced
PyTypeObject as was done in the current implementation.
Task-number: PYSIDE-560
Change-Id: I49849cc377baa6794a5b53292691e21d6e2853ab
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
| |
Task-number: PYSIDE-727
Change-Id: Ia79f34ed466eb7652946e49db6ef6db8dd9fa03d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When Python 3.7 appeared, the structure of pystate.h was changed,
substantially. Unfortunately this structure contains the trashcan
code, which is only available as a macro and not part of the limited API.
This code is normally not used by application programs.
It prevents crashes when chains of millions of objects are deallocated.
I disabled this for now when the limited API is active.
As soon as somebody complains about crashes, I will try to implement
it again in a safe way, but I am not sure if it is worth it in the first place.
Task-number: PYSIDE-737
Change-Id: Id0daf391448ddcb9df3d299f859ef024714fa736
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Certain Python files were no longer used when moved to Python 3.7.0 .
To finish that, these files are now also removed from the source.
As a consequence, qt-attribution files needed to be changed.
I took the chance to also update the license files to the new version.
Change-Id: If058d1013f1d8cb937ee0305a5eb21ae2ebdd4e0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When the homebrew version of Python 3.7 appeared so unforeseen
early, I felt inclined to fix these glitches, immediately:
In Python 3.7, the typing module was more changed than expected.
Since we don't support versions below 3.5, it was easy to fix by
avoiding to copy typing.py for version 3.x, altogether. It stays there
for Python 2.7 .
Furthermore, the Python issue 33738 will later be solved than the
code expected, so I fixed that one for all by a macro definition.
Task-number: PYSIDE-741
Change-Id: Ia56ccd1ef20cb9536b1d39f190e011e5dccf1f22
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Py_TPFLAGS_DEFAULT in Python 3 has the
Py_TPFLAGS_HAVE_VERSION_TAG flag, which causes
the type attribute cache in _PyType_Lookup. According to
the Shiboken implementation for Python 2, this is not we expected.
So remove the Py_TPFLAGS_HAVE_VERSION_TAG flag from
Py_TPFLAGS_DEFAULT in Python 3.
Task-number: PYSIDE-60
Change-Id: Id731a59b65640eb5adea56fe06e0deb58ac4a168
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
After the fix for PYSIDE-441,
another issue appeared related to QVariants and PySequences
PYSIDE-641, which was related due to the nature of this
python data type.
The problem had the same root cause,
using PySequences assuming they are always finite,
but not including the case of a class implementing
the __getitem__ method without a length.
The fix for PYSIDE-441 did not include the option
of having incomplete PySequences, so this change
add an extra condition to transfer the ownership
of a incomplete PySequence element.
Task-number: PYSIDE-671
Change-Id: I72ed1f5ea51c0c5b5a40ec51ab850732eea3c3b9
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PySide has successfully been tested with the Python 3.7 branch.
There will be no change in the areas that are important for us.
It is then safe to bump the supported version and the limited API version
checks to fully include Python 3.7.
The macro errors in the limited API was fixed by a pull request, but it
was too late to get it into 3.7rc1.
The error workaround was therefore extracted into pep384_issue33738.cpp
and will be deactivated later.
Change-Id: Iec3f277b02cac03a5cf44cbcf955ddc690c112e5
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently we transform QVariant arguments to internal
types, starting from the Python ones, to others
related to shiboken.
After checking if the current object is a PyDict
we proceed to check if it's a PySequence.
PySequence is the complementary 'sequence-like' type of PyDict,
and allows finite and infinite sequences,
like lists or generators.
The problem is that when one implements a class
which includes the __getitem__ method, Python already
thinks that it correspond to a PySequence, then
we try to get the elements to transform into
a QList<QVariant> but it fails at the first attempt.
The solution was to not assume that all PySequences
have finite length (or a length), and also to have
a fallback case similarly to the PyDict treatment,
wrapping the PyObject as a QVariant.
Task-number: PYSIDE-641
Change-Id: I3b755f47ed076147024de38e5e0a86932d981f88
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
The functions which were named Pep384XXX were renamed
in order to get "PepType" as a function-like macro that suggests
the similarity between "PyTypeObject" and "PepTypeObject".
But the renaming of the module initialization function was not
intended.
Change-Id: I555633ccbd8e1354c27f2c1957c81905be54d86b
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
By lots of editing, somehow an expression in voidptr.cpp
became incomplete.
We should improve the current test to be certain that the
VoidPtr is working.
This problem can be avoided by not doing many type
casts at once.
Doing the same in two steps is much safer because a forgotten
call would give a compile time error.
Task-number: PYSIDE-560
Change-Id: Ibb24a27f439cbda490723131f34f93978725420f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The available constructors for QByteArray are now:
bytes, bytearray, and QByteArray, unicode is not
accepted anymore.
Also the concatenation is now possible between QByteArrays.
Even though is not possible to initialize a QByteArray
with an unicode, we include the possibility to compare it with
one (Compatibility with PyQt).
The __repr__ and __str__ are now properly working.
There seemed to be a confusion regarding data types between
Shiboken, Python2 and Python3 related to bytes,
so now the structure is based on the flag SBK_BYTES_NAME,
which is define as "bytes" for Python3 and "str" for Python2.
Many tests were modified to properly handle string,
using the `py3kcompat` module.
Task-number: PYSIDE-232
Change-Id: I8b671f367c60a0870c72dcbe5662106b3225037d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If `unicode` is used in Python 2,
shiboken cannot properly translate it to `const char *`.
sbkstring did not supported a proper conversion of unicode
types in Python2, and this change includes it.
Task-number: PYSIDE-100
Change-Id: I3a70d935ad61b0e567e620c62754800370270a6b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
This is the condensed checkin of 18 commits which created
the implementation of PEP 384.
Task-number: PYSIDE-560
Change-Id: I834c659af4c2b55b268f8e8dc4cfa53f02502409
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Python 3 uses PyLong for integer manipulation,
and since it is a valid type in Python 2 we can
use it instead to have better compatibility,
and avoid integer overflows.
We keep the PyInt entry to avoid breaking
other sections of the code when this type is required.
Added a couple of PyInt_* alias to use PyLong_* ones
instead.
Task-number: PYSIDE-648
Change-Id: Id6af66050c5ab81fc51c1c07b1c9422a954b81c0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Removing the word 'project' from all the headers,
and changing the PySide reference from the examples
to Qt for Python:
The following line was used inside the source/ and
build_scripts/ directory:
for i in $(grep -r "the Qt for Python project" * |grep -v "pyside2-tools" | awk '{print $1}' | sed 's/:.*//g');do sed -i 's/the\ Qt\ for\ Python\ project/Qt\ for\ Python/g' $i;done
and the following line was used inside the examples/ directory:
for i in $(grep -r "of the PySide" * |grep -v "pyside2-tools" | awk '{print $1}' | sed 's/:.*//g');do sed -i 's/of\ the\ PySide/of\ the\ Qt\ for\ Python/g' $i;done
Change-Id: Ic480714686ad62ac4d81c670f87f1c2033d4ffa1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
| |
When referring to the project one should use "Qt for Python"
and for the module "PySide2"
Change-Id: I36497df245c9f6dd60d6e160e2fc805e48cefcae
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When building PySide with a debug Python, a lot more problems
become visible.
They were triggered by some malicious ordering of the shutdown code,
which must come *after* the refcounts of the variables are adjusted.
The initial issue PYSIDE-585 was caused because the shutdown code
is not only used for every created Q*Application, but also for the
module shutdown, which deletes qApp_contents too often.
Instead of special-casing that or adding some refcount, it was much
more intuitive in that context to set qApp_content's refcount to the
same value as Py_None, which also is not supposed to be garbage
collected.
Btw., the reason for the error message is that Py_None has it, too.
When we set qApp_content's type to Py_None's type, it inherits
the protection code that prevents someone from garbage collecting
Py_None.
Task-number: PYSIDE-585
Change-Id: I4af9de1192730f06054a5aca099a32e2392e367d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a class inherits from two base classes,
Shiboken sets the converter of the newly created
SbkObject to 0 (SbkObjectTypeTpNew), and handle
the multiple inheritance in a different way.
When any SbkObject try to release its ownership,
it first verify if the ownership is already on the C++ side
by checking the attribute hasOwership and also
if the converter is a ValueType.
The later fails if the converter is null,
so a default value (false) was added.
A test case using deleteLater() was included,
which uses the releaseOwnership method internally.
Task-number: PYSIDE-11
Change-Id: I34fba0d3e5d28b99b49a183ed08e977a311da632
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are two borrowed references in the code,
so we need to manually increase the refcount.
Usually the PyEval_GetBuiltins and PyModule_GetDict
functions are used locally, so there is no real need
of taking care of the refcounts, but since we are using
it globally, and adjusting the refcount by ourselves,
it was necessary to add the missing references by hand.
Task-number: PYSIDE-585
Change-Id: Icc1e7719a6b5d3654d12ab37cd509a096821d7a6
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Introduce enumeration for the type to EnumTypeEntry which can be specified
by the boolean "class" attribute. For the enum classes, the value names
need to be qualified by the enum name to match the C++ API.
For the C++ generator, add an overload to
Shiboken::createScopedEnumItem() that takes a PyTypeObject and add the enum
items to the enum so that the name is in the enum scope.
Change-Id: Ia0e469d13b08c196b9ddd965b9cf3cc62a38630b
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|\
| |
| |
| | |
Change-Id: I5d1a4734e8f44785898ba62beaa0bdd2004fca22
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This change makes sure to resolve symlinks and copy only one file for
every dynamic shared library used (vs 3 before -> 2 symlinks + 1
actual library). This avoids duplicate files, as well as saves space
when creating wheel (e.g. no 3 copies of standalone WebEngine
library).
This filtering happens copying from CMake install dir into
pyside_package_dir (the symlinks are still present in the CMake
dir, but that shouldn't harm anybody, and might be useful for
users of shiboken only for example).
Task-number: PYSIDE-495
Change-Id: I0fe454e16c6b254a8682aa7b1c702ec01a3064f0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I777970f7bb17db766660d82556559eadd7293355
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The signature extension is a feature that can switch itself off, using the
expression
PY_VERSION_HEX >= 0x03040000 || \
(PY_VERSION_HEX < 0x03000000 && PY_VERSION_HEX >= 0x02070000)
Unfortunately, the use of this constant when disabled became inconsistent
over time.
This patch corrects that and also adds a cosmetic improvement that was lost.
Task-number: PYSIDE-510
Change-Id: Id1653c391d921a2c51008db2bc222d6f4bec9e90
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Remove apparently unused/deprecated code.
Change-Id: I566014bafdcbf0b3b46e9dc836c451c64d409511
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Looking at PYSIDE-441 there was an issue regarding overloading
the __getitem__ method on a class that inherits from QObject.
The bug report showed that setting an object of the same
class to be the parent of another object of the same class
ended up causing an infinite loop when trying to get the parent
element.
Overloading __getitem__ implicitly converts the class
into an iterator, and the developer *must* include a proper
implementation of the method which raises a StopIteration exception
when needed.
Commonly, people that overload this method included access
to class data structures where in most of the cases
an IndexError is raised which forces the iteration
to stop.
Since the bug report did not include this code
and also there was no access to any internal variable,
no exception was raised and ended up causing an infinite loop.
This can be replicated in python as folows:
class A(object):
def __getitem__(self, arg=None):
print("getitem called:", arg)
#raise StopIteration
a = A()
print(list(a))
This small fix avoids the infinite loop when the method __len__
is not implemented (length = -1) or when the length of the pyObj
is zero.
Without a proper implementation of __getitem__ (Raising IndexError
or StopIteration) the infinite loop will happen.
If __len__ is not implemented, then the application
will complain, but does not matter since this is never
checked during the iteration.
Change-Id: I74e7bf1755c265dbc309bb6c5a760f11643fd7ed
Task-number: PYSIDE-441
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Clear the Python error on failure. Note that PyErr_Occurred() is not
set for some reason in that case.
Task-number: PYSIDE-580
Change-Id: I5672b9f5bf98e3d409abb4132f2face060826a0a
Reviewed-by: Christian Tismer <tismer@stackless.com>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I79637555fbfbd596dee4313baf80149d03bb5206
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Lately, the RHEL platform tends to segfault between 0-4 times
in a test run.
I suspect that is related to some finalization code that is triggered
at a special time, due to a stressy situation. But we don't know
until we ask the CI system by printing a stack trace.
This patch prints a stack dump after a segfault happened.
The dump is only activated when the environment setting
QTEST_ENVIRONMENT=ci
is true. (The above needs to be compared with strcmp or strstr)
Note that the tests _are not isolated_. I recognized that by the warnings
module that leaked between tests. The processes are shared, unless
you have setup and teardown functions.
There might for instance be some hidden refcount bug that triggers
only early enough in a stress situation.
Change-Id: Ibbc592e7bdcbdd3cdbc06f203be3e5fc1daaf774
Reviewed-by: Christian Tismer <tismer@stackless.com>
|