diff options
Diffstat (limited to 'plugins/pychrysalide/analysis/types/basic.c')
-rw-r--r-- | plugins/pychrysalide/analysis/types/basic.c | 97 |
1 files changed, 29 insertions, 68 deletions
diff --git a/plugins/pychrysalide/analysis/types/basic.c b/plugins/pychrysalide/analysis/types/basic.c index e421389..539bcad 100644 --- a/plugins/pychrysalide/analysis/types/basic.c +++ b/plugins/pychrysalide/analysis/types/basic.c @@ -32,6 +32,7 @@ #include <analysis/types/basic.h> +#include "constants.h" #include "../type.h" #include "../../access.h" #include "../../helpers.h" @@ -42,10 +43,7 @@ static PyObject *py_basic_type_new(PyTypeObject *, PyObject *, PyObject *); /* Fournit le type de base géré par le type. */ -static PyObject *py_basic_type_get_base_type(PyObject *, void *); - -/* Définit les constantes pour les types de base. */ -static bool py_basic_type_define_constants(PyTypeObject *); +static PyObject *py_basic_type_get_base(PyObject *, void *); @@ -66,11 +64,22 @@ static bool py_basic_type_define_constants(PyTypeObject *); static PyObject *py_basic_type_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyObject *result; /* Instance à retourner */ - unsigned long base; /* Type de base à créer */ + BaseType base; /* Type de base à créer */ int ret; /* Bilan de lecture des args. */ GDataType *dtype; /* Version GLib du type */ - ret = PyArg_ParseTuple(args, "k", &base); +#define BASIC_TYPE_DOC \ + "The BasicType class handles all the primary types of data, such as" \ + " integers, characters or floating numbers.\n" \ + "\n" \ + "Instances can be created using the following constructor:\n" \ + "\n" \ + " BasicType(base)" \ + "\n" \ + "Where *base* is one of the pychrysalide.analysis.types.BasicType.BaseType" \ + " values, except *BaseType.INVALID*." + + ret = PyArg_ParseTuple(args, "O&", convert_to_basic_type_base_type, &base); if (!ret) return NULL; if (base >= BTP_INVALID) @@ -101,17 +110,25 @@ static PyObject *py_basic_type_new(PyTypeObject *type, PyObject *args, PyObject * * ******************************************************************************/ -static PyObject *py_basic_type_get_base_type(PyObject *self, void *closure) +static PyObject *py_basic_type_get_base(PyObject *self, void *closure) { PyObject *result; /* Résultat à retourner */ GBasicType *type; /* Version GLib du type */ BaseType base; /* Type de base à renvoyer */ +#define BASIC_TYPE_BASE_ATTRIB PYTHON_GET_DEF_FULL \ +( \ + base, py_basic_type, \ + "Provide the internal identifier of the basic type.\n" \ + "\n" \ + "This property provides a pychrysalide.analysis.BaseType value." \ +) + type = G_BASIC_TYPE(pygobject_get(self)); - base = g_basic_type_get_base_type(type); + base = g_basic_type_get_base(type); - result = PyLong_FromUnsignedLong(base); + result = cast_with_constants_group_from_type(get_python_basic_type_type(), "BaseType", base); return result; @@ -137,10 +154,7 @@ PyTypeObject *get_python_basic_type_type(void) }; static PyGetSetDef py_basic_type_getseters[] = { - { - "base", py_basic_type_get_base_type, NULL, - "Provide the internal identifier of the basic type.", NULL - }, + BASIC_TYPE_BASE_ATTRIB, { NULL } }; @@ -153,7 +167,7 @@ PyTypeObject *get_python_basic_type_type(void) .tp_flags = Py_TPFLAGS_DEFAULT, - .tp_doc = "PyChrysalide basic type", + .tp_doc = BASIC_TYPE_DOC, .tp_methods = py_basic_type_methods, .tp_getset = py_basic_type_getseters, @@ -168,59 +182,6 @@ PyTypeObject *get_python_basic_type_type(void) /****************************************************************************** * * -* Paramètres : obj_type = type dont le dictionnaire est à compléter. * -* * -* Description : Définit les constantes pour les types de base. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static bool py_basic_type_define_constants(PyTypeObject *obj_type) -{ - bool result; /* Bilan à retourner */ - - result = true; - - result &= PyDict_AddULongMacro(obj_type, BTP_VOID); - result &= PyDict_AddULongMacro(obj_type, BTP_WCHAR_T); - result &= PyDict_AddULongMacro(obj_type, BTP_BOOL); - result &= PyDict_AddULongMacro(obj_type, BTP_CHAR); - result &= PyDict_AddULongMacro(obj_type, BTP_SCHAR); - result &= PyDict_AddULongMacro(obj_type, BTP_UCHAR); - result &= PyDict_AddULongMacro(obj_type, BTP_SHORT); - result &= PyDict_AddULongMacro(obj_type, BTP_USHORT); - result &= PyDict_AddULongMacro(obj_type, BTP_INT); - result &= PyDict_AddULongMacro(obj_type, BTP_UINT); - result &= PyDict_AddULongMacro(obj_type, BTP_LONG); - result &= PyDict_AddULongMacro(obj_type, BTP_ULONG); - result &= PyDict_AddULongMacro(obj_type, BTP_LONG_LONG); - result &= PyDict_AddULongMacro(obj_type, BTP_ULONG_LONG); - result &= PyDict_AddULongMacro(obj_type, BTP_INT128); - result &= PyDict_AddULongMacro(obj_type, BTP_UINT128); - result &= PyDict_AddULongMacro(obj_type, BTP_FLOAT); - result &= PyDict_AddULongMacro(obj_type, BTP_DOUBLE); - result &= PyDict_AddULongMacro(obj_type, BTP_LONG_DOUBLE); - result &= PyDict_AddULongMacro(obj_type, BTP_FLOAT128); - result &= PyDict_AddULongMacro(obj_type, BTP_ELLIPSIS); - result &= PyDict_AddULongMacro(obj_type, BTP_754R_64); - result &= PyDict_AddULongMacro(obj_type, BTP_754R_128); - result &= PyDict_AddULongMacro(obj_type, BTP_754R_32); - result &= PyDict_AddULongMacro(obj_type, BTP_754R_16); - result &= PyDict_AddULongMacro(obj_type, BTP_CHAR32_T); - result &= PyDict_AddULongMacro(obj_type, BTP_CHAR16_T); - - result &= PyDict_AddULongMacro(obj_type, BTP_INVALID); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : module = module dont la définition est à compléter. * * * * Description : Prend en charge l'objet 'pychrysalide.....types.BasicType'. * @@ -251,7 +212,7 @@ bool ensure_python_basic_type_is_registered(void) if (!register_class_for_pygobject(dict, G_TYPE_BASIC_TYPE, type, get_python_data_type_type())) return false; - if (!py_basic_type_define_constants(type)) + if (!define_basic_type_constants(type)) return false; } |