summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/d2c/encoding.c7
-rw-r--r--tools/d2c/syntax.c34
-rw-r--r--tools/d2c/syntax.h2
3 files changed, 24 insertions, 19 deletions
diff --git a/tools/d2c/encoding.c b/tools/d2c/encoding.c
index 9ed4663..fe8c98c 100644
--- a/tools/d2c/encoding.c
+++ b/tools/d2c/encoding.c
@@ -416,7 +416,12 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
free(suffix);
for (i = 0; i < spec->syntax_count && result; i++)
- result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, i, &bad_exit);
+ {
+ if (spec->syntax_count > 1)
+ result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, &i, &bad_exit);
+ else
+ result = write_encoding_syntax(spec->syntaxes[i], fd, arch, spec->bits, openbar, id, sid, NULL, &bad_exit);
+ }
free(sid);
diff --git a/tools/d2c/syntax.c b/tools/d2c/syntax.c
index dcac28e..606453a 100644
--- a/tools/d2c/syntax.c
+++ b/tools/d2c/syntax.c
@@ -251,16 +251,16 @@ bool declare_encoding_syntax(const encoding_syntax *syntax, int fd, const coding
/******************************************************************************
* *
-* Paramètres : syntax = gestionnaire d'un ensemble d'éléments de syntaxe. *
-* fd = descripteur d'un flux ouvert en écriture. *
-* arch = architecture visée par l'opération globale. *
-* bits = gestionnaire des bits d'encodage. *
-* alone = peut-on se placer en zone principale ? *
-* pp = pré-processeur pour les échanges de chaînes. *
-* id = identifiant unique attribué à l'instruction. *
-* sid = base d'identifiant unique attribué à l'encodage. *
-* index = indice de la syntaxe dans l'encodage. *
-* exit = exprime le besoin d'une voie de sortie. [OUT] *
+* Paramètres : syntax = gestionnaire d'un ensemble d'éléments de syntaxe. *
+* fd = descripteur d'un flux ouvert en écriture. *
+* arch = architecture visée par l'opération globale. *
+* bits = gestionnaire des bits d'encodage. *
+* openbar = peut-on se placer en zone principale ? *
+* pp = pré-processeur pour les échanges de chaînes. *
+* id = identifiant unique attribué à l'instruction. *
+* sid = base d'identifiant unique attribué à l'encodage. *
+* index = indice de la syntaxe ou NULL si syntaxe unique. *
+* exit = exprime le besoin d'une voie de sortie. [OUT] *
* *
* Description : Amorce la construction des éléments d'une syntaxe. *
* *
@@ -270,7 +270,7 @@ bool declare_encoding_syntax(const encoding_syntax *syntax, int fd, const coding
* *
******************************************************************************/
-bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *arch, const coding_bits *bits, bool alone, const char *id, const char *sid, size_t index, bool *exit)
+bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *arch, const coding_bits *bits, bool openbar, const char *id, const char *sid, const size_t *index, bool *exit)
{
bool result; /* Bilan à retourner */
bool conditional; /* Définition sous condition ? */
@@ -279,7 +279,7 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar
conditional = !is_disass_assert_empty(syntax->assertions);
- assert((conditional && !alone) || (!conditional && alone));
+ assert((conditional && !openbar) || (!conditional && openbar));
if (conditional)
{
@@ -296,9 +296,9 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar
}
else
- tab = (alone ? "" : "\t");
+ tab = (openbar ? "" : "\t");
- if (!alone)
+ if (!openbar)
{
imm_decl = false;
@@ -309,16 +309,16 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar
}
- if (!alone)
+ if (!openbar)
{
dprintf(fd, "\t%sassert(result == NULL);\n", tab);
dprintf(fd, "\n");
}
- if (alone)
+ if (index == NULL)
dprintf(fd, "\t%sresult = g_%s_instruction_new(%s, %s);\n", tab, arch, id, sid);
else
- dprintf(fd, "\t%sresult = g_%s_instruction_new(%s, %s_%zu);\n", tab, arch, id, sid, index);
+ dprintf(fd, "\t%sresult = g_%s_instruction_new(%s, %s_%zu);\n", tab, arch, id, sid, *index);
dprintf(fd, "\n");
diff --git a/tools/d2c/syntax.h b/tools/d2c/syntax.h
index 645f0ce..c108aa5 100644
--- a/tools/d2c/syntax.h
+++ b/tools/d2c/syntax.h
@@ -67,7 +67,7 @@ bool mark_syntax_items(const encoding_syntax *, const coding_bits *);
bool declare_encoding_syntax(const encoding_syntax *, int, const coding_bits *);
/* Amorce la construction des éléments d'une syntaxe. */
-bool write_encoding_syntax(const encoding_syntax *, int, const char *, const coding_bits *, bool, const char *, const char *, size_t, bool *);
+bool write_encoding_syntax(const encoding_syntax *, int, const char *, const coding_bits *, bool, const char *, const char *, const size_t *, bool *);