summaryrefslogtreecommitdiff
path: root/src/decomp/context.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2013-01-14 22:08:00 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2013-01-14 22:08:00 (GMT)
commit2ab78407e9f73b6508afc281400a7c3fc018217f (patch)
tree437054ef874e9536e15b9254a6a8c4c2396604ff /src/decomp/context.c
parent35a6cd881528b5f77ce09476eccb39d02d9cc634 (diff)
Cleaned the context used for decompilations.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@324 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/decomp/context.c')
-rw-r--r--src/decomp/context.c88
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;
+
}