diff options
author | Renato Filho <renato.filho@openbossa.org> | 2011-05-02 17:43:45 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:15:21 -0300 |
commit | b191b8829474d410e7b27768073514b6057a3789 (patch) | |
tree | d67a693fc5cc21d608b6822f2ccfa94eba9a1b13 /libshiboken | |
parent | a17cc449472dd51d0be83a26d70244bb59d4bc88 (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.cpp | 31 |
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) { |