aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/generator/shiboken2
Commit message (Collapse)AuthorAgeFilesLines
* Improve the QByteArray implementationBoxiang Sun2018-06-011-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* PEP 384-squash: Implement PEP 384Christian Tismer2018-05-302-250/+213
| | | | | | | | | | 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>
* ShibokenGenerator::buildAbstractMetaTypeFromString(): Handle QFlagsFriedemann Kleint2018-05-141-3/+23
| | | | | | | | | | | | | | | | | | | | The function would fail for a QFlags type defined in a dependent typesystem file with errors like: Can't write the C++ to Python conversion function for container type 'QPair': Could not find type '::QFlags<QAccessible::RelationFlag>' for use in 'toPython' conversion. for example caused by QAccessibleWidget::relation() where the flag is defined in class QAccessible in QtGui. The underlying reason is that there is no type entry for the class QFlags. To work around this, detect it by looking at the instantiated types and create a flags type accordingly. Task-number: PYSIDE-487 Change-Id: Ib3c962aeedf8deb1a6b11976bd91316d39738310 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Improve error handling when writing type conversion functionsFriedemann Kleint2018-05-142-22/+48
| | | | | | | | | | Add an errorMessage parameter to ShibokenGenerator::buildAbstractMetaTypeFromString() and output the message in ShibokenGenerator::replaceConverterTypeSystemVariable(). Change-Id: I249778b3efe89c265590a7d4977cf2a4e76063f9 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Change license from all the filesCristian Maureira-Fredes2018-05-038-8/+8
| | | | | | | | | | | | | | | | | 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>
* Rename PySide references to Qt for PythonCristian Maureira-Fredes2018-04-278-8/+8
| | | | | | | | | 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>
* Check default superclass when getting baseClassesCristian Maureira-Fredes2018-04-191-1/+7
| | | | | | | | | | | | | | | | | | | | | | | Reimplementing a class must respect the closest base class instead of falling back to QObject. By adding a default-superclass argument one can verify that field first when shiboken is getting the base classes. This problem was found by reimplementing QGraphicsObject including methods from one of its parent classes, QGraphicsItem. With this change, the generated wrapper will list all the base classes in `Sbk_QGraphicsObject_Type_bases` leaving QObject at the end, because if not, it will match inmediately. A test case was included. This change doesn't affect other existing tests. Task-number: PYSIDE-86 Change-Id: I6b9a220497b12c8085302a502f8581cc2d3fb11b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* shiboken: Use enum values from ClangFriedemann Kleint2018-04-191-1/+1
| | | | | | | | | | | | | | Remove a lot of ugly value parsing code in favor of clang_getEnumConstantDeclValue() and clang_getEnumConstantDeclUnsignedValue() depending on the type. Introduce a class EnumValue containing a union of qint64 and quint64 values to represent signed/unsigned values correctly and use that in the code model and meta language classes. Change-Id: If2efb7cfd560237907678b8f6fdfb0bc689c0c93 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* shiboken: Detect class enums by Clang entirelyFriedemann Kleint2018-04-191-4/+4
| | | | | | | | | | | | | | The Clang function clang_EnumDecl_isScoped() tells whether an enum is a class, so, there is no need to specify that in the typesystem. Use that information to pass it up to the metalang classes and revert the parts of 44cb6c51e6c3b43376f284941454dc8c13b81c3f that added it to the type system. Task-number: PYSIDE-487 Change-Id: Ie10885f74168821d0307e91b6f1f7f3f30dd074b Reviewed-by: Christian Tismer <tismer@stackless.com> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* shiboken: Reformat helpFriedemann Kleint2018-04-191-4/+8
| | | | | | | | | Print option descriptions indented by 8 below the option instead of beside the option at column 38 and add some newlines to avoid wrapping. Change-Id: I63295a40aaac588f761c5964b68dbaff8d013c95 Reviewed-by: Christian Tismer <tismer@stackless.com>
* shiboken: Rename Generator::fileNamePrefix() to fileNameSuffix()Friedemann Kleint2018-03-214-8/+8
| | | | | | Change-Id: If7464f643fca74aa06099ca4b9905b34bd077193 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Type system: Add attribute indicating C++ 11 enum classesFriedemann Kleint2018-02-281-6/+23
| | | | | | | | | | | | | 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>
* shiboken: Fully qualify enum valuesFriedemann Kleint2018-02-263-71/+115
| | | | | | | | | | | | | | When using C++11 enum classes, enum values need to be fully qualified. Add the enum name where the values are written and handle it in the various resolve() functions. Split out ShibokenGenerator::guessScopeForDefaultFlagsValue() from ShibokenGenerator::guessScopeForDefaultValue() for clarity. Task-number: PYSIDE-487 Change-Id: Idf8d627ab88111ad67734bee8b4d130ef53e038d Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> Reviewed-by: Christian Tismer <tismer@stackless.com>
* shiboken: Fix generated initialization code for enum classesFriedemann Kleint2018-02-261-1/+2
| | | | | | | | | | Wrap value in int(), which is required for enum classes. Add a compile test to libsample. Task-number: PYSIDE-487 Change-Id: I78f07ae66da64caad1f75722308256e40e91eded Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Shiboken: Handle private abstract methodsFriedemann Kleint2018-01-192-4/+6
| | | | | | | | | Remove the exclusion. Required for Qt3dExtras::QAbstractCameraController::moveCamera() in 5.10. Task-number: PYSIDE-487 Change-Id: I67ae24d4cda2d90ac30c97f77457c2eaf65099ab Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Handle QObject-derived arguments correctly in constructor overloadCristian Maureira-Fredes2018-01-181-1/+1
| | | | | | | | | | | | | Shiboken generated conditions to select which constructor overload needed to be used in an unexpected order. These conditions were incorrect, and hence produced an error. Handling QObjects in the inheritance relationship process solved the issue. Task-number: PYSIDE-203 Change-Id: Iee3a8c8fe48671cd752cc0e3d92b740c823656ad Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* shiboken: replace first()/last() by constFirst/constLast()Friedemann Kleint2018-01-173-43/+42
| | | | | | | | Fix clazy warnings about possibly detaching containers. Change-Id: I3c3a229de5e0c71f17c1f26273e1b0be3b0d7e81 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* shiboken: Fix some clazy warningsFriedemann Kleint2018-01-173-25/+16
| | | | | | | | | | | | - Mixing const/non-const iterators - Do not use operator[] on temporaries of type QVector - Remove unused nontrivial variables - Add Q_FALLTHROUGH() - Potential detach in range-based for Change-Id: I89391fdda616f119eadd7de529eb6cee69343f85 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Merge remote-tracking branch 'origin/5.6' into 5.9Friedemann Kleint2017-12-211-1/+1
|\ | | | | | | Change-Id: I78039827d32c1d4d540a8b1b2afd4841e40d5c2c
| * Unify signature registry for py2 / py3 and clean upChristian Tismer2017-12-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It turned out that there are tiny differences between Python2 and Python3 which make the versions of the registry almost, but not totally equal. There are functions which are slot wrappers in Python2 instead of method wrappers in Python3, and we currently don't support slot wrappers. There are other tiny differences when we switch to Qt 5.9, too. Initially, I thought to split the files for Python2 and Python3, but then it turned out that the problems vanish when we ignore the 'next' and '__next__' functions in both python versions. The filter function is both applied to the generating function and the testing function. Therefore we can keep the existing data intact. I further removed an indentation leftover in cppgenerator.cpp, fixed handling of duplicate entries and improved modularisation of the signature enumerator and formatter. This part will later be moved into the signature library. Task-number: PYSIDE-510 Change-Id: I18f5e8f08fb9b07534003919abe55ab4dafeb2c2 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Refactor typesystem modification structsFriedemann Kleint2017-12-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | - Use member initialization where possible - Make constructors explicit - Remove unused version attributes, unused comparison operators of FunctionModification and unused struct ExpensePolicy - Rearrange members to minimize Clang warnings about padding Change-Id: I1423f120b2117237c2674cdbb6d06923c842999f Reviewed-by: Christian Tismer <tismer@stackless.com>
* | shiboken: Generate override instead of virtualFriedemann Kleint2017-12-051-11/+8
| | | | | | | | | | Change-Id: Ifcbabe09665c33daf5dd8d5df52036598c9f428f Reviewed-by: Christian Tismer <tismer@stackless.com>
* | shiboken: Do not generate wrappers for final classesFriedemann Kleint2017-12-041-1/+3
| | | | | | | | | | | | | | Check the attributes and add test. Change-Id: I6c3d76ed32b5d20b6940849dd4895f98abd62fca Reviewed-by: Christian Tismer <tismer@stackless.com>
* | shiboken: Do not generate wrapper methods for final C++ methodsFriedemann Kleint2017-12-022-4/+7
| | | | | | | | | | | | | | | | | | This will result in a compilation error (overriding final method). Final methods appear in Qt3DInput::QMouse/QKeyboardDevice. Task-number: PYSIDE-487 Change-Id: I6eb300c91327c587b6bfe530fdafb519817171c4 Reviewed-by: Christian Tismer <tismer@stackless.com>
* | Merge remote-tracking branch 'origin/5.6' into 5.9Friedemann Kleint2017-11-271-2/+2
|\| | | | | | | Change-Id: I79637555fbfbd596dee4313baf80149d03bb5206
| * shiboken: Do not generate richcompare methods for namespacesFriedemann Kleint2017-11-241-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | shiboken used to generate richcompare methods for namespaces when it contained free comparison operators for classes in that namespace, resulting in compile errors. For example: namespace Qt3DRender { bool operator!=(const QGraphicsApiFilter &reference, const QGraphicsApiFilter &sample) ... Add a check preventing that. Task-number: PYSIDE-487 Change-Id: If2fa1de1bfb0fdc11c9415421dab0c7e13abc500 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Merge remote-tracking branch 'origin/5.6' into 5.9Friedemann Kleint2017-11-062-24/+1
|\| | | | | | | Change-Id: I72583df407fc5b3caa8bf35fd997889a4ac86512
| * Remove dead / unused code regarding conversionsAlexandru Croitor2017-11-022-21/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's a lot of code that was previously used for doing conversions between C++ / Python types (apparently relying on extensive RTTI / typeid manipulations), which got superseded by a cleaner templated approach. The old code was left behind, and there were a few instances where it was still used even though it wasn't needed, like in QtScript typesystem XML and shiboken's enum handling. Remove the old code, apply the small changes needed to make it work with new the code. This is cleanup to reduce the confusion regarding conversion behavior, and also preparation for a proper implementation of handling "void*" types. Change-Id: I8f16bb31436f9a677bb2d64c7197c4375005b656 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* | Merge remote-tracking branch 'origin/5.6' into 5.9Friedemann Kleint2017-10-271-7/+24
|\| | | | | | | Change-Id: I94cb5a7dab97cff3591bac534228bfd3e3ad5938
| * Support the qApp macro correctly, final version incl. debugChristian Tismer2017-10-271-7/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For short the new features: - there is a qApp in QtCore, QtGui and QtWidgets for compatibility, and also in __builtins__ for a true macro-like experience. - if you delete any qApp variable, the Q*Application is reset and you can start over. Long description: There is a qApp macro in Qt5 which is equivalent to Q*Application.instance() . Python does not have macros. Both PyQt5 and PySide2 have an according structure in QtWidgets. In the case of PySide2, the qApp variable is first initialized to None and later to QApplication(). This does not reflect the original sense of the qApp macro, because - it only handles QApplication, - it does not handle destruction. This "macro" should live in QtCore, but both PyQt5 and PySide2 decided to put this in QtWidgets. As a compromize, I propose to put qApp into all three modules, and into __builtins__ as well, so wherever you create an application, you find this "macro" in place. While changing the code, I stumbled over the template set_qapp_parent_for_orphan. I tried to make sense out of it and finally removed it. There were no side effects but bug PYSIDE-85 is gone, now. With some extra effort, I created a singleton qApp that changes itself. This way, a true macro was simulated. Note that this was not possible with a garbage collected variable, and I had to make shiboken aware of this. As the final optimization, I turned qApp also into a fuse variable: Delete any qApp variable and Q*Application will finish when there is no extra reference. Task-number: PYSIDE-85 Task-number: PYSIDE-571 Change-Id: I7a56b19858f63349c98b95778759a6a6de856938 Reviewed-by: Christian Tismer <tismer@stackless.com>
* | Signature: Remove pre 5.7 parts, fix coding styleFriedemann Kleint2017-09-291-15/+4
| | | | | | | | | | | | | | | | Complements 30a1c9c41e5e6d4166f171b9477c6f46cafa782f. Task-number: PYSIDE-510 Change-Id: I76e433dc35dbe88dbf254b19b82b8c392af0dad4 Reviewed-by: Christian Tismer <tismer@stackless.com>
* | Merge remote-tracking branch 'origin/5.6' into 5.9Friedemann Kleint2017-09-284-13/+118
|\| | | | | | | Change-Id: I47521e21977b1f17fcc65590f565270b2440a48b
| * Signature: support the new types and constants of 5.9 part 2Christian Tismer2017-09-281-13/+2
| | | | | | | | | | | | | | | | | | This patch reduces the string size a bit to meet the MSVC restriction to 16k only. This limit is reached by QtGui/qopenglfunctions_wrapper.cpp . Task-number: PYSIDE-510 Change-Id: Ibb4a9103775cb308a0f39b3375c4948da6016189 Reviewed-by: Christian Tismer <tismer@stackless.com>
| * Implement introspection with __signature__ packageChristian Tismer2017-09-204-13/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The signature module was turned into a package under 'PySide2/support/signature'. The package is completely isolated so that nothing is leaking into the normal import machinery. The package is also not initialized unless a __signature__ attribute is accessed. The only change to Python during a PySide run is the existence of the __signature__ attribute. As a side effect, all tests run at the same speed as before this extension. The module does not actively import PySide modules. Instead, it inspects sys.modules and reloads its mapping.py if needed. Example usage: >>> PySide2.QtWidgets.QGraphicsAnchorLayout.addAnchors.__signature__ >>> PySide2.QtWidgets.QGraphicsAnchorLayout.__signature__ The module has been thoroughly tested on macOS. I consider this ready. Task-number: PYSIDE-510 Change-Id: Ibb231a7fbb4ccc1a7249df55e3881a4e21a19c0d Reviewed-by: Christian Tismer <tismer@stackless.com>
* | Refactor ShibokenGenerator::initPrimitiveTypesCorrespondences()Friedemann Kleint2017-08-291-23/+21
| | | | | | | | | | | | | | Introduce arrays for the types. Change-Id: Iccafc6a9c648dc32db0445ab1dd43f91bfd5c146 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | shiboken: Output argument index in warning about unsupported parameterFriedemann Kleint2017-08-241-7/+12
| | | | | | | | | | | | | | It makes it easier to generate modification tags by script. Change-Id: I3d256371974e05eee336eaac3541029078ea2cc5 Reviewed-by: Christian Tismer <tismer@stackless.com>
* | Shiboken2: Suppress warning for parameters modified by <array>Friedemann Kleint2017-08-221-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | Add a check to checkTypeViability(), suppressing the warnings like There's no user provided way (conversion rule, argument removal, custom code, etc) to handle the primitive argument type 'const unsigned int *' in function 'QOpenGLShaderProgram::setUniformValueArray(const char * name, const unsigned int * values, int count)'. when the type was modified to be an array. Task-number: PYSIDE-354 Task-number: PYSIDE-516 Change-Id: Id5fa4789024cc82533d15a61b893a3f60baa4bff Reviewed-by: Christian Tismer <tismer@stackless.com>
* | libshiboken: Add Array convertersFriedemann Kleint2017-08-032-5/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a SbkArrayConverter struct which provides a list of check functions that return a converter function for an array of matching size. Add simple array converters for arrays of C++ primitive types. Instances of the ArrayHandle<>, Array2Handle<> templates will be generated which may point to internal data or allocated arrays. Task-number: PYSIDE-354 Task-number: PYSIDE-516 Change-Id: I157606891fad345ccd7af6d4a9d4dcb0c634b2f4 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Shiboken: No longer change arrays[] to pointer typesFriedemann Kleint2017-08-031-2/+6
| | | | | | | | | | | | | | | | | | | | In AbstractMetaBuilder, no longer change array types like "int[]" to "int*". Task-number: PYSIDE-354 Task-number: PYSIDE-516 Change-Id: Ia9e15ae3fca895bf179275eb31a94323d91f4941 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | shiboken: Further refactor command line arguments and helpFriedemann Kleint2017-06-093-18/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace the QMap of options returned by the generators by a vector of pairs to allow for specifying the order. This allows for better formatting -I/-F/-T in multiple lines. Add -h for help. Move the missing typelib file handling into main and print a help hint there. Change-Id: I5a95bd8d193be012aaa7ce3934945b25e21d3f79 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* | Merge remote-tracking branch 'origin/5.6' into 5.9Friedemann Kleint2017-06-092-18/+32
|\| | | | | | | Change-Id: I73f39966a2af7aa935e1890e29c9b71573aae97c
| * Fix missing headers in PySide custom buildChristian Tismer2017-06-092-18/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PySide itself built fine after the additional includes were added for inheritance. But when a smaller project is built, suddenly header files are not found, because the inherited names are not expected by the deployment. Therefore, we do no longer add more includes, but insert recursive headers for the few relevant cases. So the includes become a little longer, but the names of the include files are those as before the enhanced inheritance. Task-number: PYSIDE-500 Change-Id: Iab456307a3c2365dfe1964dbe222b7d0efac7878 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
| * move everying into sources/shiboken2Oswald Buddenhagen2017-05-229-0/+11180
| | | | | | in preparation for a subtree merge. this should not be necessary to do in a separate commit, but git is a tad stupid about following history correctly without it.
* Remove AbstractMetaFunction::invalid()Friedemann Kleint2017-05-291-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change AbstractMetaBuilderPrivate::traverseFunction() to consistently return 0 if something does not fit. Previously, functions with half-parsed arguments with the invalid flag set were returned. This caused strange side effects since the flag was not checked in all places. The only relevant information is whether some constructors were rejected. In that case, no default constructors or default copy constructors should be generated. This is now determined by checking the code model function item; the attribute HasRejectConstructor is introduced for this. This fixes: - Make it possible to reject the QTextStreamManipulator constructor taking a function pointer without having a default constructor generated: typedef void (QTextStream::*QTSMFI)(int); QTextStreamManipulator(QTSMFI m, int a) Q_DECL_NOTHROW - Implement QtCharts whose class QAbstractSeries has a rejected constructor. Change-Id: I6310574ba677dac20699f257340d2c2a55674353 Reviewed-by: Christian Tismer <tismer@stackless.com>
* move everying into sources/shiboken2 (5.9 edition)Oswald Buddenhagen2017-05-229-0/+11328
in preparation for a subtree merge. this should not be necessary to do in a separate commit, but git is a tad stupid about following history correctly without it.