Rollup merge of #126767 - compiler-errors:static-foreign-item, r=spastorino

`StaticForeignItem` and `StaticItem` are the same

The struct `StaticItem` and `StaticForeignItem` are the same, so remove `StaticForeignItem`. Having them be separate is unique to `static` items -- unlike `ForeignItemKind::{Fn,TyAlias}`, which use the normal AST item.

r? ``@spastorino`` or ``@oli-obk``
This commit is contained in:
Matthias Krüger 2024-06-21 09:12:37 +02:00 committed by GitHub
commit f577d808b7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 10 additions and 67 deletions

View File

@ -3184,38 +3184,6 @@ pub struct StaticItem {
pub expr: Option<P<Expr>>, pub expr: Option<P<Expr>>,
} }
/// A static item in `extern` block.
// This struct is identical to StaticItem for now but it's going to have a safety attribute.
#[derive(Clone, Encodable, Decodable, Debug)]
pub struct StaticForeignItem {
pub ty: P<Ty>,
pub safety: Safety,
pub mutability: Mutability,
pub expr: Option<P<Expr>>,
}
impl From<StaticItem> for StaticForeignItem {
fn from(static_item: StaticItem) -> StaticForeignItem {
StaticForeignItem {
ty: static_item.ty,
safety: static_item.safety,
mutability: static_item.mutability,
expr: static_item.expr,
}
}
}
impl From<StaticForeignItem> for StaticItem {
fn from(static_item: StaticForeignItem) -> StaticItem {
StaticItem {
ty: static_item.ty,
safety: static_item.safety,
mutability: static_item.mutability,
expr: static_item.expr,
}
}
}
#[derive(Clone, Encodable, Decodable, Debug)] #[derive(Clone, Encodable, Decodable, Debug)]
pub struct ConstItem { pub struct ConstItem {
pub defaultness: Defaultness, pub defaultness: Defaultness,
@ -3430,7 +3398,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
#[derive(Clone, Encodable, Decodable, Debug)] #[derive(Clone, Encodable, Decodable, Debug)]
pub enum ForeignItemKind { pub enum ForeignItemKind {
/// A foreign static item (`static FOO: u8`). /// A foreign static item (`static FOO: u8`).
Static(Box<StaticForeignItem>), Static(Box<StaticItem>),
/// An foreign function. /// An foreign function.
Fn(Box<Fn>), Fn(Box<Fn>),
/// An foreign type. /// An foreign type.

View File

@ -1310,12 +1310,7 @@ pub fn noop_flat_map_item<K: NoopVisitItemKind>(
impl NoopVisitItemKind for ForeignItemKind { impl NoopVisitItemKind for ForeignItemKind {
fn noop_visit(&mut self, visitor: &mut impl MutVisitor) { fn noop_visit(&mut self, visitor: &mut impl MutVisitor) {
match self { match self {
ForeignItemKind::Static(box StaticForeignItem { ForeignItemKind::Static(box StaticItem { ty, mutability: _, expr, safety: _ }) => {
ty,
mutability: _,
expr,
safety: _,
}) => {
visitor.visit_ty(ty); visitor.visit_ty(ty);
visit_opt(expr, |expr| visitor.visit_expr(expr)); visit_opt(expr, |expr| visitor.visit_expr(expr));
} }

View File

@ -672,12 +672,7 @@ impl WalkItemKind for ForeignItemKind {
) -> V::Result { ) -> V::Result {
let &Item { id, span, ident, ref vis, .. } = item; let &Item { id, span, ident, ref vis, .. } = item;
match self { match self {
ForeignItemKind::Static(box StaticForeignItem { ForeignItemKind::Static(box StaticItem { ty, mutability: _, expr, safety: _ }) => {
ty,
mutability: _,
expr,
safety: _,
}) => {
try_visit!(visitor.visit_ty(ty)); try_visit!(visitor.visit_ty(ty));
visit_opt!(visitor, visit_expr, expr); visit_opt!(visitor, visit_expr, expr);
} }

View File

@ -664,12 +664,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
hir::ForeignItemKind::Fn(fn_dec, fn_args, generics, safety) hir::ForeignItemKind::Fn(fn_dec, fn_args, generics, safety)
} }
ForeignItemKind::Static(box StaticForeignItem { ForeignItemKind::Static(box StaticItem { ty, mutability, expr: _, safety }) => {
ty,
mutability,
expr: _,
safety,
}) => {
let ty = self let ty = self
.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::StaticTy)); .lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::StaticTy));
let safety = self.lower_safety(*safety, hir::Safety::Unsafe); let safety = self.lower_safety(*safety, hir::Safety::Unsafe);

View File

@ -1232,7 +1232,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
self.check_foreign_ty_genericless(generics, where_clauses); self.check_foreign_ty_genericless(generics, where_clauses);
self.check_foreign_item_ascii_only(fi.ident); self.check_foreign_item_ascii_only(fi.ident);
} }
ForeignItemKind::Static(box StaticForeignItem { expr, safety, .. }) => { ForeignItemKind::Static(box StaticItem { expr, safety, .. }) => {
self.check_foreign_item_safety(fi.span, *safety); self.check_foreign_item_safety(fi.span, *safety);
self.check_foreign_kind_bodyless(fi.ident, "static", expr.as_ref().map(|b| b.span)); self.check_foreign_kind_bodyless(fi.ident, "static", expr.as_ref().map(|b| b.span));
self.check_foreign_item_ascii_only(fi.ident); self.check_foreign_item_ascii_only(fi.ident);

View File

@ -37,12 +37,7 @@ impl<'a> State<'a> {
ast::ForeignItemKind::Fn(box ast::Fn { defaultness, sig, generics, body }) => { ast::ForeignItemKind::Fn(box ast::Fn { defaultness, sig, generics, body }) => {
self.print_fn_full(sig, ident, generics, vis, *defaultness, body.as_deref(), attrs); self.print_fn_full(sig, ident, generics, vis, *defaultness, body.as_deref(), attrs);
} }
ast::ForeignItemKind::Static(box ast::StaticForeignItem { ast::ForeignItemKind::Static(box ast::StaticItem { ty, mutability, expr, safety }) => {
ty,
mutability,
expr,
safety,
}) => {
self.print_safety(*safety); self.print_safety(*safety);
self.print_item_const( self.print_item_const(
ident, ident,

View File

@ -1228,7 +1228,7 @@ impl<'a> Parser<'a> {
ident_span: ident.span, ident_span: ident.span,
const_span, const_span,
}); });
ForeignItemKind::Static(Box::new(StaticForeignItem { ForeignItemKind::Static(Box::new(StaticItem {
ty, ty,
mutability: Mutability::Not, mutability: Mutability::Not,
expr, expr,

View File

@ -217,12 +217,7 @@ impl<'a, 'b, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'b, 'tcx> {
fn visit_foreign_item(&mut self, fi: &'a ForeignItem) { fn visit_foreign_item(&mut self, fi: &'a ForeignItem) {
let def_kind = match fi.kind { let def_kind = match fi.kind {
ForeignItemKind::Static(box StaticForeignItem { ForeignItemKind::Static(box StaticItem { ty: _, mutability, expr: _, safety }) => {
ty: _,
mutability,
expr: _,
safety,
}) => {
let safety = match safety { let safety = match safety {
ast::Safety::Unsafe(_) | ast::Safety::Default => hir::Safety::Unsafe, ast::Safety::Unsafe(_) | ast::Safety::Default => hir::Safety::Unsafe,
ast::Safety::Safe(_) => hir::Safety::Safe, ast::Safety::Safe(_) => hir::Safety::Safe,

View File

@ -449,13 +449,13 @@ pub fn eq_foreign_item_kind(l: &ForeignItemKind, r: &ForeignItemKind) -> bool {
use ForeignItemKind::*; use ForeignItemKind::*;
match (l, r) { match (l, r) {
( (
Static(box StaticForeignItem { Static(box StaticItem {
ty: lt, ty: lt,
mutability: lm, mutability: lm,
expr: le, expr: le,
safety: ls, safety: ls,
}), }),
Static(box StaticForeignItem { Static(box StaticItem {
ty: rt, ty: rt,
mutability: rm, mutability: rm,
expr: re, expr: re,