]> git.sur5r.net Git - cc65/commitdiff
Added a tpool module that implements a global pool for generic types, so we
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 22 Aug 2011 17:53:00 +0000 (17:53 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 22 Aug 2011 17:53:00 +0000 (17:53 +0000)
can merge duplicate ones and assign them global ids.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5262 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/make/gcc.mak
src/ld65/make/watcom.mak
src/ld65/tpool.c [new file with mode: 0644]
src/ld65/tpool.h [new file with mode: 0644]

index 9e071f685768569eca94c7a517cc7c998024b3c7..45e2a93dbb995a4683479162bb97af8cd86a1f34 100644 (file)
@@ -59,7 +59,8 @@ OBJS =        asserts.o       \
        segments.o      \
         span.o          \
        spool.o         \
-       tgtcfg.o
+       tgtcfg.o        \
+        tpool.o
 
 # -----------------------------------------------------------------------------
 # List of all config includes
index cbad1d803e38074341cc374f057de4438612b01a..a0ec3e95616f7898bca469ad77554f373c25096e 100644 (file)
@@ -90,7 +90,8 @@ OBJS =        asserts.obj     \
        segments.obj    \
         span.obj        \
         spool.obj       \
-       tgtcfg.obj
+       tgtcfg.obj      \
+        tpool.obj
 
 LIBS = ../common/common.lib
 
diff --git a/src/ld65/tpool.c b/src/ld65/tpool.c
new file mode 100644 (file)
index 0000000..07b4bb3
--- /dev/null
@@ -0,0 +1,71 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                  tpool.c                                  */
+/*                                                                           */
+/*                          Pool for generic types                           */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2011,      Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+/* ld65 */
+#include "tpool.h"
+
+
+
+/*****************************************************************************/
+/*                                          Data                                    */
+/*****************************************************************************/
+
+
+
+/* The string pool we're using */
+StringPool* TypePool = 0;
+
+
+
+/*****************************************************************************/
+/*                                  Code                                    */
+/*****************************************************************************/
+
+
+
+void InitTypePool (void)
+/* Initialize the type pool */
+{
+    /* Allocate a type pool */
+    TypePool = NewStringPool (137);
+
+    /* We insert the empty string as first entry here, so it will have id
+     * zero.
+     */
+    SP_AddStr (TypePool, "");
+}
+
+
+
diff --git a/src/ld65/tpool.h b/src/ld65/tpool.h
new file mode 100644 (file)
index 0000000..09a3eae
--- /dev/null
@@ -0,0 +1,97 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                  tpool.h                                  */
+/*                                                                           */
+/*                          Pool for generic types                           */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2011,      Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
+/*                                                                           */
+/*                                                                           */
+/* This software is provided 'as-is', without any expressed or implied       */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.                                    */
+/*                                                                           */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:                            */
+/*                                                                           */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.                                       */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software.                      */
+/* 3. This notice may not be removed or altered from any source              */
+/*    distribution.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef TPOOL_H
+#define TPOOL_H
+
+
+
+/* common */
+#include "strpool.h"
+
+
+
+/*****************************************************************************/
+/*                                          Data                                    */
+/*****************************************************************************/
+
+
+
+/* An empty type */
+#define EMPTY_TYPE_ID   0U
+
+/* The string pool we're using */
+extern StringPool* TypePool;
+
+
+
+/*****************************************************************************/
+/*                                  Code                                    */
+/*****************************************************************************/
+
+
+
+#if defined(HAVE_INLINE)
+INLINE unsigned GetTypeId (const StrBuf* Type)
+/* Return the id of the given generic type */
+{
+    return SP_Add (TypePool, Type);
+}
+#else
+#  define GetTypeId(Type)       SP_Add (TypePool, (Type))
+#endif
+
+#if defined(HAVE_INLINE)
+INLINE const StrBuf* GetType (unsigned Index)
+/* Convert a type index into a type string */
+{
+    return SP_Get (TypePool, Index);
+}
+#else
+#  define GetType(Index)        SP_Get (TypePool, (Index))
+#endif
+
+void InitTypePool (void);
+/* Initialize the type pool */
+
+
+
+/* End of tpool.h */
+
+#endif
+
+
+
+