1use rustc_ast::token::TokenKind;
2use rustc_span::symbol::{Symbol, kw, sym};
3
4#[derive(#[automatically_derived]
impl ::core::fmt::Debug for TokenType {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
TokenType::Eq => "Eq",
TokenType::Lt => "Lt",
TokenType::Le => "Le",
TokenType::EqEq => "EqEq",
TokenType::Gt => "Gt",
TokenType::AndAnd => "AndAnd",
TokenType::OrOr => "OrOr",
TokenType::Bang => "Bang",
TokenType::Tilde => "Tilde",
TokenType::Plus => "Plus",
TokenType::Minus => "Minus",
TokenType::Star => "Star",
TokenType::And => "And",
TokenType::Or => "Or",
TokenType::At => "At",
TokenType::Dot => "Dot",
TokenType::DotDot => "DotDot",
TokenType::DotDotDot => "DotDotDot",
TokenType::DotDotEq => "DotDotEq",
TokenType::Comma => "Comma",
TokenType::Semi => "Semi",
TokenType::Colon => "Colon",
TokenType::PathSep => "PathSep",
TokenType::RArrow => "RArrow",
TokenType::FatArrow => "FatArrow",
TokenType::Pound => "Pound",
TokenType::Question => "Question",
TokenType::OpenParen => "OpenParen",
TokenType::CloseParen => "CloseParen",
TokenType::OpenBrace => "OpenBrace",
TokenType::CloseBrace => "CloseBrace",
TokenType::OpenBracket => "OpenBracket",
TokenType::CloseBracket => "CloseBracket",
TokenType::Eof => "Eof",
TokenType::Operator => "Operator",
TokenType::Ident => "Ident",
TokenType::Lifetime => "Lifetime",
TokenType::Path => "Path",
TokenType::Type => "Type",
TokenType::Const => "Const",
TokenType::KwAs => "KwAs",
TokenType::KwAsync => "KwAsync",
TokenType::KwAuto => "KwAuto",
TokenType::KwAwait => "KwAwait",
TokenType::KwBecome => "KwBecome",
TokenType::KwBox => "KwBox",
TokenType::KwBreak => "KwBreak",
TokenType::KwCatch => "KwCatch",
TokenType::KwConst => "KwConst",
TokenType::KwContinue => "KwContinue",
TokenType::KwContractEnsures => "KwContractEnsures",
TokenType::KwContractRequires => "KwContractRequires",
TokenType::KwCrate => "KwCrate",
TokenType::KwDefault => "KwDefault",
TokenType::KwDyn => "KwDyn",
TokenType::KwElse => "KwElse",
TokenType::KwEnum => "KwEnum",
TokenType::KwExtern => "KwExtern",
TokenType::KwFinal => "KwFinal",
TokenType::KwFn => "KwFn",
TokenType::KwFor => "KwFor",
TokenType::KwGen => "KwGen",
TokenType::KwIf => "KwIf",
TokenType::KwImpl => "KwImpl",
TokenType::KwIn => "KwIn",
TokenType::KwLet => "KwLet",
TokenType::KwLoop => "KwLoop",
TokenType::KwMacro => "KwMacro",
TokenType::KwMacroRules => "KwMacroRules",
TokenType::KwMatch => "KwMatch",
TokenType::KwMod => "KwMod",
TokenType::KwMove => "KwMove",
TokenType::KwMut => "KwMut",
TokenType::KwPin => "KwPin",
TokenType::KwPub => "KwPub",
TokenType::KwRaw => "KwRaw",
TokenType::KwRef => "KwRef",
TokenType::KwReturn => "KwReturn",
TokenType::KwReuse => "KwReuse",
TokenType::KwSafe => "KwSafe",
TokenType::KwSelfUpper => "KwSelfUpper",
TokenType::KwStatic => "KwStatic",
TokenType::KwStruct => "KwStruct",
TokenType::KwSuper => "KwSuper",
TokenType::KwTrait => "KwTrait",
TokenType::KwTry => "KwTry",
TokenType::KwType => "KwType",
TokenType::KwUnderscore => "KwUnderscore",
TokenType::KwUnsafe => "KwUnsafe",
TokenType::KwUse => "KwUse",
TokenType::KwWhere => "KwWhere",
TokenType::KwWhile => "KwWhile",
TokenType::KwYield => "KwYield",
TokenType::SymAttSyntax => "SymAttSyntax",
TokenType::SymBikeshed => "SymBikeshed",
TokenType::SymClobberAbi => "SymClobberAbi",
TokenType::SymInlateout => "SymInlateout",
TokenType::SymInout => "SymInout",
TokenType::SymIs => "SymIs",
TokenType::SymLabel => "SymLabel",
TokenType::SymLateout => "SymLateout",
TokenType::SymMayUnwind => "SymMayUnwind",
TokenType::SymNomem => "SymNomem",
TokenType::SymNoreturn => "SymNoreturn",
TokenType::SymNostack => "SymNostack",
TokenType::SymNull => "SymNull",
TokenType::SymOptions => "SymOptions",
TokenType::SymOut => "SymOut",
TokenType::SymPin => "SymPin",
TokenType::SymPreservesFlags => "SymPreservesFlags",
TokenType::SymPure => "SymPure",
TokenType::SymReadonly => "SymReadonly",
TokenType::SymSym => "SymSym",
})
}
}Debug, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for TokenType { }
#[automatically_derived]
impl ::core::clone::Clone for TokenType {
#[inline]
fn clone(&self) -> TokenType { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for TokenType { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for TokenType { }
#[automatically_derived]
impl ::core::cmp::PartialEq for TokenType {
#[inline]
fn eq(&self, other: &TokenType) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq)]
19pub enum TokenType {
20 Eq,
22 Lt,
23 Le,
24 EqEq,
25 Gt,
26 AndAnd,
27 OrOr,
28 Bang,
29 Tilde,
30
31 Plus,
33 Minus,
34 Star,
35 And,
36 Or,
37
38 At,
40 Dot,
41 DotDot,
42 DotDotDot,
43 DotDotEq,
44 Comma,
45 Semi,
46 Colon,
47 PathSep,
48 RArrow,
49 FatArrow,
50 Pound,
51 Question,
52 OpenParen,
53 CloseParen,
54 OpenBrace,
55 CloseBrace,
56 OpenBracket,
57 CloseBracket,
58 Eof,
59
60 Operator,
63 Ident,
65 Lifetime,
67 Path,
69 Type,
71 Const,
73
74 KwAs,
77 KwAsync,
78 KwAuto,
79 KwAwait,
80 KwBecome,
81 KwBox,
82 KwBreak,
83 KwCatch,
84 KwConst,
85 KwContinue,
86 KwContractEnsures,
87 KwContractRequires,
88 KwCrate,
89 KwDefault,
90 KwDyn,
91 KwElse,
92 KwEnum,
93 KwExtern,
94 KwFinal,
95 KwFn,
96 KwFor,
97 KwGen,
98 KwIf,
99 KwImpl,
100 KwIn,
101 KwLet,
102 KwLoop,
103 KwMacro,
104 KwMacroRules,
105 KwMatch,
106 KwMod,
107 KwMove,
108 KwMut,
109 KwPin,
110 KwPub,
111 KwRaw,
112 KwRef,
113 KwReturn,
114 KwReuse,
115 KwSafe,
116 KwSelfUpper,
117 KwStatic,
118 KwStruct,
119 KwSuper,
120 KwTrait,
121 KwTry,
122 KwType,
123 KwUnderscore,
124 KwUnsafe,
125 KwUse,
126 KwWhere,
127 KwWhile,
128 KwYield,
129 SymAttSyntax,
134 SymBikeshed,
135 SymClobberAbi,
136 SymInlateout,
137 SymInout,
138 SymIs,
139 SymLabel,
140 SymLateout,
141 SymMayUnwind,
142 SymNomem,
143 SymNoreturn,
144 SymNostack,
145 SymNull,
146 SymOptions,
147 SymOut,
148 SymPin,
149 SymPreservesFlags,
150 SymPure,
151 SymReadonly,
152 SymSym,
153 }
155
156macro_rules! from_u32_match {
158 ($val:ident; $($tok:ident,)+) => {
159 match $val {
163 $(
164 t if t == TokenType::$tok as u32 => TokenType::$tok,
165 )+
166 _ => panic!("unhandled value: {}", $val),
167 }
168 };
169}
170
171impl TokenType {
172 fn from_u32(val: u32) -> TokenType {
173 let token_type = match val {
t if t == TokenType::Eq as u32 => TokenType::Eq,
t if t == TokenType::Lt as u32 => TokenType::Lt,
t if t == TokenType::Le as u32 => TokenType::Le,
t if t == TokenType::EqEq as u32 => TokenType::EqEq,
t if t == TokenType::Gt as u32 => TokenType::Gt,
t if t == TokenType::AndAnd as u32 => TokenType::AndAnd,
t if t == TokenType::OrOr as u32 => TokenType::OrOr,
t if t == TokenType::Bang as u32 => TokenType::Bang,
t if t == TokenType::Tilde as u32 => TokenType::Tilde,
t if t == TokenType::Plus as u32 => TokenType::Plus,
t if t == TokenType::Minus as u32 => TokenType::Minus,
t if t == TokenType::Star as u32 => TokenType::Star,
t if t == TokenType::And as u32 => TokenType::And,
t if t == TokenType::Or as u32 => TokenType::Or,
t if t == TokenType::At as u32 => TokenType::At,
t if t == TokenType::Dot as u32 => TokenType::Dot,
t if t == TokenType::DotDot as u32 => TokenType::DotDot,
t if t == TokenType::DotDotDot as u32 => TokenType::DotDotDot,
t if t == TokenType::DotDotEq as u32 => TokenType::DotDotEq,
t if t == TokenType::Comma as u32 => TokenType::Comma,
t if t == TokenType::Semi as u32 => TokenType::Semi,
t if t == TokenType::Colon as u32 => TokenType::Colon,
t if t == TokenType::PathSep as u32 => TokenType::PathSep,
t if t == TokenType::RArrow as u32 => TokenType::RArrow,
t if t == TokenType::FatArrow as u32 => TokenType::FatArrow,
t if t == TokenType::Pound as u32 => TokenType::Pound,
t if t == TokenType::Question as u32 => TokenType::Question,
t if t == TokenType::OpenParen as u32 => TokenType::OpenParen,
t if t == TokenType::CloseParen as u32 => TokenType::CloseParen,
t if t == TokenType::OpenBrace as u32 => TokenType::OpenBrace,
t if t == TokenType::CloseBrace as u32 => TokenType::CloseBrace,
t if t == TokenType::OpenBracket as u32 => TokenType::OpenBracket,
t if t == TokenType::CloseBracket as u32 => TokenType::CloseBracket,
t if t == TokenType::Eof as u32 => TokenType::Eof,
t if t == TokenType::Operator as u32 => TokenType::Operator,
t if t == TokenType::Ident as u32 => TokenType::Ident,
t if t == TokenType::Lifetime as u32 => TokenType::Lifetime,
t if t == TokenType::Path as u32 => TokenType::Path,
t if t == TokenType::Type as u32 => TokenType::Type,
t if t == TokenType::Const as u32 => TokenType::Const,
t if t == TokenType::KwAs as u32 => TokenType::KwAs,
t if t == TokenType::KwAsync as u32 => TokenType::KwAsync,
t if t == TokenType::KwAuto as u32 => TokenType::KwAuto,
t if t == TokenType::KwAwait as u32 => TokenType::KwAwait,
t if t == TokenType::KwBecome as u32 => TokenType::KwBecome,
t if t == TokenType::KwBox as u32 => TokenType::KwBox,
t if t == TokenType::KwBreak as u32 => TokenType::KwBreak,
t if t == TokenType::KwCatch as u32 => TokenType::KwCatch,
t if t == TokenType::KwConst as u32 => TokenType::KwConst,
t if t == TokenType::KwContinue as u32 => TokenType::KwContinue,
t if t == TokenType::KwContractEnsures as u32 =>
TokenType::KwContractEnsures,
t if t == TokenType::KwContractRequires as u32 =>
TokenType::KwContractRequires,
t if t == TokenType::KwCrate as u32 => TokenType::KwCrate,
t if t == TokenType::KwDefault as u32 => TokenType::KwDefault,
t if t == TokenType::KwDyn as u32 => TokenType::KwDyn,
t if t == TokenType::KwElse as u32 => TokenType::KwElse,
t if t == TokenType::KwEnum as u32 => TokenType::KwEnum,
t if t == TokenType::KwExtern as u32 => TokenType::KwExtern,
t if t == TokenType::KwFn as u32 => TokenType::KwFn,
t if t == TokenType::KwFor as u32 => TokenType::KwFor,
t if t == TokenType::KwFinal as u32 => TokenType::KwFinal,
t if t == TokenType::KwGen as u32 => TokenType::KwGen,
t if t == TokenType::KwIf as u32 => TokenType::KwIf,
t if t == TokenType::KwImpl as u32 => TokenType::KwImpl,
t if t == TokenType::KwIn as u32 => TokenType::KwIn,
t if t == TokenType::KwLet as u32 => TokenType::KwLet,
t if t == TokenType::KwLoop as u32 => TokenType::KwLoop,
t if t == TokenType::KwMacro as u32 => TokenType::KwMacro,
t if t == TokenType::KwMacroRules as u32 => TokenType::KwMacroRules,
t if t == TokenType::KwMatch as u32 => TokenType::KwMatch,
t if t == TokenType::KwMod as u32 => TokenType::KwMod,
t if t == TokenType::KwMove as u32 => TokenType::KwMove,
t if t == TokenType::KwMut as u32 => TokenType::KwMut,
t if t == TokenType::KwPin as u32 => TokenType::KwPin,
t if t == TokenType::KwPub as u32 => TokenType::KwPub,
t if t == TokenType::KwRaw as u32 => TokenType::KwRaw,
t if t == TokenType::KwRef as u32 => TokenType::KwRef,
t if t == TokenType::KwReturn as u32 => TokenType::KwReturn,
t if t == TokenType::KwReuse as u32 => TokenType::KwReuse,
t if t == TokenType::KwSafe as u32 => TokenType::KwSafe,
t if t == TokenType::KwSelfUpper as u32 => TokenType::KwSelfUpper,
t if t == TokenType::KwStatic as u32 => TokenType::KwStatic,
t if t == TokenType::KwStruct as u32 => TokenType::KwStruct,
t if t == TokenType::KwSuper as u32 => TokenType::KwSuper,
t if t == TokenType::KwTrait as u32 => TokenType::KwTrait,
t if t == TokenType::KwTry as u32 => TokenType::KwTry,
t if t == TokenType::KwType as u32 => TokenType::KwType,
t if t == TokenType::KwUnderscore as u32 => TokenType::KwUnderscore,
t if t == TokenType::KwUnsafe as u32 => TokenType::KwUnsafe,
t if t == TokenType::KwUse as u32 => TokenType::KwUse,
t if t == TokenType::KwWhere as u32 => TokenType::KwWhere,
t if t == TokenType::KwWhile as u32 => TokenType::KwWhile,
t if t == TokenType::KwYield as u32 => TokenType::KwYield,
t if t == TokenType::SymAttSyntax as u32 => TokenType::SymAttSyntax,
t if t == TokenType::SymClobberAbi as u32 => TokenType::SymClobberAbi,
t if t == TokenType::SymInlateout as u32 => TokenType::SymInlateout,
t if t == TokenType::SymInout as u32 => TokenType::SymInout,
t if t == TokenType::SymIs as u32 => TokenType::SymIs,
t if t == TokenType::SymLabel as u32 => TokenType::SymLabel,
t if t == TokenType::SymLateout as u32 => TokenType::SymLateout,
t if t == TokenType::SymMayUnwind as u32 => TokenType::SymMayUnwind,
t if t == TokenType::SymNomem as u32 => TokenType::SymNomem,
t if t == TokenType::SymNoreturn as u32 => TokenType::SymNoreturn,
t if t == TokenType::SymNostack as u32 => TokenType::SymNostack,
t if t == TokenType::SymNull as u32 => TokenType::SymNull,
t if t == TokenType::SymOptions as u32 => TokenType::SymOptions,
t if t == TokenType::SymOut as u32 => TokenType::SymOut,
t if t == TokenType::SymPreservesFlags as u32 =>
TokenType::SymPreservesFlags,
t if t == TokenType::SymPure as u32 => TokenType::SymPure,
t if t == TokenType::SymReadonly as u32 => TokenType::SymReadonly,
t if t == TokenType::SymSym as u32 => TokenType::SymSym,
_ => {
::core::panicking::panic_fmt(format_args!("unhandled value: {0}",
val));
}
}from_u32_match! { val;
174 Eq,
175 Lt,
176 Le,
177 EqEq,
178 Gt,
179 AndAnd,
180 OrOr,
181 Bang,
182 Tilde,
183
184 Plus,
185 Minus,
186 Star,
187 And,
188 Or,
189
190 At,
191 Dot,
192 DotDot,
193 DotDotDot,
194 DotDotEq,
195 Comma,
196 Semi,
197 Colon,
198 PathSep,
199 RArrow,
200 FatArrow,
201 Pound,
202 Question,
203 OpenParen,
204 CloseParen,
205 OpenBrace,
206 CloseBrace,
207 OpenBracket,
208 CloseBracket,
209 Eof,
210
211 Operator,
212 Ident,
213 Lifetime,
214 Path,
215 Type,
216 Const,
217
218 KwAs,
219 KwAsync,
220 KwAuto,
221 KwAwait,
222 KwBecome,
223 KwBox,
224 KwBreak,
225 KwCatch,
226 KwConst,
227 KwContinue,
228 KwContractEnsures,
229 KwContractRequires,
230 KwCrate,
231 KwDefault,
232 KwDyn,
233 KwElse,
234 KwEnum,
235 KwExtern,
236 KwFn,
237 KwFor,
238 KwFinal,
239 KwGen,
240 KwIf,
241 KwImpl,
242 KwIn,
243 KwLet,
244 KwLoop,
245 KwMacro,
246 KwMacroRules,
247 KwMatch,
248 KwMod,
249 KwMove,
250 KwMut,
251 KwPin,
252 KwPub,
253 KwRaw,
254 KwRef,
255 KwReturn,
256 KwReuse,
257 KwSafe,
258 KwSelfUpper,
259 KwStatic,
260 KwStruct,
261 KwSuper,
262 KwTrait,
263 KwTry,
264 KwType,
265 KwUnderscore,
266 KwUnsafe,
267 KwUse,
268 KwWhere,
269 KwWhile,
270 KwYield,
271
272 SymAttSyntax,
273 SymClobberAbi,
274 SymInlateout,
275 SymInout,
276 SymIs,
277 SymLabel,
278 SymLateout,
279 SymMayUnwind,
280 SymNomem,
281 SymNoreturn,
282 SymNostack,
283 SymNull,
284 SymOptions,
285 SymOut,
286 SymPreservesFlags,
287 SymPure,
288 SymReadonly,
289 SymSym,
290 };
291 token_type
292 }
293
294 pub(super) fn is_keyword(&self) -> Option<Symbol> {
295 match self {
296 TokenType::KwAs => Some(kw::As),
297 TokenType::KwAsync => Some(kw::Async),
298 TokenType::KwAuto => Some(kw::Auto),
299 TokenType::KwAwait => Some(kw::Await),
300 TokenType::KwBecome => Some(kw::Become),
301 TokenType::KwBox => Some(kw::Box),
302 TokenType::KwBreak => Some(kw::Break),
303 TokenType::KwCatch => Some(kw::Catch),
304 TokenType::KwConst => Some(kw::Const),
305 TokenType::KwContinue => Some(kw::Continue),
306 TokenType::KwContractEnsures => Some(kw::ContractEnsures),
307 TokenType::KwContractRequires => Some(kw::ContractRequires),
308 TokenType::KwCrate => Some(kw::Crate),
309 TokenType::KwDefault => Some(kw::Default),
310 TokenType::KwDyn => Some(kw::Dyn),
311 TokenType::KwElse => Some(kw::Else),
312 TokenType::KwEnum => Some(kw::Enum),
313 TokenType::KwExtern => Some(kw::Extern),
314 TokenType::KwFn => Some(kw::Fn),
315 TokenType::KwFor => Some(kw::For),
316 TokenType::KwFinal => Some(kw::Final),
317 TokenType::KwGen => Some(kw::Gen),
318 TokenType::KwIf => Some(kw::If),
319 TokenType::KwImpl => Some(kw::Impl),
320 TokenType::KwIn => Some(kw::In),
321 TokenType::KwLet => Some(kw::Let),
322 TokenType::KwLoop => Some(kw::Loop),
323 TokenType::KwMacroRules => Some(kw::MacroRules),
324 TokenType::KwMacro => Some(kw::Macro),
325 TokenType::KwMatch => Some(kw::Match),
326 TokenType::KwMod => Some(kw::Mod),
327 TokenType::KwMove => Some(kw::Move),
328 TokenType::KwMut => Some(kw::Mut),
329 TokenType::KwPin => Some(kw::Pin),
330 TokenType::KwPub => Some(kw::Pub),
331 TokenType::KwRaw => Some(kw::Raw),
332 TokenType::KwRef => Some(kw::Ref),
333 TokenType::KwReturn => Some(kw::Return),
334 TokenType::KwReuse => Some(kw::Reuse),
335 TokenType::KwSafe => Some(kw::Safe),
336 TokenType::KwSelfUpper => Some(kw::SelfUpper),
337 TokenType::KwStatic => Some(kw::Static),
338 TokenType::KwStruct => Some(kw::Struct),
339 TokenType::KwSuper => Some(kw::Super),
340 TokenType::KwTrait => Some(kw::Trait),
341 TokenType::KwTry => Some(kw::Try),
342 TokenType::KwType => Some(kw::Type),
343 TokenType::KwUnderscore => Some(kw::Underscore),
344 TokenType::KwUnsafe => Some(kw::Unsafe),
345 TokenType::KwUse => Some(kw::Use),
346 TokenType::KwWhere => Some(kw::Where),
347 TokenType::KwWhile => Some(kw::While),
348 TokenType::KwYield => Some(kw::Yield),
349
350 TokenType::SymAttSyntax => Some(sym::att_syntax),
351 TokenType::SymClobberAbi => Some(sym::clobber_abi),
352 TokenType::SymInlateout => Some(sym::inlateout),
353 TokenType::SymInout => Some(sym::inout),
354 TokenType::SymIs => Some(sym::is),
355 TokenType::SymLabel => Some(sym::label),
356 TokenType::SymLateout => Some(sym::lateout),
357 TokenType::SymMayUnwind => Some(sym::may_unwind),
358 TokenType::SymNomem => Some(sym::nomem),
359 TokenType::SymNoreturn => Some(sym::noreturn),
360 TokenType::SymNostack => Some(sym::nostack),
361 TokenType::SymNull => Some(sym::null),
362 TokenType::SymOptions => Some(sym::options),
363 TokenType::SymOut => Some(sym::out),
364 TokenType::SymPreservesFlags => Some(sym::preserves_flags),
365 TokenType::SymPure => Some(sym::pure),
366 TokenType::SymReadonly => Some(sym::readonly),
367 TokenType::SymSym => Some(sym::sym),
368 _ => None,
369 }
370 }
371
372 pub(super) fn to_string(&self) -> String {
375 match self {
376 TokenType::Eq => "`=`",
377 TokenType::Lt => "`<`",
378 TokenType::Le => "`<=`",
379 TokenType::EqEq => "`==`",
380 TokenType::Gt => "`>`",
381 TokenType::AndAnd => "`&&`",
382 TokenType::OrOr => "`||`",
383 TokenType::Bang => "`!`",
384 TokenType::Tilde => "`~`",
385
386 TokenType::Plus => "`+`",
387 TokenType::Minus => "`-`",
388 TokenType::Star => "`*`",
389 TokenType::And => "`&`",
390 TokenType::Or => "`|`",
391
392 TokenType::At => "`@`",
393 TokenType::Dot => "`.`",
394 TokenType::DotDot => "`..`",
395 TokenType::DotDotDot => "`...`",
396 TokenType::DotDotEq => "`..=`",
397 TokenType::Comma => "`,`",
398 TokenType::Semi => "`;`",
399 TokenType::Colon => "`:`",
400 TokenType::PathSep => "`::`",
401 TokenType::RArrow => "`->`",
402 TokenType::FatArrow => "`=>`",
403 TokenType::Pound => "`#`",
404 TokenType::Question => "`?`",
405 TokenType::OpenParen => "`(`",
406 TokenType::CloseParen => "`)`",
407 TokenType::OpenBrace => "`{`",
408 TokenType::CloseBrace => "`}`",
409 TokenType::OpenBracket => "`[`",
410 TokenType::CloseBracket => "`]`",
411 TokenType::Eof => "<eof>",
412
413 TokenType::Operator => "an operator",
414 TokenType::Ident => "identifier",
415 TokenType::Lifetime => "lifetime",
416 TokenType::Path => "path",
417 TokenType::Type => "type",
418 TokenType::Const => "a const expression",
419
420 _ => return ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("`{0}`",
self.is_keyword().unwrap()))
})format!("`{}`", self.is_keyword().unwrap()),
421 }
422 .to_string()
423 }
424}
425
426#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for ExpTokenPair { }
#[automatically_derived]
impl ::core::clone::Clone for ExpTokenPair {
#[inline]
fn clone(&self) -> ExpTokenPair {
let _: ::core::clone::AssertParamIsClone<TokenKind>;
let _: ::core::clone::AssertParamIsClone<TokenType>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ExpTokenPair { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for ExpTokenPair {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "ExpTokenPair",
"tok", &self.tok, "token_type", &&self.token_type)
}
}Debug)]
430pub struct ExpTokenPair {
431 pub tok: TokenKind,
432 pub token_type: TokenType,
433}
434
435#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for ExpKeywordPair { }
#[automatically_derived]
impl ::core::clone::Clone for ExpKeywordPair {
#[inline]
fn clone(&self) -> ExpKeywordPair {
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<TokenType>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ExpKeywordPair { }Copy)]
439pub struct ExpKeywordPair {
440 pub kw: Symbol,
441 pub token_type: TokenType,
442}
443
444#[macro_export]
450#[cfg_attr(rustfmt, rustfmt::skip)]
454macro_rules! exp {
455 (@tok, $tok:ident) => {
457 $crate::parser::token_type::ExpTokenPair {
458 tok: rustc_ast::token::$tok,
459 token_type: $crate::parser::token_type::TokenType::$tok
460 }
461 };
462
463 (@kw, $kw:ident, $token_type:ident) => {
465 $crate::parser::token_type::ExpKeywordPair {
466 kw: rustc_span::symbol::kw::$kw,
467 token_type: $crate::parser::token_type::TokenType::$token_type,
468 }
469 };
470 (@sym, $kw:ident, $token_type:ident) => {
471 $crate::parser::token_type::ExpKeywordPair {
472 kw: rustc_span::symbol::sym::$kw,
473 token_type: $crate::parser::token_type::TokenType::$token_type,
474 }
475 };
476
477 (Eq) => { exp!(@tok, Eq) };
478 (Lt) => { exp!(@tok, Lt) };
479 (Le) => { exp!(@tok, Le) };
480 (EqEq) => { exp!(@tok, EqEq) };
481 (Gt) => { exp!(@tok, Gt) };
482 (AndAnd) => { exp!(@tok, AndAnd) };
483 (OrOr) => { exp!(@tok, OrOr) };
484 (Bang) => { exp!(@tok, Bang) };
485 (Tilde) => { exp!(@tok, Tilde) };
486 (Plus) => { exp!(@tok, Plus) };
487 (Minus) => { exp!(@tok, Minus) };
488 (Star) => { exp!(@tok, Star) };
489 (And) => { exp!(@tok, And) };
490 (Or) => { exp!(@tok, Or) };
491 (At) => { exp!(@tok, At) };
492 (Dot) => { exp!(@tok, Dot) };
493 (DotDot) => { exp!(@tok, DotDot) };
494 (DotDotDot) => { exp!(@tok, DotDotDot) };
495 (DotDotEq) => { exp!(@tok, DotDotEq) };
496 (Comma) => { exp!(@tok, Comma) };
497 (Semi) => { exp!(@tok, Semi) };
498 (Colon) => { exp!(@tok, Colon) };
499 (PathSep) => { exp!(@tok, PathSep) };
500 (RArrow) => { exp!(@tok, RArrow) };
501 (FatArrow) => { exp!(@tok, FatArrow) };
502 (Pound) => { exp!(@tok, Pound) };
503 (Question) => { exp!(@tok, Question) };
504 (Eof) => { exp!(@tok, Eof) };
505
506 (OpenParen) => { exp!(@tok, OpenParen) };
507 (OpenBrace) => { exp!(@tok, OpenBrace) };
508 (OpenBracket) => { exp!(@tok, OpenBracket) };
509 (CloseParen) => { exp!(@tok, CloseParen) };
510 (CloseBrace) => { exp!(@tok, CloseBrace) };
511 (CloseBracket) => { exp!(@tok, CloseBracket) };
512
513 (As) => { exp!(@kw, As, KwAs) };
514 (Async) => { exp!(@kw, Async, KwAsync) };
515 (Auto) => { exp!(@kw, Auto, KwAuto) };
516 (Await) => { exp!(@kw, Await, KwAwait) };
517 (Become) => { exp!(@kw, Become, KwBecome) };
518 (Box) => { exp!(@kw, Box, KwBox) };
519 (Break) => { exp!(@kw, Break, KwBreak) };
520 (Catch) => { exp!(@kw, Catch, KwCatch) };
521 (Const) => { exp!(@kw, Const, KwConst) };
522 (Continue) => { exp!(@kw, Continue, KwContinue) };
523 (ContractEnsures) => { exp!(@kw, ContractEnsures, KwContractEnsures) };
524 (ContractRequires) => { exp!(@kw, ContractRequires, KwContractRequires) };
525 (Crate) => { exp!(@kw, Crate, KwCrate) };
526 (Default) => { exp!(@kw, Default, KwDefault) };
527 (Dyn) => { exp!(@kw, Dyn, KwDyn) };
528 (Else) => { exp!(@kw, Else, KwElse) };
529 (Enum) => { exp!(@kw, Enum, KwEnum) };
530 (Extern) => { exp!(@kw, Extern, KwExtern) };
531 (Fn) => { exp!(@kw, Fn, KwFn) };
532 (For) => { exp!(@kw, For, KwFor) };
533 (Final) => { exp!(@kw, Final, KwFinal) };
534 (Gen) => { exp!(@kw, Gen, KwGen) };
535 (If) => { exp!(@kw, If, KwIf) };
536 (Impl) => { exp!(@kw, Impl, KwImpl) };
537 (In) => { exp!(@kw, In, KwIn) };
538 (Let) => { exp!(@kw, Let, KwLet) };
539 (Loop) => { exp!(@kw, Loop, KwLoop) };
540 (Macro) => { exp!(@kw, Macro, KwMacro) };
541 (MacroRules) => { exp!(@kw, MacroRules, KwMacroRules) };
542 (Match) => { exp!(@kw, Match, KwMatch) };
543 (Mod) => { exp!(@kw, Mod, KwMod) };
544 (Move) => { exp!(@kw, Move, KwMove) };
545 (Mut) => { exp!(@kw, Mut, KwMut) };
546 (Pin) => { exp!(@kw, Pin, KwMut) };
547 (Pub) => { exp!(@kw, Pub, KwPub) };
548 (Raw) => { exp!(@kw, Raw, KwRaw) };
549 (Ref) => { exp!(@kw, Ref, KwRef) };
550 (Return) => { exp!(@kw, Return, KwReturn) };
551 (Reuse) => { exp!(@kw, Reuse, KwReuse) };
552 (Safe) => { exp!(@kw, Safe, KwSafe) };
553 (SelfUpper) => { exp!(@kw, SelfUpper, KwSelfUpper) };
554 (Static) => { exp!(@kw, Static, KwStatic) };
555 (Struct) => { exp!(@kw, Struct, KwStruct) };
556 (Super) => { exp!(@kw, Super, KwSuper) };
557 (Trait) => { exp!(@kw, Trait, KwTrait) };
558 (Try) => { exp!(@kw, Try, KwTry) };
559 (Type) => { exp!(@kw, Type, KwType) };
560 (Underscore) => { exp!(@kw, Underscore, KwUnderscore) };
561 (Unsafe) => { exp!(@kw, Unsafe, KwUnsafe) };
562 (Use) => { exp!(@kw, Use, KwUse) };
563 (Where) => { exp!(@kw, Where, KwWhere) };
564 (While) => { exp!(@kw, While, KwWhile) };
565 (Yield) => { exp!(@kw, Yield, KwYield) };
566
567 (AttSyntax) => { exp!(@sym, att_syntax, SymAttSyntax) };
568 (Bikeshed) => { exp!(@sym, bikeshed, SymBikeshed) };
569 (ClobberAbi) => { exp!(@sym, clobber_abi, SymClobberAbi) };
570 (Inlateout) => { exp!(@sym, inlateout, SymInlateout) };
571 (Inout) => { exp!(@sym, inout, SymInout) };
572 (Is) => { exp!(@sym, is, SymIs) };
573 (Label) => { exp!(@sym, label, SymLabel) };
574 (Lateout) => { exp!(@sym, lateout, SymLateout) };
575 (MayUnwind) => { exp!(@sym, may_unwind, SymMayUnwind) };
576 (Nomem) => { exp!(@sym, nomem, SymNomem) };
577 (Noreturn) => { exp!(@sym, noreturn, SymNoreturn) };
578 (Nostack) => { exp!(@sym, nostack, SymNostack) };
579 (Null) => { exp!(@sym, null, SymNull) };
580 (Options) => { exp!(@sym, options, SymOptions) };
581 (Out) => { exp!(@sym, out, SymOut) };
582 (Pin) => { exp!(@sym, pin, SymPin) };
583 (PreservesFlags) => { exp!(@sym, preserves_flags, SymPreservesFlags) };
584 (Pure) => { exp!(@sym, pure, SymPure) };
585 (Readonly) => { exp!(@sym, readonly, SymReadonly) };
586 (Sym) => { exp!(@sym, sym, SymSym) };
587}
588
589#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for TokenTypeSet { }
#[automatically_derived]
impl ::core::clone::Clone for TokenTypeSet {
#[inline]
fn clone(&self) -> TokenTypeSet {
let _: ::core::clone::AssertParamIsClone<u128>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for TokenTypeSet { }Copy)]
593pub(super) struct TokenTypeSet(u128);
594
595impl TokenTypeSet {
596 pub(super) const fn new() -> TokenTypeSet {
597 TokenTypeSet(0)
598 }
599
600 pub(super) fn is_empty(&self) -> bool {
601 self.0 == 0
602 }
603
604 pub(super) fn insert(&mut self, token_type: TokenType) {
605 self.0 = self.0 | (1u128 << token_type as u32)
606 }
607
608 pub(super) fn clear(&mut self) {
609 self.0 = 0
610 }
611
612 pub(super) fn contains(&self, token_type: TokenType) -> bool {
613 self.0 & (1u128 << token_type as u32) != 0
614 }
615
616 pub(super) fn iter(&self) -> TokenTypeSetIter {
617 TokenTypeSetIter(*self)
618 }
619}
620
621pub(super) struct TokenTypeSetIter(TokenTypeSet);
625
626impl Iterator for TokenTypeSetIter {
627 type Item = TokenType;
628
629 fn next(&mut self) -> Option<TokenType> {
630 let num_bits: u32 = (size_of_val(&self.0.0) * 8) as u32;
631 {
match (&num_bits, &128) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
let kind = ::core::panicking::AssertKind::Eq;
::core::panicking::assert_failed(kind, &*left_val,
&*right_val, ::core::option::Option::None);
}
}
}
};assert_eq!(num_bits, 128);
632 let z = self.0.0.trailing_zeros();
633 if z == num_bits {
634 None
635 } else {
636 self.0.0 &= !(1 << z); Some(TokenType::from_u32(z))
638 }
639 }
640}