From 5b79d7e68539c6015419b71bb5663ebe95fe7ad3 Mon Sep 17 00:00:00 2001 From: uz Date: Tue, 25 Jan 2011 16:27:17 +0000 Subject: [PATCH] Convert imports, exports and debug symbols to use and write line infos instead of embedded file positions. git-svn-id: svn://svn.cc65.org/cc65/trunk@4918 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/ca65/symentry.c | 12 ++++++++- src/ca65/symentry.h | 13 +++------- src/ca65/symtab.c | 60 +++++++++++++++++++++++++-------------------- 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/ca65/symentry.c b/src/ca65/symentry.c index 9844fc44e..aebab7416 100644 --- a/src/ca65/symentry.c +++ b/src/ca65/symentry.c @@ -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; +} + + + diff --git a/src/ca65/symentry.h b/src/ca65/symentry.h index 633b3b457..82ca46c55 100644 --- a/src/ca65/symentry.h +++ b/src/ca65/symentry.h @@ -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 diff --git a/src/ca65/symtab.c b/src/ca65/symtab.c index 8356d34b5..661c05f6d 100644 --- a/src/ca65/symtab.c +++ b/src/ca65/symtab.c @@ -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; }