Version bump for last commit; now at v2.0.23.
[rmac] / symbol.h
1 //
2 // RMAC - Reboot's Macro Assembler for all Atari computers
3 // SYMBOL.H - Symbol Handling
4 // Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends
5 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
6 // Source utilised with the kind permission of Landon Dyer
7 //
8
9 #ifndef __SYMBOL_H__
10 #define __SYMBOL_H__
11
12 #include <inttypes.h>
13
14 // Line lists
15 #define LLIST struct _llist
16 LLIST
17 {
18         LLIST * next;
19         uint8_t * line;
20         int lineno;
21 };
22
23 // Symbols
24 #define SYM struct _sym
25 SYM
26 {
27         SYM * snext;                    // * -> Next symbol on hash-chain
28         SYM * sorder;                   // * -> Next sym in order of reference
29         SYM * sdecl;                    // * -> Next sym in order of declaration
30         uint8_t stype;                  // Symbol type
31         uint16_t sattr;                 // Attribute bits
32         uint32_t sattre;                // Extended attribute bits
33         uint16_t senv;                  // Enviroment number
34         uint64_t svalue;                // Symbol value (now 64-bit)
35         uint8_t * sname;                // * -> Symbol's print-name
36         LLIST * lineList;               // * -> Macro's linked list of lines
37         LLIST * last;                   // * -> end of macro linked list
38         uint32_t uid;                   // Symbol's unique ID
39 };
40
41 // Exported variables
42 extern int curenv;
43 extern uint32_t firstglobal;// Index of the fist global symbol in an ELF object.
44
45 // Exported functions
46 SYM * lookup(uint8_t *, int, int);
47 void InitSymbolTable(void);
48 SYM * NewSymbol(uint8_t *, int, int);
49 void AddToSymbolDeclarationList(SYM *);
50 void ForceUndefinedSymbolsGlobal(void);
51 int symtable(void);
52 uint32_t sy_assign(uint8_t *, uint8_t *(*)());
53 uint32_t sy_assign_ELF(uint8_t *, uint8_t *(*)());
54 void DumpLODSymbols(void);
55 uint8_t * GetSymbolNameByUID(uint32_t);
56
57 #endif // __SYMBOL_H__
58