summaryrefslogtreecommitdiff
path: root/src/decomp/expr/pseudo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/decomp/expr/pseudo.c')
-rw-r--r--src/decomp/expr/pseudo.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/decomp/expr/pseudo.c b/src/decomp/expr/pseudo.c
index 06ba184..bb5861d 100644
--- a/src/decomp/expr/pseudo.c
+++ b/src/decomp/expr/pseudo.c
@@ -24,6 +24,7 @@
#include "pseudo.h"
+#include <malloc.h>
#include <stdio.h>
#include <string.h>
@@ -38,6 +39,7 @@ struct _GPseudoRegister
GDecExpression parent; /* A laisser en premier */
size_t index; /* Position dans l'ensemble */
+ GBinVariable *var; /* Variable plus précise */
};
@@ -148,10 +150,19 @@ GDecInstruction *g_pseudo_register_new(void)
static void g_pseudo_register_print(const GPseudoRegister *reg, GCodeBuffer *buffer, GBufferLine *line, GLangOutput *output)
{
char label[32];
-
- snprintf(label, 32, "var%d", reg->index);
-
- g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, label, strlen(label), RTT_RAW);
+ char *name;
+
+ if (reg->var != NULL)
+ {
+ name = g_binary_variable_to_string(reg->var, true);
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, name, strlen(name), RTT_RAW);
+ free(name);
+ }
+ else
+ {
+ snprintf(label, 32, "var%zu", reg->index);
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, label, strlen(label), RTT_RAW);
+ }
}
@@ -174,3 +185,23 @@ void g_pseudo_register_set_index(GPseudoRegister *reg, size_t index)
reg->index = index;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : reg = expression représentant un pseudo-registre à traiter. *
+* var = indications supplémentaire quant à la variable. *
+* *
+* Description : Précise le nom et le type de la variable. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_pseudo_register_set_variable(GPseudoRegister *reg, GBinVariable *var)
+{
+ reg->var = var;
+
+}