Use Arena inside hir::StructField.
This commit is contained in:
parent
4f1c88be46
commit
e2526120f2
|
@ -131,7 +131,7 @@ macro_rules! arena_types {
|
||||||
[] impl_item_ref: rustc::hir::ImplItemRef,
|
[] impl_item_ref: rustc::hir::ImplItemRef,
|
||||||
[] macro_def: rustc::hir::MacroDef<$tcx>,
|
[] macro_def: rustc::hir::MacroDef<$tcx>,
|
||||||
[] path: rustc::hir::Path,
|
[] path: rustc::hir::Path,
|
||||||
[] struct_field: rustc::hir::StructField,
|
[] struct_field: rustc::hir::StructField<$tcx>,
|
||||||
[] trait_item_ref: rustc::hir::TraitItemRef,
|
[] trait_item_ref: rustc::hir::TraitItemRef,
|
||||||
[] ty: rustc::hir::Ty,
|
[] ty: rustc::hir::Ty,
|
||||||
[] variant: rustc::hir::Variant<$tcx>,
|
[] variant: rustc::hir::Variant<$tcx>,
|
||||||
|
|
|
@ -324,7 +324,7 @@ pub trait Visitor<'v>: Sized {
|
||||||
_: Span) {
|
_: Span) {
|
||||||
walk_struct_def(self, s)
|
walk_struct_def(self, s)
|
||||||
}
|
}
|
||||||
fn visit_struct_field(&mut self, s: &'v StructField) {
|
fn visit_struct_field(&mut self, s: &'v StructField<'v>) {
|
||||||
walk_struct_field(self, s)
|
walk_struct_field(self, s)
|
||||||
}
|
}
|
||||||
fn visit_enum_def(&mut self,
|
fn visit_enum_def(&mut self,
|
||||||
|
@ -955,12 +955,12 @@ pub fn walk_struct_def<'v, V: Visitor<'v>>(visitor: &mut V, struct_definition: &
|
||||||
walk_list!(visitor, visit_struct_field, struct_definition.fields());
|
walk_list!(visitor, visit_struct_field, struct_definition.fields());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v StructField) {
|
pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V, struct_field: &'v StructField<'v>) {
|
||||||
visitor.visit_id(struct_field.hir_id);
|
visitor.visit_id(struct_field.hir_id);
|
||||||
visitor.visit_vis(&struct_field.vis);
|
visitor.visit_vis(&struct_field.vis);
|
||||||
visitor.visit_ident(struct_field.ident);
|
visitor.visit_ident(struct_field.ident);
|
||||||
visitor.visit_ty(&struct_field.ty);
|
visitor.visit_ty(&struct_field.ty);
|
||||||
walk_list!(visitor, visit_attribute, &struct_field.attrs);
|
walk_list!(visitor, visit_attribute, struct_field.attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn walk_block<'v, V: Visitor<'v>>(visitor: &mut V, block: &'v Block) {
|
pub fn walk_block<'v, V: Visitor<'v>>(visitor: &mut V, block: &'v Block) {
|
||||||
|
|
|
@ -791,7 +791,7 @@ impl LoweringContext<'_, 'hir> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField {
|
fn lower_struct_field(&mut self, (index, f): (usize, &StructField)) -> hir::StructField<'hir> {
|
||||||
let ty = if let TyKind::Path(ref qself, ref path) = f.ty.kind {
|
let ty = if let TyKind::Path(ref qself, ref path) = f.ty.kind {
|
||||||
let t = self.lower_path_ty(
|
let t = self.lower_path_ty(
|
||||||
&f.ty,
|
&f.ty,
|
||||||
|
@ -800,9 +800,10 @@ impl LoweringContext<'_, 'hir> {
|
||||||
ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124)
|
ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124)
|
||||||
ImplTraitContext::disallowed()
|
ImplTraitContext::disallowed()
|
||||||
);
|
);
|
||||||
P(t)
|
self.arena.alloc(t)
|
||||||
} else {
|
} else {
|
||||||
self.lower_ty(&f.ty, ImplTraitContext::disallowed())
|
let t = self.lower_ty(&f.ty, ImplTraitContext::disallowed());
|
||||||
|
self.arena.alloc(t.into_inner())
|
||||||
};
|
};
|
||||||
hir::StructField {
|
hir::StructField {
|
||||||
span: f.span,
|
span: f.span,
|
||||||
|
@ -814,7 +815,7 @@ impl LoweringContext<'_, 'hir> {
|
||||||
},
|
},
|
||||||
vis: self.lower_visibility(&f.vis, None),
|
vis: self.lower_visibility(&f.vis, None),
|
||||||
ty,
|
ty,
|
||||||
attrs: self.lower_attrs(&f.attrs),
|
attrs: self.lower_attrs_arena(&f.attrs),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -550,7 +550,7 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, field: &'hir StructField) {
|
fn visit_struct_field(&mut self, field: &'hir StructField<'hir>) {
|
||||||
self.insert(field.span, field.hir_id, Node::Field(field));
|
self.insert(field.span, field.hir_id, Node::Field(field));
|
||||||
self.with_parent(field.hir_id, |this| {
|
self.with_parent(field.hir_id, |this| {
|
||||||
intravisit::walk_struct_field(this, field);
|
intravisit::walk_struct_field(this, field);
|
||||||
|
|
|
@ -1251,7 +1251,7 @@ impl<T:Named> Named for Spanned<T> { fn name(&self) -> Name { self.node.name() }
|
||||||
impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } }
|
impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } }
|
||||||
impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } }
|
impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } }
|
||||||
impl Named for Variant<'_> { fn name(&self) -> Name { self.ident.name } }
|
impl Named for Variant<'_> { fn name(&self) -> Name { self.ident.name } }
|
||||||
impl Named for StructField { fn name(&self) -> Name { self.ident.name } }
|
impl Named for StructField<'_> { fn name(&self) -> Name { self.ident.name } }
|
||||||
impl Named for TraitItem<'_> { fn name(&self) -> Name { self.ident.name } }
|
impl Named for TraitItem<'_> { fn name(&self) -> Name { self.ident.name } }
|
||||||
impl Named for ImplItem<'_> { fn name(&self) -> Name { self.ident.name } }
|
impl Named for ImplItem<'_> { fn name(&self) -> Name { self.ident.name } }
|
||||||
|
|
||||||
|
|
|
@ -2377,17 +2377,17 @@ impl VisibilityKind {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
|
#[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
|
||||||
pub struct StructField {
|
pub struct StructField<'hir> {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
#[stable_hasher(project(name))]
|
#[stable_hasher(project(name))]
|
||||||
pub ident: Ident,
|
pub ident: Ident,
|
||||||
pub vis: Visibility,
|
pub vis: Visibility,
|
||||||
pub hir_id: HirId,
|
pub hir_id: HirId,
|
||||||
pub ty: P<Ty>,
|
pub ty: &'hir Ty,
|
||||||
pub attrs: HirVec<Attribute>,
|
pub attrs: &'hir [Attribute],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StructField {
|
impl StructField<'_> {
|
||||||
// Still necessary in couple of places
|
// Still necessary in couple of places
|
||||||
pub fn is_positional(&self) -> bool {
|
pub fn is_positional(&self) -> bool {
|
||||||
let first = self.ident.as_str().as_bytes()[0];
|
let first = self.ident.as_str().as_bytes()[0];
|
||||||
|
@ -2401,11 +2401,11 @@ pub enum VariantData<'hir> {
|
||||||
/// A struct variant.
|
/// A struct variant.
|
||||||
///
|
///
|
||||||
/// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
|
/// E.g., `Bar { .. }` as in `enum Foo { Bar { .. } }`.
|
||||||
Struct(&'hir [StructField], /* recovered */ bool),
|
Struct(&'hir [StructField<'hir>], /* recovered */ bool),
|
||||||
/// A tuple variant.
|
/// A tuple variant.
|
||||||
///
|
///
|
||||||
/// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
|
/// E.g., `Bar(..)` as in `enum Foo { Bar(..) }`.
|
||||||
Tuple(&'hir [StructField], HirId),
|
Tuple(&'hir [StructField<'hir>], HirId),
|
||||||
/// A unit variant.
|
/// A unit variant.
|
||||||
///
|
///
|
||||||
/// E.g., `Bar = ..` as in `enum Foo { Bar = .. }`.
|
/// E.g., `Bar = ..` as in `enum Foo { Bar = .. }`.
|
||||||
|
@ -2414,7 +2414,7 @@ pub enum VariantData<'hir> {
|
||||||
|
|
||||||
impl VariantData<'hir> {
|
impl VariantData<'hir> {
|
||||||
/// Return the fields of this variant.
|
/// Return the fields of this variant.
|
||||||
pub fn fields(&self) -> &'hir [StructField] {
|
pub fn fields(&self) -> &'hir [StructField<'hir>] {
|
||||||
match *self {
|
match *self {
|
||||||
VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => fields,
|
VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => fields,
|
||||||
_ => &[],
|
_ => &[],
|
||||||
|
@ -2792,7 +2792,7 @@ pub enum Node<'hir> {
|
||||||
TraitItem(&'hir TraitItem<'hir>),
|
TraitItem(&'hir TraitItem<'hir>),
|
||||||
ImplItem(&'hir ImplItem<'hir>),
|
ImplItem(&'hir ImplItem<'hir>),
|
||||||
Variant(&'hir Variant<'hir>),
|
Variant(&'hir Variant<'hir>),
|
||||||
Field(&'hir StructField),
|
Field(&'hir StructField<'hir>),
|
||||||
AnonConst(&'hir AnonConst),
|
AnonConst(&'hir AnonConst),
|
||||||
Expr(&'hir Expr),
|
Expr(&'hir Expr),
|
||||||
Stmt(&'hir Stmt),
|
Stmt(&'hir Stmt),
|
||||||
|
|
|
@ -1000,7 +1000,7 @@ for LateContextAndPass<'a, 'tcx, T> {
|
||||||
lint_callback!(self, check_struct_def_post, s);
|
lint_callback!(self, check_struct_def_post, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
|
||||||
self.with_lint_attrs(s.hir_id, &s.attrs, |cx| {
|
self.with_lint_attrs(s.hir_id, &s.attrs, |cx| {
|
||||||
lint_callback!(cx, check_struct_field, s);
|
lint_callback!(cx, check_struct_field, s);
|
||||||
hir_visit::walk_struct_field(cx, s);
|
hir_visit::walk_struct_field(cx, s);
|
||||||
|
|
|
@ -130,7 +130,7 @@ macro_rules! late_lint_methods {
|
||||||
fn check_impl_item_post(a: &$hir hir::ImplItem<$hir>);
|
fn check_impl_item_post(a: &$hir hir::ImplItem<$hir>);
|
||||||
fn check_struct_def(a: &$hir hir::VariantData<$hir>);
|
fn check_struct_def(a: &$hir hir::VariantData<$hir>);
|
||||||
fn check_struct_def_post(a: &$hir hir::VariantData<$hir>);
|
fn check_struct_def_post(a: &$hir hir::VariantData<$hir>);
|
||||||
fn check_struct_field(a: &$hir hir::StructField);
|
fn check_struct_field(a: &$hir hir::StructField<$hir>);
|
||||||
fn check_variant(a: &$hir hir::Variant<$hir>);
|
fn check_variant(a: &$hir hir::Variant<$hir>);
|
||||||
fn check_variant_post(a: &$hir hir::Variant<$hir>);
|
fn check_variant_post(a: &$hir hir::Variant<$hir>);
|
||||||
fn check_lifetime(a: &$hir hir::Lifetime);
|
fn check_lifetime(a: &$hir hir::Lifetime);
|
||||||
|
@ -622,7 +622,7 @@ impl intravisit::Visitor<'tcx> for LintLevelMapBuilder<'_, 'tcx> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
|
||||||
self.with_lint_attrs(s.hir_id, &s.attrs, |builder| {
|
self.with_lint_attrs(s.hir_id, &s.attrs, |builder| {
|
||||||
intravisit::walk_struct_field(builder, s);
|
intravisit::walk_struct_field(builder, s);
|
||||||
})
|
})
|
||||||
|
|
|
@ -312,7 +312,7 @@ impl<'a, 'tcx> Visitor<'tcx> for Annotator<'a, 'tcx> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx StructField<'tcx>) {
|
||||||
self.annotate(s.hir_id, &s.attrs, s.span, AnnotationKind::Required, |v| {
|
self.annotate(s.hir_id, &s.attrs, s.span, AnnotationKind::Required, |v| {
|
||||||
intravisit::walk_struct_field(v, s);
|
intravisit::walk_struct_field(v, s);
|
||||||
});
|
});
|
||||||
|
@ -387,7 +387,7 @@ impl<'a, 'tcx> Visitor<'tcx> for MissingStabilityAnnotations<'a, 'tcx> {
|
||||||
intravisit::walk_variant(self, var, g, item_id);
|
intravisit::walk_variant(self, var, g, item_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx StructField<'tcx>) {
|
||||||
self.check_missing_stability(s.hir_id, s.span, "field");
|
self.check_missing_stability(s.hir_id, s.span, "field");
|
||||||
intravisit::walk_struct_field(self, s);
|
intravisit::walk_struct_field(self, s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,7 +177,7 @@ impl Visitor<'tcx> for IfThisChanged<'tcx> {
|
||||||
intravisit::walk_impl_item(self, impl_item);
|
intravisit::walk_impl_item(self, impl_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
|
||||||
self.process_attrs(s.hir_id, &s.attrs);
|
self.process_attrs(s.hir_id, &s.attrs);
|
||||||
intravisit::walk_struct_field(self, s);
|
intravisit::walk_struct_field(self, s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -473,7 +473,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingDoc {
|
||||||
desc);
|
desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, sf: &hir::StructField) {
|
fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, sf: &hir::StructField<'_>) {
|
||||||
if !sf.is_positional() {
|
if !sf.is_positional() {
|
||||||
self.check_missing_docs_attrs(cx,
|
self.check_missing_docs_attrs(cx,
|
||||||
Some(sf.hir_id),
|
Some(sf.hir_id),
|
||||||
|
@ -1001,7 +1001,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnreachablePub {
|
||||||
foreign_item.span, true);
|
foreign_item.span, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, field: &hir::StructField) {
|
fn check_struct_field(&mut self, cx: &LateContext<'_, '_>, field: &hir::StructField<'_>) {
|
||||||
self.perform_lint(cx, "field", field.hir_id, &field.vis, field.span, false);
|
self.perform_lint(cx, "field", field.hir_id, &field.vis, field.span, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -727,7 +727,7 @@ impl EncodeContext<'tcx> {
|
||||||
record!(self.per_def.kind[def_id] <- EntryKind::Field);
|
record!(self.per_def.kind[def_id] <- EntryKind::Field);
|
||||||
record!(self.per_def.visibility[def_id] <- field.vis);
|
record!(self.per_def.visibility[def_id] <- field.vis);
|
||||||
record!(self.per_def.span[def_id] <- self.tcx.def_span(def_id));
|
record!(self.per_def.span[def_id] <- self.tcx.def_span(def_id));
|
||||||
record!(self.per_def.attributes[def_id] <- &variant_data.fields()[field_index].attrs);
|
record!(self.per_def.attributes[def_id] <- variant_data.fields()[field_index].attrs);
|
||||||
self.encode_stability(def_id);
|
self.encode_stability(def_id);
|
||||||
self.encode_deprecation(def_id);
|
self.encode_deprecation(def_id);
|
||||||
self.encode_item_type(def_id);
|
self.encode_item_type(def_id);
|
||||||
|
|
|
@ -495,7 +495,7 @@ impl DeadVisitor<'tcx> {
|
||||||
should_warn && !self.symbol_is_live(item.hir_id)
|
should_warn && !self.symbol_is_live(item.hir_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn should_warn_about_field(&mut self, field: &hir::StructField) -> bool {
|
fn should_warn_about_field(&mut self, field: &hir::StructField<'_>) -> bool {
|
||||||
let field_type = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id));
|
let field_type = self.tcx.type_of(self.tcx.hir().local_def_id(field.hir_id));
|
||||||
!field.is_positional()
|
!field.is_positional()
|
||||||
&& !self.symbol_is_live(field.hir_id)
|
&& !self.symbol_is_live(field.hir_id)
|
||||||
|
@ -629,7 +629,7 @@ impl Visitor<'tcx> for DeadVisitor<'tcx> {
|
||||||
intravisit::walk_foreign_item(self, fi);
|
intravisit::walk_foreign_item(self, fi);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, field: &'tcx hir::StructField) {
|
fn visit_struct_field(&mut self, field: &'tcx hir::StructField<'tcx>) {
|
||||||
if self.should_warn_about_field(&field) {
|
if self.should_warn_about_field(&field) {
|
||||||
self.warn_dead_code(field.hir_id, field.span, field.ident.name, "field", "read");
|
self.warn_dead_code(field.hir_id, field.span, field.ident.name, "field", "read");
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,7 +203,7 @@ impl<'v> hir_visit::Visitor<'v> for StatCollector<'v> {
|
||||||
hir_visit::walk_param_bound(self, bounds)
|
hir_visit::walk_param_bound(self, bounds)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'v hir::StructField) {
|
fn visit_struct_field(&mut self, s: &'v hir::StructField<'v>) {
|
||||||
self.record("StructField", Id::Node(s.hir_id), s);
|
self.record("StructField", Id::Node(s.hir_id), s);
|
||||||
hir_visit::walk_struct_field(self, s)
|
hir_visit::walk_struct_field(self, s)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1647,7 +1647,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ObsoleteVisiblePrivateTypesVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
|
||||||
if s.vis.node.is_pub() || self.in_variant {
|
if s.vis.node.is_pub() || self.in_variant {
|
||||||
intravisit::walk_struct_field(self, s);
|
intravisit::walk_struct_field(self, s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -684,7 +684,7 @@ impl Visitor<'tcx> for ClauseDumper<'tcx> {
|
||||||
intravisit::walk_impl_item(self, impl_item);
|
intravisit::walk_impl_item(self, impl_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_struct_field(&mut self, s: &'tcx hir::StructField) {
|
fn visit_struct_field(&mut self, s: &'tcx hir::StructField<'tcx>) {
|
||||||
self.process_attrs(s.hir_id, &s.attrs);
|
self.process_attrs(s.hir_id, &s.attrs);
|
||||||
intravisit::walk_struct_field(self, s);
|
intravisit::walk_struct_field(self, s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1743,7 +1743,7 @@ impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Clean<Item> for hir::StructField {
|
impl Clean<Item> for hir::StructField<'_> {
|
||||||
fn clean(&self, cx: &DocContext<'_>) -> Item {
|
fn clean(&self, cx: &DocContext<'_>) -> Item {
|
||||||
let local_did = cx.tcx.hir().local_def_id(self.hir_id);
|
let local_did = cx.tcx.hir().local_def_id(self.hir_id);
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ pub struct Struct<'hir> {
|
||||||
pub name: Name,
|
pub name: Name,
|
||||||
pub generics: &'hir hir::Generics,
|
pub generics: &'hir hir::Generics,
|
||||||
pub attrs: &'hir [ast::Attribute],
|
pub attrs: &'hir [ast::Attribute],
|
||||||
pub fields: &'hir [hir::StructField],
|
pub fields: &'hir [hir::StructField<'hir>],
|
||||||
pub whence: Span,
|
pub whence: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ pub struct Union<'hir> {
|
||||||
pub name: Name,
|
pub name: Name,
|
||||||
pub generics: &'hir hir::Generics,
|
pub generics: &'hir hir::Generics,
|
||||||
pub attrs: &'hir [ast::Attribute],
|
pub attrs: &'hir [ast::Attribute],
|
||||||
pub fields: &'hir [hir::StructField],
|
pub fields: &'hir [hir::StructField<'hir>],
|
||||||
pub whence: Span,
|
pub whence: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue