1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-10 07:29:05 +00:00

New module to handle initializers

git-svn-id: svn://svn.cc65.org/cc65/trunk@432 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2000-11-03 09:31:18 +00:00
parent 0dce6a79b6
commit 12996ee12b
4 changed files with 155 additions and 6 deletions

View File

@ -48,6 +48,7 @@
#include "global.h" #include "global.h"
#include "error.h" #include "error.h"
#include "fileio.h" #include "fileio.h"
#include "initfunc.h"
#include "objdata.h" #include "objdata.h"
#include "expr.h" #include "expr.h"
#include "exports.h" #include "exports.h"
@ -75,13 +76,10 @@ static Export** ExpPool = 0; /* Exports array */
/* Defines for the flags in Export */ /* Defines for the flags in Export */
#define EXP_USERMARK 0x0001 #define EXP_USERMARK 0x0001
/* List of all exports that are also initializers */
static Collection Initializers = STATIC_COLLECTION_INITIALIZER;
/*****************************************************************************/ /*****************************************************************************/
/* Import handling */ /* Import handling */
/*****************************************************************************/ /*****************************************************************************/
@ -233,7 +231,7 @@ void InsertExport (Export* E)
/* If this is an initializer, insert it into the initializer list */ /* If this is an initializer, insert it into the initializer list */
if (IS_EXP_INIT (E->Type)) { if (IS_EXP_INIT (E->Type)) {
CollAppend (&Initializers, E); AddInitFunc (E);
} }
/* Create a hash value for the given name */ /* Create a hash value for the given name */
@ -265,7 +263,7 @@ void InsertExport (Export* E)
ImpOpen -= E->ImpCount; /* Decrease open imports now */ ImpOpen -= E->ImpCount; /* Decrease open imports now */
xfree (L); xfree (L);
/* We must run through the import list and change the /* We must run through the import list and change the
* export pointer now. * export pointer now.
*/ */
Imp = E->ImpList; Imp = E->ImpList;
while (Imp) { while (Imp) {

79
src/ld65/initfunc.c Normal file
View File

@ -0,0 +1,79 @@
/*****************************************************************************/
/* */
/* initfunc.c */
/* */
/* Init/cleanup function handling */
/* */
/* */
/* */
/* (C) 2000 Ullrich von Bassewitz */
/* Wacholderweg 14 */
/* D-70597 Stuttgart */
/* EMail: uz@musoftware.de */
/* */
/* */
/* 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. */
/* */
/*****************************************************************************/
/* common */
#include "coll.h"
/* ld65 */
#include "exports.h"
#include "segments.h"
#include "initfunc.h"
/*****************************************************************************/
/* Data */
/*****************************************************************************/
/* List of all exports that are also initializers/cleanup functions */
static Collection InitFunctions = STATIC_COLLECTION_INITIALIZER;
static Collection CleanupFunctions = STATIC_COLLECTION_INITIALIZER;
/*****************************************************************************/
/* Code */
/*****************************************************************************/
void AddInitFunc (Export* E)
/* Add the given export to the list of initializers */
{
CollAppend (&InitFunctions, E);
}
void AddCleanupFunc (Export* E)
/* Add the given export to the list of cleanup functions */
{
CollAppend (&CleanupFunctions, E);
}

71
src/ld65/initfunc.h Normal file
View File

@ -0,0 +1,71 @@
/*****************************************************************************/
/* */
/* initfunc.h */
/* */
/* Init/cleanup function handling */
/* */
/* */
/* */
/* (C) 2000 Ullrich von Bassewitz */
/* Wacholderweg 14 */
/* D-70597 Stuttgart */
/* EMail: uz@musoftware.de */
/* */
/* */
/* 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 INITFUNC_H
#define INITFUNC_H
/*****************************************************************************/
/* Forwards */
/*****************************************************************************/
struct Export;
/*****************************************************************************/
/* Code */
/*****************************************************************************/
void AddInitFunc (struct Export* E);
/* Add the given export to the list of initializers */
void AddCleanupFunc (struct Export* E);
/* Add the given export to the list of cleanup functions */
/* End of initfunc.h */
#endif

View File

@ -28,6 +28,7 @@ OBJS = bin.o \
fileio.o \ fileio.o \
fragment.o \ fragment.o \
global.o \ global.o \
initfunc.o \
library.o \ library.o \
main.o \ main.o \
mapfile.o \ mapfile.o \