summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/mangling
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysalide/mangling')
-rw-r--r--plugins/pychrysalide/mangling/Makefile.am17
-rw-r--r--plugins/pychrysalide/mangling/demangler.c56
-rw-r--r--plugins/pychrysalide/mangling/demangler.h2
3 files changed, 59 insertions, 16 deletions
diff --git a/plugins/pychrysalide/mangling/Makefile.am b/plugins/pychrysalide/mangling/Makefile.am
index bec4baf..640e420 100644
--- a/plugins/pychrysalide/mangling/Makefile.am
+++ b/plugins/pychrysalide/mangling/Makefile.am
@@ -1,23 +1,14 @@
noinst_LTLIBRARIES = libpychrysamangling.la
-libpychrysamangling_la_SOURCES = \
- demangler.h demangler.c \
+libpychrysamangling_la_SOURCES = \
+ demangler.h demangler.c \
module.h module.c
-libpychrysamangling_la_LIBADD =
-
-libpychrysamangling_la_LDFLAGS =
+libpychrysamangling_la_CFLAGS = $(TOOLKIT_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_INTERPRETER_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \
+ -I$(top_srcdir)/src -DNO_IMPORT_PYGOBJECT
devdir = $(includedir)/chrysalide/$(subdir)
dev_HEADERS = $(libpychrysamangling_la_SOURCES:%c=)
-
-
-AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \
- -I$(top_srcdir)/src
-
-AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
-
-SUBDIRS =
diff --git a/plugins/pychrysalide/mangling/demangler.c b/plugins/pychrysalide/mangling/demangler.c
index 87a19dc..fb90dca 100644
--- a/plugins/pychrysalide/mangling/demangler.c
+++ b/plugins/pychrysalide/mangling/demangler.c
@@ -25,6 +25,7 @@
#include "demangler.h"
+#include <malloc.h>
#include <pygobject.h>
@@ -41,6 +42,9 @@
+/* Fournit la désignation interne du décodeur de désignations. */
+static PyObject *py_compiler_demangler_get_key(PyObject *, void *);
+
/* Tente de décoder une chaîne de caractères donnée en type. */
static PyObject *py_compiler_demangler_decode_type(PyObject *, PyObject *);
@@ -51,6 +55,53 @@ static PyObject *py_compiler_demangler_decode_routine(PyObject *, PyObject *);
/******************************************************************************
* *
+* Paramètres : self = objet Python concerné par l'appel. *
+* closure = non utilisé ici. *
+* *
+* Description : Fournit la désignation interne du décodeur de désignations. *
+* *
+* Retour : Simple chaîne de caractères. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_compiler_demangler_get_key(PyObject *self, void *closure)
+{
+ PyObject *result; /* Instance Python à retourner */
+ GCompDemangler *demangler; /* Version GLib de l'opérande */
+ char *key; /* Désignation du décodeur */
+
+#define COMPILER_DEMANGLER_KEY_ATTRIB PYTHON_GET_DEF_FULL \
+( \
+ key, py_compiler_demangler, \
+ "Provide the small name used to identify the demangler," \
+ " as a code string." \
+)
+
+ demangler = G_COMP_DEMANGLER(pygobject_get(self));
+ assert(demangler != NULL);
+
+ key = g_compiler_demangler_get_key(demangler);
+
+ if (key != NULL)
+ {
+ result = PyUnicode_FromString(key);
+ free(key);
+ }
+ else
+ {
+ result = Py_None;
+ Py_INCREF(result);
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : self = décodeur à solliciter pour l'opération. *
* args = chaîne de caractères à décoder. *
* *
@@ -184,6 +235,7 @@ PyTypeObject *get_python_compiler_demangler_type(void)
};
static PyGetSetDef py_comp_demangler_getseters[] = {
+ COMPILER_DEMANGLER_KEY_ATTRIB,
{ NULL }
};
@@ -212,7 +264,7 @@ PyTypeObject *get_python_compiler_demangler_type(void)
* *
* Paramètres : module = module dont la définition est à compléter. *
* *
-* Description : Prend en charge l'objet 'pychrysalide.mangling.DexDemangler'.*
+* Description : Prend en charge l'objet 'pychrysalide....CompDemangler'. *
* *
* Retour : Bilan de l'opération. *
* *
@@ -234,7 +286,7 @@ bool ensure_python_compiler_demangler_is_registered(void)
dict = PyModule_GetDict(module);
- if (!register_class_for_pygobject(dict, G_TYPE_COMP_DEMANGLER, type, &PyGObject_Type))
+ if (!register_class_for_pygobject(dict, G_TYPE_COMP_DEMANGLER, type))
return false;
}
diff --git a/plugins/pychrysalide/mangling/demangler.h b/plugins/pychrysalide/mangling/demangler.h
index 0c31f7c..496aa21 100644
--- a/plugins/pychrysalide/mangling/demangler.h
+++ b/plugins/pychrysalide/mangling/demangler.h
@@ -34,7 +34,7 @@
/* Fournit un accès à une définition de type à diffuser. */
PyTypeObject *get_python_compiler_demangler_type(void);
-/* Prend en charge l'objet 'pychrysalide.format.elf.ElfFormat'. */
+/* Prend en charge l'objet 'pychrysalide.mangling.CompDemangler'. */
bool ensure_python_compiler_demangler_is_registered(void);