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 {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}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 {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}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,
764 }
765 }
766
767 pub fn can_begin_const_arg(&self) -> bool {
769 match self.kind {
770 OpenBrace | Literal(..) | Minus => true,
771 Ident(name, IdentIsRaw::No) if name.is_bool_lit() => true,
772 OpenInvisible(InvisibleOrigin::MetaVar(
773 MetaVarKind::Expr { .. } | MetaVarKind::Block | MetaVarKind::Literal,
774 )) => true,
775 _ => false,
776 }
777 }
778
779 pub fn can_begin_item(&self) -> bool {
781 match self.kind {
782 Ident(name, _) => [
783 kw::Fn,
784 kw::Use,
785 kw::Struct,
786 kw::Enum,
787 kw::Pub,
788 kw::Trait,
789 kw::Extern,
790 kw::Impl,
791 kw::Unsafe,
792 kw::Const,
793 kw::Safe,
794 kw::Static,
795 kw::Union,
796 kw::Macro,
797 kw::Mod,
798 kw::Type,
799 ]
800 .contains(&name),
801 _ => false,
802 }
803 }
804
805 pub fn is_lit(&self) -> bool {
807 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Literal(..) => true,
_ => false,
}matches!(self.kind, Literal(..))
808 }
809
810 pub fn can_begin_literal_maybe_minus(&self) -> bool {
818 match self.uninterpolate().kind {
819 Literal(..) | Minus => true,
820 Ident(name, IdentIsRaw::No) if name.is_bool_lit() => true,
821 OpenInvisible(InvisibleOrigin::MetaVar(mv_kind)) => match mv_kind {
822 MetaVarKind::Literal => true,
823 MetaVarKind::Expr { can_begin_literal_maybe_minus, .. } => {
824 can_begin_literal_maybe_minus
825 }
826 _ => false,
827 },
828 _ => false,
829 }
830 }
831
832 pub fn can_begin_string_literal(&self) -> bool {
833 match self.uninterpolate().kind {
834 Literal(..) => true,
835 OpenInvisible(InvisibleOrigin::MetaVar(mv_kind)) => match mv_kind {
836 MetaVarKind::Literal => true,
837 MetaVarKind::Expr { can_begin_string_literal, .. } => can_begin_string_literal,
838 _ => false,
839 },
840 _ => false,
841 }
842 }
843
844 pub fn uninterpolate(&self) -> Cow<'_, Token> {
849 match self.kind {
850 NtIdent(ident, is_raw) => Cow::Owned(Token::new(Ident(ident.name, is_raw), ident.span)),
851 NtLifetime(ident, is_raw) => {
852 Cow::Owned(Token::new(Lifetime(ident.name, is_raw), ident.span))
853 }
854 _ => Cow::Borrowed(self),
855 }
856 }
857
858 #[inline]
860 pub fn ident(&self) -> Option<(sp::Ident, IdentIsRaw)> {
861 match self.kind {
863 Ident(name, is_raw) => Some((sp::Ident::new(name, self.span), is_raw)),
864 NtIdent(ident, is_raw) => Some((ident, is_raw)),
865 _ => None,
866 }
867 }
868
869 #[inline]
871 pub fn lifetime(&self) -> Option<(sp::Ident, IdentIsRaw)> {
872 match self.kind {
874 Lifetime(name, is_raw) => Some((sp::Ident::new(name, self.span), is_raw)),
875 NtLifetime(ident, is_raw) => Some((ident, is_raw)),
876 _ => None,
877 }
878 }
879
880 pub fn is_ident(&self) -> bool {
882 self.ident().is_some()
883 }
884
885 pub fn is_lifetime(&self) -> bool {
887 self.lifetime().is_some()
888 }
889
890 pub fn is_ident_named(&self, name: Symbol) -> bool {
893 self.ident().is_some_and(|(ident, _)| ident.name == name)
894 }
895
896 pub fn is_metavar_expr(&self) -> bool {
899 #[allow(non_exhaustive_omitted_patterns)] match self.is_metavar_seq() {
Some(MetaVarKind::Expr { .. } | MetaVarKind::Literal | MetaVarKind::Path |
MetaVarKind::Block) => true,
_ => false,
}matches!(
900 self.is_metavar_seq(),
901 Some(
902 MetaVarKind::Expr { .. }
903 | MetaVarKind::Literal
904 | MetaVarKind::Path
905 | MetaVarKind::Block
906 )
907 )
908 }
909
910 pub fn is_metavar_block(&self) -> bool {
912 #[allow(non_exhaustive_omitted_patterns)] match self.is_metavar_seq() {
Some(MetaVarKind::Block) => true,
_ => false,
}matches!(self.is_metavar_seq(), Some(MetaVarKind::Block))
913 }
914
915 pub fn is_mutability(&self) -> bool {
917 self.is_keyword(kw::Mut) || self.is_keyword(kw::Const)
918 }
919
920 pub fn is_qpath_start(&self) -> bool {
921 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Lt | Shl => true,
_ => false,
}matches!(self.kind, Lt | Shl)
922 }
923
924 pub fn is_path_start(&self) -> bool {
925 self.kind == PathSep
926 || self.is_qpath_start()
927 || #[allow(non_exhaustive_omitted_patterns)] match self.is_metavar_seq() {
Some(MetaVarKind::Path) => true,
_ => false,
}matches!(self.is_metavar_seq(), Some(MetaVarKind::Path))
928 || self.is_path_segment_keyword()
929 || self.is_non_reserved_ident()
930 }
931
932 pub fn is_keyword(&self, kw: Symbol) -> bool {
934 self.is_non_raw_ident_where(|id| id.name == kw)
935 }
936
937 pub fn is_keyword_case(&self, kw: Symbol, case: Case) -> bool {
940 self.is_keyword(kw)
941 || (case == Case::Insensitive
942 && self.is_non_raw_ident_where(|id| {
943 id.name.as_str().eq_ignore_ascii_case(kw.as_str())
945 }))
946 }
947
948 pub fn is_path_segment_keyword(&self) -> bool {
949 self.is_non_raw_ident_where(sp::Ident::is_path_segment_keyword)
950 }
951
952 pub fn is_special_ident(&self) -> bool {
955 self.is_non_raw_ident_where(sp::Ident::is_special)
956 }
957
958 pub fn is_used_keyword(&self) -> bool {
960 self.is_non_raw_ident_where(sp::Ident::is_used_keyword)
961 }
962
963 pub fn is_unused_keyword(&self) -> bool {
965 self.is_non_raw_ident_where(sp::Ident::is_unused_keyword)
966 }
967
968 pub fn is_reserved_ident(&self) -> bool {
970 self.is_non_raw_ident_where(sp::Ident::is_reserved)
971 }
972
973 pub fn is_non_reserved_ident(&self) -> bool {
974 self.ident().is_some_and(|(id, raw)| raw == IdentIsRaw::Yes || !sp::Ident::is_reserved(id))
975 }
976
977 pub fn is_bool_lit(&self) -> bool {
979 self.is_non_raw_ident_where(|id| id.name.is_bool_lit())
980 }
981
982 pub fn is_numeric_lit(&self) -> bool {
983 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Literal(Lit { kind: LitKind::Integer, .. }) |
Literal(Lit { kind: LitKind::Float, .. }) => true,
_ => false,
}matches!(
984 self.kind,
985 Literal(Lit { kind: LitKind::Integer, .. }) | Literal(Lit { kind: LitKind::Float, .. })
986 )
987 }
988
989 pub fn is_integer_lit(&self) -> bool {
991 #[allow(non_exhaustive_omitted_patterns)] match self.kind {
Literal(Lit { kind: LitKind::Integer, .. }) => true,
_ => false,
}matches!(self.kind, Literal(Lit { kind: LitKind::Integer, .. }))
992 }
993
994 pub fn is_non_raw_ident_where(&self, pred: impl FnOnce(sp::Ident) -> bool) -> bool {
996 match self.ident() {
997 Some((id, IdentIsRaw::No)) => pred(id),
998 _ => false,
999 }
1000 }
1001
1002 pub fn is_metavar_seq(&self) -> Option<MetaVarKind> {
1005 match self.kind {
1006 OpenInvisible(InvisibleOrigin::MetaVar(kind)) => Some(kind),
1007 _ => None,
1008 }
1009 }
1010
1011 pub fn glue(&self, joint: &Token) -> Option<Token> {
1012 let kind = match (&self.kind, &joint.kind) {
1013 (Eq, Eq) => EqEq,
1014 (Eq, Gt) => FatArrow,
1015 (Eq, _) => return None,
1016
1017 (Lt, Eq) => Le,
1018 (Lt, Lt) => Shl,
1019 (Lt, Le) => ShlEq,
1020 (Lt, Minus) => LArrow,
1021 (Lt, _) => return None,
1022
1023 (Gt, Eq) => Ge,
1024 (Gt, Gt) => Shr,
1025 (Gt, Ge) => ShrEq,
1026 (Gt, _) => return None,
1027
1028 (Bang, Eq) => Ne,
1029 (Bang, _) => return None,
1030
1031 (Plus, Eq) => PlusEq,
1032 (Plus, _) => return None,
1033
1034 (Minus, Eq) => MinusEq,
1035 (Minus, Gt) => RArrow,
1036 (Minus, _) => return None,
1037
1038 (Star, Eq) => StarEq,
1039 (Star, _) => return None,
1040
1041 (Slash, Eq) => SlashEq,
1042 (Slash, _) => return None,
1043
1044 (Percent, Eq) => PercentEq,
1045 (Percent, _) => return None,
1046
1047 (Caret, Eq) => CaretEq,
1048 (Caret, _) => return None,
1049
1050 (And, Eq) => AndEq,
1051 (And, And) => AndAnd,
1052 (And, _) => return None,
1053
1054 (Or, Eq) => OrEq,
1055 (Or, Or) => OrOr,
1056 (Or, _) => return None,
1057
1058 (Shl, Eq) => ShlEq,
1059 (Shl, _) => return None,
1060
1061 (Shr, Eq) => ShrEq,
1062 (Shr, _) => return None,
1063
1064 (Dot, Dot) => DotDot,
1065 (Dot, DotDot) => DotDotDot,
1066 (Dot, _) => return None,
1067
1068 (DotDot, Dot) => DotDotDot,
1069 (DotDot, Eq) => DotDotEq,
1070 (DotDot, _) => return None,
1071
1072 (Colon, Colon) => PathSep,
1073 (Colon, _) => return None,
1074
1075 (SingleQuote, Ident(name, is_raw)) => {
1076 Lifetime(Symbol::intern(&::alloc::__export::must_use({
::alloc::fmt::format(format_args!("\'{0}", name))
})format!("'{name}")), *is_raw)
1077 }
1078 (SingleQuote, _) => return None,
1079
1080 (
1081 Le | EqEq | Ne | Ge | AndAnd | OrOr | Tilde | PlusEq | MinusEq | StarEq | SlashEq
1082 | PercentEq | CaretEq | AndEq | OrEq | ShlEq | ShrEq | At | DotDotDot | DotDotEq
1083 | Comma | Semi | PathSep | RArrow | LArrow | FatArrow | Pound | Dollar | Question
1084 | OpenParen | CloseParen | OpenBrace | CloseBrace | OpenBracket | CloseBracket
1085 | OpenInvisible(_) | CloseInvisible(_) | Literal(..) | Ident(..) | NtIdent(..)
1086 | Lifetime(..) | NtLifetime(..) | DocComment(..) | Eof,
1087 _,
1088 ) => {
1089 return None;
1090 }
1091 };
1092
1093 Some(Token::new(kind, self.span.to(joint.span)))
1094 }
1095}
1096
1097impl PartialEq<TokenKind> for Token {
1098 #[inline]
1099 fn eq(&self, rhs: &TokenKind) -> bool {
1100 self.kind == *rhs
1101 }
1102}
1103
1104#[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)]
1105pub enum NtPatKind {
1106 PatWithOr,
1108 PatParam { inferred: bool },
1112}
1113
1114#[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)]
1115pub enum NtExprKind {
1116 Expr,
1119 Expr2021 { inferred: bool },
1123}
1124
1125#[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)]
1127pub enum NonterminalKind {
1128 Item,
1129 Block,
1130 Stmt,
1131 Pat(NtPatKind),
1132 Expr(NtExprKind),
1133 Ty,
1134 Ident,
1135 Lifetime,
1136 Literal,
1137 Meta,
1138 Path,
1139 Vis,
1140 Guard,
1141 TT,
1142}
1143
1144impl NonterminalKind {
1145 pub fn from_symbol(
1148 symbol: Symbol,
1149 edition: impl FnOnce() -> Edition,
1150 ) -> Option<NonterminalKind> {
1151 Some(match symbol {
1152 sym::item => NonterminalKind::Item,
1153 sym::block => NonterminalKind::Block,
1154 sym::stmt => NonterminalKind::Stmt,
1155 sym::pat => {
1156 if edition().at_least_rust_2021() {
1157 NonterminalKind::Pat(PatWithOr)
1158 } else {
1159 NonterminalKind::Pat(PatParam { inferred: true })
1160 }
1161 }
1162 sym::pat_param => NonterminalKind::Pat(PatParam { inferred: false }),
1163 sym::expr => {
1164 if edition().at_least_rust_2024() {
1165 NonterminalKind::Expr(Expr)
1166 } else {
1167 NonterminalKind::Expr(Expr2021 { inferred: true })
1168 }
1169 }
1170 sym::expr_2021 => NonterminalKind::Expr(Expr2021 { inferred: false }),
1171 sym::ty => NonterminalKind::Ty,
1172 sym::ident => NonterminalKind::Ident,
1173 sym::lifetime => NonterminalKind::Lifetime,
1174 sym::literal => NonterminalKind::Literal,
1175 sym::meta => NonterminalKind::Meta,
1176 sym::path => NonterminalKind::Path,
1177 sym::vis => NonterminalKind::Vis,
1178 sym::guard => NonterminalKind::Guard,
1179 sym::tt => NonterminalKind::TT,
1180 _ => return None,
1181 })
1182 }
1183
1184 fn symbol(self) -> Symbol {
1185 match self {
1186 NonterminalKind::Item => sym::item,
1187 NonterminalKind::Block => sym::block,
1188 NonterminalKind::Stmt => sym::stmt,
1189 NonterminalKind::Pat(PatParam { inferred: true } | PatWithOr) => sym::pat,
1190 NonterminalKind::Pat(PatParam { inferred: false }) => sym::pat_param,
1191 NonterminalKind::Expr(Expr2021 { inferred: true } | Expr) => sym::expr,
1192 NonterminalKind::Expr(Expr2021 { inferred: false }) => sym::expr_2021,
1193 NonterminalKind::Ty => sym::ty,
1194 NonterminalKind::Ident => sym::ident,
1195 NonterminalKind::Lifetime => sym::lifetime,
1196 NonterminalKind::Literal => sym::literal,
1197 NonterminalKind::Meta => sym::meta,
1198 NonterminalKind::Path => sym::path,
1199 NonterminalKind::Vis => sym::vis,
1200 NonterminalKind::Guard => sym::guard,
1201 NonterminalKind::TT => sym::tt,
1202 }
1203 }
1204}
1205
1206impl fmt::Display for NonterminalKind {
1207 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
1208 f.write_fmt(format_args!("{0}", self.symbol()))write!(f, "{}", self.symbol())
1209 }
1210}
1211
1212#[cfg(target_pointer_width = "64")]
1214mod size_asserts {
1215 use rustc_data_structures::static_assert_size;
1216
1217 use super::*;
1218 const _: [(); 12] = [(); ::std::mem::size_of::<Lit>()];static_assert_size!(Lit, 12);
1220 const _: [(); 2] = [(); ::std::mem::size_of::<LitKind>()];static_assert_size!(LitKind, 2);
1221 const _: [(); 24] = [(); ::std::mem::size_of::<Token>()];static_assert_size!(Token, 24);
1222 const _: [(); 16] = [(); ::std::mem::size_of::<TokenKind>()];static_assert_size!(TokenKind, 16);
1223 }