]> git.sur5r.net Git - cc65/commitdiff
Use CollTransfer where possible.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 19 Aug 2011 11:06:52 +0000 (11:06 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 19 Aug 2011 11:06:52 +0000 (11:06 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5225 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/lineinfo.c
src/ca65/symentry.c
src/ca65/symtab.c

index cddd17ac3c0a652b92318a85ed83561cadf3dd14..7e9edc60caee0f2aa0d896582f085fe6ce506cc1 100644 (file)
@@ -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);
 }
 
 
index 1b81f6a2b22d70292f11490290a74fb1c7841475..570008d78731e371ae6a1f42d22ddd60f0a56f91 100644 (file)
@@ -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 ());
 }
 
 
index 408c6daf675acff540e22f8ed2010c6019c530b7..dc3c219ab8d04d02c56b2f135c7fd44e1229d4a0 100644 (file)
@@ -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);
            }
        }