4 * (c)Copyright 1993-2014, Matthew Dillon, All Rights Reserved. See the
5 * COPYRIGHT file at the base of the distribution.
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)
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)
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)
45 * note: TOKF_SCOPE_MASK is maximum, 0xFFF.
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 */
78 * NOTE: TOKF_STOR_MASK is maximum, 0xFFF.
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 */
94 * NOTE! do not exceed TOKF_SCOPE_MASK (0x0FFF)
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))
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
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)
134 * NOTE: SF_CONST will be set in the type governing the storage when
135 * SCOPE_CONSTANT is specified.
137 * NOTE: Do not exceed TOKF_STOR_MASK (0x0FFF)
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))
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 | \
157 * SPECIAL_ string table identifiers. These are used to implement
158 * internal structural fields
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
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)
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)
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)
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)
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)
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)
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)