From 83e73742c80662af07124bbc0e6361a7361418d9 Mon Sep 17 00:00:00 2001 From: cuz Date: Mon, 18 Mar 2002 20:04:03 +0000 Subject: [PATCH] Prepare for separate ASM name in symbol table entry git-svn-id: svn://svn.cc65.org/cc65/trunk@1202 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/cc65/expr.c | 9 +++++---- src/cc65/symentry.c | 31 +++++++++++++++++++++++-------- src/cc65/symentry.h | 6 +++++- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 57d3ca89e..dd2469387 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -832,8 +832,9 @@ static int primary (ExprDesc* lval) { int k; - /* not a test at all, yet */ - lval->Test = 0; + /* Initialize fields in the expression stucture */ + lval->Test = 0; /* No test */ + lval->Sym = 0; /* Symbol unknown */ /* Character and integer constants. */ if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) { @@ -872,7 +873,7 @@ static int primary (ExprDesc* lval) ident Ident; /* Get a pointer to the symbol table entry */ - Sym = FindSym (CurTok.Ident); + Sym = lval->Sym = FindSym (CurTok.Ident); /* Is the symbol known? */ if (Sym) { @@ -2283,7 +2284,7 @@ static void parsesub (int k, ExprDesc* lval) if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) { Error ("Incompatible pointer types"); } else { - lval->ConstVal = (lval->ConstVal - lval2.ConstVal) / + lval->ConstVal = (lval->ConstVal - lval2.ConstVal) / CheckedPSizeOf (lhst); } /* Operate on pointers, result type is an integer */ diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index ff292a704..578c6c005 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2000-2001 Ullrich von Bassewitz */ +/* (C) 2000-2002 Ullrich von Bassewitz */ /* Wacholderweg 14 */ /* D-70597 Stuttgart */ /* EMail: uz@cc65.org */ @@ -66,6 +66,7 @@ SymEntry* NewSymEntry (const char* Name, unsigned Flags) E->Owner = 0; E->Flags = Flags; E->Type = 0; + E->AsmName = 0; memcpy (E->Name, Name, Len+1); /* Return the new entry */ @@ -78,6 +79,7 @@ void FreeSymEntry (SymEntry* E) /* Free a symbol entry */ { TypeFree (E->Type); + xfree (E->AsmName); 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 */ { static const struct { - const char* Name; - unsigned Val; + const char* Name; + unsigned Val; } Flags [] = { /* Beware: Order is important! */ { "SC_TYPEDEF", SC_TYPEDEF }, - { "SC_SFLD", SC_SFLD }, - { "SC_STRUCT", SC_STRUCT }, + { "SC_SFLD", SC_SFLD }, + { "SC_STRUCT", SC_STRUCT }, { "SC_AUTO", SC_AUTO }, { "SC_REGISTER", SC_REGISTER }, { "SC_STATIC", SC_STATIC }, - { "SC_EXTERN", SC_EXTERN }, - { "SC_ENUM", SC_ENUM }, - { "SC_CONST", SC_CONST }, + { "SC_EXTERN", SC_EXTERN }, + { "SC_ENUM", SC_ENUM }, + { "SC_CONST", SC_CONST }, { "SC_LABEL", SC_LABEL }, { "SC_PARAM", SC_PARAM }, { "SC_FUNC", SC_FUNC }, @@ -115,6 +117,11 @@ void DumpSymEntry (FILE* F, const SymEntry* E) /* Print the 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 */ SymFlags = E->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); +} + + diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 6fe4ce7f0..ba8723644 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2000-2001 Ullrich von Bassewitz */ +/* (C) 2000-2002 Ullrich von Bassewitz */ /* Wacholderweg 14 */ /* D-70597 Stuttgart */ /* EMail: uz@cc65.org */ @@ -98,6 +98,7 @@ struct SymEntry { struct SymTable* Owner; /* Symbol table the symbol is in */ unsigned Flags; /* Symbol flags */ type* Type; /* Symbol type */ + char* AsmName; /* Assembler name if any */ /* Data that differs for the different symbol types */ union { @@ -150,6 +151,9 @@ int IsTypeDef (const SymEntry* E); void ChangeSymType (SymEntry* Entry, type* Type); /* 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 */ -- 2.39.5