summaryrefslogtreecommitdiff
path: root/src/decomp/lang/java.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2010-12-02 00:59:53 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2010-12-02 00:59:53 (GMT)
commit957f50b657456c4c7da2778197c144548eded8cd (patch)
tree9aea0e8ffb4dc62b23fd324b55910916cef95167 /src/decomp/lang/java.c
parentf2d479c16a427696790441fa1459e7194f49bb6a (diff)
Improved the rendering of decompiled Dex code.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@196 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/decomp/lang/java.c')
-rw-r--r--src/decomp/lang/java.c181
1 files changed, 181 insertions, 0 deletions
diff --git a/src/decomp/lang/java.c b/src/decomp/lang/java.c
index d83646d..b934a62 100644
--- a/src/decomp/lang/java.c
+++ b/src/decomp/lang/java.c
@@ -53,6 +53,24 @@ static void g_java_output_init(GJavaOutput *);
/* Ajoute un commentaire à un tampon donné. */
static GBufferLine *g_java_output_write_comments(GJavaOutput *, GCodeBuffer *, const char *, size_t);
+/* Débute la définition d'une classe. */
+static GBufferLine *g_java_output_start_class(GJavaOutput *, GCodeBuffer *, const GOpenidaType *);
+
+/* Termine la définition d'une classe. */
+static void g_java_output_end_class(GJavaOutput *, GCodeBuffer *);
+
+/* Débute la définition d'une routine. */
+static GBufferLine *g_java_output_start_routine_prototype(GJavaOutput *, GCodeBuffer *, const GOpenidaType *);
+
+/* Termine la définition d'une routine. */
+static void g_java_output_end_routine_prototype(GJavaOutput *, GCodeBuffer *, GBufferLine *);
+
+/* Commence la définition du corps d'une routine. */
+static void g_java_output_start_routine_body(GJavaOutput *, GCodeBuffer *, GBufferLine *);
+
+/* Termine la définition du corps d'une routine. */
+static void g_java_output_end_routine_body(GJavaOutput *, GCodeBuffer *);
+
/* Indique le type défini pour une sortie en langage Java. */
@@ -97,6 +115,14 @@ static void g_java_output_init(GJavaOutput *output)
lang->write_comments = (write_comments_fc)g_java_output_write_comments;
+ lang->start_class = (rlgbuftp_fc)g_java_output_start_class;
+ lang->end_class = (lgbuf_fc)g_java_output_end_class;
+
+ lang->start_routine_proto = (rlgbuftp_fc)g_java_output_start_routine_prototype;
+ lang->end_routine_proto = (lgbufln_fc)g_java_output_end_routine_prototype;
+ lang->start_routine_body = (lgbufln_fc)g_java_output_start_routine_body;
+ lang->end_routine_body = (lgbuf_fc)g_java_output_end_routine_body;
+
}
@@ -153,3 +179,158 @@ static GBufferLine *g_java_output_write_comments(GJavaOutput *output, GCodeBuffe
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : output = encadrant de l'impression en langage de prog. *
+* buffer = tampon de sortie à disposition. *
+* type = désignation de la classe à définir. *
+* *
+* Description : Débute la définition d'une classe. *
+* *
+* Retour : Ligne nouvellement créée. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static GBufferLine *g_java_output_start_class(GJavaOutput *output, GCodeBuffer *buffer, const GOpenidaType *type)
+{
+ GBufferLine *result; /* Adresse nouvelle à remonter */
+
+ result = g_code_buffer_append_new_line(buffer);
+
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, "class", 5, RTT_KEY_WORD);
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, " ", 1, RTT_RAW);
+
+ /* TODO */
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, "XXX", 3, RTT_RAW);
+
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, " ", 1, RTT_RAW);
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, "{", 1, RTT_HOOK);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : output = encadrant de l'impression en langage de prog. *
+* buffer = tampon de sortie à disposition. *
+* *
+* Description : Termine la définition d'une classe. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_java_output_end_class(GJavaOutput *output, GCodeBuffer *buffer)
+{
+ GBufferLine *result; /* Adresse nouvelle à remonter */
+
+ result = g_code_buffer_append_new_line(buffer);
+
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, "}", 1, RTT_HOOK);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : output = encadrant de l'impression en langage de prog. *
+* buffer = tampon de sortie à disposition. *
+* ret = type de retour de la routine traitée. *
+* *
+* Description : Débute la définition d'une routine. *
+* *
+* Retour : Ligne nouvellement créée. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static GBufferLine *g_java_output_start_routine_prototype(GJavaOutput *output, GCodeBuffer *buffer, const GOpenidaType *ret)
+{
+ GBufferLine *result; /* Adresse nouvelle à remonter */
+
+ result = g_code_buffer_append_new_line(buffer);
+
+ /* TODO */
+ g_buffer_line_insert_text(result, BLC_ASSEMBLY_HEAD, "XXX", 3, RTT_RAW);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : output = encadrant de l'impression en langage de prog. *
+* buffer = tampon de sortie à disposition. *
+* line = ligne contenant le prototype de la routine traitée. *
+* *
+* Description : Termine la définition d'une routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_java_output_end_routine_prototype(GJavaOutput *output, GCodeBuffer *buffer, GBufferLine *line)
+{
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, ";", 1, RTT_PUNCT);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : output = encadrant de l'impression en langage de prog. *
+* buffer = tampon de sortie à disposition. *
+* line = ligne contenant le prototype de la routine traitée. *
+* *
+* Description : Commence la définition du corps d'une routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_java_output_start_routine_body(GJavaOutput *output, GCodeBuffer *buffer, GBufferLine *line)
+{
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, " ", 1, RTT_RAW);
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, "{", 2, RTT_HOOK);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : output = encadrant de l'impression en langage de prog. *
+* buffer = tampon de sortie à disposition. *
+* *
+* Description : Termine la définition du corps d'une routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_java_output_end_routine_body(GJavaOutput *output, GCodeBuffer *buffer)
+{
+ GBufferLine *line; /* Nouvelle ligne à constituer */
+
+ line = g_code_buffer_append_new_line(buffer);
+
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, "}", 1, RTT_HOOK);
+
+}