summaryrefslogtreecommitdiff
path: root/src/decomp/instruction.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2012-07-23 19:07:29 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2012-07-23 19:07:29 (GMT)
commit8b35a66464636d0c46237af7490a6ca6866ecc4d (patch)
tree92199b36e3af00eb4c175a80c20b9b14511a6a45 /src/decomp/instruction.c
parent8b2189a819c7a761cfdb97d9e3382ea963f225fb (diff)
Improved decompilation of Dalvik bytecode.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@252 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/decomp/instruction.c')
-rw-r--r--src/decomp/instruction.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/decomp/instruction.c b/src/decomp/instruction.c
index c1afa44..c48ac7b 100644
--- a/src/decomp/instruction.c
+++ b/src/decomp/instruction.c
@@ -72,6 +72,7 @@ static void g_dec_instruction_class_init(GDecInstructionClass *klass)
static void g_dec_instruction_init(GDecInstruction *instr)
{
+ DL_LIST_ITEM_INIT(&instr->flow);
}
@@ -99,3 +100,107 @@ void g_dec_instruction_print(const GDecInstruction *instr, GCodeBuffer *buffer,
instr->print(instr, buffer, line, output);
}
+
+
+/* ---------------------------------------------------------------------------------- */
+/* TRAITEMENT DES INSTRUCTIONS PAR ENSEMBLE */
+/* ---------------------------------------------------------------------------------- */
+
+
+/******************************************************************************
+* *
+* Paramètres : list = liste d'instructions à consulter. *
+* *
+* Description : Fournit la dernière instruction décompilée de l'ensemble. *
+* *
+* Retour : Instruction en queue de liste. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GDecInstruction *g_dec_instruction_get_last(GDecInstruction *list)
+{
+ return dinstr_list_last(list);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : list = liste d'instructions à compléter, ou NULL. *
+* instr = nouvelle instruction à intégrer à l'ensemble. *
+* *
+* Description : Ajoute une instruction à un ensemble existant. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_dec_instruction_add_to_list(GDecInstruction **list, GDecInstruction *instr)
+{
+ dinstr_list_add_tail(instr, list);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : list = liste d'instructions à modifier. *
+* instr = instruction à faire disparaître. *
+* *
+* Description : Supprime une instruction de l'ensemble décompilé. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_dec_instruction_delete(GDecInstruction **list, GDecInstruction *instr)
+{
+ dinstr_list_del(instr, list);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : list = liste d'instructions à consulter. *
+* : iter = position actuelle dans la liste. *
+* *
+* Description : Fournit l'élement suivant un autre pour un parcours. *
+* *
+* Retour : Elément suivant ou NULL si aucun. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GDecInstruction *g_dec_instruction_get_next_iter(const GDecInstruction *list, const GDecInstruction *iter)
+{
+ return dinstr_list_next_iter(iter, list);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : list = liste d'instructions à consulter. *
+* : iter = position actuelle dans la liste. *
+* *
+* Description : Fournit l'élement précédant un autre pour un parcours. *
+* *
+* Retour : Elément suivant ou NULL si aucun. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GDecInstruction *g_dec_instruction_get_prev_iter(const GDecInstruction *list, const GDecInstruction *iter)
+{
+ return dinstr_list_prev_iter(iter, list);
+
+}