Rune - Change regsave burden for syscalls
[rune.git] / librune / sym.h
1 /*
2  * SYM.H
3  *
4  * (c)Copyright 1993-2014, Matthew Dillon, All Rights Reserved.  See the  
5  *    COPYRIGHT file at the base of the distribution.
6  */
7
8 #define TOK_IMPORT      (TOKF_ID|TOKF_KEYWORD|0x0001)
9 #define TOK_CLASS       (TOKF_ID|TOKF_KEYWORD|0x0002)
10 #define TOK_SUBCLASS    (TOKF_ID|TOKF_KEYWORD|0x0003)
11 #define TOK_TYPEDEF     (TOKF_ID|TOKF_KEYWORD|0x0004)
12 #define TOK_EXP_CONSTANT (                    0x0005)
13
14 #define TOK_AS          (TOKF_ID|TOKF_KEYWORD|0x0010)
15 #define TOK_SELF        (TOKF_ID|TOKF_KEYWORD|0x0011)
16 #define TOK_FOR         (TOKF_ID|TOKF_KEYWORD|0x0012)
17 #define TOK_WHILE       (TOKF_ID|TOKF_KEYWORD|0x0013)
18 #define TOK_DO          (TOKF_ID|TOKF_KEYWORD|0x0014)
19 #define TOK_UNTIL       (TOKF_ID|TOKF_KEYWORD|0x0015)
20 #define TOK_BREAK       (TOKF_ID|TOKF_KEYWORD|0x0016)
21 #define TOK_CONTINUE    (TOKF_ID|TOKF_KEYWORD|0x0017)
22 #define TOK_SWITCH      (TOKF_ID|TOKF_KEYWORD|0x0018)
23 #define TOK_IF          (TOKF_ID|TOKF_KEYWORD|0x0019)
24 #define TOK_BLOCK       (TOKF_ID|TOKF_KEYWORD|0x001A)
25 #define TOK_ELSE        (TOKF_ID|TOKF_KEYWORD|0x001B)
26 #define TOK_CASE        (TOKF_ID|TOKF_KEYWORD|0x001C)
27 #define TOK_DEFAULT     (TOKF_ID|TOKF_KEYWORD|0x001D)
28 #define TOK_LOOP        (TOKF_ID|TOKF_KEYWORD|0x001E)
29 #define TOK_RETURN      (TOKF_ID|TOKF_KEYWORD|0x001F)
30 #define TOK_RESULT      (TOKF_ID|TOKF_KEYWORD|0x0020)
31 #define TOK_ALIAS       (TOKF_ID|TOKF_KEYWORD|0x0021)
32 #define TOK_INTERFACE   (TOKF_ID|TOKF_KEYWORD|0x0022)
33 #define TOK_SUBINTERFACE (TOKF_ID|TOKF_KEYWORD|0x0023)
34 #define TOK_PROJECT     (TOKF_ID|TOKF_KEYWORD|0x0024)
35 #define TOK_USING       (TOKF_ID|TOKF_KEYWORD|0x0025)
36 #define TOK_FROM        (TOKF_ID|TOKF_KEYWORD|0x0026)
37
38 #define TOK_OPERATOR    (TOKF_ID|TOKF_KEYWORD|0x0030)
39 #define TOK_CAST        (TOKF_ID|TOKF_KEYWORD|0x0031)
40 #define TOK_STORAGE     (TOKF_ID|TOKF_KEYWORD|0x0032)
41 #define TOK_METHOD      (TOKF_ID|TOKF_KEYWORD|0x0033)
42 #define TOK_GMETHOD     (TOKF_ID|TOKF_KEYWORD|0x0034)
43
44 /*
45  * note: TOKF_SCOPE_MASK is maximum, 0xFFF.
46  */
47 #define TOK_PRIVATE     (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0000)
48 #define TOK_LIBRARY     (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0001)
49 #define TOK_PUBLIC      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0002)
50 #define TOK_REFINE      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0003)
51 #define TOK_INTERNAL    (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0004)
52 #define TOK_LVALUE      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0005)
53 #define TOK_GLOBAL      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0006)
54 #define TOK_INLINE      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0007)
55 #define TOK_OVERLOAD    (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0008)
56 #define TOK_S_CAST      (TOKF_ID|           0|TOKF_SCOPE_QUAL|0x0009)
57 #define TOK_THREAD      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000A)
58 #define TOK_PREEMPT     (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000B)
59 #define TOK_DESTRUCTOR  (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000C)
60 #define TOK_CONSTRUCTOR (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000D)
61 #define TOK_CLANG       (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000E)
62 #define TOK_ALIGN       (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000F)
63 #define TOK_INTERNAL2   (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0010)
64 #define TOK_S_INTERFACE (TOKF_ID|           0|TOKF_SCOPE_QUAL|0x0011)
65 #define TOK_PERSIST     (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0012)
66 #define TOK_HEAP        (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0013)
67 #define TOK_PURE        (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0014)
68 #define TOK_SHARED      (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0015)
69 #define TOK_UNLOCKED    (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0016)
70 #define TOK_CONSTANT    (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0017)
71 #define TOK_HARD        (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0018)
72 #define TOK_NOINLINE    (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0019)
73 #define TOK_UNTRACKED   (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x001A)
74 #define TOK_SOFT        (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x001B)
75 /* converts to flags, 0x1F maximum */
76
77 /*
78  * NOTE: TOKF_STOR_MASK is maximum, 0xFFF.
79  */
80 #define TOK_CONST       (TOKF_ID|TOKF_KEYWORD|TOKF_STOR_QUAL|0x0001)
81 #define TOK_S_HARD      (TOKF_ID|           0|TOKF_STOR_QUAL|0x0002)
82 #define TOK_VOLATILE    (TOKF_ID|TOKF_KEYWORD|TOKF_STOR_QUAL|0x0003)
83 #define TOK_S_VARARGS   (TOKF_ID|           0|TOKF_STOR_QUAL|0x0004)
84 #define TOK_S_LVALUE    (TOKF_ID|           0|TOKF_STOR_QUAL|0x0005)
85 #define TOK_NOZERO      (TOKF_ID|TOKF_KEYWORD|TOKF_STOR_QUAL|0x0006)
86 #define TOK_S_METHOD    (TOKF_ID|           0|TOKF_STOR_QUAL|0x0007)
87 #define TOK_S_GMETHOD   (TOKF_ID|           0|TOKF_STOR_QUAL|0x0008)
88 #define TOK_S_UNTRACKED (TOKF_ID|           0|TOKF_STOR_QUAL|0x0009)
89 #define TOK_S_SOFT      (TOKF_ID|           0|TOKF_STOR_QUAL|0x000A)
90 #define TOK_S_UNLOCKED  (TOKF_ID|           0|TOKF_STOR_QUAL|0x000B)
91 /* converts to flags, 0x1F maximum */
92
93 /*
94  * NOTE!  do not exceed TOKF_SCOPE_MASK (0x0FFF)
95  */
96 #define SCOPE_PRIVATE           (1 << (TOK_PRIVATE & TOKF_SCOPE_MASK))
97 #define SCOPE_LIBRARY           (1 << (TOK_LIBRARY & TOKF_SCOPE_MASK))
98 #define SCOPE_PUBLIC            (1 << (TOK_PUBLIC & TOKF_SCOPE_MASK))
99 #define SCOPE_REFINE            (1 << (TOK_REFINE & TOKF_SCOPE_MASK))
100 #define SCOPE_INTERNAL          (1 << (TOK_INTERNAL & TOKF_SCOPE_MASK))
101 #define SCOPE_LVALUE            (1 << (TOK_LVALUE & TOKF_SCOPE_MASK))
102 #define SCOPE_GLOBAL            (1 << (TOK_GLOBAL & TOKF_SCOPE_MASK))
103 #define SCOPE_INLINE            (1 << (TOK_INLINE & TOKF_SCOPE_MASK))
104 #define SCOPE_OVERLOAD          (1 << (TOK_OVERLOAD & TOKF_SCOPE_MASK))
105 #define SCOPE_CAST              (1 << (TOK_S_CAST & TOKF_SCOPE_MASK))
106 #define SCOPE_THREAD            (1 << (TOK_THREAD & TOKF_SCOPE_MASK))
107 #define SCOPE_PREEMPT           (1 << (TOK_PREEMPT & TOKF_SCOPE_MASK))
108 #define SCOPE_CONSTRUCTOR       (1 << (TOK_CONSTRUCTOR & TOKF_SCOPE_MASK))
109 #define SCOPE_DESTRUCTOR        (1 << (TOK_DESTRUCTOR & TOKF_SCOPE_MASK))
110 #define SCOPE_CLANG             (1 << (TOK_CLANG & TOKF_SCOPE_MASK))
111 #define SCOPE_ALIGN             (1 << (TOK_ALIGN & TOKF_SCOPE_MASK))
112 #define SCOPE_INTERNAL2         (1 << (TOK_INTERNAL2 & TOKF_SCOPE_MASK))
113 #define SCOPE_INTERFACE         (1 << (TOK_S_INTERFACE & TOKF_SCOPE_MASK))
114 #define SCOPE_PERSIST           (1 << (TOK_PERSIST & TOKF_SCOPE_MASK))
115 #define SCOPE_HEAP              (1 << (TOK_HEAP & TOKF_SCOPE_MASK))
116 #define SCOPE_PURE              (1 << (TOK_PURE & TOKF_SCOPE_MASK))
117 #define SCOPE_SHARED            (1 << (TOK_SHARED & TOKF_SCOPE_MASK))
118 #define SCOPE_UNLOCKED          (1 << (TOK_UNLOCKED & TOKF_SCOPE_MASK))
119 #define SCOPE_CONSTANT          (1 << (TOK_CONSTANT & TOKF_SCOPE_MASK))
120 #define SCOPE_HARD              (1 << (TOK_HARD & TOKF_SCOPE_MASK))
121 #define SCOPE_NOINLINE          (1 << (TOK_NOINLINE & TOKF_SCOPE_MASK))
122 #define SCOPE_UNTRACKED         (1 << (TOK_UNTRACKED & TOKF_SCOPE_MASK))
123 #define SCOPE_SOFT              (1 << (TOK_SOFT & TOKF_SCOPE_MASK))
124
125 /*
126  * Note: SCOPE_INTERNAL is used to determine whether we have to dup an
127  * expression or not.  It is not part of our normal visibility mask
128  */
129 #define SCOPE_ALL_VISIBLE       (SCOPE_PRIVATE | SCOPE_LIBRARY | SCOPE_PUBLIC)
130 #define SCOPE_LOCKING_MASK      (SCOPE_UNTRACKED | SCOPE_UNLOCKED |     \
131                                  SCOPE_SOFT | SCOPE_HARD)
132
133 /*
134  * NOTE: SF_CONST will be set in the type governing the storage when
135  *       SCOPE_CONSTANT is specified.
136  *
137  * NOTE: Do not exceed TOKF_STOR_MASK (0x0FFF)
138  */
139 #define SF_CONST                (1 << (TOK_CONST & TOKF_STOR_MASK))
140 #define SF_HARD                 (1 << (TOK_S_HARD & TOKF_STOR_MASK))
141 #define SF_VOLATILE             (1 << (TOK_VOLATILE & TOKF_STOR_MASK))
142 #define SF_VARARGS              (1 << (TOK_S_VARARGS & TOKF_STOR_MASK))
143 #define SF_LVALUE               (1 << (TOK_S_LVALUE & TOKF_STOR_MASK))
144 #define SF_NOZERO               (1 << (TOK_NOZERO & TOKF_STOR_MASK))
145 #define SF_METHOD               (1 << (TOK_S_METHOD & TOKF_STOR_MASK))
146 #define SF_GMETHOD              (1 << (TOK_S_GMETHOD & TOKF_STOR_MASK))
147 #define SF_UNTRACKED            (1 << (TOK_S_UNTRACKED & TOKF_STOR_MASK))
148 #define SF_SOFT                 (1 << (TOK_S_SOFT & TOKF_STOR_MASK))
149 #define SF_UNLOCKED             (1 << (TOK_S_UNLOCKED & TOKF_STOR_MASK))
150
151 #define SF_IGNORE_MASK          (SF_VOLATILE | SF_LVALUE | SF_NOZERO)
152 #define SF_RELAXING_MASK        (SF_IGNORE_MASK | SF_CONST)
153 #define SF_LOCKING_MASK         (SF_UNTRACKED | SF_UNLOCKED | \
154                                  SF_SOFT | SF_HARD)
155
156 /*
157  * SPECIAL_ string table identifiers.  These are used to implement
158  * internal structural fields
159  */
160
161 #define SPECIALF_SEMGROUP               0x00010000
162 #define SPECIALF_INTERNAL               0x00020000
163 #define SPECIALF_AUXKEYWORD             0x00040000
164 #define SPECIALF_REGISTERED             0x00080000
165 #define SPECIALF_MASK                   0x0000FFFF
166
167 #define SPECIAL_COUNT                   (SPECIALF_SEMGROUP|1)
168 #define SPECIAL_DATA                    (SPECIALF_SEMGROUP|3)
169 #define SPECIAL_VAR_COUNT               (SPECIALF_SEMGROUP|4)
170 #define SPECIAL_VAR_DATA                (SPECIALF_SEMGROUP|6)
171 #define SPECIAL_TYPEID                  (SPECIALF_SEMGROUP|7)
172 #define SPECIAL_TYPESTR                 (SPECIALF_SEMGROUP|8)
173 #define SPECIAL_NULL                    (SPECIALF_SEMGROUP|9)
174
175 #define SPECIAL_INTERNAL_VOID           (SPECIALF_INTERNAL|1)
176 #define SPECIAL_INTERNAL_BOOL           (SPECIALF_INTERNAL|2)
177 #define SPECIAL_INTERNAL_INT8           (SPECIALF_INTERNAL|3)
178 #define SPECIAL_INTERNAL_UINT8          (SPECIALF_INTERNAL|4)
179 #define SPECIAL_INTERNAL_INT16          (SPECIALF_INTERNAL|5)
180 #define SPECIAL_INTERNAL_UINT16         (SPECIALF_INTERNAL|6)
181 #define SPECIAL_INTERNAL_INT32          (SPECIALF_INTERNAL|7)
182 #define SPECIAL_INTERNAL_UINT32         (SPECIALF_INTERNAL|8)
183 #define SPECIAL_INTERNAL_INT64          (SPECIALF_INTERNAL|9)
184 #define SPECIAL_INTERNAL_UINT64         (SPECIALF_INTERNAL|10)
185 #define SPECIAL_INTERNAL_INT128         (SPECIALF_INTERNAL|11)
186 #define SPECIAL_INTERNAL_UINT128        (SPECIALF_INTERNAL|12)
187
188 #define SPECIAL_INTERNAL_FLOAT          (SPECIALF_INTERNAL|16)
189 #define SPECIAL_INTERNAL_FLOAT32        (SPECIALF_INTERNAL|17)
190 #define SPECIAL_INTERNAL_FLOAT64        (SPECIALF_INTERNAL|18)
191 #define SPECIAL_INTERNAL_FLOAT128       (SPECIALF_INTERNAL|19)
192
193 #define SPECIAL_INTERNAL_POINTER        (SPECIALF_INTERNAL|32)
194 #define SPECIAL_INTERNAL_INTPTR         (SPECIALF_INTERNAL|33)
195 #define SPECIAL_INTERNAL_UINTPTR        (SPECIALF_INTERNAL|34)
196 #define SPECIAL_INTERNAL_OFF            (SPECIALF_INTERNAL|35)
197 #define SPECIAL_INTERNAL_SIZE           (SPECIALF_INTERNAL|36)
198
199 #define SPECIAL_INTERNAL_NUMERIC        (SPECIALF_INTERNAL|48)
200 #define SPECIAL_INTERNAL_INTEGRAL       (SPECIALF_INTERNAL|49)
201 #define SPECIAL_INTERNAL_SINTEGER       (SPECIALF_INTERNAL|50)
202 #define SPECIAL_INTERNAL_UINTEGER       (SPECIALF_INTERNAL|51)
203
204 #define SPECIAL_INTERNAL_LEXREF         (SPECIALF_INTERNAL|64)
205 #define SPECIAL_INTERNAL_SCOPE          (SPECIALF_INTERNAL|65)
206 #define SPECIAL_INTERNAL_DECLARATION    (SPECIALF_INTERNAL|66)
207 #define SPECIAL_INTERNAL_SEMGROUP       (SPECIALF_INTERNAL|67)
208 #define SPECIAL_INTERNAL_TYPE           (SPECIALF_INTERNAL|68)
209 #define SPECIAL_INTERNAL_FILLERTYPE     (SPECIALF_INTERNAL|69)
210 #define SPECIAL_INTERNAL_FILLERDECL     (SPECIALF_INTERNAL|70)
211 #define SPECIAL_INTERNAL_POINTERINFO    (SPECIALF_INTERNAL|71)
212
213 #define SPECIAL_AUX_PREEMPT             (SPECIALF_AUXKEYWORD|1)
214 #define SPECIAL_AUX_NOPREEMPT           (SPECIALF_AUXKEYWORD|2)
215 #define SPECIAL_AUX_IMMEDIATE           (SPECIALF_AUXKEYWORD|3)
216 #define SPECIAL_AUX_PROCEDURE           (SPECIALF_AUXKEYWORD|4)