summaryrefslogtreecommitdiff
path: root/src/decomp/expression.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2013-02-24 11:09:36 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2013-02-24 11:09:36 (GMT)
commit02c2cf555953f335a825e34c869c9999668fd42c (patch)
tree59395c04d509f9fae8314d311f6ab90e163df45d /src/decomp/expression.c
parent34e1a14aced520ba06ee1b81cfd7710e97c1643f (diff)
Refined comparisons decompilation and fixed some bugs.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@340 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/decomp/expression.c')
-rw-r--r--src/decomp/expression.c63
1 files changed, 62 insertions, 1 deletions
diff --git a/src/decomp/expression.c b/src/decomp/expression.c
index 82a2b4a..783f78f 100644
--- a/src/decomp/expression.c
+++ b/src/decomp/expression.c
@@ -2,7 +2,7 @@
/* OpenIDA - Outil d'analyse de fichiers binaires
* expression.c - gestion des expressions décompilées
*
- * Copyright (C) 2010 Cyrille Bagard
+ * Copyright (C) 2010-2013 Cyrille Bagard
*
* This file is part of OpenIDA.
*
@@ -34,6 +34,9 @@ static void g_dec_expression_class_init(GDecExpressionClass *);
/* Initialise une instance d'expression décompilée. */
static void g_dec_expression_init(GDecExpression *);
+/* Imprime pour l'écran la négation d'une expression décompilée. */
+static GBufferLine *g_dec_expression_neg_print(const GDecExpression *, GCodeBuffer *, GBufferLine *, GLangOutput *);
+
/* Indique le type défini pour une expression décompilée. */
@@ -74,3 +77,61 @@ static void g_dec_expression_init(GDecExpression *expr)
{
}
+
+
+/******************************************************************************
+* *
+* Paramètres : expr = expression à transcrire en version humaine. *
+* buffer = tampon où doit se réaliser l'insertion. *
+* line = ligne d'impression prête à emploi ou NULL. *
+* output = langage de programmation de sortie. *
+* *
+* Description : Imprime pour l'écran la négation d'une expression décompilée.*
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static GBufferLine *g_dec_expression_neg_print(const GDecExpression *expr, GCodeBuffer *buffer, GBufferLine *line, GLangOutput *output)
+{
+ GBufferLine *result; /* Ligne à retourner */
+
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, "!", 1, RTT_KEY_WORD);
+
+ result = expr->original_print(G_DEC_INSTRUCTION(expr), buffer, line, output);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : expr = instance à traiter. *
+* *
+* Description : Réalise une négation sur une expression décompilée. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_dec_expression_negate(GDecExpression *expr)
+{
+ bool status; /* Réussite de l'opération ? */
+
+ if (expr->negate != NULL)
+ status = expr->negate(expr);
+ else
+ status = false;
+
+ if (!status)
+ {
+ expr->original_print = G_DEC_INSTRUCTION(expr)->print;
+ G_DEC_INSTRUCTION(expr)->print = (dec_instr_print_fc)g_dec_expression_neg_print;
+ }
+
+}