X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcc65%2Fcodelab.h;h=649c0a2b7aa8703817d03bab719edbdd0cf2cfd4;hb=8dd3cc35dcbd7155812e6a7c01039573aff640cb;hp=24681386a78e1289d3e44ab994691803e11c37fb;hpb=8a3bacd7f4fe699df9088cbd4c52f865b315d3d3;p=cc65 diff --git a/src/cc65/codelab.h b/src/cc65/codelab.h index 24681386a..649c0a2b7 100644 --- a/src/cc65/codelab.h +++ b/src/cc65/codelab.h @@ -1,15 +1,15 @@ /*****************************************************************************/ /* */ -/* label.h */ +/* codelab.h */ /* */ /* Code label structure */ /* */ /* */ /* */ -/* (C) 2001 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ +/* (C) 2001-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -33,34 +33,38 @@ -#ifndef LABEL_H -#define LABEL_H +#ifndef CODELAB_H +#define CODELAB_H -#include - /* common */ #include "coll.h" /*****************************************************************************/ -/* struct CodeLabel */ +/* Forwards */ /*****************************************************************************/ -/* Label flags, bitmapped */ -#define LF_DEF 0x0001U /* Label was defined */ +struct CodeEntry; + + + +/*****************************************************************************/ +/* struct CodeLabel */ +/*****************************************************************************/ + + /* Label structure */ typedef struct CodeLabel CodeLabel; struct CodeLabel { CodeLabel* Next; /* Next in hash list */ char* Name; /* Label name */ - unsigned short Hash; /* Hash over the name */ - unsigned short Flags; /* Flag flags */ + unsigned Hash; /* Hash over the name */ struct CodeEntry* Owner; /* Owner entry */ Collection JumpFrom; /* Entries that jump here */ }; @@ -79,12 +83,40 @@ CodeLabel* NewCodeLabel (const char* Name, unsigned Hash); void FreeCodeLabel (CodeLabel* L); /* Free the given code label */ -void OutputCodeLabel (FILE* F, const CodeLabel* L); -/* Output the code label to a file */ +#if defined(HAVE_INLINE) +INLINE unsigned CL_GetRefCount (const CodeLabel* L) +/* Get the number of references for this label */ +{ + return CollCount (&L->JumpFrom); +} +#else +# define CL_GetRefCount(L) CollCount (&(L)->JumpFrom) +#endif + +#if defined(HAVE_INLINE) +INLINE struct CodeEntry* CL_GetRef (CodeLabel* L, unsigned Index) +/* Get a code entry referencing this label */ +{ + return CollAt (&L->JumpFrom, Index); +} +#else +# define CL_GetRef(L, Index) CollAt (&(L)->JumpFrom, (Index)) +#endif + +void CL_AddRef (CodeLabel* L, struct CodeEntry* E); +/* Let the CodeEntry E reference the label L */ + +void CL_MoveRefs (CodeLabel* OldLabel, CodeLabel* NewLabel); +/* Move all references to OldLabel to point to NewLabel. OldLabel will have no + * more references on return. + */ + +void CL_Output (const CodeLabel* L); +/* Output the code label to the output file */ -/* End of label.h */ +/* End of codelab.h */ #endif