summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2021-11-30 01:56:58 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2021-11-30 01:56:58 (GMT)
commitde06b3ebc7021c20d94013bd39f4ba2c2e5ce3fa (patch)
tree463af79c1045e4180958d9ef9d0af33d3eebf7b9 /plugins
parent7101133d0e862d2296d9709dc6ef1e64ebbc2ea0 (diff)
Access demanglers by key.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/dexbnf/core.c2
-rw-r--r--plugins/dexbnf/demangler.c27
-rw-r--r--plugins/itanium/core.c2
-rw-r--r--plugins/itanium/demangler.c27
-rw-r--r--plugins/javadesc/core.c2
-rw-r--r--plugins/javadesc/demangler.c27
-rw-r--r--plugins/pychrysalide/mangling/demangler.c52
7 files changed, 136 insertions, 3 deletions
diff --git a/plugins/dexbnf/core.c b/plugins/dexbnf/core.c
index 2b9408a..37e5a15 100644
--- a/plugins/dexbnf/core.c
+++ b/plugins/dexbnf/core.c
@@ -65,7 +65,7 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
{
bool result; /* Bilan à retourner */
- result = register_demangler_type("dex", G_TYPE_DEX_DEMANGLER);
+ result = register_demangler_type(G_TYPE_DEX_DEMANGLER);
#ifdef HAVE_PYTHON3_BINDINGS
if (result)
diff --git a/plugins/dexbnf/demangler.c b/plugins/dexbnf/demangler.c
index 503f7ce..03f24f7 100644
--- a/plugins/dexbnf/demangler.c
+++ b/plugins/dexbnf/demangler.c
@@ -58,6 +58,9 @@ static void g_dex_demangler_dispose(GDexDemangler *);
/* Procède à la libération totale de la mémoire. */
static void g_dex_demangler_finalize(GDexDemangler *);
+/* Fournit la désignation interne du décodeur de désignations. */
+static char *g_dex_demangler_get_key(const GDexDemangler *);
+
/* Indique le type défini pour un décodeur de désignations. */
@@ -88,6 +91,7 @@ static void g_dex_demangler_class_init(GDexDemanglerClass *klass)
demangler = G_COMP_DEMANGLER_CLASS(klass);
+ demangler->get_key = (get_demangler_key_fc)g_dex_demangler_get_key;
demangler->can_demangle = (can_be_demangled_fc)NULL;
demangler->ns_sep = ".";
@@ -173,3 +177,26 @@ GCompDemangler *g_dex_demangler_new(void)
return G_COMP_DEMANGLER(result);
}
+
+
+/******************************************************************************
+* *
+* Paramètres : demangler = décodeur à consulter. *
+* *
+* Description : Fournit la désignation interne du décodeur de désignations. *
+* *
+* Retour : Simple chaîne de caractères. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *g_dex_demangler_get_key(const GDexDemangler *demangler)
+{
+ char *result; /* Désignation à renvoyer */
+
+ result = strdup("dex");
+
+ return result;
+
+}
diff --git a/plugins/itanium/core.c b/plugins/itanium/core.c
index 6bf67c1..dd74f53 100644
--- a/plugins/itanium/core.c
+++ b/plugins/itanium/core.c
@@ -65,7 +65,7 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
{
bool result; /* Bilan à retourner */
- result = register_demangler_type("itanium", G_TYPE_ITANIUM_DEMANGLER);
+ result = register_demangler_type(G_TYPE_ITANIUM_DEMANGLER);
#ifdef HAVE_PYTHON3_BINDINGS
if (result)
diff --git a/plugins/itanium/demangler.c b/plugins/itanium/demangler.c
index 5fe0d09..fc445f5 100644
--- a/plugins/itanium/demangler.c
+++ b/plugins/itanium/demangler.c
@@ -58,6 +58,9 @@ static void g_itanium_demangler_dispose(GItaniumDemangler *);
/* Procède à la libération totale de la mémoire. */
static void g_itanium_demangler_finalize(GItaniumDemangler *);
+/* Fournit la désignation interne du décodeur de désignations. */
+static char *g_itanium_demangler_get_key(const GItaniumDemangler *);
+
/* Indique le type défini pour un décodeur de désignations. */
@@ -88,6 +91,7 @@ static void g_itanium_demangler_class_init(GItaniumDemanglerClass *klass)
demangler = G_COMP_DEMANGLER_CLASS(klass);
+ demangler->get_key = (get_demangler_key_fc)g_itanium_demangler_get_key;
demangler->can_demangle = (can_be_demangled_fc)NULL;
demangler->ns_sep = "::";
@@ -173,3 +177,26 @@ GCompDemangler *g_itanium_demangler_new(void)
return G_COMP_DEMANGLER(result);
}
+
+
+/******************************************************************************
+* *
+* Paramètres : demangler = décodeur à consulter. *
+* *
+* Description : Fournit la désignation interne du décodeur de désignations. *
+* *
+* Retour : Simple chaîne de caractères. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *g_itanium_demangler_get_key(const GItaniumDemangler *demangler)
+{
+ char *result; /* Désignation à renvoyer */
+
+ result = strdup("itanium");
+
+ return result;
+
+}
diff --git a/plugins/javadesc/core.c b/plugins/javadesc/core.c
index bda0f56..e7b4773 100644
--- a/plugins/javadesc/core.c
+++ b/plugins/javadesc/core.c
@@ -65,7 +65,7 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
{
bool result; /* Bilan à retourner */
- result = register_demangler_type("java", G_TYPE_JAVA_DEMANGLER);
+ result = register_demangler_type(G_TYPE_JAVA_DEMANGLER);
#ifdef HAVE_PYTHON3_BINDINGS
if (result)
diff --git a/plugins/javadesc/demangler.c b/plugins/javadesc/demangler.c
index 78b62f1..eaacacf 100644
--- a/plugins/javadesc/demangler.c
+++ b/plugins/javadesc/demangler.c
@@ -58,6 +58,9 @@ static void g_java_demangler_dispose(GJavaDemangler *);
/* Procède à la libération totale de la mémoire. */
static void g_java_demangler_finalize(GJavaDemangler *);
+/* Fournit la désignation interne du décodeur de désignations. */
+static char *g_java_demangler_get_key(const GJavaDemangler *);
+
/* Indique le type défini pour un décodeur de désignations. */
@@ -88,6 +91,7 @@ static void g_java_demangler_class_init(GJavaDemanglerClass *klass)
demangler = G_COMP_DEMANGLER_CLASS(klass);
+ demangler->get_key = (get_demangler_key_fc)g_java_demangler_get_key;
demangler->can_demangle = (can_be_demangled_fc)NULL;
demangler->ns_sep = ".";
@@ -173,3 +177,26 @@ GCompDemangler *g_java_demangler_new(void)
return G_COMP_DEMANGLER(result);
}
+
+
+/******************************************************************************
+* *
+* Paramètres : demangler = décodeur à consulter. *
+* *
+* Description : Fournit la désignation interne du décodeur de désignations. *
+* *
+* Retour : Simple chaîne de caractères. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *g_java_demangler_get_key(const GJavaDemangler *demangler)
+{
+ char *result; /* Désignation à renvoyer */
+
+ result = strdup("java");
+
+ return result;
+
+}
diff --git a/plugins/pychrysalide/mangling/demangler.c b/plugins/pychrysalide/mangling/demangler.c
index 87a19dc..5779693 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 }
};