-/*
- * declare.h
- *
- * Ullrich von Bassewitz, 20.06.1998
- */
+/*****************************************************************************/
+/* */
+/* declare.h */
+/* */
+/* Parse variable and function declarations */
+/* */
+/* */
+/* */
+/* (C) 1998-2009, Ullrich von Bassewitz */
+/* Roemerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
+/* */
+/* */
+/* This software is provided 'as-is', without any expressed or implied */
+/* warranty. In no event will the authors be held liable for any damages */
+/* arising from the use of this software. */
+/* */
+/* Permission is granted to anyone to use this software for any purpose, */
+/* including commercial applications, and to alter it and redistribute it */
+/* freely, subject to the following restrictions: */
+/* */
+/* 1. The origin of this software must not be misrepresented; you must not */
+/* claim that you wrote the original software. If you use this software */
+/* in a product, an acknowledgment in the product documentation would be */
+/* appreciated but is not required. */
+/* 2. Altered source versions must be plainly marked as such, and must not */
+/* be misrepresented as being the original software. */
+/* 3. This notice may not be removed or altered from any source */
+/* distribution. */
+/* */
+/*****************************************************************************/
+/* common */
+#include "coll.h"
+
+/* cc65 */
#include "scanner.h"
#include "symtab.h"
/*****************************************************************************/
-/* Data */
+/* Data */
/*****************************************************************************/
/* Result of ParseDeclSpec */
typedef struct DeclSpec DeclSpec;
struct DeclSpec {
- unsigned StorageClass; /* One of the SC_xxx flags */
- type Type [MAXTYPELEN]; /* Type of the declaration spec */
- unsigned Flags; /* Bitmapped flags */
+ unsigned StorageClass; /* One of the SC_xxx flags */
+ Type Type[MAXTYPELEN]; /* Type of the declaration spec */
+ unsigned Flags; /* Bitmapped flags */
};
/* Result of ParseDecl */
typedef struct Declaration Declaration;
struct Declaration {
- ident Ident; /* The identifier if any, else empty */
- type Type [MAXTYPELEN]; /* The type */
+ unsigned StorageClass; /* A set of SC_xxx flags */
+ Type Type[MAXTYPELEN]; /* The type */
+ ident Ident; /* The identifier, if any*/
+ Collection* Attributes; /* Attributes if any */
/* Working variables */
- type* T; /* Used to build Type */
+ unsigned Index; /* Used to build Type */
};
/* Modes for ParseDecl */
-#define DM_NEED_IDENT 0U /* We must have an identifier */
-#define DM_NO_IDENT 1U /* We won't read an identifier */
-#define DM_ACCEPT_IDENT 2U /* We will accept an id if there is one */
+typedef enum {
+ DM_NEED_IDENT, /* We must have an identifier */
+ DM_NO_IDENT, /* We won't read an identifier */
+ DM_ACCEPT_IDENT, /* We will accept an id if there is one */
+} declmode_t;
-type* ParseType (type* Type);
+Type* ParseType (Type* Type);
/* Parse a complete type specification */
-void ParseDecl (const DeclSpec* Spec, Declaration* D, unsigned Mode);
+void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode);
/* Parse a variable, type or function declaration */
-void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, int DefType);
+void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, long DefType);
/* Parse a declaration specification */
void CheckEmptyDecl (const DeclSpec* D);
* warning if not.
*/
-void ParseInit (type* tptr);
-/* Parse initialization of variables */
+unsigned ParseInit (Type* T);
+/* Parse initialization of variables. Return the number of initialized data
+ * bytes.
+ */