summaryrefslogtreecommitdiff
path: root/src/mangling/context.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mangling/context.c')
-rw-r--r--src/mangling/context.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/mangling/context.c b/src/mangling/context.c
index 7a798ac..65a8874 100644
--- a/src/mangling/context.c
+++ b/src/mangling/context.c
@@ -24,6 +24,9 @@
#include "context.h"
+#include <assert.h>
+
+
#include "context-int.h"
@@ -165,6 +168,7 @@ GBinRoutine *g_demangling_context_get_decoded_routine(GDemanglingContext *contex
/******************************************************************************
* *
* Paramètres : context = instance à consulter. *
+* desc = chaîne de caractères à décoder. *
* *
* Description : Fournit le type créé à l'issue du codage. *
* *
@@ -190,3 +194,85 @@ GDataType *g_demangling_context_get_decoded_type(GDemanglingContext *context, co
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : context = environnement de décodage à manipuler. *
+* desc = chaîne de caractères à décoder. *
+* *
+* Description : Décode une définition de type. *
+* *
+* Retour : Nouvelle instance créée ou NULL en cas d'erreur fatale. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GDataType *g_demangling_context_decode_type(GDemanglingContext *context, const char *desc)
+{
+ GDataType *result; /* Construction à remonter */
+
+ if (context->type != NULL)
+ result = context->type;
+
+ else
+ {
+ assert(context->buffer.text == NULL);
+
+ init_text_input_buffer(&context->buffer, desc);
+
+ result = G_DEMANGLING_CONTEXT_GET_CLASS(context)->decode_type(context);
+
+ if (result != NULL)
+ context->type = result;
+
+ }
+
+ if (result != NULL)
+ g_object_ref(G_OBJECT(result));
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : context = environnement de décodage à manipuler. *
+* desc = chaîne de caractères à décoder. *
+* *
+* Description : Décode une définition de routine. *
+* *
+* Retour : Nouvelle instance créée ou NULL en cas d'erreur fatale. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GBinRoutine *g_demangling_context_decode_routine(GDemanglingContext *context, const char *desc)
+{
+ GBinRoutine *result; /* Construction à remonter */
+
+ if (context->routine != NULL)
+ result = context->routine;
+
+ else
+ {
+ assert(context->buffer.text == NULL);
+
+ init_text_input_buffer(&context->buffer, desc);
+
+ result = G_DEMANGLING_CONTEXT_GET_CLASS(context)->decode_routine(context);
+
+ if (result != NULL)
+ context->routine = result;
+
+ }
+
+ if (result != NULL)
+ g_object_ref(G_OBJECT(result));
+
+ return result;
+
+}