#ifndef __SYMBOL_H__
#define __SYMBOL_H__
-#include "rmac.h"
+#include <inttypes.h>
-// Macros
-#define NBUCKETS 256 // Number of hash buckets (power of 2)
+// Line lists
+struct LineList
+{
+ struct LineList * next;
+ char * line;
+};
+
+// Symbols
+#define SYM struct _sym
+SYM
+{
+ SYM * snext; // * -> Next symbol on hash-chain
+ SYM * sorder; // * -> Next sym in order of reference
+ SYM * sdecl; // * -> Next sym in order of declaration
+ uint8_t stype; // Symbol type
+ uint16_t sattr; // Attribute bits
+ uint32_t sattre; // Extended attribute bits
+ uint16_t senv; // Enviroment number
+ uint32_t svalue; // Symbol value
+ char * sname; // * -> Symbol's print-name
+ struct LineList * lineList; // * -> Macro's linked list of lines
+ struct LineList * last; // * -> end of macro linked list
+ uint32_t uid; // Symbol's unique ID
+};
// Globals, externals etc
extern int curenv;
// Prototypes
SYM * lookup(char *, int, int);
-void init_sym(void);
-SYM * newsym(char *, int, int);
-char * nstring(char *);
+void InitSymbolTable(void);
+SYM * NewSymbol(char *, int, int);
void sym_decl(SYM *);
int syg_fix(void);
int symtable(void);
int sy_assign(char *, char *(*)());
+char * GetSymbolNameByUID(uint32_t);
#endif // __SYMBOL_H__