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