X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcc65%2Fcodelab.c;h=f36520835bef31d126ec1d0e96f9469981c7225e;hb=581c46c2136fa18bd3a60cddf6d2732862381023;hp=97ed7e3b8d8addcf6e0dca2aa5dcb577cac8ceeb;hpb=e6a5e57b472f091fb48dfd749c4012f9d65c1da0;p=cc65 diff --git a/src/cc65/codelab.c b/src/cc65/codelab.c index 97ed7e3b8..f36520835 100644 --- a/src/cc65/codelab.c +++ b/src/cc65/codelab.c @@ -1,15 +1,15 @@ /*****************************************************************************/ /* */ -/* codelab.c */ +/* codelab.c */ /* */ -/* Code label structure */ +/* 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 */ @@ -40,11 +40,12 @@ /* cc65 */ #include "codeent.h" #include "codelab.h" +#include "output.h" /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ @@ -59,7 +60,6 @@ CodeLabel* NewCodeLabel (const char* Name, unsigned Hash) L->Next = 0; L->Name = xstrdup (Name); L->Hash = Hash; - L->Flags = 0; L->Owner = 0; InitCollection (&L->JumpFrom); @@ -84,45 +84,36 @@ void FreeCodeLabel (CodeLabel* L) -void AddLabelRef (CodeLabel* L, struct CodeEntry* E) +void CL_AddRef (CodeLabel* L, struct CodeEntry* E) /* Let the CodeEntry E reference the label L */ { /* The insn at E jumps to this label */ E->JumpTo = L; + /* Replace the code entry argument with the name of the new label */ + CE_SetArg (E, L->Name); + /* Remember that in the label */ CollAppend (&L->JumpFrom, E); } -unsigned RemoveLabelRef (CodeLabel* L, const struct CodeEntry* E) -/* Remove a reference to this label, return the number of remaining references */ -{ - /* Delete the item */ - CollDeleteItem (&L->JumpFrom, E); - - /* Return the number of remaining references */ - return CollCount (&L->JumpFrom); -} - - - -void MoveLabelRefs (CodeLabel* OldLabel, CodeLabel* NewLabel) +void CL_MoveRefs (CodeLabel* OldLabel, CodeLabel* NewLabel) /* Move all references to OldLabel to point to NewLabel. OldLabel will have no - * more references on return. - */ +** more references on return. +*/ { /* Walk through all instructions referencing the old label */ - unsigned Count = CollCount (&OldLabel->JumpFrom); + unsigned Count = CL_GetRefCount (OldLabel); while (Count--) { - /* Get the instruction that references the old label */ - CodeEntry* E = CollAt (&OldLabel->JumpFrom, Count); + /* Get the instruction that references the old label */ + CodeEntry* E = CL_GetRef (OldLabel, Count); - /* Change the reference to the new label */ - CHECK (E->JumpTo == OldLabel); - AddLabelRef (NewLabel, E); + /* Change the reference to the new label */ + CHECK (E->JumpTo == OldLabel); + CL_AddRef (NewLabel, E); } @@ -132,11 +123,12 @@ void MoveLabelRefs (CodeLabel* OldLabel, CodeLabel* NewLabel) -void OutputCodeLabel (const CodeLabel* L, FILE* F) -/* Output the code label to a file */ +void CL_Output (const CodeLabel* L) +/* Output the code label to the output file */ { - fprintf (F, "%s:", L->Name); + WriteOutput ("%s:", L->Name); + if (strlen (L->Name) > 6) { + /* Label is too long, add a linefeed */ + WriteOutput ("\n"); + } } - - -