Description
The implementation of C++ types in shiboken has some issues that block adding more advanced types:
Complexity, duplicated types
- Several types represent a C++ type: TypeInfo (Codemodel), TypeParser::Info (done. removed), AddedFunction::TypeInfo. In addition, the code-model related types are eventually used to populate AbstractMetaType
- Parsing of type code snippets happens in several places
- abstractmetabuilder.cpp:64 parseTemplateType() for AddedFunction
- AbstractMetaBuilder::translateType (reparses TypeInfo::toString() back into TypeInfo to normalize signatures, apparently)
- AddedFunction::TypeInfo::fromSignature() for reading XML, handles only limited subset
- ShibokenGenerator::buildAbstractMetaTypeFromString()
Representation of const
TypeInfo, AbstractMetaType only have isConstant(), which is true for const int *
which technically (and in Clang representation) is not const, (the pointee is). It is thus not possible to differentiate from const int *const or int *const which is truly const. This causes subtle issues:
- Some signatures for querying the function documentation do not match (doc generator)
- No setters are generated for field types like const QWidget * (QStyleOptionViewItem)
- Patterns for matching rejections and modifications are a bit strange ( bool volatile* instead of volatile bool *)
Plans
A lot of needed information is readily available from Clang. So, introducing a type which represents all the information from Clang would be useful
One issue to consider is that doc-generation (namely the creation of XQueries for the WebXML doc extraction from function signatures) requires using unresolved typedefs (GLEnum instead of unsigned).
Attachments
Issue Links
- relates to
-
PYSIDE-304 PySide does not make setters for fields that are a variable pointer to a constant value
- Closed
-
PYSIDE-725 Shiboken should support creating bindings for explicit instantiations of template classes
- Closed
- resulted from
-
PYSIDE-363 Fix documentation generation
- Closed