ast: add `Defaultness` to `Item`, making `AssocItem` an alias.
This commit is contained in:
parent
d41fc138bf
commit
7017058e6b
|
@ -1016,8 +1016,8 @@ impl<'a> State<'a> {
|
|||
}
|
||||
|
||||
crate fn print_foreign_item(&mut self, item: &ast::ForeignItem) {
|
||||
let ast::ForeignItem { id, span, ident, attrs, kind, vis, tokens: _ } = item;
|
||||
self.print_nested_item_kind(*id, *span, *ident, attrs, ast::Defaultness::Final, kind, vis);
|
||||
let ast::Item { id, span, ident, attrs, kind, vis, defaultness, tokens: _ } = item;
|
||||
self.print_nested_item_kind(*id, *span, *ident, attrs, *defaultness, kind, vis);
|
||||
}
|
||||
|
||||
fn print_nested_item_kind(
|
||||
|
|
|
@ -30,6 +30,7 @@ pub fn expand_global_asm<'cx>(
|
|||
id: ast::DUMMY_NODE_ID,
|
||||
kind: ast::ItemKind::GlobalAsm(P(global_asm)),
|
||||
vis: respan(sp.shrink_to_lo(), ast::VisibilityKind::Inherited),
|
||||
defaultness: ast::Defaultness::Final,
|
||||
span: cx.with_def_site_ctxt(sp),
|
||||
tokens: None,
|
||||
})]),
|
||||
|
|
|
@ -162,7 +162,7 @@ impl MutVisitor for EntryPointCleaner {
|
|||
// #[allow(dead_code)] to avoid printing warnings.
|
||||
let item = match entry::entry_point_type(&item, self.depth) {
|
||||
EntryPointType::MainNamed | EntryPointType::MainAttr | EntryPointType::Start => item
|
||||
.map(|ast::Item { id, ident, attrs, kind, vis, span, tokens }| {
|
||||
.map(|ast::Item { id, ident, attrs, kind, vis, defaultness, span, tokens }| {
|
||||
let allow_ident = Ident::new(sym::allow, self.def_site);
|
||||
let dc_nested = attr::mk_nested_word_item(Ident::from_str_and_span(
|
||||
"dead_code",
|
||||
|
@ -170,22 +170,13 @@ impl MutVisitor for EntryPointCleaner {
|
|||
));
|
||||
let allow_dead_code_item = attr::mk_list_item(allow_ident, vec![dc_nested]);
|
||||
let allow_dead_code = attr::mk_attr_outer(allow_dead_code_item);
|
||||
|
||||
ast::Item {
|
||||
id,
|
||||
ident,
|
||||
attrs: attrs
|
||||
let attrs = attrs
|
||||
.into_iter()
|
||||
.filter(|attr| {
|
||||
!attr.check_name(sym::main) && !attr.check_name(sym::start)
|
||||
})
|
||||
.filter(|attr| !attr.check_name(sym::main) && !attr.check_name(sym::start))
|
||||
.chain(iter::once(allow_dead_code))
|
||||
.collect(),
|
||||
kind,
|
||||
vis,
|
||||
span,
|
||||
tokens,
|
||||
}
|
||||
.collect();
|
||||
|
||||
ast::Item { id, ident, attrs, kind, vis, defaultness, span, tokens }
|
||||
}),
|
||||
EntryPointType::None | EntryPointType::OtherMain => item,
|
||||
};
|
||||
|
@ -321,6 +312,7 @@ fn mk_main(cx: &mut TestCtxt<'_>) -> P<ast::Item> {
|
|||
id: ast::DUMMY_NODE_ID,
|
||||
kind: main,
|
||||
vis: respan(sp, ast::VisibilityKind::Public),
|
||||
defaultness: ast::Defaultness::Final,
|
||||
span: sp,
|
||||
tokens: None,
|
||||
});
|
||||
|
|
|
@ -588,6 +588,7 @@ impl<'a> ExtCtxt<'a> {
|
|||
id: ast::DUMMY_NODE_ID,
|
||||
kind,
|
||||
vis: respan(span.shrink_to_lo(), ast::VisibilityKind::Inherited),
|
||||
defaultness: ast::Defaultness::Final,
|
||||
span,
|
||||
tokens: None,
|
||||
})
|
||||
|
|
|
@ -358,6 +358,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
|
|||
ident: Ident::invalid(),
|
||||
id: ast::DUMMY_NODE_ID,
|
||||
vis: respan(krate.span.shrink_to_lo(), ast::VisibilityKind::Public),
|
||||
defaultness: ast::Defaultness::Final,
|
||||
tokens: None,
|
||||
})]);
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ pub fn placeholder(
|
|||
let ident = ast::Ident::invalid();
|
||||
let attrs = Vec::new();
|
||||
let vis = vis.unwrap_or_else(|| dummy_spanned(ast::VisibilityKind::Inherited));
|
||||
let defaultness = ast::Defaultness::Final;
|
||||
let span = DUMMY_SP;
|
||||
let expr_placeholder = || {
|
||||
P(ast::Expr {
|
||||
|
@ -46,6 +47,7 @@ pub fn placeholder(
|
|||
span,
|
||||
ident,
|
||||
vis,
|
||||
defaultness,
|
||||
attrs,
|
||||
kind: ast::ItemKind::Mac(mac_placeholder()),
|
||||
tokens: None,
|
||||
|
@ -76,6 +78,7 @@ pub fn placeholder(
|
|||
span,
|
||||
ident,
|
||||
vis,
|
||||
defaultness,
|
||||
attrs,
|
||||
kind: ast::ForeignItemKind::Macro(mac_placeholder()),
|
||||
tokens: None,
|
||||
|
|
|
@ -464,6 +464,7 @@ impl CStore {
|
|||
legacy: def.legacy,
|
||||
}),
|
||||
vis: source_map::respan(local_span.shrink_to_lo(), ast::VisibilityKind::Inherited),
|
||||
defaultness: ast::Defaultness::Final,
|
||||
tokens: None,
|
||||
},
|
||||
data.root.edition,
|
||||
|
|
|
@ -85,7 +85,7 @@ impl<'a> Parser<'a> {
|
|||
let vis = self.parse_visibility(FollowedByType::No)?;
|
||||
|
||||
if let Some((ident, kind)) = self.parse_item_kind(&mut attrs, macros_allowed, lo, &vis)? {
|
||||
return Ok(Some(P(self.mk_item(lo, ident, kind, vis, attrs))));
|
||||
return Ok(Some(P(self.mk_item(lo, ident, kind, vis, Defaultness::Final, attrs))));
|
||||
}
|
||||
|
||||
// FAILURE TO PARSE ITEM
|
||||
|
@ -866,7 +866,7 @@ impl<'a> Parser<'a> {
|
|||
let lo = self.token.span;
|
||||
let vis = self.parse_visibility(FollowedByType::No)?;
|
||||
let (ident, kind) = self.parse_assoc_item_kind(at_end, &mut attrs, |_| true, &vis)?;
|
||||
let item = self.mk_item(lo, ident, kind, vis, attrs);
|
||||
let item = self.mk_item(lo, ident, kind, vis, Defaultness::Final, attrs);
|
||||
self.error_on_foreign_const(&item);
|
||||
Ok(P(item))
|
||||
}
|
||||
|
@ -1420,10 +1420,11 @@ impl<'a> Parser<'a> {
|
|||
ident: Ident,
|
||||
kind: K,
|
||||
vis: Visibility,
|
||||
defaultness: Defaultness,
|
||||
attrs: Vec<Attribute>,
|
||||
) -> Item<K> {
|
||||
let span = lo.to(self.prev_span);
|
||||
Item { ident, attrs, id: DUMMY_NODE_ID, kind, vis, span, tokens: None }
|
||||
Item { ident, attrs, id: DUMMY_NODE_ID, kind, vis, defaultness, span, tokens: None }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2411,16 +2411,19 @@ impl VariantData {
|
|||
}
|
||||
}
|
||||
|
||||
/// An item.
|
||||
///
|
||||
/// The name might be a dummy name in case of anonymous items.
|
||||
/// An item definition.
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct Item<K = ItemKind> {
|
||||
pub attrs: Vec<Attribute>,
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
pub vis: Visibility,
|
||||
/// The name of the item.
|
||||
/// It might be a dummy name in case of anonymous items.
|
||||
pub ident: Ident,
|
||||
/// The `default`ness of this item.
|
||||
/// This should only occur in syntactically well-formed code in associated contexts.
|
||||
pub defaultness: Defaultness,
|
||||
|
||||
pub kind: K,
|
||||
|
||||
|
@ -2613,19 +2616,7 @@ pub type ForeignItemKind = AssocItemKind;
|
|||
|
||||
/// Represents associated items.
|
||||
/// These include items in `impl` and `trait` definitions.
|
||||
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub struct AssocItem {
|
||||
pub attrs: Vec<Attribute>,
|
||||
pub id: NodeId,
|
||||
pub span: Span,
|
||||
pub vis: Visibility,
|
||||
pub ident: Ident,
|
||||
|
||||
pub defaultness: Defaultness,
|
||||
pub kind: AssocItemKind,
|
||||
/// See `Item::tokens` for what this is.
|
||||
pub tokens: Option<TokenStream>,
|
||||
}
|
||||
pub type AssocItem = Item<AssocItemKind>;
|
||||
|
||||
/// Represents non-free item kinds.
|
||||
///
|
||||
|
|
|
@ -722,6 +722,6 @@ macro_rules! derive_has_attrs {
|
|||
}
|
||||
|
||||
derive_has_attrs! {
|
||||
Item, Expr, Local, ast::ForeignItem, ast::StructField, ast::AssocItem, ast::Arm,
|
||||
Item, Expr, Local, ast::ForeignItem, ast::StructField, ast::Arm,
|
||||
ast::Field, ast::FieldPat, ast::Variant, ast::Param, GenericParam
|
||||
}
|
||||
|
|
|
@ -948,8 +948,7 @@ pub fn noop_flat_map_assoc_item<T: MutVisitor>(
|
|||
mut item: P<AssocItem>,
|
||||
visitor: &mut T,
|
||||
) -> SmallVec<[P<AssocItem>; 1]> {
|
||||
let AssocItem { id, ident, vis, defaultness: _, attrs, kind, span, tokens: _ } =
|
||||
item.deref_mut();
|
||||
let Item { id, ident, vis, defaultness: _, attrs, kind, span, tokens: _ } = item.deref_mut();
|
||||
walk_nested_item(visitor, id, span, ident, vis, attrs, kind);
|
||||
smallvec![item]
|
||||
}
|
||||
|
@ -1004,6 +1003,7 @@ pub fn noop_visit_crate<T: MutVisitor>(krate: &mut Crate, vis: &mut T) {
|
|||
attrs,
|
||||
id: DUMMY_NODE_ID,
|
||||
vis: respan(span.shrink_to_lo(), VisibilityKind::Public),
|
||||
defaultness: Defaultness::Final,
|
||||
span,
|
||||
kind: ItemKind::Mod(module),
|
||||
tokens: None,
|
||||
|
@ -1031,7 +1031,7 @@ pub fn noop_flat_map_item<T: MutVisitor>(
|
|||
mut item: P<Item>,
|
||||
visitor: &mut T,
|
||||
) -> SmallVec<[P<Item>; 1]> {
|
||||
let Item { ident, attrs, id, kind, vis, span, tokens: _ } = item.deref_mut();
|
||||
let Item { ident, attrs, id, kind, vis, defaultness: _, span, tokens: _ } = item.deref_mut();
|
||||
visitor.visit_ident(ident);
|
||||
visit_attrs(attrs, visitor);
|
||||
visitor.visit_id(id);
|
||||
|
@ -1049,7 +1049,7 @@ pub fn noop_flat_map_foreign_item<T: MutVisitor>(
|
|||
mut item: P<ForeignItem>,
|
||||
visitor: &mut T,
|
||||
) -> SmallVec<[P<ForeignItem>; 1]> {
|
||||
let ForeignItem { ident, attrs, id, kind, vis, span, tokens: _ } = item.deref_mut();
|
||||
let Item { ident, attrs, id, kind, vis, defaultness: _, span, tokens: _ } = item.deref_mut();
|
||||
walk_nested_item(visitor, id, span, ident, vis, attrs, kind);
|
||||
smallvec![item]
|
||||
}
|
||||
|
|
|
@ -526,7 +526,7 @@ pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) {
|
|||
}
|
||||
|
||||
pub fn walk_foreign_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a ForeignItem) {
|
||||
let ForeignItem { id, span, ident, vis, attrs, kind, tokens: _ } = item;
|
||||
let ForeignItem { id, span, ident, vis, defaultness: _, attrs, kind, tokens: _ } = item;
|
||||
walk_nested_item(visitor, *id, *span, *ident, vis, attrs, kind, FnCtxt::Foreign);
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"module":{"inner":{"lo":0,"hi":0},"items":[{"attrs":[],"id":0,"span":{"lo":0,"hi":0},"vis":{"node":"Inherited","span":{"lo":0,"hi":0}},"ident":{"name":"core","span":{"lo":0,"hi":0}},"kind":{"variant":"ExternCrate","fields":[null]},"tokens":{"_field0":[[{"variant":"Token","fields":[{"kind":{"variant":"Ident","fields":["extern",false]},"span":{"lo":0,"hi":0}}]},"NonJoint"],[{"variant":"Token","fields":[{"kind":{"variant":"Ident","fields":["crate",false]},"span":{"lo":0,"hi":0}}]},"NonJoint"],[{"variant":"Token","fields":[{"kind":{"variant":"Ident","fields":["core",false]},"span":{"lo":0,"hi":0}}]},"NonJoint"],[{"variant":"Token","fields":[{"kind":"Semi","span":{"lo":0,"hi":0}}]},"NonJoint"]]}}],"inline":true},"attrs":[],"span":{"lo":0,"hi":0},"proc_macros":[]}
|
||||
{"module":{"inner":{"lo":0,"hi":0},"items":[{"attrs":[],"id":0,"span":{"lo":0,"hi":0},"vis":{"node":"Inherited","span":{"lo":0,"hi":0}},"ident":{"name":"core","span":{"lo":0,"hi":0}},"defaultness":"Final","kind":{"variant":"ExternCrate","fields":[null]},"tokens":{"_field0":[[{"variant":"Token","fields":[{"kind":{"variant":"Ident","fields":["extern",false]},"span":{"lo":0,"hi":0}}]},"NonJoint"],[{"variant":"Token","fields":[{"kind":{"variant":"Ident","fields":["crate",false]},"span":{"lo":0,"hi":0}}]},"NonJoint"],[{"variant":"Token","fields":[{"kind":{"variant":"Ident","fields":["core",false]},"span":{"lo":0,"hi":0}}]},"NonJoint"],[{"variant":"Token","fields":[{"kind":"Semi","span":{"lo":0,"hi":0}}]},"NonJoint"]]}}],"inline":true},"attrs":[],"span":{"lo":0,"hi":0},"proc_macros":[]}
|
||||
|
|
Loading…
Reference in New Issue