aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-08-18 23:10:24 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:17:12 -0300
commitb9dba4ed938302740b4ea7ea2d4824518077444e (patch)
tree85ed5412307447e9c03e713bfc4b742f188ea98d
parente5fb8ee50dbcb0eab68260efe95c985ddc979e00 (diff)
Creates type registers for enums in createScopedEnum and createGlobalEnum.
Instead of generating the register code.
-rw-r--r--generator/cppgenerator.cpp4
-rw-r--r--libshiboken/sbkenum.cpp36
2 files changed, 17 insertions, 23 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index 6ca6c4775..216d32367 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -178,10 +178,6 @@ void CppGenerator::writeRegisterType(QTextStream& s, const AbstractMetaEnum* met
} else {
fullName = metaEnum->name();
}
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<int>(\"" << fullName << "\");\n";
- if (!shortName.isEmpty())
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<int>(\"" << shortName << "\");\n";
-
}
void CppGenerator::writeToPythonFunction(QTextStream& s, const AbstractMetaClass* metaClass)
diff --git a/libshiboken/sbkenum.cpp b/libshiboken/sbkenum.cpp
index e05f5cdad..0c4a9b663 100644
--- a/libshiboken/sbkenum.cpp
+++ b/libshiboken/sbkenum.cpp
@@ -27,6 +27,7 @@
#include <list>
#include "sbkdbg.h"
#include "autodecref.h"
+#include "typeresolver.h"
extern "C"
{
@@ -176,7 +177,7 @@ PyObject* getEnumItemFromValue(PyTypeObject* enumType, long itemValue)
return 0;
}
-static PyTypeObject* createEnum(const char* fullName, const char* cppName, PyTypeObject* flagsType)
+static PyTypeObject* createEnum(const char* fullName, const char* cppName, const char* shortName, PyTypeObject* flagsType)
{
PyTypeObject* enumType = newTypeWithName(fullName, cppName);
if (flagsType) {
@@ -186,34 +187,31 @@ static PyTypeObject* createEnum(const char* fullName, const char* cppName, PyTyp
}
if (PyType_Ready(enumType) < 0)
return 0;
+ Shiboken::TypeResolver::createValueTypeResolver<int>(cppName);
+ if (shortName)
+ Shiboken::TypeResolver::createValueTypeResolver<int>(shortName);
return enumType;
}
PyTypeObject* createGlobalEnum(PyObject* module, const char* name, const char* fullName, const char* cppName, PyTypeObject* flagsType)
{
- PyTypeObject* enumType = createEnum(fullName, cppName, flagsType);
- if (enumType) {
- if (PyModule_AddObject(module, name, (PyObject*)enumType) < 0)
- return 0;
- }
- if (flagsType) {
- if (PyModule_AddObject(module, flagsType->tp_name, (PyObject*)flagsType) < 0)
- return 0;
- }
+ PyTypeObject* enumType = createEnum(fullName, cppName, name, flagsType);
+ Shiboken::TypeResolver::createValueTypeResolver<int>("Qt::WindowType");
+ Shiboken::TypeResolver::createValueTypeResolver<int>("WindowType");
+ if (enumType && PyModule_AddObject(module, name, (PyObject*)enumType) < 0)
+ return 0;
+ if (flagsType && PyModule_AddObject(module, flagsType->tp_name, (PyObject*)flagsType) < 0)
+ return 0;
return enumType;
}
PyTypeObject* createScopedEnum(SbkObjectType* scope, const char* name, const char* fullName, const char* cppName, PyTypeObject* flagsType)
{
- PyTypeObject* enumType = createEnum(fullName, cppName, flagsType);
- if (enumType) {
- if (PyDict_SetItemString(scope->super.ht_type.tp_dict, name, (PyObject*)enumType) < 0)
- return 0;
- }
- if (flagsType) {
- if (PyDict_SetItemString(scope->super.ht_type.tp_dict, flagsType->tp_name, (PyObject*)flagsType) < 0)
- return 0;
- }
+ PyTypeObject* enumType = createEnum(fullName, cppName, name, flagsType);
+ if (enumType && PyDict_SetItemString(scope->super.ht_type.tp_dict, name, (PyObject*)enumType) < 0)
+ return 0;
+ if (flagsType && PyDict_SetItemString(scope->super.ht_type.tp_dict, flagsType->tp_name, (PyObject*)flagsType) < 0)
+ return 0;
return enumType;
}