]> git.sur5r.net Git - cc65/commitdiff
Convert imports, exports and debug symbols to use and write line infos instead
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 25 Jan 2011 16:27:17 +0000 (16:27 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 25 Jan 2011 16:27:17 +0000 (16:27 +0000)
of embedded file positions.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4918 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/symentry.c
src/ca65/symentry.h
src/ca65/symtab.c

index 9844fc44e5a0eea16c0472a01587aa377ace7b87..aebab7416d1441cf177779f353d7d964fd04ed81 100644 (file)
@@ -86,7 +86,8 @@ SymEntry* NewSymEntry (const StrBuf* Name, unsigned Flags)
     S->Right             = 0;
     S->Locals            = 0;
     S->Sym.Tab    = 0;
-    S->Pos               = CurTok.Pos;
+    S->LineInfos  = EmptyCollection;
+    GetFullLineInfo (&S->LineInfos);
     for (I = 0; I < sizeof (S->GuessedUse) / sizeof (S->GuessedUse[0]); ++I) {
         S->GuessedUse[I] = 0;
     }
@@ -693,3 +694,12 @@ unsigned GetSymInfoFlags (const SymEntry* S, long* ConstVal)
 
 
 
+const FilePos* GetSymPos (const SymEntry* S)
+/* Return the position of first occurence in the source for the given symbol */
+{
+    /* The actual source entry is in slot zero */
+    return &((const LineInfo*) CollConstAt (&S->LineInfos, 0))->Pos;
+}
+
+
+
index 633b3b45707f99914522735a77b2ce21b226a209..82ca46c551d957ba0c450805903d5a89b9c501d5 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
+/* (C) 1998-2011, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -86,7 +86,7 @@ struct SymEntry {
         struct SymTable*    Tab;               /* Table this symbol is in */
         struct SymEntry*    Entry;
     } Sym;
-    FilePos                    Pos;            /* File position for this symbol */
+    Collection          LineInfos;      /* Line infos for this symbol */
     FilePos*            GuessedUse[1];  /* File position where symbol
                                          * address size was guessed, and the
                                          * smallest possible addressing was NOT
@@ -345,15 +345,8 @@ unsigned GetSymInfoFlags (const SymEntry* Sym, long* ConstVal);
  * See common/symdefs.h for more information.
  */
 
-#if defined(HAVE_INLINE)
-INLINE const FilePos* GetSymPos (const SymEntry* S)
+const FilePos* GetSymPos (const SymEntry* S);
 /* Return the position of first occurence in the source for the given symbol */
-{
-    return &S->Pos;
-}
-#else
-#  define GetSymPos(S)   (&(S)->Pos)
-#endif
 
 
 
index 8356d34b5b33b93cdd499579ee6e087721b0c989..661c05f6d9dd54d0402fdbe4070b39fe8aed46d7 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2010, Ullrich von Bassewitz                                      */
+/* (C) 1998-2011, Ullrich von Bassewitz                                      */
 /*                Roemerstrasse 52                                           */
 /*                D-70794 Filderstadt                                        */
 /* EMail:         uz@cc65.org                                                */
