[PySide] Invalid cast
John Cummings
jcummings2 at users.sf.net
Fri Jun 8 20:09:49 CEST 2012
I'm not sure what to do with this knowledge nor I am precisely sure of the
issue. I was hoping others on the list would know the code better than I.
While finding the cause of what became issue PYSIDE-80 (shiboken cannot handle
"extern" variables in a namespace), I came across an invalid cast of a TypeEntry
to a PrimitiveTypeEntry. Other than this one case, all casts of a TypeEntry to a
PrimitiveTypeEntry are preceded by a call to TypeEntry::isPrimitive.
In ShibokenGenerator::converterObject, checks are done on the type. However, the
logic is slightly flawed. The code goes as follows:
1. Is it a CppPrimitive? If yes, then return the conversion. Otherwise continue.
Note that this check does call TypeEntry::isPrimitive but only to make sure the
object is not a CppPrimitive.
2. Is it a wrapper or enum or flag? Yes, then return the conversion. Otherwise
continue.
3. Assume it is a primitive type and cast it appropriately
The problem is, you really need to check TypeEntry::isPrimitive() before doing
that cast. I'm just not sure what to return if it comes back false. I also
struggle because it appears that all my test cases that led to the invalid cast
are manifestations of PYSIDE-80.
I'd be glad to submit a patch via gerrit if I new the correct conversion string
to return.
John Cummings
More information about the PySide
mailing list