]> git.sur5r.net Git - cc65/blobdiff - src/cc65/symentry.h
In an old style function definition, print a diagnostic if a type is assigned
[cc65] / src / cc65 / symentry.h
index e81945d648da806c30f0fd91c3448981c4395e0b..a43356cc9e0ac73af5a6a532114b8f6d0903ef42 100644 (file)
@@ -6,9 +6,9 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 2000-2002 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
+/* (C) 2000-2008 Ullrich von Bassewitz                                       */
+/*               Roemerstrasse 52                                            */
+/*               D-70794 Filderstadt                                         */
 /* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
@@ -76,6 +76,7 @@ struct Segments;
 #define SC_PARAM               0x0080U /* This is a function parameter */
 #define SC_FUNC                0x0100U /* Function entry */
 
+#define SC_DEFTYPE      0x0200U /* Parameter has default type (=int, old style) */
 #define SC_STORAGE             0x0400U /* Symbol with associated storage */
 #define SC_DEFAULT             0x0800U /* Flag: default storage class was used */
 
@@ -100,7 +101,7 @@ struct SymEntry {
     SymEntry*                          Link;     /* General purpose single linked list */
     struct SymTable*           Owner;    /* Symbol table the symbol is in */
     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 */
@@ -186,7 +187,31 @@ INLINE int SymIsRef (const SymEntry* Sym)
 #  define SymIsRef(Sym)     (((Sym)->Flags & SC_REF) == SC_REF)
 #endif
 
-void ChangeSymType (SymEntry* Entry, type* Type);
+#if defined(HAVE_INLINE)
+INLINE int SymIsRegVar (const SymEntry* Sym)
+/* Return true if the given entry is a register variable */
+/* ### HACK! Fix the ugly type flags! */
+{
+    return ((Sym->Flags & (SC_REGISTER|SC_TYPE)) == SC_REGISTER);
+}
+#else
+#  define SymIsRegVar(Sym)      (((Sym)->Flags & (SC_REGISTER|SC_TYPE)) == SC_REGISTER)
+#endif
+
+#if defined(HAVE_INLINE)
+INLINE const char* SymGetAsmName (const SymEntry* Sym)
+/* Return the assembler label name for the symbol (beware: may be NULL!) */
+{
+    return Sym->AsmName;
+}
+#else
+#  define SymGetAsmName(Sym)      ((Sym)->AsmName)
+#endif
+
+void CvtRegVarToAuto (SymEntry* Sym);
+/* Convert a register variable to an auto variable */
+
+void ChangeSymType (SymEntry* Entry, Type* T);
 /* Change the type of the given symbol */
 
 void ChangeAsmName (SymEntry* Entry, const char* NewAsmName);