145
|
1
|
|
2 /* Compiler implementation of the D programming language
|
|
3 * Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved
|
|
4 * written by Walter Bright
|
|
5 * http://www.digitalmars.com
|
|
6 * Distributed under the Boost Software License, Version 1.0.
|
|
7 * http://www.boost.org/LICENSE_1_0.txt
|
|
8 * https://github.com/dlang/dmd/blob/master/src/dmd/tokens.h
|
|
9 */
|
|
10
|
|
11 #pragma once
|
|
12
|
|
13 #include "root/port.h"
|
|
14 #include "globals.h"
|
|
15
|
|
16 class Identifier;
|
|
17
|
|
18 /* Tokens:
|
|
19 ( )
|
|
20 [ ]
|
|
21 { }
|
|
22 < > <= >= == != === !==
|
|
23 << >> <<= >>= >>> >>>=
|
|
24 + - += -=
|
|
25 * / % *= /= %=
|
|
26 & | ^ &= |= ^=
|
|
27 = ! ~ @
|
|
28 ^^ ^^=
|
|
29 ++ --
|
|
30 . -> : , =>
|
|
31 ? && ||
|
|
32 */
|
|
33
|
|
34 enum TOK
|
|
35 {
|
|
36 TOKreserved,
|
|
37
|
|
38 // Other
|
|
39 TOKlparen, TOKrparen,
|
|
40 TOKlbracket, TOKrbracket,
|
|
41 TOKlcurly, TOKrcurly,
|
|
42 TOKcolon, TOKneg,
|
|
43 TOKsemicolon, TOKdotdotdot,
|
|
44 TOKeof, TOKcast,
|
|
45 TOKnull, TOKassert,
|
|
46 TOKtrue, TOKfalse,
|
|
47 TOKarray, TOKcall,
|
|
48 TOKaddress,
|
|
49 TOKtype, TOKthrow,
|
|
50 TOKnew, TOKdelete,
|
|
51 TOKstar, TOKsymoff,
|
|
52 TOKvar, TOKdotvar,
|
|
53 TOKdotid, TOKdotti,
|
|
54 TOKdottype, TOKslice,
|
|
55 TOKarraylength, TOKversion,
|
|
56 TOKmodule, TOKdollar,
|
|
57 TOKtemplate, TOKdottd,
|
|
58 TOKdeclaration, TOKtypeof,
|
|
59 TOKpragma, TOKdsymbol,
|
|
60 TOKtypeid, TOKuadd,
|
|
61 TOKremove,
|
|
62 TOKnewanonclass, TOKcomment,
|
|
63 TOKarrayliteral, TOKassocarrayliteral,
|
|
64 TOKstructliteral,
|
|
65 TOKclassreference,
|
|
66 TOKthrownexception,
|
|
67 TOKdelegateptr,
|
|
68 TOKdelegatefuncptr,
|
|
69
|
|
70 // 54
|
|
71 // Operators
|
|
72 TOKlt, TOKgt,
|
|
73 TOKle, TOKge,
|
|
74 TOKequal, TOKnotequal,
|
|
75 TOKidentity, TOKnotidentity,
|
|
76 TOKindex, TOKis,
|
|
77
|
|
78 // 64
|
|
79 // NCEG floating point compares
|
|
80 // !<>= <> <>= !> !>= !< !<= !<>
|
|
81 TOKunord,TOKlg,TOKleg,TOKule,TOKul,TOKuge,TOKug,TOKue,
|
|
82
|
|
83 // 72
|
|
84 TOKshl, TOKshr,
|
|
85 TOKshlass, TOKshrass,
|
|
86 TOKushr, TOKushrass,
|
|
87 TOKcat, TOKcatass, // ~ ~=
|
|
88 TOKadd, TOKmin, TOKaddass, TOKminass,
|
|
89 TOKmul, TOKdiv, TOKmod,
|
|
90 TOKmulass, TOKdivass, TOKmodass,
|
|
91 TOKand, TOKor, TOKxor,
|
|
92 TOKandass, TOKorass, TOKxorass,
|
|
93 TOKassign, TOKnot, TOKtilde,
|
|
94 TOKplusplus, TOKminusminus, TOKconstruct, TOKblit,
|
|
95 TOKdot, TOKarrow, TOKcomma,
|
|
96 TOKquestion, TOKandand, TOKoror,
|
|
97 TOKpreplusplus, TOKpreminusminus,
|
|
98
|
|
99 // 111
|
|
100 // Numeric literals
|
|
101 TOKint32v, TOKuns32v,
|
|
102 TOKint64v, TOKuns64v,
|
|
103 TOKint128v, TOKuns128v,
|
|
104 TOKfloat32v, TOKfloat64v, TOKfloat80v,
|
|
105 TOKimaginary32v, TOKimaginary64v, TOKimaginary80v,
|
|
106
|
|
107 // Char constants
|
|
108 TOKcharv, TOKwcharv, TOKdcharv,
|
|
109
|
|
110 // Leaf operators
|
|
111 TOKidentifier, TOKstring, TOKxstring,
|
|
112 TOKthis, TOKsuper,
|
|
113 TOKhalt, TOKtuple,
|
|
114 TOKerror,
|
|
115
|
|
116 // Basic types
|
|
117 TOKvoid,
|
|
118 TOKint8, TOKuns8,
|
|
119 TOKint16, TOKuns16,
|
|
120 TOKint32, TOKuns32,
|
|
121 TOKint64, TOKuns64,
|
|
122 TOKint128, TOKuns128,
|
|
123 TOKfloat32, TOKfloat64, TOKfloat80,
|
|
124 TOKimaginary32, TOKimaginary64, TOKimaginary80,
|
|
125 TOKcomplex32, TOKcomplex64, TOKcomplex80,
|
|
126 TOKchar, TOKwchar, TOKdchar, TOKbool,
|
|
127
|
|
128 // 158
|
|
129 // Aggregates
|
|
130 TOKstruct, TOKclass, TOKinterface, TOKunion, TOKenum, TOKimport,
|
|
131 TOKalias, TOKoverride, TOKdelegate, TOKfunction,
|
|
132 TOKmixin,
|
|
133
|
|
134 TOKalign, TOKextern, TOKprivate, TOKprotected, TOKpublic, TOKexport,
|
|
135 TOKstatic, TOKfinal, TOKconst, TOKabstract,
|
|
136 TOKdebug, TOKdeprecated, TOKin, TOKout, TOKinout, TOKlazy,
|
|
137 TOKauto, TOKpackage, TOKmanifest, TOKimmutable,
|
|
138
|
|
139 // Statements
|
|
140 TOKif, TOKelse, TOKwhile, TOKfor, TOKdo, TOKswitch,
|
|
141 TOKcase, TOKdefault, TOKbreak, TOKcontinue, TOKwith,
|
|
142 TOKsynchronized, TOKreturn, TOKgoto, TOKtry, TOKcatch, TOKfinally,
|
|
143 TOKasm, TOKforeach, TOKforeach_reverse,
|
|
144 TOKscope,
|
|
145 TOKon_scope_exit, TOKon_scope_failure, TOKon_scope_success,
|
|
146
|
|
147 // Contracts
|
|
148 TOKinvariant,
|
|
149
|
|
150 // Testing
|
|
151 TOKunittest,
|
|
152
|
|
153 // Added after 1.0
|
|
154 TOKargTypes,
|
|
155 TOKref,
|
|
156 TOKmacro,
|
|
157
|
|
158 TOKparameters,
|
|
159 TOKtraits,
|
|
160 TOKoverloadset,
|
|
161 TOKpure,
|
|
162 TOKnothrow,
|
|
163 TOKgshared,
|
|
164 TOKline,
|
|
165 TOKfile,
|
|
166 TOKfilefullpath,
|
|
167 TOKmodulestring,
|
|
168 TOKfuncstring,
|
|
169 TOKprettyfunc,
|
|
170 TOKshared,
|
|
171 TOKat,
|
|
172 TOKpow,
|
|
173 TOKpowass,
|
|
174 TOKgoesto,
|
|
175 TOKvector,
|
|
176 TOKpound,
|
|
177
|
|
178 TOKinterval,
|
|
179 TOKvoidexp,
|
|
180 TOKcantexp,
|
|
181
|
|
182 TOKvectorarray,
|
|
183
|
|
184 TOKMAX
|
|
185 };
|
|
186
|
|
187 #define TOKwild TOKinout
|
|
188
|
|
189 // Token has an anonymous struct, which is not strict ISO C++.
|
|
190 #if defined(__GNUC__)
|
|
191 #pragma GCC diagnostic push
|
|
192 #pragma GCC diagnostic ignored "-Wpedantic"
|
|
193 #endif
|
|
194
|
|
195 struct Token
|
|
196 {
|
|
197 Token *next;
|
|
198 Loc loc;
|
|
199 const utf8_t *ptr; // pointer to first character of this token within buffer
|
|
200 TOK value;
|
|
201 const utf8_t *blockComment; // doc comment string prior to this token
|
|
202 const utf8_t *lineComment; // doc comment for previous token
|
|
203 union
|
|
204 {
|
|
205 // Integers
|
|
206 d_int64 int64value;
|
|
207 d_uns64 uns64value;
|
|
208
|
|
209 // Floats
|
|
210 real_t floatvalue;
|
|
211
|
|
212 struct
|
|
213 { utf8_t *ustring; // UTF8 string
|
|
214 unsigned len;
|
|
215 unsigned char postfix; // 'c', 'w', 'd'
|
|
216 };
|
|
217
|
|
218 Identifier *ident;
|
|
219 };
|
|
220
|
|
221 static const char *tochars[TOKMAX];
|
|
222
|
|
223 static Token *freelist;
|
|
224 static Token *alloc();
|
|
225 void free();
|
|
226
|
|
227 Token() : next(NULL) {}
|
|
228 int isKeyword();
|
|
229 const char *toChars() const;
|
|
230 static const char *toChars(TOK);
|
|
231 };
|
|
232
|
|
233 #if defined(__GNUC__)
|
|
234 #pragma GCC diagnostic pop
|
|
235 #endif
|