]> git.sur5r.net Git - cc65/blobdiff - src/cc65/symentry.c
The check for illegal storage classes on globals was wrong
[cc65] / src / cc65 / symentry.c
index 578c6c0054d38ef9e11e20fbc5197a83e7a77d7f..bac584becfdb56aed0262a335d4bb3d617cc347f 100644 (file)
@@ -39,6 +39,7 @@
 #include "xmalloc.h"
 
 /* cc65 */
+#include "anonname.h"
 #include "symentry.h"
 
 
@@ -93,22 +94,22 @@ void DumpSymEntry (FILE* F, const SymEntry* E)
        unsigned            Val;
     } Flags [] = {
        /* Beware: Order is important! */
-       { "SC_TYPEDEF",     SC_TYPEDEF  },
-       { "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_LABEL",       SC_LABEL    },
-       { "SC_PARAM",       SC_PARAM    },
-       { "SC_FUNC",        SC_FUNC     },
-       { "SC_STORAGE",     SC_STORAGE  },
-       { "SC_DEF",         SC_DEF      },
-       { "SC_REF",         SC_REF      },
-       { "SC_ZEROPAGE",    SC_ZEROPAGE },
+       { "SC_TYPEDEF",     SC_TYPEDEF          },
+               { "SC_STRUCTFIELD", SC_STRUCTFIELD      },
+       { "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_LABEL",       SC_LABEL            },
+       { "SC_PARAM",       SC_PARAM            },
+       { "SC_FUNC",        SC_FUNC             },
+       { "SC_STORAGE",     SC_STORAGE          },
+       { "SC_DEF",         SC_DEF              },
+       { "SC_REF",         SC_REF              },
+       { "SC_ZEROPAGE",    SC_ZEROPAGE         },
     };
 
     unsigned I;
@@ -148,10 +149,14 @@ void DumpSymEntry (FILE* F, const SymEntry* E)
 
 
 
-int IsTypeDef (const SymEntry* E)
-/* Return true if the given entry is a typedef entry */
+void CvtRegVarToAuto (SymEntry* Sym)
+/* Convert a register variable to an auto variable */
 {
-    return ((E->Flags & SC_TYPEDEF) == SC_TYPEDEF);
+    /* Change the storage class */
+    Sym->Flags = (Sym->Flags & ~(SC_REGISTER | SC_STATIC | SC_EXTERN)) | SC_AUTO;
+
+    /* Transfer the stack offset from register save area to actual offset */
+    Sym->V.Offs = Sym->V.R.SaveOffs;
 }
 
 
@@ -166,7 +171,7 @@ void ChangeSymType (SymEntry* Entry, type* Type)
 
 
 void ChangeAsmName (SymEntry* Entry, const char* NewAsmName)
-/* Change the assembler name of the symbol */              
+/* Change the assembler name of the symbol */
 {
     xfree (Entry->AsmName);
     Entry->AsmName = xstrdup (NewAsmName);
@@ -174,3 +179,11 @@ void ChangeAsmName (SymEntry* Entry, const char* NewAsmName)
 
 
 
+int HasAnonName (const SymEntry* Entry)
+/* Return true if the symbol entry has an anonymous name */
+{
+    return IsAnonName (Entry->Name);
+}
+
+
+