1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-27 15:29:46 +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 "error.h"
#include "fileio.h"
#include "initfunc.h"
#include "objdata.h"
#include "expr.h"
#include "exports.h"
@ -75,13 +76,10 @@ static Export** ExpPool = 0; /* Exports array */
/* Defines for the flags in Export */
#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 (IS_EXP_INIT (E->Type)) {
CollAppend (&Initializers, E);
AddInitFunc (E);
}
/* Create a hash value for the given name */
@ -265,7 +263,7 @@ void InsertExport (Export* E)
ImpOpen -= E->ImpCount; /* Decrease open imports now */
xfree (L);
/* We must run through the import list and change the
* export pointer now.
* export pointer now.
*/
Imp = E->ImpList;
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 \
fragment.o \
global.o \
initfunc.o \
library.o \
main.o \
mapfile.o \