1use std::borrow::Cow;
2use std::fmt;
3
4pub use LitKind::*;
5pub use NtExprKind::*;
6pub use NtPatKind::*;
7pub use TokenKind::*;
8use rustc_macros::{Decodable, Encodable, StableHash};
9use rustc_span::edition::Edition;
10use rustc_span::symbol::IdentPrintMode;
11use rustc_span::{self as sp, DUMMY_SP, ErrorGuaranteed, Span, Symbol, kw, sym};
12
13use crate::ast;
14use crate::util::case::Case;
15
16#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for DocFragmentKind { }
#[automatically_derived]
impl ::core::clone::Clone for DocFragmentKind {
#[inline]
fn clone(&self) -> DocFragmentKind {
let _: ::core::clone::AssertParamIsClone<CommentKind>;
let _: ::core::clone::AssertParamIsClone<Span>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for DocFragmentKind { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for DocFragmentKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for DocFragmentKind {
#[inline]
fn eq(&self, other: &DocFragmentKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(DocFragmentKind::Sugared(__self_0),
DocFragmentKind::Sugared(__arg1_0)) => __self_0 == __arg1_0,
(DocFragmentKind::Raw(__self_0),
DocFragmentKind::Raw(__arg1_0)) => __self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for DocFragmentKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<CommentKind>;
let _: ::core::cmp::AssertParamIsEq<Span>;
}
}Eq, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for DocFragmentKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
DocFragmentKind::Sugared(ref __binding_0) => { 0usize }
DocFragmentKind::Raw(ref __binding_0) => { 1usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
DocFragmentKind::Sugared(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
DocFragmentKind::Raw(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for DocFragmentKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => {
DocFragmentKind::Sugared(::rustc_serialize::Decodable::decode(__decoder))
}
1usize => {
DocFragmentKind::Raw(::rustc_serialize::Decodable::decode(__decoder))
}
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `DocFragmentKind`, expected 0..2, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::fmt::Debug for DocFragmentKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
DocFragmentKind::Sugared(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Sugared", &__self_0),
DocFragmentKind::Raw(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Raw",
&__self_0),
}
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for
DocFragmentKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
DocFragmentKind::Sugared(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
DocFragmentKind::Raw(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
18pub enum DocFragmentKind {
19 Sugared(CommentKind),
21 Raw(Span),
23}
24
25impl DocFragmentKind {
26 pub fn is_sugared(self) -> bool {
27 #[allow(non_exhaustive_omitted_patterns)] match self {
Self::Sugared(_) => true,
_ => false,
}matches!(self, Self::Sugared(_))
28 }
29
30 pub fn comment_kind(self) -> CommentKind {
33 match self {
34 Self::Sugared(kind) => kind,
35 Self::Raw(_) => CommentKind::Line,
36 }
37 }
38}
39
40#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for CommentKind { }
#[automatically_derived]
impl ::core::clone::Clone for CommentKind {
#[inline]
fn clone(&self) -> CommentKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for CommentKind { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for CommentKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for CommentKind {
#[inline]
fn eq(&self, other: &CommentKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for CommentKind { }Eq, #[automatically_derived]
impl ::core::hash::Hash for CommentKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state)
}
}Hash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for CommentKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
CommentKind::Line => { 0usize }
CommentKind::Block => { 1usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for CommentKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { CommentKind::Line }
1usize => { CommentKind::Block }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `CommentKind`, expected 0..2, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::fmt::Debug for CommentKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
CommentKind::Line => "Line",
CommentKind::Block => "Block",
})
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for CommentKind
{
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
CommentKind::Line => {}
CommentKind::Block => {}
}
}
}
};StableHash)]
41pub enum CommentKind {
42 Line,
43 Block,
44}
45
46#[derive(#[automatically_derived]
impl ::core::marker::Copy for InvisibleOrigin { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for InvisibleOrigin { }
#[automatically_derived]
impl ::core::clone::Clone for InvisibleOrigin {
#[inline]
fn clone(&self) -> InvisibleOrigin {
let _: ::core::clone::AssertParamIsClone<MetaVarKind>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for InvisibleOrigin { }
#[automatically_derived]
impl ::core::cmp::PartialEq for InvisibleOrigin {
#[inline]
fn eq(&self, other: &InvisibleOrigin) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(InvisibleOrigin::MetaVar(__self_0),
InvisibleOrigin::MetaVar(__arg1_0)) => __self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for InvisibleOrigin {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<MetaVarKind>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for InvisibleOrigin {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
InvisibleOrigin::MetaVar(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for InvisibleOrigin {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
InvisibleOrigin::MetaVar(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"MetaVar", &__self_0),
InvisibleOrigin::ProcMacro =>
::core::fmt::Formatter::write_str(f, "ProcMacro"),
}
}
}Debug, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for InvisibleOrigin {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
InvisibleOrigin::MetaVar(ref __binding_0) => { 0usize }
InvisibleOrigin::ProcMacro => { 1usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
InvisibleOrigin::MetaVar(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
InvisibleOrigin::ProcMacro => {}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for InvisibleOrigin {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => {
InvisibleOrigin::MetaVar(::rustc_serialize::Decodable::decode(__decoder))
}
1usize => { InvisibleOrigin::ProcMacro }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `InvisibleOrigin`, expected 0..2, actual {0}",
n));
}
}
}
}
};Decodable, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for
InvisibleOrigin {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
InvisibleOrigin::MetaVar(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
InvisibleOrigin::ProcMacro => {}
}
}
}
};StableHash)]
47pub enum InvisibleOrigin {
48 MetaVar(MetaVarKind),
50
51 ProcMacro,
54}
55
56impl InvisibleOrigin {
57 #[inline]
60 pub fn skip(&self) -> bool {
61 match self {
62 InvisibleOrigin::MetaVar(_) => false,
63 InvisibleOrigin::ProcMacro => true,
64 }
65 }
66}
67
68#[derive(#[automatically_derived]
impl ::core::fmt::Debug for MetaVarKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
MetaVarKind::Item => ::core::fmt::Formatter::write_str(f, "Item"),
MetaVarKind::Block =>
::core::fmt::Formatter::write_str(f, "Block"),
MetaVarKind::Stmt => ::core::fmt::Formatter::write_str(f, "Stmt"),
MetaVarKind::Pat(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Pat",
&__self_0),
MetaVarKind::Expr {
kind: __self_0,
can_begin_literal_maybe_minus: __self_1,
can_begin_string_literal: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f, "Expr",
"kind", __self_0, "can_begin_literal_maybe_minus", __self_1,
"can_begin_string_literal", &__self_2),
MetaVarKind::Ty { is_path: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Ty",
"is_path", &__self_0),
MetaVarKind::Ident =>
::core::fmt::Formatter::write_str(f, "Ident"),
MetaVarKind::Lifetime =>
::core::fmt::Formatter::write_str(f, "Lifetime"),
MetaVarKind::Literal =>
::core::fmt::Formatter::write_str(f, "Literal"),
MetaVarKind::Meta { has_meta_form: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Meta",
"has_meta_form", &__self_0),
MetaVarKind::Path => ::core::fmt::Formatter::write_str(f, "Path"),
MetaVarKind::Vis => ::core::fmt::Formatter::write_str(f, "Vis"),
MetaVarKind::Guard =>
::core::fmt::Formatter::write_str(f, "Guard"),
MetaVarKind::TT => ::core::fmt::Formatter::write_str(f, "TT"),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for MetaVarKind { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for MetaVarKind { }
#[automatically_derived]
impl ::core::clone::Clone for MetaVarKind {
#[inline]
fn clone(&self) -> MetaVarKind {
let _: ::core::clone::AssertParamIsClone<NtPatKind>;
let _: ::core::clone::AssertParamIsClone<NtExprKind>;
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for MetaVarKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for MetaVarKind {
#[inline]
fn eq(&self, other: &MetaVarKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(MetaVarKind::Pat(__self_0), MetaVarKind::Pat(__arg1_0)) =>
__self_0 == __arg1_0,
(MetaVarKind::Expr {
kind: __self_0,
can_begin_literal_maybe_minus: __self_1,
can_begin_string_literal: __self_2 }, MetaVarKind::Expr {
kind: __arg1_0,
can_begin_literal_maybe_minus: __arg1_1,
can_begin_string_literal: __arg1_2 }) =>
__self_1 == __arg1_1 && __self_2 == __arg1_2 &&
__self_0 == __arg1_0,
(MetaVarKind::Ty { is_path: __self_0 }, MetaVarKind::Ty {
is_path: __arg1_0 }) => __self_0 == __arg1_0,
(MetaVarKind::Meta { has_meta_form: __self_0 },
MetaVarKind::Meta { has_meta_form: __arg1_0 }) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for MetaVarKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<NtPatKind>;
let _: ::core::cmp::AssertParamIsEq<NtExprKind>;
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for MetaVarKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
MetaVarKind::Item => { 0usize }
MetaVarKind::Block => { 1usize }
MetaVarKind::Stmt => { 2usize }
MetaVarKind::Pat(ref __binding_0) => { 3usize }
MetaVarKind::Expr {
kind: ref __binding_0,
can_begin_literal_maybe_minus: ref __binding_1,
can_begin_string_literal: ref __binding_2 } => {
4usize
}
MetaVarKind::Ty { is_path: ref __binding_0 } => { 5usize }
MetaVarKind::Ident => { 6usize }
MetaVarKind::Lifetime => { 7usize }
MetaVarKind::Literal => { 8usize }
MetaVarKind::Meta { has_meta_form: ref __binding_0 } => {
9usize
}
MetaVarKind::Path => { 10usize }
MetaVarKind::Vis => { 11usize }
MetaVarKind::Guard => { 12usize }
MetaVarKind::TT => { 13usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
MetaVarKind::Item => {}
MetaVarKind::Block => {}
MetaVarKind::Stmt => {}
MetaVarKind::Pat(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
MetaVarKind::Expr {
kind: ref __binding_0,
can_begin_literal_maybe_minus: ref __binding_1,
can_begin_string_literal: ref __binding_2 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_2,
__encoder);
}
MetaVarKind::Ty { is_path: ref __binding_0 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
MetaVarKind::Ident => {}
MetaVarKind::Lifetime => {}
MetaVarKind::Literal => {}
MetaVarKind::Meta { has_meta_form: ref __binding_0 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
MetaVarKind::Path => {}
MetaVarKind::Vis => {}
MetaVarKind::Guard => {}
MetaVarKind::TT => {}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for MetaVarKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { MetaVarKind::Item }
1usize => { MetaVarKind::Block }
2usize => { MetaVarKind::Stmt }
3usize => {
MetaVarKind::Pat(::rustc_serialize::Decodable::decode(__decoder))
}
4usize => {
MetaVarKind::Expr {
kind: ::rustc_serialize::Decodable::decode(__decoder),
can_begin_literal_maybe_minus: ::rustc_serialize::Decodable::decode(__decoder),
can_begin_string_literal: ::rustc_serialize::Decodable::decode(__decoder),
}
}
5usize => {
MetaVarKind::Ty {
is_path: ::rustc_serialize::Decodable::decode(__decoder),
}
}
6usize => { MetaVarKind::Ident }
7usize => { MetaVarKind::Lifetime }
8usize => { MetaVarKind::Literal }
9usize => {
MetaVarKind::Meta {
has_meta_form: ::rustc_serialize::Decodable::decode(__decoder),
}
}
10usize => { MetaVarKind::Path }
11usize => { MetaVarKind::Vis }
12usize => { MetaVarKind::Guard }
13usize => { MetaVarKind::TT }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `MetaVarKind`, expected 0..14, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::hash::Hash for MetaVarKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
MetaVarKind::Pat(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
MetaVarKind::Expr {
kind: __self_0,
can_begin_literal_maybe_minus: __self_1,
can_begin_string_literal: __self_2 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state)
}
MetaVarKind::Ty { is_path: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
MetaVarKind::Meta { has_meta_form: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for MetaVarKind
{
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
MetaVarKind::Item => {}
MetaVarKind::Block => {}
MetaVarKind::Stmt => {}
MetaVarKind::Pat(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
MetaVarKind::Expr {
kind: ref __binding_0,
can_begin_literal_maybe_minus: ref __binding_1,
can_begin_string_literal: ref __binding_2 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
{ __binding_2.stable_hash(__hcx, __hasher); }
}
MetaVarKind::Ty { is_path: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
MetaVarKind::Ident => {}
MetaVarKind::Lifetime => {}
MetaVarKind::Literal => {}
MetaVarKind::Meta { has_meta_form: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
MetaVarKind::Path => {}
MetaVarKind::Vis => {}
MetaVarKind::Guard => {}
MetaVarKind::TT => {}
}
}
}
};StableHash)]
70pub enum MetaVarKind {
71 Item,
72 Block,
73 Stmt,
74 Pat(NtPatKind),
75 Expr {
76 kind: NtExprKind,
77 can_begin_literal_maybe_minus: bool,
79 can_begin_string_literal: bool,
81 },
82 Ty {
83 is_path: bool,
84 },
85 Ident,
86 Lifetime,
87 Literal,
88 Meta {
89 has_meta_form: bool,
91 },
92 Path,
93 Vis,
94 Guard,
95 TT,
96}
97
98impl fmt::Display for MetaVarKind {
99 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
100 let sym = match self {
101 MetaVarKind::Item => sym::item,
102 MetaVarKind::Block => sym::block,
103 MetaVarKind::Stmt => sym::stmt,
104 MetaVarKind::Pat(PatParam { inferred: true } | PatWithOr) => sym::pat,
105 MetaVarKind::Pat(PatParam { inferred: false }) => sym::pat_param,
106 MetaVarKind::Expr { kind: Expr2021 { inferred: true } | Expr, .. } => sym::expr,
107 MetaVarKind::Expr { kind: Expr2021 { inferred: false }, .. } => sym::expr_2021,
108 MetaVarKind::Ty { .. } => sym::ty,
109 MetaVarKind::Ident => sym::ident,
110 MetaVarKind::Lifetime => sym::lifetime,
111 MetaVarKind::Literal => sym::literal,
112 MetaVarKind::Meta { .. } => sym::meta,
113 MetaVarKind::Path => sym::path,
114 MetaVarKind::Vis => sym::vis,
115 MetaVarKind::Guard => sym::guard,
116 MetaVarKind::TT => sym::tt,
117 };
118 f.write_fmt(format_args!("{0}", sym))write!(f, "{sym}")
119 }
120}
121
122#[derive(#[automatically_derived]
impl ::core::marker::Copy for Delimiter { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Delimiter { }
#[automatically_derived]
impl ::core::clone::Clone for Delimiter {
#[inline]
fn clone(&self) -> Delimiter {
let _: ::core::clone::AssertParamIsClone<InvisibleOrigin>;
*self
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Delimiter {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Delimiter::Parenthesis =>
::core::fmt::Formatter::write_str(f, "Parenthesis"),
Delimiter::Brace => ::core::fmt::Formatter::write_str(f, "Brace"),
Delimiter::Bracket =>
::core::fmt::Formatter::write_str(f, "Bracket"),
Delimiter::Invisible(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Invisible", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Delimiter { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Delimiter {
#[inline]
fn eq(&self, other: &Delimiter) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(Delimiter::Invisible(__self_0),
Delimiter::Invisible(__arg1_0)) => __self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Delimiter {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<InvisibleOrigin>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Delimiter {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
Delimiter::Invisible(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for Delimiter {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
Delimiter::Parenthesis => { 0usize }
Delimiter::Brace => { 1usize }
Delimiter::Bracket => { 2usize }
Delimiter::Invisible(ref __binding_0) => { 3usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
Delimiter::Parenthesis => {}
Delimiter::Brace => {}
Delimiter::Bracket => {}
Delimiter::Invisible(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for Delimiter {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { Delimiter::Parenthesis }
1usize => { Delimiter::Brace }
2usize => { Delimiter::Bracket }
3usize => {
Delimiter::Invisible(::rustc_serialize::Decodable::decode(__decoder))
}
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `Delimiter`, expected 0..4, actual {0}",
n));
}
}
}
}
};Decodable, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Delimiter {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
Delimiter::Parenthesis => {}
Delimiter::Brace => {}
Delimiter::Bracket => {}
Delimiter::Invisible(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
126pub enum Delimiter {
127 Parenthesis,
129 Brace,
131 Bracket,
133 Invisible(InvisibleOrigin),
139}
140
141impl Delimiter {
142 #[inline]
146 pub fn skip(&self) -> bool {
147 match self {
148 Delimiter::Parenthesis | Delimiter::Bracket | Delimiter::Brace => false,
149 Delimiter::Invisible(origin) => origin.skip(),
150 }
151 }
152
153 pub fn eq_ignoring_invisible_origin(&self, other: &Delimiter) -> bool {
156 match (self, other) {
157 (Delimiter::Parenthesis, Delimiter::Parenthesis) => true,
158 (Delimiter::Brace, Delimiter::Brace) => true,
159 (Delimiter::Bracket, Delimiter::Bracket) => true,
160 (Delimiter::Invisible(_), Delimiter::Invisible(_)) => true,
161 _ => false,
162 }
163 }
164
165 pub fn as_open_token_kind(&self) -> TokenKind {
166 match *self {
167 Delimiter::Parenthesis => OpenParen,
168 Delimiter::Brace => OpenBrace,
169 Delimiter::Bracket => OpenBracket,
170 Delimiter::Invisible(origin) => OpenInvisible(origin),
171 }
172 }
173
174 pub fn as_close_token_kind(&self) -> TokenKind {
175 match *self {
176 Delimiter::Parenthesis => CloseParen,
177 Delimiter::Brace => CloseBrace,
178 Delimiter::Bracket => CloseBracket,
179 Delimiter::Invisible(origin) => CloseInvisible(origin),
180 }
181 }
182}
183
184#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for LitKind { }
#[automatically_derived]
impl ::core::clone::Clone for LitKind {
#[inline]
fn clone(&self) -> LitKind {
let _: ::core::clone::AssertParamIsClone<u8>;
let _: ::core::clone::AssertParamIsClone<ErrorGuaranteed>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for LitKind { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for LitKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for LitKind {
#[inline]
fn eq(&self, other: &LitKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(LitKind::StrRaw(__self_0), LitKind::StrRaw(__arg1_0)) =>
__self_0 == __arg1_0,
(LitKind::ByteStrRaw(__self_0), LitKind::ByteStrRaw(__arg1_0))
=> __self_0 == __arg1_0,
(LitKind::CStrRaw(__self_0), LitKind::CStrRaw(__arg1_0)) =>
__self_0 == __arg1_0,
(LitKind::Err(__self_0), LitKind::Err(__arg1_0)) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for LitKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u8>;
let _: ::core::cmp::AssertParamIsEq<ErrorGuaranteed>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for LitKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
LitKind::StrRaw(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
LitKind::ByteStrRaw(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
LitKind::CStrRaw(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
LitKind::Err(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for LitKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
LitKind::Bool => { 0usize }
LitKind::Byte => { 1usize }
LitKind::Char => { 2usize }
LitKind::Integer => { 3usize }
LitKind::Float => { 4usize }
LitKind::Str => { 5usize }
LitKind::StrRaw(ref __binding_0) => { 6usize }
LitKind::ByteStr => { 7usize }
LitKind::ByteStrRaw(ref __binding_0) => { 8usize }
LitKind::CStr => { 9usize }
LitKind::CStrRaw(ref __binding_0) => { 10usize }
LitKind::Err(ref __binding_0) => { 11usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
LitKind::Bool => {}
LitKind::Byte => {}
LitKind::Char => {}
LitKind::Integer => {}
LitKind::Float => {}
LitKind::Str => {}
LitKind::StrRaw(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
LitKind::ByteStr => {}
LitKind::ByteStrRaw(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
LitKind::CStr => {}
LitKind::CStrRaw(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
LitKind::Err(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for LitKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { LitKind::Bool }
1usize => { LitKind::Byte }
2usize => { LitKind::Char }
3usize => { LitKind::Integer }
4usize => { LitKind::Float }
5usize => { LitKind::Str }
6usize => {
LitKind::StrRaw(::rustc_serialize::Decodable::decode(__decoder))
}
7usize => { LitKind::ByteStr }
8usize => {
LitKind::ByteStrRaw(::rustc_serialize::Decodable::decode(__decoder))
}
9usize => { LitKind::CStr }
10usize => {
LitKind::CStrRaw(::rustc_serialize::Decodable::decode(__decoder))
}
11usize => {
LitKind::Err(::rustc_serialize::Decodable::decode(__decoder))
}
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `LitKind`, expected 0..12, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::fmt::Debug for LitKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
LitKind::Bool => ::core::fmt::Formatter::write_str(f, "Bool"),
LitKind::Byte => ::core::fmt::Formatter::write_str(f, "Byte"),
LitKind::Char => ::core::fmt::Formatter::write_str(f, "Char"),
LitKind::Integer =>
::core::fmt::Formatter::write_str(f, "Integer"),
LitKind::Float => ::core::fmt::Formatter::write_str(f, "Float"),
LitKind::Str => ::core::fmt::Formatter::write_str(f, "Str"),
LitKind::StrRaw(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "StrRaw",
&__self_0),
LitKind::ByteStr =>
::core::fmt::Formatter::write_str(f, "ByteStr"),
LitKind::ByteStrRaw(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ByteStrRaw", &__self_0),
LitKind::CStr => ::core::fmt::Formatter::write_str(f, "CStr"),
LitKind::CStrRaw(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"CStrRaw", &__self_0),
LitKind::Err(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Err",
&__self_0),
}
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for LitKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
LitKind::Bool => {}
LitKind::Byte => {}
LitKind::Char => {}
LitKind::Integer => {}
LitKind::Float => {}
LitKind::Str => {}
LitKind::StrRaw(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
LitKind::ByteStr => {}
LitKind::ByteStrRaw(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
LitKind::CStr => {}
LitKind::CStrRaw(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
LitKind::Err(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
189pub enum LitKind {
190 Bool, Byte,
192 Char,
193 Integer, Float, Str,
196 StrRaw(u8), ByteStr,
198 ByteStrRaw(u8), CStr,
200 CStrRaw(u8),
201 Err(ErrorGuaranteed),
202}
203
204#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Lit { }
#[automatically_derived]
impl ::core::clone::Clone for Lit {
#[inline]
fn clone(&self) -> Lit {
let _: ::core::clone::AssertParamIsClone<LitKind>;
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<Option<Symbol>>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Lit { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Lit { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Lit {
#[inline]
fn eq(&self, other: &Lit) -> bool {
self.kind == other.kind && self.symbol == other.symbol &&
self.suffix == other.suffix
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Lit {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<LitKind>;
let _: ::core::cmp::AssertParamIsEq<Symbol>;
let _: ::core::cmp::AssertParamIsEq<Option<Symbol>>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Lit {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.kind, state);
::core::hash::Hash::hash(&self.symbol, state);
::core::hash::Hash::hash(&self.suffix, state)
}
}Hash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for Lit {
fn encode(&self, __encoder: &mut __E) {
let Lit {
kind: ref __binding_0,
symbol: ref __binding_1,
suffix: ref __binding_2 } = *self;
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_2,
__encoder);
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for Lit {
fn decode(__decoder: &mut __D) -> Self {
Lit {
kind: ::rustc_serialize::Decodable::decode(__decoder),
symbol: ::rustc_serialize::Decodable::decode(__decoder),
suffix: ::rustc_serialize::Decodable::decode(__decoder),
}
}
}
};Decodable, #[automatically_derived]
impl ::core::fmt::Debug for Lit {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "Lit", "kind",
&self.kind, "symbol", &self.symbol, "suffix", &&self.suffix)
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Lit {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
match *self {
Lit {
kind: ref __binding_0,
symbol: ref __binding_1,
suffix: ref __binding_2 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
{ __binding_2.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
206pub struct Lit {
207 pub kind: LitKind,
208 pub symbol: Symbol,
209 pub suffix: Option<Symbol>,
210}
211
212impl Lit {
213 pub fn new(kind: LitKind, symbol: Symbol, suffix: Option<Symbol>) -> Lit {
214 Lit { kind, symbol, suffix }
215 }
216
217 pub fn is_semantic_float(&self) -> bool {
220 match self.kind {
221 LitKind::Float => true,
222 LitKind::Integer => match self.suffix {
223 Some(sym) => sym == sym::f32 || sym == sym::f64,
224 None => false,
225 },
226 _ => false,
227 }
228 }
229
230 pub fn from_token(token: &Token) -> Option<Lit> {
233 match token.uninterpolate().kind {
234 Ident(name, IdentIsRaw::No) if name.is_bool_lit() => Some(Lit::new(Bool, name, None)),
235 Literal(token_lit) => Some(token_lit),
236 OpenInvisible(InvisibleOrigin::MetaVar(
237 MetaVarKind::Literal | MetaVarKind::Expr { .. },
238 )) => {
239 { ::core::panicking::panic_fmt(format_args!("from_token metavar")); };panic!("from_token metavar");
241 }
242 _ => None,
243 }
244 }
245}
246
247impl fmt::Display for Lit {
248 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
249 let Lit { kind, symbol, suffix } = *self;
250 match kind {
251 Byte => f.write_fmt(format_args!("b\'{0}\'", symbol))write!(f, "b'{symbol}'")?,
252 Char => f.write_fmt(format_args!("\'{0}\'", symbol))write!(f, "'{symbol}'")?,
253 Str => f.write_fmt(format_args!("\"{0}\"", symbol))write!(f, "\"{symbol}\"")?,
254 StrRaw(n) => f.write_fmt(format_args!("r{0}\"{1}\"{0}", "#".repeat(n as usize), symbol))write!(
255 f,
256 "r{delim}\"{string}\"{delim}",
257 delim = "#".repeat(n as usize),
258 string = symbol
259 )?,
260 ByteStr => f.write_fmt(format_args!("b\"{0}\"", symbol))write!(f, "b\"{symbol}\"")?,
261 ByteStrRaw(n) => f.write_fmt(format_args!("br{0}\"{1}\"{0}", "#".repeat(n as usize), symbol))write!(
262 f,
263 "br{delim}\"{string}\"{delim}",
264 delim = "#".repeat(n as usize),
265 string = symbol
266 )?,
267 CStr => f.write_fmt(format_args!("c\"{0}\"", symbol))write!(f, "c\"{symbol}\"")?,
268 CStrRaw(n) => {
269 f.write_fmt(format_args!("cr{0}\"{1}\"{0}", "#".repeat(n as usize), symbol))write!(f, "cr{delim}\"{symbol}\"{delim}", delim = "#".repeat(n as usize))?
270 }
271 Integer | Float | Bool | Err(_) => f.write_fmt(format_args!("{0}", symbol))write!(f, "{symbol}")?,
272 }
273
274 if let Some(suffix) = suffix {
275 f.write_fmt(format_args!("{0}", suffix))write!(f, "{suffix}")?;
276 }
277
278 Ok(())
279 }
280}
281
282impl LitKind {
283 pub fn article(self) -> &'static str {
285 match self {
286 Integer | Err(_) => "an",
287 _ => "a",
288 }
289 }
290
291 pub fn descr(self) -> &'static str {
292 match self {
293 Bool => "boolean",
294 Byte => "byte",
295 Char => "char",
296 Integer => "integer",
297 Float => "float",
298 Str | StrRaw(..) => "string",
299 ByteStr | ByteStrRaw(..) => "byte string",
300 CStr | CStrRaw(..) => "C string",
301 Err(_) => "error",
302 }
303 }
304
305 pub(crate) fn may_have_suffix(self) -> bool {
306 #[allow(non_exhaustive_omitted_patterns)] match self {
Integer | Float | Err(_) => true,
_ => false,
}matches!(self, Integer | Float | Err(_))
307 }
308}
309
310pub fn ident_can_begin_expr(name: Symbol, span: Span, is_raw: IdentIsRaw) -> bool {
311 let ident_token = Token::new(Ident(name, is_raw), span);
315
316 !ident_token.is_reserved_ident()
319 || ident_token.is_path_segment_keyword()
320 || [
321 kw::Async,
322 kw::Do,
323 kw::Box,
324 kw::Break,
325 kw::Const,
326 kw::Continue,
327 kw::False,
328 kw::For,
329 kw::Gen,
330 kw::If,
331 kw::Let,
332 kw::Loop,
333 kw::Match,
334 kw::Move,
335 kw::Return,
336 kw::True,
337 kw::Try,
338 kw::Unsafe,
339 kw::While,
340 kw::Yield,
341 kw::Safe,
342 kw::Static,
343 ]
344 .contains(&name)
345}
346
347fn ident_can_begin_type(name: Symbol, span: Span, is_raw: IdentIsRaw) -> bool {
348 let ident_token = Token::new(Ident(name, is_raw), span);
352
353 !ident_token.is_reserved_ident()
354 || ident_token.is_path_segment_keyword()
355 || [kw::Underscore, kw::For, kw::Impl, kw::Fn, kw::Unsafe, kw::Extern, kw::Typeof, kw::Dyn]
356 .contains(&name)
357}
358
359#[derive(#[automatically_derived]
impl ::core::marker::StructuralPartialEq for IdentIsRaw { }
#[automatically_derived]
impl ::core::cmp::PartialEq for IdentIsRaw {
#[inline]
fn eq(&self, other: &IdentIsRaw) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for IdentIsRaw { }Eq, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for IdentIsRaw {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
IdentIsRaw::No => { 0usize }
IdentIsRaw::Yes => { 1usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for IdentIsRaw {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { IdentIsRaw::No }
1usize => { IdentIsRaw::Yes }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `IdentIsRaw`, expected 0..2, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::hash::Hash for IdentIsRaw {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state)
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for IdentIsRaw {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self { IdentIsRaw::No => "No", IdentIsRaw::Yes => "Yes", })
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for IdentIsRaw { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for IdentIsRaw { }
#[automatically_derived]
impl ::core::clone::Clone for IdentIsRaw {
#[inline]
fn clone(&self) -> IdentIsRaw { *self }
}Clone, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for IdentIsRaw {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self { IdentIsRaw::No => {} IdentIsRaw::Yes => {} }
}
}
};StableHash)]
360pub enum IdentIsRaw {
361 No,
362 Yes,
363}
364
365impl IdentIsRaw {
366 pub fn to_print_mode_ident(self) -> IdentPrintMode {
367 match self {
368 IdentIsRaw::No => IdentPrintMode::Normal,
369 IdentIsRaw::Yes => IdentPrintMode::RawIdent,
370 }
371 }
372 pub fn to_print_mode_lifetime(self) -> IdentPrintMode {
373 match self {
374 IdentIsRaw::No => IdentPrintMode::Normal,
375 IdentIsRaw::Yes => IdentPrintMode::RawLifetime,
376 }
377 }
378}
379
380impl From<bool> for IdentIsRaw {
381 fn from(b: bool) -> Self {
382 if b { Self::Yes } else { Self::No }
383 }
384}
385
386#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for TokenKind { }
#[automatically_derived]
impl ::core::clone::Clone for TokenKind {
#[inline]
fn clone(&self) -> TokenKind {
let _: ::core::clone::AssertParamIsClone<InvisibleOrigin>;
let _: ::core::clone::AssertParamIsClone<Lit>;
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<IdentIsRaw>;
let _: ::core::clone::AssertParamIsClone<sp::Ident>;
let _: ::core::clone::AssertParamIsClone<sp::Ident>;
let _: ::core::clone::AssertParamIsClone<CommentKind>;
let _: ::core::clone::AssertParamIsClone<ast::AttrStyle>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for TokenKind { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for TokenKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for TokenKind {
#[inline]
fn eq(&self, other: &TokenKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(TokenKind::OpenInvisible(__self_0),
TokenKind::OpenInvisible(__arg1_0)) => __self_0 == __arg1_0,
(TokenKind::CloseInvisible(__self_0),
TokenKind::CloseInvisible(__arg1_0)) =>
__self_0 == __arg1_0,
(TokenKind::Literal(__self_0), TokenKind::Literal(__arg1_0))
=> __self_0 == __arg1_0,
(TokenKind::Ident(__self_0, __self_1),
TokenKind::Ident(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(TokenKind::NtIdent(__self_0, __self_1),
TokenKind::NtIdent(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(TokenKind::Lifetime(__self_0, __self_1),
TokenKind::Lifetime(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(TokenKind::NtLifetime(__self_0, __self_1),
TokenKind::NtLifetime(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(TokenKind::DocComment(__self_0, __self_1, __self_2),
TokenKind::DocComment(__arg1_0, __arg1_1, __arg1_2)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for TokenKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<InvisibleOrigin>;
let _: ::core::cmp::AssertParamIsEq<Lit>;
let _: ::core::cmp::AssertParamIsEq<Symbol>;
let _: ::core::cmp::AssertParamIsEq<IdentIsRaw>;
let _: ::core::cmp::AssertParamIsEq<sp::Ident>;
let _: ::core::cmp::AssertParamIsEq<sp::Ident>;
let _: ::core::cmp::AssertParamIsEq<CommentKind>;
let _: ::core::cmp::AssertParamIsEq<ast::AttrStyle>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for TokenKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
TokenKind::OpenInvisible(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
TokenKind::CloseInvisible(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
TokenKind::Literal(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
TokenKind::Ident(__self_0, __self_1) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
TokenKind::NtIdent(__self_0, __self_1) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
TokenKind::Lifetime(__self_0, __self_1) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
TokenKind::NtLifetime(__self_0, __self_1) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
TokenKind::DocComment(__self_0, __self_1, __self_2) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state)
}
_ => {}
}
}
}Hash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for TokenKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
TokenKind::Eq => { 0usize }
TokenKind::Lt => { 1usize }
TokenKind::Le => { 2usize }
TokenKind::EqEq => { 3usize }
TokenKind::Ne => { 4usize }
TokenKind::Ge => { 5usize }
TokenKind::Gt => { 6usize }
TokenKind::AndAnd => { 7usize }
TokenKind::OrOr => { 8usize }
TokenKind::Bang => { 9usize }
TokenKind::Tilde => { 10usize }
TokenKind::Plus => { 11usize }
TokenKind::Minus => { 12usize }
TokenKind::Star => { 13usize }
TokenKind::Slash => { 14usize }
TokenKind::Percent => { 15usize }
TokenKind::Caret => { 16usize }
TokenKind::And => { 17usize }
TokenKind::Or => { 18usize }
TokenKind::Shl => { 19usize }
TokenKind::Shr => { 20usize }
TokenKind::PlusEq => { 21usize }
TokenKind::MinusEq => { 22usize }
TokenKind::StarEq => { 23usize }
TokenKind::SlashEq => { 24usize }
TokenKind::PercentEq => { 25usize }
TokenKind::CaretEq => { 26usize }
TokenKind::AndEq => { 27usize }
TokenKind::OrEq => { 28usize }
TokenKind::ShlEq => { 29usize }
TokenKind::ShrEq => { 30usize }
TokenKind::At => { 31usize }
TokenKind::Dot => { 32usize }
TokenKind::DotDot => { 33usize }
TokenKind::DotDotDot => { 34usize }
TokenKind::DotDotEq => { 35usize }
TokenKind::Comma => { 36usize }
TokenKind::Semi => { 37usize }
TokenKind::Colon => { 38usize }
TokenKind::PathSep => { 39usize }
TokenKind::RArrow => { 40usize }
TokenKind::LArrow => { 41usize }
TokenKind::FatArrow => { 42usize }
TokenKind::Pound => { 43usize }
TokenKind::Dollar => { 44usize }
TokenKind::Question => { 45usize }
TokenKind::SingleQuote => { 46usize }
TokenKind::OpenParen => { 47usize }
TokenKind::CloseParen => { 48usize }
TokenKind::OpenBrace => { 49usize }
TokenKind::CloseBrace => { 50usize }
TokenKind::OpenBracket => { 51usize }
TokenKind::CloseBracket => { 52usize }
TokenKind::OpenInvisible(ref __binding_0) => { 53usize }
TokenKind::CloseInvisible(ref __binding_0) => { 54usize }
TokenKind::Literal(ref __binding_0) => { 55usize }
TokenKind::Ident(ref __binding_0, ref __binding_1) => {
56usize
}
TokenKind::NtIdent(ref __binding_0, ref __binding_1) => {
57usize
}
TokenKind::Lifetime(ref __binding_0, ref __binding_1) => {
58usize
}
TokenKind::NtLifetime(ref __binding_0, ref __binding_1) => {
59usize
}
TokenKind::DocComment(ref __binding_0, ref __binding_1,
ref __binding_2) => {
60usize
}
TokenKind::Eof => { 61usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
TokenKind::Eq => {}
TokenKind::Lt => {}
TokenKind::Le => {}
TokenKind::EqEq => {}
TokenKind::Ne => {}
TokenKind::Ge => {}
TokenKind::Gt => {}
TokenKind::AndAnd => {}
TokenKind::OrOr => {}
TokenKind::Bang => {}
TokenKind::Tilde => {}
TokenKind::Plus => {}
TokenKind::Minus => {}
TokenKind::Star => {}
TokenKind::Slash => {}
TokenKind::Percent => {}
TokenKind::Caret => {}
TokenKind::And => {}
TokenKind::Or => {}
TokenKind::Shl => {}
TokenKind::Shr => {}
TokenKind::PlusEq => {}
TokenKind::MinusEq => {}
TokenKind::StarEq => {}
TokenKind::SlashEq => {}
TokenKind::PercentEq => {}
TokenKind::CaretEq => {}
TokenKind::AndEq => {}
TokenKind::OrEq => {}
TokenKind::ShlEq => {}
TokenKind::ShrEq => {}
TokenKind::At => {}
TokenKind::Dot => {}
TokenKind::DotDot => {}
TokenKind::DotDotDot => {}
TokenKind::DotDotEq => {}
TokenKind::Comma => {}
TokenKind::Semi => {}
TokenKind::Colon => {}
TokenKind::PathSep => {}
TokenKind::RArrow => {}
TokenKind::LArrow => {}
TokenKind::FatArrow => {}
TokenKind::Pound => {}
TokenKind::Dollar => {}
TokenKind::Question => {}
TokenKind::SingleQuote => {}
TokenKind::OpenParen => {}
TokenKind::CloseParen => {}
TokenKind::OpenBrace => {}
TokenKind::CloseBrace => {}
TokenKind::OpenBracket => {}
TokenKind::CloseBracket => {}
TokenKind::OpenInvisible(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
TokenKind::CloseInvisible(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
TokenKind::Literal(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
TokenKind::Ident(ref __binding_0, ref __binding_1) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
TokenKind::NtIdent(ref __binding_0, ref __binding_1) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
TokenKind::Lifetime(ref __binding_0, ref __binding_1) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
TokenKind::NtLifetime(ref __binding_0, ref __binding_1) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
TokenKind::DocComment(ref __binding_0, ref __binding_1,
ref __binding_2) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_2,
__encoder);
}
TokenKind::Eof => {}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for TokenKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { TokenKind::Eq }
1usize => { TokenKind::Lt }
2usize => { TokenKind::Le }
3usize => { TokenKind::EqEq }
4usize => { TokenKind::Ne }
5usize => { TokenKind::Ge }
6usize => { TokenKind::Gt }
7usize => { TokenKind::AndAnd }
8usize => { TokenKind::OrOr }
9usize => { TokenKind::Bang }
10usize => { TokenKind::Tilde }
11usize => { TokenKind::Plus }
12usize => { TokenKind::Minus }
13usize => { TokenKind::Star }
14usize => { TokenKind::Slash }
15usize => { TokenKind::Percent }
16usize => { TokenKind::Caret }
17usize => { TokenKind::And }
18usize => { TokenKind::Or }
19usize => { TokenKind::Shl }
20usize => { TokenKind::Shr }
21usize => { TokenKind::PlusEq }
22usize => { TokenKind::MinusEq }
23usize => { TokenKind::StarEq }
24usize => { TokenKind::SlashEq }
25usize => { TokenKind::PercentEq }
26usize => { TokenKind::CaretEq }
27usize => { TokenKind::AndEq }
28usize => { TokenKind::OrEq }
29usize => { TokenKind::ShlEq }
30usize => { TokenKind::ShrEq }
31usize => { TokenKind::At }
32usize => { TokenKind::Dot }
33usize => { TokenKind::DotDot }
34usize => { TokenKind::DotDotDot }
35usize => { TokenKind::DotDotEq }
36usize => { TokenKind::Comma }
37usize => { TokenKind::Semi }
38usize => { TokenKind::Colon }
39usize => { TokenKind::PathSep }
40usize => { TokenKind::RArrow }
41usize => { TokenKind::LArrow }
42usize => { TokenKind::FatArrow }
43usize => { TokenKind::Pound }
44usize => { TokenKind::Dollar }
45usize => { TokenKind::Question }
46usize => { TokenKind::SingleQuote }
47usize => { TokenKind::OpenParen }
48usize => { TokenKind::CloseParen }
49usize => { TokenKind::OpenBrace }
50usize => { TokenKind::CloseBrace }
51usize => { TokenKind::OpenBracket }
52usize => { TokenKind::CloseBracket }
53usize => {
TokenKind::OpenInvisible(::rustc_serialize::Decodable::decode(__decoder))
}
54usize => {
TokenKind::CloseInvisible(::rustc_serialize::Decodable::decode(__decoder))
}
55usize => {
TokenKind::Literal(::rustc_serialize::Decodable::decode(__decoder))
}
56usize => {
TokenKind::Ident(::rustc_serialize::Decodable::decode(__decoder),
::rustc_serialize::Decodable::decode(__decoder))
}
57usize => {
TokenKind::NtIdent(::rustc_serialize::Decodable::decode(__decoder),
::rustc_serialize::Decodable::decode(__decoder))
}
58usize => {
TokenKind::Lifetime(::rustc_serialize::Decodable::decode(__decoder),
::rustc_serialize::Decodable::decode(__decoder))
}
59usize => {
TokenKind::NtLifetime(::rustc_serialize::Decodable::decode(__decoder),
::rustc_serialize::Decodable::decode(__decoder))
}
60usize => {
TokenKind::DocComment(::rustc_serialize::Decodable::decode(__decoder),
::rustc_serialize::Decodable::decode(__decoder),
::rustc_serialize::Decodable::decode(__decoder))
}
61usize => { TokenKind::Eof }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `TokenKind`, expected 0..62, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::fmt::Debug for TokenKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
TokenKind::Eq => ::core::fmt::Formatter::write_str(f, "Eq"),
TokenKind::Lt => ::core::fmt::Formatter::write_str(f, "Lt"),
TokenKind::Le => ::core::fmt::Formatter::write_str(f, "Le"),
TokenKind::EqEq => ::core::fmt::Formatter::write_str(f, "EqEq"),
TokenKind::Ne => ::core::fmt::Formatter::write_str(f, "Ne"),
TokenKind::Ge => ::core::fmt::Formatter::write_str(f, "Ge"),
TokenKind::Gt => ::core::fmt::Formatter::write_str(f, "Gt"),
TokenKind::AndAnd =>
::core::fmt::Formatter::write_str(f, "AndAnd"),
TokenKind::OrOr => ::core::fmt::Formatter::write_str(f, "OrOr"),
TokenKind::Bang => ::core::fmt::Formatter::write_str(f, "Bang"),
TokenKind::Tilde => ::core::fmt::Formatter::write_str(f, "Tilde"),
TokenKind::Plus => ::core::fmt::Formatter::write_str(f, "Plus"),
TokenKind::Minus => ::core::fmt::Formatter::write_str(f, "Minus"),
TokenKind::Star => ::core::fmt::Formatter::write_str(f, "Star"),
TokenKind::Slash => ::core::fmt::Formatter::write_str(f, "Slash"),
TokenKind::Percent =>
::core::fmt::Formatter::write_str(f, "Percent"),
TokenKind::Caret => ::core::fmt::Formatter::write_str(f, "Caret"),
TokenKind::And => ::core::fmt::Formatter::write_str(f, "And"),
TokenKind::Or => ::core::fmt::Formatter::write_str(f, "Or"),
TokenKind::Shl => ::core::fmt::Formatter::write_str(f, "Shl"),
TokenKind::Shr => ::core::fmt::Formatter::write_str(f, "Shr"),
TokenKind::PlusEq =>
::core::fmt::Formatter::write_str(f, "PlusEq"),
TokenKind::MinusEq =>
::core::fmt::Formatter::write_str(f, "MinusEq"),
TokenKind::StarEq =>
::core::fmt::Formatter::write_str(f, "StarEq"),
TokenKind::SlashEq =>
::core::fmt::Formatter::write_str(f, "SlashEq"),
TokenKind::PercentEq =>
::core::fmt::Formatter::write_str(f, "PercentEq"),
TokenKind::CaretEq =>
::core::fmt::Formatter::write_str(f, "CaretEq"),
TokenKind::AndEq => ::core::fmt::Formatter::write_str(f, "AndEq"),
TokenKind::OrEq => ::core::fmt::Formatter::write_str(f, "OrEq"),
TokenKind::ShlEq => ::core::fmt::Formatter::write_str(f, "ShlEq"),
TokenKind::ShrEq => ::core::fmt::Formatter::write_str(f, "ShrEq"),
TokenKind::At => ::core::fmt::Formatter::write_str(f, "At"),
TokenKind::Dot => ::core::fmt::Formatter::write_str(f, "Dot"),
TokenKind::DotDot =>
::core::fmt::Formatter::write_str(f, "DotDot"),
TokenKind::DotDotDot =>
::core::fmt::Formatter::write_str(f, "DotDotDot"),
TokenKind::DotDotEq =>
::core::fmt::Formatter::write_str(f, "DotDotEq"),
TokenKind::Comma => ::core::fmt::Formatter::write_str(f, "Comma"),
TokenKind::Semi => ::core::fmt::Formatter::write_str(f, "Semi"),
TokenKind::Colon => ::core::fmt::Formatter::write_str(f, "Colon"),
TokenKind::PathSep =>
::core::fmt::Formatter::write_str(f, "PathSep"),
TokenKind::RArrow =>
::core::fmt::Formatter::write_str(f, "RArrow"),
TokenKind::LArrow =>
::core::fmt::Formatter::write_str(f, "LArrow"),
TokenKind::FatArrow =>
::core::fmt::Formatter::write_str(f, "FatArrow"),
TokenKind::Pound => ::core::fmt::Formatter::write_str(f, "Pound"),
TokenKind::Dollar =>
::core::fmt::Formatter::write_str(f, "Dollar"),
TokenKind::Question =>
::core::fmt::Formatter::write_str(f, "Question"),
TokenKind::SingleQuote =>
::core::fmt::Formatter::write_str(f, "SingleQuote"),
TokenKind::OpenParen =>
::core::fmt::Formatter::write_str(f, "OpenParen"),
TokenKind::CloseParen =>
::core::fmt::Formatter::write_str(f, "CloseParen"),
TokenKind::OpenBrace =>
::core::fmt::Formatter::write_str(f, "OpenBrace"),
TokenKind::CloseBrace =>
::core::fmt::Formatter::write_str(f, "CloseBrace"),
TokenKind::OpenBracket =>
::core::fmt::Formatter::write_str(f, "OpenBracket"),
TokenKind::CloseBracket =>
::core::fmt::Formatter::write_str(f, "CloseBracket"),
TokenKind::OpenInvisible(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"OpenInvisible", &__self_0),
TokenKind::CloseInvisible(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"CloseInvisible", &__self_0),
TokenKind::Literal(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Literal", &__self_0),
TokenKind::Ident(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f, "Ident",
__self_0, &__self_1),
TokenKind::NtIdent(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"NtIdent", __self_0, &__self_1),
TokenKind::Lifetime(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"Lifetime", __self_0, &__self_1),
TokenKind::NtLifetime(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f,
"NtLifetime", __self_0, &__self_1),
TokenKind::DocComment(__self_0, __self_1, __self_2) =>
::core::fmt::Formatter::debug_tuple_field3_finish(f,
"DocComment", __self_0, __self_1, &__self_2),
TokenKind::Eof => ::core::fmt::Formatter::write_str(f, "Eof"),
}
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for TokenKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
TokenKind::Eq => {}
TokenKind::Lt => {}
TokenKind::Le => {}
TokenKind::EqEq => {}
TokenKind::Ne => {}
TokenKind::Ge => {}
TokenKind::Gt => {}
TokenKind::AndAnd => {}
TokenKind::OrOr => {}
TokenKind::Bang => {}
TokenKind::Tilde => {}
TokenKind::Plus => {}
TokenKind::Minus => {}
TokenKind::Star => {}
TokenKind::Slash => {}
TokenKind::Percent => {}
TokenKind::Caret => {}
TokenKind::And => {}
TokenKind::Or => {}
TokenKind::Shl => {}
TokenKind::Shr => {}
TokenKind::PlusEq => {}
TokenKind::MinusEq => {}
TokenKind::StarEq => {}
TokenKind::SlashEq => {}
TokenKind::PercentEq => {}
TokenKind::CaretEq => {}
TokenKind::AndEq => {}
TokenKind::OrEq => {}
TokenKind::ShlEq => {}
TokenKind::ShrEq => {}
TokenKind::At => {}
TokenKind::Dot => {}
TokenKind::DotDot => {}
TokenKind::DotDotDot => {}
TokenKind::DotDotEq => {}
TokenKind::Comma => {}
TokenKind::Semi => {}
TokenKind::Colon => {}
TokenKind::PathSep => {}
TokenKind::RArrow => {}
TokenKind::LArrow => {}
TokenKind::FatArrow => {}
TokenKind::Pound => {}
TokenKind::Dollar => {}
TokenKind::Question => {}
TokenKind::SingleQuote => {}
TokenKind::OpenParen => {}
TokenKind::CloseParen => {}
TokenKind::OpenBrace => {}
TokenKind::CloseBrace => {}
TokenKind::OpenBracket => {}
TokenKind::CloseBracket => {}
TokenKind::OpenInvisible(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
TokenKind::CloseInvisible(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
TokenKind::Literal(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
TokenKind::Ident(ref __binding_0, ref __binding_1) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
TokenKind::NtIdent(ref __binding_0, ref __binding_1) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
TokenKind::Lifetime(ref __binding_0, ref __binding_1) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
TokenKind::NtLifetime(ref __binding_0, ref __binding_1) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
TokenKind::DocComment(ref __binding_0, ref __binding_1,
ref __binding_2) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
{ __binding_2.stable_hash(__hcx, __hasher); }
}
TokenKind::Eof => {}
}
}
}
};StableHash)]
387pub enum TokenKind {
388 Eq,
391 Lt,
393 Le,
395 EqEq,
397 Ne,
399 Ge,
401 Gt,
403 AndAnd,
405 OrOr,
407 Bang,
409 Tilde,
411 Plus,
413 Minus,
415 Star,
417 Slash,
419 Percent,
421 Caret,
423 And,
425 Or,
427 Shl,
429 Shr,
431 PlusEq,
433 MinusEq,
435 StarEq,
437 SlashEq,
439 PercentEq,
441 CaretEq,
443 AndEq,
445 OrEq,
447 ShlEq,
449 ShrEq,
451
452 At,
455 Dot,
457 DotDot,
459 DotDotDot,
461 DotDotEq,
463 Comma,
465 Semi,
467 Colon,
469 PathSep,
471 RArrow,
473 LArrow,
475 FatArrow,
477 Pound,
479 Dollar,
481 Question,
483 SingleQuote,
485 OpenParen,
487 CloseParen,
489 OpenBrace,
491 CloseBrace,
493 OpenBracket,
495 CloseBracket,
497 OpenInvisible(InvisibleOrigin),
499 CloseInvisible(InvisibleOrigin),
501
502 Literal(Lit),
504
505 Ident(Symbol, IdentIsRaw),
511 NtIdent(sp::Ident, IdentIsRaw),
515
516 Lifetime(Symbol, IdentIsRaw),
522 NtLifetime(sp::Ident, IdentIsRaw),
526
527 DocComment(CommentKind, ast::AttrStyle, Symbol),
531
532 Eof,
534}
535
536#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Token { }
#[automatically_derived]
impl ::core::clone::Clone for Token {
#[inline]
fn clone(&self) -> Token {
let _: ::core::clone::AssertParamIsClone<TokenKind>;
let _: ::core::clone::AssertParamIsClone<Span>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Token { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Token { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Token {
#[inline]
fn eq(&self, other: &Token) -> bool {
self.kind == other.kind && self.span == other.span
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Token {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<TokenKind>;
let _: ::core::cmp::AssertParamIsEq<Span>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Token {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.kind, state);
::core::hash::Hash::hash(&self.span, state)
}
}Hash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for Token {
fn encode(&self, __encoder: &mut __E) {
let Token { kind: ref __binding_0, span: ref __binding_1 } =
*self;
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for Token {
fn decode(__decoder: &mut __D) -> Self {
Token {
kind: ::rustc_serialize::Decodable::decode(__decoder),
span: ::rustc_serialize::Decodable::decode(__decoder),
}
}
}
};Decodable, #[automatically_derived]
impl ::core::fmt::Debug for Token {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "Token", "kind",
&self.kind, "span", &&self.span)
}
}Debug, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Token {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
match *self {
Token { kind: ref __binding_0, span: ref __binding_1 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
537pub struct Token {
538 pub kind: TokenKind,
539 pub span: Span,
540}
541
542impl TokenKind {
543 pub fn lit(kind: LitKind, symbol: Symbol, suffix: Option<Symbol>) -> TokenKind {
544 Literal(Lit::new(kind, symbol, suffix))
545 }
546
547 pub fn break_two_token_op(&self, n: u32) -> Option<(TokenKind, TokenKind)> {
552 if !(n == 1 || n == 2) {
::core::panicking::panic("assertion failed: n == 1 || n == 2")
};assert!(n == 1 || n == 2);
553 Some(match (self, n) {
554 (Le, 1) => (Lt, Eq),
555 (EqEq, 1) => (Eq, Eq),
556 (Ne, 1) => (Bang, Eq),
557 (Ge, 1) => (Gt, Eq),
558 (AndAnd, 1) => (And, And),
559 (OrOr, 1) => (Or, Or),
560 (Shl, 1) => (Lt, Lt),
561 (Shr, 1) => (Gt, Gt),
562 (PlusEq, 1) => (Plus, Eq),
563 (MinusEq, 1) => (Minus, Eq),
564 (StarEq, 1) => (Star, Eq),
565 (SlashEq, 1) => (Slash, Eq),
566 (PercentEq, 1) => (Percent, Eq),
567 (CaretEq, 1) => (Caret, Eq),
568 (AndEq, 1) => (And, Eq),
569 (OrEq, 1) => (Or, Eq),
570 (ShlEq, 1) => (Lt, Le), (ShlEq, 2) => (Shl, Eq), (ShrEq, 1) => (Gt, Ge), (ShrEq, 2) => (Shr, Eq), (DotDot, 1) => (Dot, Dot),
575 (DotDotDot, 1) => (Dot, DotDot), (DotDotDot, 2) => (DotDot, Dot), (DotDotEq, 2) => (DotDot, Eq),
578 (PathSep, 1) => (Colon, Colon),
579 (RArrow, 1) => (Minus, Gt),
580 (LArrow, 1) => (Lt, Minus),
581 (FatArrow, 1) => (Eq, Gt),
582 _ => return None,
583 })
584 }
585
586 pub fn similar_tokens(&self) -> &[TokenKind] {
589 match self {
590 Comma => &[Dot, Lt, Semi],
591 Semi => &[Colon, Comma],
592 Colon => &[Semi],
593 FatArrow => &[Eq, RArrow, Ge, Gt],
594 _ => &[],
595 }
596 }
597
598 pub fn should_end_const_arg(&self) -> bool {
599 #[allow(non_exhaustive_omitted_patterns)] match self {
Gt | Ge | Shr | ShrEq => true,
_ => false,
}matches!(self, Gt | Ge | Shr | ShrEq)
600 }
601
602 pub fn is_delim(&self) -> bool {
603 self.open_delim().is_some() || self.close_delim().is_some()
604 }
605
606 pub fn open_delim(&self) -> Option<Delimiter> {
607 match *self {
608 OpenParen => Some(Delimiter::Parenthesis),
609 OpenBrace => Some(Delimiter::Brace),
610 OpenBracket => Some(Delimiter::Bracket),
611 OpenInvisible(origin) => Some(Delimiter::Invisible(origin)),
612 _ => None,
613 }
614 }
615
616 pub fn close_delim(&self) -> Option<Delimiter> {
617 match *self {
618 CloseParen => Some(Delimiter::Parenthesis),
619 CloseBrace => Some(Delimiter::Brace),
620 CloseBracket => Some(Delimiter::Bracket),
621 CloseInvisible(origin) => Some(Delimiter::Invisible(origin)),
622 _ => None,
623 }
624 }
625
626 pub fn is_close_delim_or_eof(&self) -> bool {
627 match self {
628 CloseParen | CloseBrace | CloseBracket | CloseInvisible(_) | Eof => true,
629 _ => false,
630 }
631 }
632}
633
634impl Token {
635 pub const fn new(kind: TokenKind, span: Span) -> Self {
636 Token { kind, span }
637 }
638
639 pub const fn dummy() -> Self {
641 Token::new(TokenKind::Question, DUMMY_SP)
642 }
643
644 pub fn from_ast_ident(ident: sp::Ident) -> Self {
646 Token::new(Ident(ident.name, ident.is_raw_guess().into()), ident.span)
647 }
648
649 pub fn is_range_separator(&self) -> bool {
650 [DotDot, DotDotDot, DotDotEq].contains(&self.kind)
651 }
652
653 pub fn is_punct(&self) -> bool {
654 match self.kind {
655 Eq | Lt | Le | EqEq | Ne | Ge | Gt | AndAnd | OrOr | Bang | Tilde | Plus | Minus
656 | Star | Slash | Percent | Caret | And | Or | Shl | Shr | PlusEq | MinusEq | StarEq
657 | SlashEq | PercentEq | CaretEq | AndEq | OrEq | ShlEq | ShrEq | At | Dot | DotDot
658 | DotDotDot | DotDotEq | Comma | Semi | Colon | PathSep | RArrow | LArrow
659 | FatArrow | Pound | Dollar | Question | SingleQuote => true,
660
661 OpenParen | CloseParen | OpenBrace | CloseBrace | OpenBracket | CloseBracket
662 | OpenInvisible(_) | CloseInvisible(_) | Literal(..) | DocComment(..) | Ident(..)
663 | NtIdent(..) | Lifetime(..) | NtLifetime(..) | Eof => false,
664 }
665 }
666
667 pub fn is_like_plus(&self) -> bool {
668 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Plus | PlusEq => true,
_ => false,
}matches!(self.kind, Plus | PlusEq)
669 }
670
671 pub fn can_begin_expr(&self) -> bool {
673 match self.uninterpolate().kind {
677 Ident(name, is_raw) =>
678 ident_can_begin_expr(name, self.span, is_raw), OpenParen | OpenBrace | OpenBracket | Literal(..) | Bang | Minus | Star | Or | OrOr | And | AndAnd | DotDot | DotDotDot | DotDotEq | Lt | Shl | PathSep | Lifetime(..) | Pound => true, OpenInvisible(InvisibleOrigin::MetaVar(
696 MetaVarKind::Block
697 | MetaVarKind::Expr { .. }
698 | MetaVarKind::Literal
699 | MetaVarKind::Path,
700 )) => true,
701 _ => false,
702 }
703 }
704
705 pub fn can_begin_pattern(&self, pat_kind: NtPatKind) -> bool {
707 match &self.uninterpolate().kind {
711 Ident(..) | NtIdent(..) |
713 OpenParen | OpenBracket | And | Minus | AndAnd | Literal(_) | DotDot | DotDotDot | PathSep | Lt | Shl => true, Or => #[allow(non_exhaustive_omitted_patterns)] match pat_kind {
PatWithOr => true,
_ => false,
}matches!(pat_kind, PatWithOr), OpenInvisible(InvisibleOrigin::MetaVar(
726 MetaVarKind::Expr { .. }
727 | MetaVarKind::Literal
728 | MetaVarKind::Meta { .. }
729 | MetaVarKind::Pat(_)
730 | MetaVarKind::Path
731 | MetaVarKind::Ty { .. },
732 )) => true,
733 _ => false,
734 }
735 }
736
737 pub fn can_begin_type(&self) -> bool {
739 match self.uninterpolate().kind {
746 Ident(name, is_raw) =>
747 ident_can_begin_type(name, self.span, is_raw), OpenParen | OpenBracket | Bang | Star | And | AndAnd | Question | Lifetime(..) | Lt | Shl | PathSep => true, OpenInvisible(InvisibleOrigin::MetaVar(MetaVarKind::Ty { .. } | MetaVarKind::Path)) => {
759 true
760 }
761 _ => false,
762 }
763 }
764
765 pub fn can_begin_const_arg(&self) -> bool {
767 match self.kind {
768 OpenBrace | Literal(..) | Minus => true,
769 Ident(name, IdentIsRaw::No) if name.is_bool_lit() => true,
770 OpenInvisible(InvisibleOrigin::MetaVar(
771 MetaVarKind::Expr { .. } | MetaVarKind::Block | MetaVarKind::Literal,
772 )) => true,
773 _ => false,
774 }
775 }
776
777 pub fn can_begin_item(&self) -> bool {
779 match self.kind {
780 Ident(name, _) => [
781 kw::Fn,
782 kw::Use,
783 kw::Struct,
784 kw::Enum,
785 kw::Pub,
786 kw::Trait,
787 kw::Extern,
788 kw::Impl,
789 kw::Unsafe,
790 kw::Const,
791 kw::Safe,
792 kw::Static,
793 kw::Union,
794 kw::Macro,
795 kw::Mod,
796 kw::Type,
797 ]
798 .contains(&name),
799 _ => false,
800 }
801 }
802
803 pub fn is_lit(&self) -> bool {
805 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Literal(..) => true,
_ => false,
}matches!(self.kind, Literal(..))
806 }
807
808 pub fn can_begin_literal_maybe_minus(&self) -> bool {
816 match self.uninterpolate().kind {
817 Literal(..) | Minus => true,
818 Ident(name, IdentIsRaw::No) if name.is_bool_lit() => true,
819 OpenInvisible(InvisibleOrigin::MetaVar(mv_kind)) => match mv_kind {
820 MetaVarKind::Literal => true,
821 MetaVarKind::Expr { can_begin_literal_maybe_minus, .. } => {
822 can_begin_literal_maybe_minus
823 }
824 _ => false,
825 },
826 _ => false,
827 }
828 }
829
830 pub fn can_begin_string_literal(&self) -> bool {
831 match self.uninterpolate().kind {
832 Literal(..) => true,
833 OpenInvisible(InvisibleOrigin::MetaVar(mv_kind)) => match mv_kind {
834 MetaVarKind::Literal => true,
835 MetaVarKind::Expr { can_begin_string_literal, .. } => can_begin_string_literal,
836 _ => false,
837 },
838 _ => false,
839 }
840 }
841
842 pub fn uninterpolate(&self) -> Cow<'_, Token> {
847 match self.kind {
848 NtIdent(ident, is_raw) => Cow::Owned(Token::new(Ident(ident.name, is_raw), ident.span)),
849 NtLifetime(ident, is_raw) => {
850 Cow::Owned(Token::new(Lifetime(ident.name, is_raw), ident.span))
851 }
852 _ => Cow::Borrowed(self),
853 }
854 }
855
856 #[inline]
858 pub fn ident(&self) -> Option<(sp::Ident, IdentIsRaw)> {
859 match self.kind {
861 Ident(name, is_raw) => Some((sp::Ident::new(name, self.span), is_raw)),
862 NtIdent(ident, is_raw) => Some((ident, is_raw)),
863 _ => None,
864 }
865 }
866
867 #[inline]
869 pub fn lifetime(&self) -> Option<(sp::Ident, IdentIsRaw)> {
870 match self.kind {
872 Lifetime(name, is_raw) => Some((sp::Ident::new(name, self.span), is_raw)),
873 NtLifetime(ident, is_raw) => Some((ident, is_raw)),
874 _ => None,
875 }
876 }
877
878 pub fn is_ident(&self) -> bool {
880 self.ident().is_some()
881 }
882
883 pub fn is_lifetime(&self) -> bool {
885 self.lifetime().is_some()
886 }
887
888 pub fn is_ident_named(&self, name: Symbol) -> bool {
891 self.ident().is_some_and(|(ident, _)| ident.name == name)
892 }
893
894 pub fn is_metavar_expr(&self) -> bool {
897 #[allow(non_exhaustive_omitted_patterns)] match self.is_metavar_seq() {
Some(MetaVarKind::Expr { .. } | MetaVarKind::Literal | MetaVarKind::Path |
MetaVarKind::Block) => true,
_ => false,
}matches!(
898 self.is_metavar_seq(),
899 Some(
900 MetaVarKind::Expr { .. }
901 | MetaVarKind::Literal
902 | MetaVarKind::Path
903 | MetaVarKind::Block
904 )
905 )
906 }
907
908 pub fn is_metavar_block(&self) -> bool {
910 #[allow(non_exhaustive_omitted_patterns)] match self.is_metavar_seq() {
Some(MetaVarKind::Block) => true,
_ => false,
}matches!(self.is_metavar_seq(), Some(MetaVarKind::Block))
911 }
912
913 pub fn is_mutability(&self) -> bool {
915 self.is_keyword(kw::Mut) || self.is_keyword(kw::Const)
916 }
917
918 pub fn is_qpath_start(&self) -> bool {
919 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Lt | Shl => true,
_ => false,
}matches!(self.kind, Lt | Shl)
920 }
921
922 pub fn is_path_start(&self) -> bool {
923 self.kind == PathSep
924 || self.is_qpath_start()
925 || #[allow(non_exhaustive_omitted_patterns)] match self.is_metavar_seq() {
Some(MetaVarKind::Path) => true,
_ => false,
}matches!(self.is_metavar_seq(), Some(MetaVarKind::Path))
926 || self.is_path_segment_keyword()
927 || self.is_non_reserved_ident()
928 }
929
930 pub fn is_keyword(&self, kw: Symbol) -> bool {
932 self.is_non_raw_ident_where(|id| id.name == kw)
933 }
934
935 pub fn is_keyword_case(&self, kw: Symbol, case: Case) -> bool {
938 self.is_keyword(kw)
939 || (case == Case::Insensitive
940 && self.is_non_raw_ident_where(|id| {
941 id.name.as_str().eq_ignore_ascii_case(kw.as_str())
943 }))
944 }
945
946 pub fn is_path_segment_keyword(&self) -> bool {
947 self.is_non_raw_ident_where(sp::Ident::is_path_segment_keyword)
948 }
949
950 pub fn is_special_ident(&self) -> bool {
953 self.is_non_raw_ident_where(sp::Ident::is_special)
954 }
955
956 pub fn is_used_keyword(&self) -> bool {
958 self.is_non_raw_ident_where(sp::Ident::is_used_keyword)
959 }
960
961 pub fn is_unused_keyword(&self) -> bool {
963 self.is_non_raw_ident_where(sp::Ident::is_unused_keyword)
964 }
965
966 pub fn is_reserved_ident(&self) -> bool {
968 self.is_non_raw_ident_where(sp::Ident::is_reserved)
969 }
970
971 pub fn is_non_reserved_ident(&self) -> bool {
972 self.non_reserved_ident().is_some()
973 }
974
975 pub fn non_reserved_ident(&self) -> Option<sp::Ident> {
976 self.ident()
977 .filter(|&(id, raw)| raw == IdentIsRaw::Yes || !sp::Ident::is_reserved(id))
978 .map(|(id, _)| id)
979 }
980
981 pub fn is_bool_lit(&self) -> bool {
983 self.is_non_raw_ident_where(|id| id.name.is_bool_lit())
984 }
985
986 pub fn is_numeric_lit(&self) -> bool {
987 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Literal(Lit { kind: LitKind::Integer, .. }) |
Literal(Lit { kind: LitKind::Float, .. }) => true,
_ => false,
}matches!(
988 self.kind,
989 Literal(Lit { kind: LitKind::Integer, .. }) | Literal(Lit { kind: LitKind::Float, .. })
990 )
991 }
992
993 pub fn is_integer_lit(&self) -> bool {
995 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Literal(Lit { kind: LitKind::Integer, .. }) => true,
_ => false,
}matches!(self.kind, Literal(Lit { kind: LitKind::Integer, .. }))
996 }
997
998 pub fn is_non_raw_ident_where(&self, pred: impl FnOnce(sp::Ident) -> bool) -> bool {
1000 match self.ident() {
1001 Some((id, IdentIsRaw::No)) => pred(id),
1002 _ => false,
1003 }
1004 }
1005
1006 pub fn is_metavar_seq(&self) -> Option<MetaVarKind> {
1009 match self.kind {
1010 OpenInvisible(InvisibleOrigin::MetaVar(kind)) => Some(kind),
1011 _ => None,
1012 }
1013 }
1014
1015 pub fn glue(&self, joint: &Token) -> Option<Token> {
1016 let kind = match (&self.kind, &joint.kind) {
1017 (Eq, Eq) => EqEq,
1018 (Eq, Gt) => FatArrow,
1019 (Eq, _) => return None,
1020
1021 (Lt, Eq) => Le,
1022 (Lt, Lt) => Shl,
1023 (Lt, Le) => ShlEq,
1024 (Lt, Minus) => LArrow,
1025 (Lt, _) => return None,
1026
1027 (Gt, Eq) => Ge,
1028 (Gt, Gt) => Shr,
1029 (Gt, Ge) => ShrEq,
1030 (Gt, _) => return None,
1031
1032 (Bang, Eq) => Ne,
1033 (Bang, _) => return None,
1034
1035 (Plus, Eq) => PlusEq,
1036 (Plus, _) => return None,
1037
1038 (Minus, Eq) => MinusEq,
1039 (Minus, Gt) => RArrow,
1040 (Minus, _) => return None,
1041
1042 (Star, Eq) => StarEq,
1043 (Star, _) => return None,
1044
1045 (Slash, Eq) => SlashEq,
1046 (Slash, _) => return None,
1047
1048 (Percent, Eq) => PercentEq,
1049 (Percent, _) => return None,
1050
1051 (Caret, Eq) => CaretEq,
1052 (Caret, _) => return None,
1053
1054 (And, Eq) => AndEq,
1055 (And, And) => AndAnd,
1056 (And, _) => return None,
1057
1058 (Or, Eq) => OrEq,
1059 (Or, Or) => OrOr,
1060 (Or, _) => return None,
1061
1062 (Shl, Eq) => ShlEq,
1063 (Shl, _) => return None,
1064
1065 (Shr, Eq) => ShrEq,
1066 (Shr, _) => return None,
1067
1068 (Dot, Dot) => DotDot,
1069 (Dot, DotDot) => DotDotDot,
1070 (Dot, _) => return None,
1071
1072 (DotDot, Dot) => DotDotDot,
1073 (DotDot, Eq) => DotDotEq,
1074 (DotDot, _) => return None,
1075
1076 (Colon, Colon) => PathSep,
1077 (Colon, _) => return None,
1078
1079 (SingleQuote, Ident(name, is_raw)) => {
1080 Lifetime(Symbol::intern(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("\'{0}", name))
})format!("'{name}")), *is_raw)
1081 }
1082 (SingleQuote, _) => return None,
1083
1084 (
1085 Le | EqEq | Ne | Ge | AndAnd | OrOr | Tilde | PlusEq | MinusEq | StarEq | SlashEq
1086 | PercentEq | CaretEq | AndEq | OrEq | ShlEq | ShrEq | At | DotDotDot | DotDotEq
1087 | Comma | Semi | PathSep | RArrow | LArrow | FatArrow | Pound | Dollar | Question
1088 | OpenParen | CloseParen | OpenBrace | CloseBrace | OpenBracket | CloseBracket
1089 | OpenInvisible(_) | CloseInvisible(_) | Literal(..) | Ident(..) | NtIdent(..)
1090 | Lifetime(..) | NtLifetime(..) | DocComment(..) | Eof,
1091 _,
1092 ) => {
1093 return None;
1094 }
1095 };
1096
1097 Some(Token::new(kind, self.span.to(joint.span)))
1098 }
1099}
1100
1101impl PartialEq<TokenKind> for Token {
1102 #[inline]
1103 fn eq(&self, rhs: &TokenKind) -> bool {
1104 self.kind == *rhs
1105 }
1106}
1107
1108#[derive(#[automatically_derived]
impl ::core::fmt::Debug for NtPatKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
NtPatKind::PatWithOr =>
::core::fmt::Formatter::write_str(f, "PatWithOr"),
NtPatKind::PatParam { inferred: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"PatParam", "inferred", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for NtPatKind { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for NtPatKind { }
#[automatically_derived]
impl ::core::clone::Clone for NtPatKind {
#[inline]
fn clone(&self) -> NtPatKind {
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for NtPatKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for NtPatKind {
#[inline]
fn eq(&self, other: &NtPatKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(NtPatKind::PatParam { inferred: __self_0 },
NtPatKind::PatParam { inferred: __arg1_0 }) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for NtPatKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for NtPatKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
NtPatKind::PatWithOr => { 0usize }
NtPatKind::PatParam { inferred: ref __binding_0 } => {
1usize
}
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
NtPatKind::PatWithOr => {}
NtPatKind::PatParam { inferred: ref __binding_0 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for NtPatKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { NtPatKind::PatWithOr }
1usize => {
NtPatKind::PatParam {
inferred: ::rustc_serialize::Decodable::decode(__decoder),
}
}
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `NtPatKind`, expected 0..2, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::hash::Hash for NtPatKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
NtPatKind::PatParam { inferred: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for NtPatKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
NtPatKind::PatWithOr => {}
NtPatKind::PatParam { inferred: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
1109pub enum NtPatKind {
1110 PatWithOr,
1112 PatParam { inferred: bool },
1116}
1117
1118#[derive(#[automatically_derived]
impl ::core::fmt::Debug for NtExprKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
NtExprKind::Expr => ::core::fmt::Formatter::write_str(f, "Expr"),
NtExprKind::Expr2021 { inferred: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Expr2021", "inferred", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for NtExprKind { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for NtExprKind { }
#[automatically_derived]
impl ::core::clone::Clone for NtExprKind {
#[inline]
fn clone(&self) -> NtExprKind {
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for NtExprKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for NtExprKind {
#[inline]
fn eq(&self, other: &NtExprKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(NtExprKind::Expr2021 { inferred: __self_0 },
NtExprKind::Expr2021 { inferred: __arg1_0 }) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for NtExprKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for NtExprKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
NtExprKind::Expr => { 0usize }
NtExprKind::Expr2021 { inferred: ref __binding_0 } => {
1usize
}
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
NtExprKind::Expr => {}
NtExprKind::Expr2021 { inferred: ref __binding_0 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for NtExprKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { NtExprKind::Expr }
1usize => {
NtExprKind::Expr2021 {
inferred: ::rustc_serialize::Decodable::decode(__decoder),
}
}
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `NtExprKind`, expected 0..2, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::hash::Hash for NtExprKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
NtExprKind::Expr2021 { inferred: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for NtExprKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
NtExprKind::Expr => {}
NtExprKind::Expr2021 { inferred: ref __binding_0 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash)]
1119pub enum NtExprKind {
1120 Expr,
1123 Expr2021 { inferred: bool },
1127}
1128
1129#[derive(#[automatically_derived]
impl ::core::fmt::Debug for NonterminalKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
NonterminalKind::Item =>
::core::fmt::Formatter::write_str(f, "Item"),
NonterminalKind::Block =>
::core::fmt::Formatter::write_str(f, "Block"),
NonterminalKind::Stmt =>
::core::fmt::Formatter::write_str(f, "Stmt"),
NonterminalKind::Pat(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Pat",
&__self_0),
NonterminalKind::Expr(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Expr",
&__self_0),
NonterminalKind::Ty => ::core::fmt::Formatter::write_str(f, "Ty"),
NonterminalKind::Ident =>
::core::fmt::Formatter::write_str(f, "Ident"),
NonterminalKind::Lifetime =>
::core::fmt::Formatter::write_str(f, "Lifetime"),
NonterminalKind::Literal =>
::core::fmt::Formatter::write_str(f, "Literal"),
NonterminalKind::Meta =>
::core::fmt::Formatter::write_str(f, "Meta"),
NonterminalKind::Path =>
::core::fmt::Formatter::write_str(f, "Path"),
NonterminalKind::Vis =>
::core::fmt::Formatter::write_str(f, "Vis"),
NonterminalKind::Guard =>
::core::fmt::Formatter::write_str(f, "Guard"),
NonterminalKind::TT => ::core::fmt::Formatter::write_str(f, "TT"),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::Copy for NonterminalKind { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for NonterminalKind { }
#[automatically_derived]
impl ::core::clone::Clone for NonterminalKind {
#[inline]
fn clone(&self) -> NonterminalKind {
let _: ::core::clone::AssertParamIsClone<NtPatKind>;
let _: ::core::clone::AssertParamIsClone<NtExprKind>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for NonterminalKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for NonterminalKind {
#[inline]
fn eq(&self, other: &NonterminalKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(NonterminalKind::Pat(__self_0),
NonterminalKind::Pat(__arg1_0)) => __self_0 == __arg1_0,
(NonterminalKind::Expr(__self_0),
NonterminalKind::Expr(__arg1_0)) => __self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for NonterminalKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<NtPatKind>;
let _: ::core::cmp::AssertParamIsEq<NtExprKind>;
}
}Eq, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for NonterminalKind {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
NonterminalKind::Item => { 0usize }
NonterminalKind::Block => { 1usize }
NonterminalKind::Stmt => { 2usize }
NonterminalKind::Pat(ref __binding_0) => { 3usize }
NonterminalKind::Expr(ref __binding_0) => { 4usize }
NonterminalKind::Ty => { 5usize }
NonterminalKind::Ident => { 6usize }
NonterminalKind::Lifetime => { 7usize }
NonterminalKind::Literal => { 8usize }
NonterminalKind::Meta => { 9usize }
NonterminalKind::Path => { 10usize }
NonterminalKind::Vis => { 11usize }
NonterminalKind::Guard => { 12usize }
NonterminalKind::TT => { 13usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
match *self {
NonterminalKind::Item => {}
NonterminalKind::Block => {}
NonterminalKind::Stmt => {}
NonterminalKind::Pat(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
NonterminalKind::Expr(ref __binding_0) => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
}
NonterminalKind::Ty => {}
NonterminalKind::Ident => {}
NonterminalKind::Lifetime => {}
NonterminalKind::Literal => {}
NonterminalKind::Meta => {}
NonterminalKind::Path => {}
NonterminalKind::Vis => {}
NonterminalKind::Guard => {}
NonterminalKind::TT => {}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for NonterminalKind {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { NonterminalKind::Item }
1usize => { NonterminalKind::Block }
2usize => { NonterminalKind::Stmt }
3usize => {
NonterminalKind::Pat(::rustc_serialize::Decodable::decode(__decoder))
}
4usize => {
NonterminalKind::Expr(::rustc_serialize::Decodable::decode(__decoder))
}
5usize => { NonterminalKind::Ty }
6usize => { NonterminalKind::Ident }
7usize => { NonterminalKind::Lifetime }
8usize => { NonterminalKind::Literal }
9usize => { NonterminalKind::Meta }
10usize => { NonterminalKind::Path }
11usize => { NonterminalKind::Vis }
12usize => { NonterminalKind::Guard }
13usize => { NonterminalKind::TT }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `NonterminalKind`, expected 0..14, actual {0}",
n));
}
}
}
}
};Decodable, #[automatically_derived]
impl ::core::hash::Hash for NonterminalKind {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
NonterminalKind::Pat(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
NonterminalKind::Expr(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for
NonterminalKind {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
NonterminalKind::Item => {}
NonterminalKind::Block => {}
NonterminalKind::Stmt => {}
NonterminalKind::Pat(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
NonterminalKind::Expr(ref __binding_0) => {
{ __binding_0.stable_hash(__hcx, __hasher); }
}
NonterminalKind::Ty => {}
NonterminalKind::Ident => {}
NonterminalKind::Lifetime => {}
NonterminalKind::Literal => {}
NonterminalKind::Meta => {}
NonterminalKind::Path => {}
NonterminalKind::Vis => {}
NonterminalKind::Guard => {}
NonterminalKind::TT => {}
}
}
}
};StableHash)]
1131pub enum NonterminalKind {
1132 Item,
1133 Block,
1134 Stmt,
1135 Pat(NtPatKind),
1136 Expr(NtExprKind),
1137 Ty,
1138 Ident,
1139 Lifetime,
1140 Literal,
1141 Meta,
1142 Path,
1143 Vis,
1144 Guard,
1145 TT,
1146}
1147
1148impl NonterminalKind {
1149 pub fn from_symbol(
1152 symbol: Symbol,
1153 edition: impl FnOnce() -> Edition,
1154 ) -> Option<NonterminalKind> {
1155 Some(match symbol {
1156 sym::item => NonterminalKind::Item,
1157 sym::block => NonterminalKind::Block,
1158 sym::stmt => NonterminalKind::Stmt,
1159 sym::pat => {
1160 if edition().at_least_rust_2021() {
1161 NonterminalKind::Pat(PatWithOr)
1162 } else {
1163 NonterminalKind::Pat(PatParam { inferred: true })
1164 }
1165 }
1166 sym::pat_param => NonterminalKind::Pat(PatParam { inferred: false }),
1167 sym::expr => {
1168 if edition().at_least_rust_2024() {
1169 NonterminalKind::Expr(Expr)
1170 } else {
1171 NonterminalKind::Expr(Expr2021 { inferred: true })
1172 }
1173 }
1174 sym::expr_2021 => NonterminalKind::Expr(Expr2021 { inferred: false }),
1175 sym::ty => NonterminalKind::Ty,
1176 sym::ident => NonterminalKind::Ident,
1177 sym::lifetime => NonterminalKind::Lifetime,
1178 sym::literal => NonterminalKind::Literal,
1179 sym::meta => NonterminalKind::Meta,
1180 sym::path => NonterminalKind::Path,
1181 sym::vis => NonterminalKind::Vis,
1182 sym::guard => NonterminalKind::Guard,
1183 sym::tt => NonterminalKind::TT,
1184 _ => return None,
1185 })
1186 }
1187
1188 fn symbol(self) -> Symbol {
1189 match self {
1190 NonterminalKind::Item => sym::item,
1191 NonterminalKind::Block => sym::block,
1192 NonterminalKind::Stmt => sym::stmt,
1193 NonterminalKind::Pat(PatParam { inferred: true } | PatWithOr) => sym::pat,
1194 NonterminalKind::Pat(PatParam { inferred: false }) => sym::pat_param,
1195 NonterminalKind::Expr(Expr2021 { inferred: true } | Expr) => sym::expr,
1196 NonterminalKind::Expr(Expr2021 { inferred: false }) => sym::expr_2021,
1197 NonterminalKind::Ty => sym::ty,
1198 NonterminalKind::Ident => sym::ident,
1199 NonterminalKind::Lifetime => sym::lifetime,
1200 NonterminalKind::Literal => sym::literal,
1201 NonterminalKind::Meta => sym::meta,
1202 NonterminalKind::Path => sym::path,
1203 NonterminalKind::Vis => sym::vis,
1204 NonterminalKind::Guard => sym::guard,
1205 NonterminalKind::TT => sym::tt,
1206 }
1207 }
1208}
1209
1210impl fmt::Display for NonterminalKind {
1211 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1212 f.write_fmt(format_args!("{0}", self.symbol()))write!(f, "{}", self.symbol())
1213 }
1214}
1215
1216#[cfg(target_pointer_width = "64")]
1218mod size_asserts {
1219 use rustc_data_structures::static_assert_size;
1220
1221 use super::*;
1222 const _: [(); 12] = [(); ::std::mem::size_of::<Lit>()];static_assert_size!(Lit, 12);
1224 const _: [(); 2] = [(); ::std::mem::size_of::<LitKind>()];static_assert_size!(LitKind, 2);
1225 const _: [(); 24] = [(); ::std::mem::size_of::<Token>()];static_assert_size!(Token, 24);
1226 const _: [(); 16] = [(); ::std::mem::size_of::<TokenKind>()];static_assert_size!(TokenKind, 16);
1227 }