@@ -458,14 +458,16 @@ static void SymCheckUndefined (SymEntry* S)
         if (S->Flags & SF_EXPORT) {
            if (Sym->Flags & SF_IMPORT) {
                /* The symbol is already marked as import */
-               PError (&S->Pos, "Symbol `%s' is already an import",
-                        GetString (Sym->Name));
+                       LIError (&S->LineInfos,
+                         "Symbol `%s' is already an import",
+                         GetString (Sym->Name));
            }
             if (Sym->Flags & SF_EXPORT) {
                 /* The symbol is already marked as an export. */
                 if (Sym->AddrSize > S->ExportSize) {
                     /* We're exporting a symbol smaller than it actually is */
-                    PWarning (&S->Pos, 1, "Symbol `%m%p' is %s but exported %s",
+                    LIWarning (&S->LineInfos, 1,
+                               "Symbol `%m%p' is %s but exported %s",
                               GetSymName (Sym),
                               AddrSizeToStr (Sym->AddrSize),
                               AddrSizeToStr (S->ExportSize));
@@ -480,10 +482,11 @@ static void SymCheckUndefined (SymEntry* S)
                 }
                 if (Sym->AddrSize > Sym->ExportSize) {
                     /* We're exporting a symbol smaller than it actually is */
-                    PWarning (&S->Pos, 1, "Symbol `%m%p' is %s but exported %s",
-                              GetSymName (Sym),
-                              AddrSizeToStr (Sym->AddrSize),
-                              AddrSizeToStr (Sym->ExportSize));
+                    LIWarning (&S->LineInfos, 1,
+                               "Symbol `%m%p' is %s but exported %s",
+                               GetSymName (Sym),
+                               AddrSizeToStr (Sym->AddrSize),
+                               AddrSizeToStr (Sym->ExportSize));
                 }
             }
         }
@@ -499,8 +502,9 @@ static void SymCheckUndefined (SymEntry* S)
        /* The symbol is definitely undefined */
        if (S->Flags & SF_EXPORT) {
            /* We will not auto-import an export */
-           PError (&S->Pos, "Exported symbol `%m%p' was never defined",
-                    GetSymName (S));
+           LIError (&S->LineInfos, 
+                     "Exported symbol `%m%p' was never defined",
+                     GetSymName (S));
        } else {
            if (AutoImport) {
                /* Mark as import, will be indexed later */
@@ -509,7 +513,9 @@ static void SymCheckUndefined (SymEntry* S)
                 S->AddrSize = CodeAddrSize;
            } else {
                /* Error */
-               PError (&S->Pos, "Symbol `%m%p' is undefined", GetSymName (S));
+               LIError (&S->LineInfos, 
+                         "Symbol `%m%p' is undefined", 
+                         GetSymName (S));
            }
        }
     }
@@ -567,9 +573,9 @@ void SymCheck (void)
            if ((S->Flags & SF_DEFINED) != 0 && (S->Flags & SF_REFERENCED) == 0) {
                 const StrBuf* Name = GetStrBuf (S->Name);
                 if (SB_At (Name, 0) != '.') {           /* Ignore internals */
-                    PWarning (&S->Pos, 2,
-                              "Symbol `%m%p' is defined but never used",
-                              GetSymName (S));
+                    LIWarning (&S->LineInfos, 2,
+                               "Symbol `%m%p' is defined but never used",
+                               GetSymName (S));
                 }
            }
 
@@ -577,9 +583,9 @@ void SymCheck (void)
            if (S->Flags & SF_IMPORT) {
                if ((S->Flags & (SF_REFERENCED | SF_FORCED)) == SF_NONE) {
                    /* Imported symbol is not referenced */
-                   PWarning (&S->Pos, 2,
-                              "Symbol `%m%p' is imported but never used",
-                              GetSymName (S));
+                   LIWarning (&S->LineInfos, 2,
+                               "Symbol `%m%p' is imported but never used",
+                               GetSymName (S));
                } else {
                    /* Give the import an id, count imports */
                    S->ImportId = ImportCount++;
@@ -605,11 +611,11 @@ void SymCheck (void)
                         S->ExportSize = S->AddrSize;
                     } else if (S->AddrSize > S->ExportSize) {
                         /* We're exporting a symbol smaller than it actually is */
-                        PWarning (&S->Pos, 1,
-                                  "Symbol `%m%p' is %s but exported %s",
-                                  GetSymName (S),
-                                  AddrSizeToStr (S->AddrSize),
-                                  AddrSizeToStr (S->ExportSize));
+                        LIWarning (&S->LineInfos, 1,
+                                   "Symbol `%m%p' is %s but exported %s",
+                                   GetSymName (S),
+                                   AddrSizeToStr (S->AddrSize),
+                                   AddrSizeToStr (S->ExportSize));
                     }
                 }
                 ED_Done (&ED);
@@ -689,7 +695,7 @@ void WriteImports (void)
 
             ObjWrite8 (S->AddrSize);
                    ObjWriteVar (S->Name);
-           ObjWritePos (&S->Pos);
+           WriteLineInfo (&S->LineInfos);
        }
        S = S->List;
     }
@@ -754,8 +760,8 @@ void WriteExports (void)
                WriteExpr (S->Expr);
             }
 
-           /* Write the source file position */
-           ObjWritePos (&S->Pos);
+           /* Write the line infos */
+           WriteLineInfo (&S->LineInfos);
        }
        S = S->List;
     }
@@ -818,8 +824,8 @@ void WriteDbgSyms (void)
                    WriteExpr (S->Expr);
                }
 
-               /* Write the source file position */
-               ObjWritePos (&S->Pos);
+               /* Write the line infos */
+               WriteLineInfo (&S->LineInfos);
            }
            S = S->List;
        }