summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/analysis/types/basic.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysalide/analysis/types/basic.c')
-rw-r--r--plugins/pychrysalide/analysis/types/basic.c97
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;
}