From 866bf1e6a2c54f2ed44d44f52b0bd0c7cefa8549 Mon Sep 17 00:00:00 2001
From: icculus <icculus@noemail.net>
Date: Wed, 17 Feb 2010 20:31:32 +0000
Subject: [PATCH] Repore error if the grammar has multiple %type lines for the
 same nonterminal.

FossilOrigin-Name: 721f33e7221c5fc907e9e293ac3242843f4fcfb7
---
 manifest      | 38 +++++++++++++++++++-------------------
 manifest.uuid |  2 +-
 tool/lemon.c  | 18 ++++++++++++++----
 3 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/manifest b/manifest
index c32eec87bf..d58441f0a1 100644
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-C Fixed\s%\sformatting\sin\ssome\sprintf-style\sstrings.
-D 2010-02-17T20:22:11
+C Repore\serror\sif\sthe\sgrammar\shas\smultiple\s%type\slines\sfor\sthe\ssame\snonterminal.
+D 2010-02-17T20:31:32
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -765,7 +765,7 @@ F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
 F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
 F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4
 F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5
-F tool/lemon.c ec4def6e8b6335d8ac0efbaf3f4b4cdb2c2cb51d
+F tool/lemon.c 651d2564255b78e9eef5ed23156a879b5fefad33
 F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
 F tool/mkkeywordhash.c d2e6b4a5965e23afb80fbe74bb54648cd371f309
 F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
@@ -790,24 +790,24 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P b3839f2aad00844c578d496c40481a39c018e4f6
-R 8568b6894a9a02964b44ffe7906bbf0d
+P f96add898f096cfc1e435c625ce74093d790b3c7
+R 7e899bd1bcc574c9843dd06c1121722a
 U icculus
-Z 88030a276c2ac0e676ff13eba4b7144a
+Z 8f255c204179bde4f6c556d2f0460a83
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG/MacGPG2 v2.0.14 (Darwin)
 
-iQIcBAEBAgAGBQJLfE/4AAoJEDDcKcGyC63VAb0P/ipsm+CwkLui/+x6twceYVUJ
-NLhI1ujYZveXDrmu24pCzQ70Jw67I4wc5niUyIv4I2uMTx+vAwNlUd5p/v5K2Zcq
-ffT/1CQutGyY7fj4IlAqL0yMp1JLO5rN4iRBgMlrnlAA7Q2XkGe9NviPHoS4N2uS
-OUbJFq2wxX+4XQs0e5ATkzBP85k+gljRoH5MXv7oYVSa7LHGgQVx4Zt/+SY0HBFK
-CKVTEUblNkaD+MgKIN4Rd57LwzMw2SMcezJhPd3uLws65L4JPs9sVp8cWoe5WXgV
-Yc2hYWMI7CheoJpLEv/I3SKdE0b5DwFGAFCstZAGJBOBdby8MCyS7zUmZc43oh2U
-KNuequz8boXX3vdBmkbnpiETDrC9t2jKFfvN4bkB/k2fhhkBZ2kUY+i1MhrD9JZs
-nChNxJgEhfUDT9bLfWwGky6oNl6Wkqxqb5/AQUi53eqqTAIQvc+wV01PnMfrpRvL
-1Qrani0DtnpE1CujJUvy/dhha9Aza8FQJL1kWD2JdT2KAcLfsTc99abXgxkVZsfC
-yeB4WqSmwu5liScsxA+JE7Gj4jk+bBZKHle0XtoMp8mXZZjc82prLeeiwPYP8Mxp
-U8RzdQiAb4F5zfp3XRO8JG3UwwSTvFjaQZwTH0TDy18rXAqCEqbfenGcySNSB17q
-+wUAhlfLAxDu/xK+m7Zv
-=R63k
+iQIcBAEBAgAGBQJLfFIoAAoJEDDcKcGyC63Vl/cP/0fu13mQtPcWgZ3eFXy1fHh6
+Z0BV928SNvrUVTOxn6Nv8pE3vnN+aX6a1dN07R8G0W9OyvAltCorydnC4iUh72aO
+gvjW5Ls5yB2G2Zwofe6EmML5x5LbheRzpM0d5vsm/ic8kPqcQR2irLt5x+VTlEx5
+s71sr6Vu16j06DuxW1YnB3NQuncErYDbSMNPlCzVIt/5DWB/ELUmX4dBmzsQ5LbM
+MXLnVHoWNbUSaZuslE1g9ImwFlwBFFotRIYStxN08Z/nRngK/LJqA5tO3FdS58ls
+II2h4GJtxxwIjqK+QHE4DMF94ShlpUmHuTkCQYiDK19wOcpYVva+Cpb2mJ1d057I
+TSPIxbmAY1QBsBULSqOhuRgPuZcUmaFjG6UsPavsQC+TMUCD0F+uww0ZFM7sbo+p
+/wiGhqGapJ+OjGlZGOlTj5mFA4Be5ERJf/Dcz9O/i81eQNA30aMLWWWnbwTO36QY
+xea6PmUdLsLUVyh89lwv2zGrqQsDyRBbapf8odCyEQVjaXfaqOygLQJbkxITk21w
+Dej4oxBT2BP0S9kQPvQlL+w2fe36OEtTG2GLQD2Yr10T6hEkhpJPcL+pSNO11uRF
+uXxJ4qrPJ0Ob+pPzkHqn+2jMbrPzv95M7/I0TAXx5eocpgvY0fs4WMm8DAmZ73Et
+3e3nSqkoZwLjXJg1OVF9
+=g0CB
 -----END PGP SIGNATURE-----
diff --git a/manifest.uuid b/manifest.uuid
index 93e1abb866..4d571f7197 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-f96add898f096cfc1e435c625ce74093d790b3c7
\ No newline at end of file
+721f33e7221c5fc907e9e293ac3242843f4fcfb7
\ No newline at end of file
diff --git a/tool/lemon.c b/tool/lemon.c
index d7e45308f7..f05e9e6ce1 100644
--- a/tool/lemon.c
+++ b/tool/lemon.c
@@ -2299,10 +2299,20 @@ to follow the previous rule.");
         psp->errorcnt++;
         psp->state = RESYNC_AFTER_DECL_ERROR;
       }else{
-        struct symbol *sp = Symbol_new(x);
-        psp->declargslot = &sp->datatype;
-        psp->insertLineMacro = 0;
-        psp->state = WAITING_FOR_DECL_ARG;
+        struct symbol *sp = Symbol_find(x);
+        if((sp) && (sp->datatype)){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+            "Symbol %%type \"%s\" already defined", x);
+          psp->errorcnt++;
+          psp->state = RESYNC_AFTER_DECL_ERROR;
+        }else{
+          if (!sp){
+            sp = Symbol_new(x);
+          }
+          psp->declargslot = &sp->datatype;
+          psp->insertLineMacro = 0;
+          psp->state = WAITING_FOR_DECL_ARG;
+        }
       }
       break;
     case WAITING_FOR_PRECEDENCE_SYMBOL: