aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2011-05-02 17:43:45 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:15:21 -0300
commitb191b8829474d410e7b27768073514b6057a3789 (patch)
treed67a693fc5cc21d608b6822f2ccfa94eba9a1b13 /libshiboken
parenta17cc449472dd51d0be83a26d70244bb59d4bc88 (diff)
Fixed enum repr, print functions.
fixes bug #654. Reviewer: Lauro Moura <lauro.neto@openbossa.org> Hugo Parente <hugo.lima@openbossa.org>
Diffstat (limited to 'libshiboken')
-rw-r--r--libshiboken/sbkenum.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/libshiboken/sbkenum.cpp b/libshiboken/sbkenum.cpp
index 5ae95ad75..804f4480e 100644
--- a/libshiboken/sbkenum.cpp
+++ b/libshiboken/sbkenum.cpp
@@ -36,23 +36,23 @@ struct SbkEnumObject
PyObject* ob_name;
};
-#define SBKENUMOBJECT_REPR_STRING "<enum-item %s.%s (%ld)>"
-
static PyObject* SbkEnumObject_repr(PyObject* self)
{
- return PyString_FromFormat(SBKENUMOBJECT_REPR_STRING,
- self->ob_type->tp_name,
- PyString_AS_STRING(((SbkEnumObject*)self)->ob_name),
- ((SbkEnumObject*)self)->ob_ival);
+ PyObject* enumName = ((SbkEnumObject*)self)->ob_name;
+ if (enumName)
+ return PyString_FromFormat("%s.%s", self->ob_type->tp_name, PyString_AS_STRING(enumName));
+ else
+ return PyString_FromFormat("%s(%ld)", self->ob_type->tp_name, ((SbkEnumObject*)self)->ob_ival);
}
static int SbkEnumObject_print(PyObject* self, FILE* fp, int)
{
Py_BEGIN_ALLOW_THREADS
- fprintf(fp, SBKENUMOBJECT_REPR_STRING,
- self->ob_type->tp_name,
- PyString_AS_STRING(((SbkEnumObject*)self)->ob_name),
- ((SbkEnumObject*)self)->ob_ival);
+ PyObject* enumName = ((SbkEnumObject*)self)->ob_name;
+ if (enumName)
+ fprintf(fp, "%s.%s", self->ob_type->tp_name, PyString_AS_STRING(enumName));
+ else
+ fprintf(fp, "%s(%ld)", self->ob_type->tp_name, ((SbkEnumObject*)self)->ob_ival);
Py_END_ALLOW_THREADS
return 0;
}
@@ -73,6 +73,13 @@ static PyObject* SbkEnum_tp_new(PyTypeObject* type, PyObject* args, PyObject* kw
if (!self)
return 0;
self->ob_ival = itemValue;
+ PyObject* item = Shiboken::Enum::getEnumItemFromValue(type, itemValue);
+ if (item) {
+ self->ob_name = SbkEnumObject_name(item, 0);
+ Py_XDECREF(item);
+ } else {
+ self->ob_name = 0;
+ }
return reinterpret_cast<PyObject*>(self);
}
@@ -175,15 +182,13 @@ PyObject* newItem(PyTypeObject* enumType, long itemValue, const char* itemName)
return reinterpret_cast<PyObject*>(enumObj);
newValue = false;
- if (!enumObj)
- itemName = "#out of bounds#";
}
enumObj = PyObject_New(SbkEnumObject, enumType);
if (!enumObj)
return 0;
- enumObj->ob_name = PyString_FromString(itemName);
+ enumObj->ob_name = itemName ? PyString_FromString(itemName) : 0;
enumObj->ob_ival = itemValue;
if (newValue) {