diff options
Diffstat (limited to 'src/decomp/context.c')
-rw-r--r-- | src/decomp/context.c | 88 |
1 files changed, 74 insertions, 14 deletions
diff --git a/src/decomp/context.c b/src/decomp/context.c index 94a50c1..6905505 100644 --- a/src/decomp/context.c +++ b/src/decomp/context.c @@ -39,6 +39,12 @@ static void g_dec_context_class_init(GDecContextClass *); /* Initialise une instance de contexte de décompilation. */ static void g_dec_context_init(GDecContext *); +/* Supprime toutes les références externes. */ +static void g_dec_context_dispose(GDecContext *); + +/* Procède à la libération totale de la mémoire. */ +static void g_dec_context_finalize(GDecContext *); + /* Indique le type défini pour un contexte de décompilation. */ @@ -47,7 +53,7 @@ G_DEFINE_TYPE(GDecContext, g_dec_context, G_TYPE_OBJECT); /****************************************************************************** * * -* Paramètres : klass = classe à initialiser. * +* Paramètres : class = classe à initialiser. * * * * Description : Initialise la classe des contextes de décompilation. * * * @@ -57,8 +63,14 @@ G_DEFINE_TYPE(GDecContext, g_dec_context, G_TYPE_OBJECT); * * ******************************************************************************/ -static void g_dec_context_class_init(GDecContextClass *klass) +static void g_dec_context_class_init(GDecContextClass *class) { + GObjectClass *object; /* Autre version de la classe */ + + object = G_OBJECT_CLASS(class); + + object->dispose = (GObjectFinalizeFunc/* ! */)g_dec_context_dispose; + object->finalize = (GObjectFinalizeFunc)g_dec_context_finalize; } @@ -77,8 +89,50 @@ static void g_dec_context_class_init(GDecContextClass *klass) static void g_dec_context_init(GDecContext *ctx) { - ctx->machine = g_hash_table_new(g_constant_hash, (GEqualFunc)g_arch_operand_compare); - ctx->ssa = g_hash_table_new(NULL, NULL); + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = instance d'objet GLib à traiter. * +* * +* Description : Supprime toutes les références externes. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_dec_context_dispose(GDecContext *ctx) +{ + if (ctx->format != NULL) + g_object_unref(G_OBJECT(ctx->format)); + + if (ctx->routine != NULL) + g_object_unref(G_OBJECT(ctx->routine)); + + G_OBJECT_CLASS(g_dec_context_parent_class)->dispose(G_OBJECT(ctx)); + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = instance d'objet GLib à traiter. * +* * +* Description : Procède à la libération totale de la mémoire. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_dec_context_finalize(GDecContext *ctx) +{ + G_OBJECT_CLASS(g_dec_context_parent_class)->finalize(G_OBJECT(ctx)); } @@ -108,19 +162,25 @@ GDecContext *g_dec_context_new(void) /****************************************************************************** * * -* Paramètres : ctx = instance à consulter. * +* Paramètres : ctx = contexte de décompilation à compléter. * +* routine = routine visée par l'opération. * +* format = format du fichier binaire associé. * * * -* Description : Indique l'adresse où la décompilation n'est plus souhaitée. * +* Description : Définit les informations essentielles à la décompilation. * * * -* Retour : Adresse mémoire ou physique. * +* Retour : - * * * * Remarques : - * * * ******************************************************************************/ -vmpa_t g_dec_context_get_max_address(const GDecContext *ctx) +void g_dec_context_set_info(GDecContext *ctx, GBinRoutine *routine, GExeFormat *format) { - return ctx->max; + g_object_ref(G_OBJECT(routine)); + g_object_ref(G_OBJECT(format)); + + ctx->routine = routine; + ctx->format = format; } @@ -128,19 +188,19 @@ vmpa_t g_dec_context_get_max_address(const GDecContext *ctx) /****************************************************************************** * * * Paramètres : ctx = instance à consulter. * -* max = adresse mémoire ou physique. * * * -* Description : Définit l'adresse où la décompilation n'est plus souhaitée. * +* Description : Fournit le format binaire associé au contexte. * * * -* Retour : - . * +* Retour : Format du fichier binaire décompilé. * * * * Remarques : - * * * ******************************************************************************/ -void g_dec_context_set_max_address(GDecContext *ctx, vmpa_t max) +GExeFormat *g_dec_context_get_format(const GDecContext *ctx) { - ctx->max = max; + return ctx->format; + } |