diff options
Diffstat (limited to 'src/mangling/context.c')
-rw-r--r-- | src/mangling/context.c | 86 |
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; + +} |