Allow purging exported symbols

This commit is contained in:
ISSOtm
2020-03-24 10:52:02 +01:00
parent cb0a882a31
commit 7deb8d3e8a
2 changed files with 9 additions and 3 deletions

View File

@@ -101,7 +101,7 @@ uint32_t sym_GetConstantValue(char const *s);
struct sSymbol *sym_FindSymbol(char const *tzName); struct sSymbol *sym_FindSymbol(char const *tzName);
char *sym_GetStringValue(struct sSymbol const *sym); char *sym_GetStringValue(struct sSymbol const *sym);
struct sSymbol *sym_AddMacro(char const *tzSym, int32_t nDefLineNo); struct sSymbol *sym_AddMacro(char const *tzSym, int32_t nDefLineNo);
void sym_Ref(char const *tzSym); struct sSymbol *sym_Ref(char const *tzSym);
struct sSymbol *sym_AddString(char const *tzSym, char const *tzValue); struct sSymbol *sym_AddString(char const *tzSym, char const *tzValue);
uint32_t sym_GetDefinedValue(char const *s); uint32_t sym_GetDefinedValue(char const *s);
void sym_Purge(char const *tzName); void sym_Purge(char const *tzName);

View File

@@ -500,9 +500,13 @@ struct sSymbol *sym_AddReloc(char const *tzSym)
*/ */
void sym_Export(char const *tzSym) void sym_Export(char const *tzSym)
{ {
sym_Ref(tzSym);
struct sSymbol *nsym = sym_FindSymbol(tzSym); struct sSymbol *nsym = sym_FindSymbol(tzSym);
/* If the symbol doesn't exist, create a ref that can be purged */
if (!nsym) {
nsym = sym_Ref(tzSym);
nsym->isReferenced = false;
}
nsym->isExported = true; nsym->isExported = true;
} }
@@ -531,7 +535,7 @@ struct sSymbol *sym_AddMacro(char const *tzSym, int32_t nDefLineNo)
* Flag that a symbol is referenced in an RPN expression * Flag that a symbol is referenced in an RPN expression
* and create it if it doesn't exist yet * and create it if it doesn't exist yet
*/ */
void sym_Ref(char const *tzSym) struct sSymbol *sym_Ref(char const *tzSym)
{ {
struct sSymbol *nsym = sym_FindSymbol(tzSym); struct sSymbol *nsym = sym_FindSymbol(tzSym);
@@ -551,6 +555,8 @@ void sym_Ref(char const *tzSym)
nsym->type = SYM_REF; nsym->type = SYM_REF;
} }
nsym->isReferenced = true; nsym->isReferenced = true;
return nsym;
} }
/* /*