diff options
Diffstat (limited to 'plugins/pychrysalide/mangling')
-rw-r--r-- | plugins/pychrysalide/mangling/Makefile.am | 17 | ||||
-rw-r--r-- | plugins/pychrysalide/mangling/demangler.c | 56 | ||||
-rw-r--r-- | plugins/pychrysalide/mangling/demangler.h | 2 |
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); |