From d52e16c97aa88ecf6a3643ef454e1aa857e0e7dd Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Thu, 17 May 2018 23:38:48 +0200
Subject: Fixed some generated instruction identifiers.

---
 tools/d2c/encoding.c |  7 ++++++-
 tools/d2c/syntax.c   | 34 +++++++++++++++++-----------------
 tools/d2c/syntax.h   |  2 +-
 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 *);
 
 
 
-- 
cgit v0.11.2-87-g4458