summaryrefslogtreecommitdiff
path: root/tools/d2c/rules/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/d2c/rules/manager.c')
-rw-r--r--tools/d2c/rules/manager.c64
1 files changed, 25 insertions, 39 deletions
diff --git a/tools/d2c/rules/manager.c b/tools/d2c/rules/manager.c
index 74be5fc..20f1a2b 100644
--- a/tools/d2c/rules/manager.c
+++ b/tools/d2c/rules/manager.c
@@ -290,9 +290,6 @@ static bool mark_cond_expr(const cond_expr *expr, const coding_bits *bits, const
}
-
- printf("=== USE '%s' : %d\n", name, status);
-
if (!status)
fprintf(stderr, "Error: nothing defined for the requested variable '%s'.\n", name);
@@ -603,16 +600,14 @@ bool mark_decoding_rules(const decoding_rules *rules, const coding_bits *bits, c
/******************************************************************************
* *
-* Paramètres : rules = ensemble de règles à consulter. *
-* top = indique si l'écriture se fait au plus haut niveau. *
-* filter = filtre sur les règles à effectivement imprimer. *
-* fd = descripteur d'un flux ouvert en écriture. *
-* arch = architecture visée par l'opération. *
-* subarch = sous-catégorie de cette même architecture. *
-* bits = gestionnaire des bits d'encodage. *
-* list = liste de l'ensemble des fonctions de conversion. *
-* pp = pré-processeur pour les échanges de chaînes. *
-* exit = exprime le besoin d'une voie de sortie. [OUT] *
+* Paramètres : rules = ensemble de règles à consulter. *
+* filter = filtre sur les règles à effectivement imprimer. *
+* fd = descripteur d'un flux ouvert en écriture. *
+* arch = architecture visée par l'opération. *
+* bits = gestionnaire des bits d'encodage. *
+* list = liste de l'ensemble des fonctions de conversion. *
+* tab = décalage éventuel selon l'inclusion. *
+* exit = exprime le besoin d'une voie de sortie. [OUT] *
* *
* Description : Traduit en code les éventuelles règles présentes. *
* *
@@ -622,7 +617,7 @@ bool mark_decoding_rules(const decoding_rules *rules, const coding_bits *bits, c
* *
******************************************************************************/
-bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter, int fd, const char *arch, const char *subarch, const coding_bits *bits, const conv_list *list, const pre_processor *pp, bool *exit)
+bool write_decoding_rules(decoding_rules *rules, CondActionType filter, int fd, const char *arch, const coding_bits *bits, const conv_list *list, const char *tab, bool *exit)
{
bool result; /* Bilan à remonter */
size_t i; /* Boucle de parcours */
@@ -642,6 +637,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter
switch (rule->action.type)
{
case CAT_CALL:
+ case CAT_CHECKED_CALL:
multi_lines = false;
break;
@@ -653,10 +649,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter
if (rule->expr != NULL)
{
- if (!top)
- dprintf(fd, "\t");
-
- dprintf(fd, "\tif ");
+ dprintf(fd, "\t%sif ", tab);
result = write_cond_expr(rule->expr, fd, bits, list);
if (!result) break;
@@ -664,13 +657,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter
dprintf(fd, "\n");
if (multi_lines)
- {
- if (!top)
- dprintf(fd, "\t");
-
- dprintf(fd, "\t{\n");
-
- }
+ dprintf(fd, "\t%s{\n", tab);
}
@@ -695,37 +682,42 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter
case CAT_CALL:
+ /*
callable = find_macro(pp, rule->action.callee);
if (callable == NULL)
+ */
callable = rule->action.callee;
if (rule->expr != NULL)
- dprintf(fd, "\t");
+ dprintf(fd, "\t")
+;
+ dprintf(fd, "%s", tab);
- result = call_instr_func(top, callable, rule->action.args, fd, bits, list, pp);
+ result = call_instr_func(callable, rule->action.args, fd, bits, list);
break;
case CAT_CHECKED_CALL:
+ /*
callable = find_macro(pp, rule->action.callee);
if (callable == NULL)
+ */
callable = rule->action.callee;
if (rule->expr != NULL)
dprintf(fd, "\t");
- result = checked_call_instr_func(top, callable, rule->action.args, fd, bits, list, pp);
+ dprintf(fd, "%s", tab);
- if (rule->expr != NULL)
- dprintf(fd, "\t");
+ result = checked_call_instr_func(callable, rule->action.args, fd, bits, list);
- if (!top)
+ if (rule->expr != NULL)
dprintf(fd, "\t");
- dprintf(fd, "\t\tgoto quick_exit;\n");
+ dprintf(fd, "\t\t%sgoto bad_exit;\n", tab);
*exit = true;
break;
@@ -733,13 +725,7 @@ bool write_decoding_rules(decoding_rules *rules, bool top, CondActionType filter
}
if (rule->expr != NULL && multi_lines)
- {
- if (!top)
- dprintf(fd, "\t");
-
- dprintf(fd, "\t}\n");
-
- }
+ dprintf(fd, "\t%s}\n", tab);
dprintf(fd, "\n");