S->Right = 0;
S->Locals = 0;
S->Sym.Tab = 0;
- S->Pos = CurTok.Pos;
+ S->LineInfos = EmptyCollection;
+ GetFullLineInfo (&S->LineInfos, 1);
for (I = 0; I < sizeof (S->GuessedUse) / sizeof (S->GuessedUse[0]); ++I) {
S->GuessedUse[I] = 0;
}
S->ExportSize = S->AddrSize;
} else if (S->AddrSize > S->ExportSize) {
/* We're exporting a symbol smaller than it actually is */
- PWarning (GetSymPos (S), 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));
}
}
if ((S->Flags & SF_LOCAL) != 0) {
/* This is a cheap local symbol */
return 0;
+ } else if (S->Sym.Tab == 0) {
+ /* Symbol not in a table. This may happen if there have been errors
+ * before. Return NULL in this case to avoid further errors.
+ */
+ return 0;
} else {
/* This is a global symbol */
return S->Sym.Tab->Parent;
+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;
+}
+
+
+