From b064002266b184b6d10d54c44a596e03b3d3ec76 Mon Sep 17 00:00:00 2001 From: uz Date: Mon, 22 Aug 2011 17:53:00 +0000 Subject: [PATCH] Added a tpool module that implements a global pool for generic types, so we 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 | 3 +- src/ld65/make/watcom.mak | 3 +- src/ld65/tpool.c | 71 +++++++++++++++++++++++++++++ src/ld65/tpool.h | 97 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 src/ld65/tpool.c create mode 100644 src/ld65/tpool.h diff --git a/src/ld65/make/gcc.mak b/src/ld65/make/gcc.mak index 9e071f685..45e2a93db 100644 --- a/src/ld65/make/gcc.mak +++ b/src/ld65/make/gcc.mak @@ -59,7 +59,8 @@ OBJS = asserts.o \ segments.o \ span.o \ spool.o \ - tgtcfg.o + tgtcfg.o \ + tpool.o # ----------------------------------------------------------------------------- # List of all config includes diff --git a/src/ld65/make/watcom.mak b/src/ld65/make/watcom.mak index cbad1d803..a0ec3e956 100644 --- a/src/ld65/make/watcom.mak +++ b/src/ld65/make/watcom.mak @@ -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 index 000000000..07b4bb3a3 --- /dev/null +++ b/src/ld65/tpool.c @@ -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 index 000000000..09a3eae2e --- /dev/null +++ b/src/ld65/tpool.h @@ -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 + + + + -- 2.39.5