[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/libs/kross/python
From: Sebastian Sauer <mail () dipe ! org>
Date: 2006-12-08 8:53:48
Message-ID: 1165568028.810637.12184.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 611457 by sebsauer:
Check if it's really a PythonExtension and throw an err if not rather then crashing
M +31 -21 pythonvariant.cpp
--- trunk/koffice/libs/kross/python/pythonvariant.cpp #611456:611457
@@ -119,10 +119,17 @@
QVariant PythonType<QVariant>::toVariant(const Py::Object& obj)
{
- if(obj == Py::None())
+ if(obj == Py::None()) {
+ #ifdef KROSS_PYTHON_VARIANT_DEBUG
+ krossdebug( QString("PythonType<QVariant>::toVariant Py::None") );
+ #endif
return QVariant();
+ }
PyTypeObject *type = (PyTypeObject*) obj.type().ptr();
+ #ifdef KROSS_PYTHON_VARIANT_DEBUG
+ krossdebug( QString("PythonType<QVariant>::toVariant \
type=%1").arg(type->tp_name) ); + #endif
if(type == &PyInt_Type)
return PythonType<int>::toVariant(obj);
@@ -132,10 +139,8 @@
return PythonType<double>::toVariant(obj);
if(type == &PyBool_Type)
return PythonType<bool>::toVariant(obj);
-
if(PyType_IsSubtype(type,&PyString_Type))
return PythonType<QString>::toVariant(obj);
-
if(type == &PyTuple_Type)
return PythonType<QVariantList,Py::Tuple>::toVariant(Py::Tuple(obj));
if(type == &PyList_Type)
@@ -143,30 +148,35 @@
if(type == &PyDict_Type)
return PythonType<QVariantMap,Py::Dict>::toVariant(Py::Dict(obj.ptr()));
- if(obj.isInstance()) {
- #ifdef KROSS_PYTHON_VARIANT_DEBUG
+ #ifdef KROSS_PYTHON_VARIANT_DEBUG
+ if(obj.isInstance()) {
krossdebug( QString("PythonType<QVariant>::toVariant IsInstance=TRUE") \
);
- #endif
- //return new PythonType(object);
- }
+ //return new PythonType(object);
+ }
+ #endif
- Py::ExtensionObject<PythonExtension> extobj(obj);
- PythonExtension* extension = extobj.extensionObject();
- if(! extension) {
+ if(PythonExtension::check(obj.ptr())) {
+ Py::ExtensionObject<PythonExtension> extobj(obj);
+ PythonExtension* extension = extobj.extensionObject();
+ if(! extension) {
+ #ifdef KROSS_PYTHON_VARIANT_DEBUG
+ krosswarning( QString("PythonType<QVariant>::toVariant Failed to \
determinate PythonExtension for object=%1").arg(obj.as_string().c_str()) ); + \
#endif + throw Py::RuntimeError( QString("Failed to determinate \
PythonExtension object.").toLatin1().constData() ); + }
+
+ const QVariant variant = qVariantFromValue( extension->object() );
#ifdef KROSS_PYTHON_VARIANT_DEBUG
- krosswarning( QString("PythonType<QVariant>::toVariant Failed to \
determinate PythonExtension for object=%1").arg(obj.as_string().c_str()) ); + \
if(extension->object()) + krossdebug( \
QString("PythonType<QVariant>::toVariant KrossObject.objectName=%1 \
KrossObject.className=%2 QVariant.toString=%3 \
QVariant.typeName=%4").arg(extension->object()->objectName()).arg(extension->object()->metaObject()->className()).arg(variant.toString()).arg(variant.typeName()) \
); + else
+ krossdebug( QString("PythonType<QVariant>::toVariant The \
PythonExtension object does not have a valid QObject") ); #endif
- throw Py::RuntimeError( QString("Failed to determinate PythonExtension \
object.").toLatin1().constData() ); + return variant;
}
- const QVariant variant = qVariantFromValue( extension->object() );
- #ifdef KROSS_PYTHON_VARIANT_DEBUG
- if(extension->object())
- krossdebug( QString("PythonType<QVariant>::toVariant \
KrossObject.objectName=%1 KrossObject.className=%2 QVariant.toString=%3 \
QVariant.typeName=%4").arg(extension->object()->objectName()).arg(extension->object()->metaObject()->className()).arg(variant.toString()).arg(variant.typeName()) \
);
- else
- krossdebug( QString("PythonType<QVariant>::toVariant The PythonExtension \
object does not have a valid QObject") );
- #endif
- return variant;
+ throw Py::RuntimeError( QString("Invalid object of type \
'%1'.").arg(type->tp_name).toLatin1().constData() ); + return QVariant();
}
MetaType* PythonMetaTypeFactory::create(const char* typeName, const Py::Object& \
object)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic