Prepare for separate ASM name in symbol table entry
git-svn-id: svn://svn.cc65.org/cc65/trunk@1202 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -832,8 +832,9 @@ static int primary (ExprDesc* lval)
|
|||||||
{
|
{
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
/* not a test at all, yet */
|
/* Initialize fields in the expression stucture */
|
||||||
lval->Test = 0;
|
lval->Test = 0; /* No test */
|
||||||
|
lval->Sym = 0; /* Symbol unknown */
|
||||||
|
|
||||||
/* Character and integer constants. */
|
/* Character and integer constants. */
|
||||||
if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) {
|
if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) {
|
||||||
@@ -872,7 +873,7 @@ static int primary (ExprDesc* lval)
|
|||||||
ident Ident;
|
ident Ident;
|
||||||
|
|
||||||
/* Get a pointer to the symbol table entry */
|
/* Get a pointer to the symbol table entry */
|
||||||
Sym = FindSym (CurTok.Ident);
|
Sym = lval->Sym = FindSym (CurTok.Ident);
|
||||||
|
|
||||||
/* Is the symbol known? */
|
/* Is the symbol known? */
|
||||||
if (Sym) {
|
if (Sym) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2000-2001 Ullrich von Bassewitz */
|
/* (C) 2000-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
@@ -66,6 +66,7 @@ SymEntry* NewSymEntry (const char* Name, unsigned Flags)
|
|||||||
E->Owner = 0;
|
E->Owner = 0;
|
||||||
E->Flags = Flags;
|
E->Flags = Flags;
|
||||||
E->Type = 0;
|
E->Type = 0;
|
||||||
|
E->AsmName = 0;
|
||||||
memcpy (E->Name, Name, Len+1);
|
memcpy (E->Name, Name, Len+1);
|
||||||
|
|
||||||
/* Return the new entry */
|
/* Return the new entry */
|
||||||
@@ -78,6 +79,7 @@ void FreeSymEntry (SymEntry* E)
|
|||||||
/* Free a symbol entry */
|
/* Free a symbol entry */
|
||||||
{
|
{
|
||||||
TypeFree (E->Type);
|
TypeFree (E->Type);
|
||||||
|
xfree (E->AsmName);
|
||||||
xfree (E);
|
xfree (E);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,19 +89,19 @@ void DumpSymEntry (FILE* F, const SymEntry* E)
|
|||||||
/* Dump the given symbol table entry to the file in readable form */
|
/* Dump the given symbol table entry to the file in readable form */
|
||||||
{
|
{
|
||||||
static const struct {
|
static const struct {
|
||||||
const char* Name;
|
const char* Name;
|
||||||
unsigned Val;
|
unsigned Val;
|
||||||
} Flags [] = {
|
} Flags [] = {
|
||||||
/* Beware: Order is important! */
|
/* Beware: Order is important! */
|
||||||
{ "SC_TYPEDEF", SC_TYPEDEF },
|
{ "SC_TYPEDEF", SC_TYPEDEF },
|
||||||
{ "SC_SFLD", SC_SFLD },
|
{ "SC_SFLD", SC_SFLD },
|
||||||
{ "SC_STRUCT", SC_STRUCT },
|
{ "SC_STRUCT", SC_STRUCT },
|
||||||
{ "SC_AUTO", SC_AUTO },
|
{ "SC_AUTO", SC_AUTO },
|
||||||
{ "SC_REGISTER", SC_REGISTER },
|
{ "SC_REGISTER", SC_REGISTER },
|
||||||
{ "SC_STATIC", SC_STATIC },
|
{ "SC_STATIC", SC_STATIC },
|
||||||
{ "SC_EXTERN", SC_EXTERN },
|
{ "SC_EXTERN", SC_EXTERN },
|
||||||
{ "SC_ENUM", SC_ENUM },
|
{ "SC_ENUM", SC_ENUM },
|
||||||
{ "SC_CONST", SC_CONST },
|
{ "SC_CONST", SC_CONST },
|
||||||
{ "SC_LABEL", SC_LABEL },
|
{ "SC_LABEL", SC_LABEL },
|
||||||
{ "SC_PARAM", SC_PARAM },
|
{ "SC_PARAM", SC_PARAM },
|
||||||
{ "SC_FUNC", SC_FUNC },
|
{ "SC_FUNC", SC_FUNC },
|
||||||
@@ -115,6 +117,11 @@ void DumpSymEntry (FILE* F, const SymEntry* E)
|
|||||||
/* Print the name */
|
/* Print the name */
|
||||||
fprintf (F, "%s:\n", E->Name);
|
fprintf (F, "%s:\n", E->Name);
|
||||||
|
|
||||||
|
/* Print the assembler name if we have one */
|
||||||
|
if (E->AsmName) {
|
||||||
|
fprintf (F, " AsmName: %s\n", E->AsmName);
|
||||||
|
}
|
||||||
|
|
||||||
/* Print the flags */
|
/* Print the flags */
|
||||||
SymFlags = E->Flags;
|
SymFlags = E->Flags;
|
||||||
fprintf (F, " Flags: ");
|
fprintf (F, " Flags: ");
|
||||||
@@ -158,4 +165,12 @@ void ChangeSymType (SymEntry* Entry, type* Type)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ChangeAsmName (SymEntry* Entry, const char* NewAsmName)
|
||||||
|
/* Change the assembler name of the symbol */
|
||||||
|
{
|
||||||
|
xfree (Entry->AsmName);
|
||||||
|
Entry->AsmName = xstrdup (NewAsmName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2000-2001 Ullrich von Bassewitz */
|
/* (C) 2000-2002 Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Wacholderweg 14 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70597 Stuttgart */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
@@ -98,6 +98,7 @@ struct SymEntry {
|
|||||||
struct SymTable* Owner; /* Symbol table the symbol is in */
|
struct SymTable* Owner; /* Symbol table the symbol is in */
|
||||||
unsigned Flags; /* Symbol flags */
|
unsigned Flags; /* Symbol flags */
|
||||||
type* Type; /* Symbol type */
|
type* Type; /* Symbol type */
|
||||||
|
char* AsmName; /* Assembler name if any */
|
||||||
|
|
||||||
/* Data that differs for the different symbol types */
|
/* Data that differs for the different symbol types */
|
||||||
union {
|
union {
|
||||||
@@ -150,6 +151,9 @@ int IsTypeDef (const SymEntry* E);
|
|||||||
void ChangeSymType (SymEntry* Entry, type* Type);
|
void ChangeSymType (SymEntry* Entry, type* Type);
|
||||||
/* Change the type of the given symbol */
|
/* Change the type of the given symbol */
|
||||||
|
|
||||||
|
void ChangeAsmName (SymEntry* Entry, const char* NewAsmName);
|
||||||
|
/* Change the assembler name of the symbol */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* End of symentry.h */
|
/* End of symentry.h */
|
||||||
|
|||||||
Reference in New Issue
Block a user