comparison gcc/d/dmd/tokens.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
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