OSDN Git Service

- Removed pcode escalation with -h since the only thing is does is confuse people...
[zandronum/zandronum-acc.git] / symbol.h
1 \r
2 //**************************************************************************\r
3 //**\r
4 //** symbol.h\r
5 //**\r
6 //**************************************************************************\r
7 \r
8 #ifndef __SYMBOL_H__\r
9 #define __SYMBOL_H__\r
10 \r
11 // HEADER FILES ------------------------------------------------------------\r
12 \r
13 #include "common.h"\r
14 #include "pcode.h"\r
15 \r
16 // MACROS ------------------------------------------------------------------\r
17 \r
18 #define MAX_ARRAY_DIMS 8\r
19 \r
20 // TYPES -------------------------------------------------------------------\r
21 \r
22 typedef enum\r
23 {\r
24         SY_DUMMY,\r
25         SY_LABEL,\r
26         SY_SCRIPTVAR,\r
27         SY_SCRIPTALIAS,\r
28         SY_MAPVAR,\r
29         SY_WORLDVAR,\r
30         SY_GLOBALVAR,\r
31         SY_MAPARRAY,\r
32         SY_WORLDARRAY,\r
33         SY_GLOBALARRAY,\r
34         SY_SPECIAL,\r
35         SY_CONSTANT,\r
36         SY_INTERNFUNC,\r
37         SY_SCRIPTFUNC\r
38 } symbolType_t;\r
39 \r
40 typedef struct\r
41 {\r
42         U_BYTE index;\r
43 } symVar_t;\r
44 \r
45 typedef struct\r
46 {\r
47         U_BYTE index;\r
48         int dimensions[MAX_ARRAY_DIMS];\r
49         int ndim;\r
50         int size;\r
51 } symArray_t;\r
52 \r
53 typedef struct\r
54 {\r
55         int address;\r
56 } symLabel_t;\r
57 \r
58 typedef struct\r
59 {\r
60         int value;\r
61         int argCount;\r
62 } symSpecial_t;\r
63 \r
64 typedef struct\r
65 {\r
66         int value;\r
67         int fileDepth;\r
68 } symConstant_t;\r
69 \r
70 typedef struct\r
71 {\r
72         pcd_t directCommand;\r
73         pcd_t stackCommand;\r
74         int argCount;\r
75         int optMask;\r
76         int outMask;\r
77         boolean hasReturnValue;\r
78         boolean latent;\r
79 } symInternFunc_t;\r
80 \r
81 typedef struct\r
82 {\r
83         int address;\r
84         int argCount;\r
85         int varCount;\r
86         int funcNumber;\r
87         boolean hasReturnValue;\r
88         int sourceLine;\r
89         char *sourceName;\r
90         boolean predefined;\r
91 } symScriptFunc_t;\r
92 \r
93 typedef struct symbolNode_s\r
94 {\r
95         struct symbolNode_s *left;\r
96         struct symbolNode_s *right;\r
97         char *name;\r
98         symbolType_t type;\r
99         boolean unused;\r
100         boolean imported;\r
101         union\r
102         {\r
103                 symVar_t var;\r
104                 symArray_t array;\r
105                 symLabel_t label;\r
106                 symSpecial_t special;\r
107                 symConstant_t constant;\r
108                 symInternFunc_t internFunc;\r
109                 symScriptFunc_t scriptFunc;\r
110         } info;\r
111 } symbolNode_t;\r
112 \r
113 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------\r
114 \r
115 void SY_Init(void);\r
116 symbolNode_t *SY_Find(char *name);\r
117 symbolNode_t *SY_FindLocal(char *name);\r
118 symbolNode_t *SY_FindGlobal(char *name);\r
119 symbolNode_t *SY_InsertLocal(char *name, symbolType_t type);\r
120 symbolNode_t *SY_InsertGlobal(char *name, symbolType_t type);\r
121 symbolNode_t *SY_InsertGlobalUnique(char *name, symbolType_t type);\r
122 void SY_FreeLocals(void);\r
123 void SY_FreeGlobals(void);\r
124 void SY_FreeConstants(int depth);\r
125 void SY_ClearShared(void);\r
126 \r
127 // PUBLIC DATA DECLARATIONS ------------------------------------------------\r
128 \r
129 #endif\r