From 88774521a3d9b6959d50bcada04187bc30223576 Mon Sep 17 00:00:00 2001 From: uz Date: Fri, 19 Aug 2011 11:06:52 +0000 Subject: [PATCH] Use CollTransfer where possible. git-svn-id: svn://svn.cc65.org/cc65/trunk@5225 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/ca65/lineinfo.c | 26 ++++++-------------------- src/ca65/symentry.c | 3 +++ src/ca65/symtab.c | 14 +++++++------- 3 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/ca65/lineinfo.c b/src/ca65/lineinfo.c index cddd17ac3..7e9edc60c 100644 --- a/src/ca65/lineinfo.c +++ b/src/ca65/lineinfo.c @@ -271,17 +271,13 @@ void DoneLineInfo (void) void EndLine (LineInfo* LI) /* End a line that is tracked by the given LineInfo structure */ { - unsigned I; - /* Close the spans for the line */ CloseSpans (&LI->OpenSpans); /* Move the spans to the list of all spans for this line, then clear the * list of open spans. */ - for (I = 0; I < CollCount (&LI->OpenSpans); ++I) { - CollAppend (&LI->Spans, CollAtUnchecked (&LI->OpenSpans, I)); - } + CollTransfer (&LI->Spans, &LI->OpenSpans); CollDeleteAll (&LI->OpenSpans); /* Line info is no longer active - remove it from the list of current @@ -376,23 +372,13 @@ void GetFullLineInfo (Collection* LineInfos) { unsigned I; - /* If the collection is currently empty, grow it as necessary */ - if (CollCount (LineInfos) == 0) { - CollGrow (LineInfos, CollCount (&CurLineInfo)); - } - - /* Copy all valid line infos to the collection */ + /* Bum the reference counter for all active line infos */ for (I = 0; I < CollCount (&CurLineInfo); ++I) { - - /* Get the line info from the slot */ - LineInfo* LI = CollAt (&CurLineInfo, I); - - /* Bump the reference counter */ - ++LI->RefCount; - - /* Return it to the caller */ - CollAppend (LineInfos, LI); + ++((LineInfo*)CollAt (&CurLineInfo, I))->RefCount; } + + /* Copy all line infos over */ + CollTransfer (LineInfos, &CurLineInfo); } diff --git a/src/ca65/symentry.c b/src/ca65/symentry.c index 1b81f6a2b..570008d78 100644 --- a/src/ca65/symentry.c +++ b/src/ca65/symentry.c @@ -419,6 +419,9 @@ void SymExport (SymEntry* S, unsigned char AddrSize, unsigned Flags) /* Set the symbol data */ S->Flags |= (SF_EXPORT | SF_REFERENCED | Flags); + + /* Remember line info for this reference */ + CollAppend (&S->RefLines, GetAsmLineInfo ()); } diff --git a/src/ca65/symtab.c b/src/ca65/symtab.c index 408c6daf6..dc3c219ab 100644 --- a/src/ca65/symtab.c +++ b/src/ca65/symtab.c @@ -503,11 +503,9 @@ static void SymCheckUndefined (SymEntry* S) } } if (S->Flags & SF_REFERENCED) { - unsigned I; + /* Mark as referenced and move the line info */ Sym->Flags |= SF_REFERENCED; - for (I = 0; I < CollCount (&S->RefLines); ++I) { - CollAppend (&Sym->RefLines, CollAtUnchecked (&S->RefLines, I)); - } + CollTransfer (&Sym->RefLines, &S->RefLines); CollDeleteAll (&S->RefLines); } @@ -564,9 +562,11 @@ void SymCheck (void) */ if (S->Flags & SF_GLOBAL) { if (S->Flags & SF_DEFINED) { - SymExportFromGlobal (S); - } else { - SymImportFromGlobal (S); + printf ("ExportFromGlobal: %s\n", SB_GetConstBuf (GetSymName (S))); + SymExportFromGlobal (S); + } else { + printf ("ImportFromGlobal: %s\n", SB_GetConstBuf (GetSymName (S))); + SymImportFromGlobal (S); } } -- 2.39.5