/* common */
#include "addrsize.h"
+#include "scopedefs.h"
/* ca65 */
#include "condasm.h"
int Anon = (CurTok.Tok != TOK_IDENT);
if (!Anon) {
/* Enter a new scope, then skip the name */
- SymEnterLevel (&CurTok.SVal, ST_ENUM, ADDR_SIZE_ABS, 0);
+ SymEnterLevel (&CurTok.SVal, SCOPETYPE_ENUM, ADDR_SIZE_ABS, 0);
NextTok ();
}
#include "cmdline.h"
#include "mmodel.h"
#include "print.h"
+#include "scopedefs.h"
#include "strbuf.h"
#include "target.h"
#include "tgttrans.h"
/* Enter the base lexical level. We must do that here, since we may
* define symbols using -D.
*/
- SymEnterLevel (&GlobalNameSpace, ST_GLOBAL, ADDR_SIZE_DEFAULT, 0);
+ SymEnterLevel (&GlobalNameSpace, SCOPETYPE_FILE, ADDR_SIZE_DEFAULT, 0);
/* Initialize the line infos. Must be done here, since we need line infos
* for symbol definitions.
#include "cddefs.h"
#include "coll.h"
#include "intstack.h"
+#include "scopedefs.h"
#include "symdefs.h"
#include "tgttrans.h"
#include "xmalloc.h"
static void DoEndProc (void)
/* Leave a lexical level */
{
- if (GetCurrentSymTabType () != ST_PROC) {
+ if (GetCurrentSymTabType () != SCOPETYPE_PROC) {
/* No local scope */
ErrorSkip ("No open .PROC");
} else {
static void DoEndScope (void)
/* Leave a lexical level */
{
- if ( GetCurrentSymTabType () != ST_SCOPE) {
+ if ( GetCurrentSymTabType () != SCOPETYPE_SCOPE) {
/* No local scope */
ErrorSkip ("No open .SCOPE");
} else {
}
/* Enter a new scope */
- SymEnterLevel (&Name, ST_PROC, AddrSize, Sym);
+ SymEnterLevel (&Name, SCOPETYPE_PROC, AddrSize, Sym);
/* Free memory for Name */
SB_Done (&Name);
AddrSize = OptionalAddrSize ();
/* Enter the new scope */
- SymEnterLevel (&Name, ST_SCOPE, AddrSize, 0);
+ SymEnterLevel (&Name, SCOPETYPE_SCOPE, AddrSize, 0);
/* Free memory for Name */
SB_Done (&Name);
ErrorSkip ("Unknown struct");
return;
}
- if (GetSymTabType (Struct) != ST_STRUCT) {
+ if (GetSymTabType (Struct) != SCOPETYPE_STRUCT) {
ErrorSkip ("Not a struct");
return;
}
/* common */
#include "addrsize.h"
+#include "scopedefs.h"
/* ca65 */
#include "condasm.h"
int Anon = (CurTok.Tok != TOK_IDENT);
if (!Anon) {
/* Enter a new scope, then skip the name */
- SymEnterLevel (&CurTok.SVal, ST_STRUCT, ADDR_SIZE_ABS, 0);
+ SymEnterLevel (&CurTok.SVal, SCOPETYPE_STRUCT, ADDR_SIZE_ABS, 0);
NextTok ();
/* Start at zero offset in the new scope */
Offs = 0;
Struct = ParseScopedSymTable ();
if (Struct == 0) {
ErrorSkip ("Unknown struct/union");
- } else if (GetSymTabType (Struct) != ST_STRUCT) {
+ } else if (GetSymTabType (Struct) != SCOPETYPE_STRUCT) {
ErrorSkip ("Not a struct/union");
} else {
SymEntry* SizeSym = GetSizeOfScope (Struct);
#include "check.h"
#include "hashstr.h"
#include "mmodel.h"
+#include "scopedefs.h"
#include "symdefs.h"
#include "xmalloc.h"
S->SegRanges = AUTO_COLLECTION_INITIALIZER;
S->Flags = ST_NONE;
S->AddrSize = ADDR_SIZE_DEFAULT;
- S->Type = ST_UNDEF;
+ S->Type = SCOPETYPE_UNDEF;
S->Level = Level;
S->TableSlots = Slots;
S->TableEntries = 0;
* does not allocate memory for useless data (unhandled types here don't
* occupy space in any segment).
*/
- if (CurrentScope->Type <= ST_SCOPE_HAS_DATA) {
+ if (CurrentScope->Type <= SCOPETYPE_HAS_DATA) {
AddSegRanges (&CurrentScope->SegRanges);
}
}
while (S) {
/* Type must be defined */
- CHECK (S->Type != ST_UNDEF);
+ CHECK (S->Type != SCOPETYPE_UNDEF);
/* Id of scope */
ObjWriteVar (S->Id);
#define ST_NONE 0x00 /* No flags */
#define ST_DEFINED 0x01 /* Scope has been defined */
-/* Symbol table types */
-enum {
- ST_GLOBAL, /* Root level */
- ST_PROC, /* .PROC */
- ST_SCOPE, /* .SCOPE */
- ST_SCOPE_HAS_DATA = ST_SCOPE, /* Last scope that contains data */
- ST_STRUCT, /* .STRUCT/.UNION */
- ST_ENUM, /* .ENUM */
- ST_UNDEF = 0xFF
-};
-
/* A symbol table */
typedef struct SymTable SymTable;
struct SymTable {
--- /dev/null
+/*****************************************************************************/
+/* */
+/* symdefs.h */
+/* */
+/* Scope definitions for the bin65 binary utils */
+/* */
+/* */
+/* */
+/* (C) 2011, 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. */
+/* */
+/*****************************************************************************/
+
+
+
+#ifndef SCOPEDEFS_H
+#define SCOPEDEFS_H
+
+
+
+/*****************************************************************************/
+/* Data */
+/*****************************************************************************/
+
+
+
+/* Scope types */
+enum {
+ SCOPETYPE_GLOBAL, /* Global level */
+ SCOPETYPE_FILE, /* File level */
+ SCOPETYPE_PROC, /* .PROC */
+ SCOPETYPE_SCOPE, /* .SCOPE */
+ SCOPETYPE_HAS_DATA = SCOPETYPE_SCOPE, /* Last scope that contains data */
+ SCOPETYPE_STRUCT, /* .STRUCT/.UNION */
+ SCOPETYPE_ENUM, /* .ENUM */
+ SCOPETYPE_UNDEF = 0xFF
+};
+
+
+
+/* End of scopedefs.h */
+
+#endif
+
+
+