diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-02-22 03:29:17 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-02-24 00:59:38 +0100 |
| commit | 7017058e6b289ea6253e62b9ffdae5dea036855f (patch) | |
| tree | 51039fff9bade083cf45102cfb011e3d824dde77 | |
| parent | d41fc138bf57db0d5491d0886a676c3ade4b746f (diff) | |
| download | rust-7017058e6b289ea6253e62b9ffdae5dea036855f.tar.gz rust-7017058e6b289ea6253e62b9ffdae5dea036855f.zip | |
ast: add `Defaultness` to `Item`, making `AssocItem` an alias.
| -rw-r--r-- | src/librustc_ast_pretty/pprust.rs | 4 | ||||
| -rw-r--r-- | src/librustc_builtin_macros/global_asm.rs | 1 | ||||
| -rw-r--r-- | src/librustc_builtin_macros/test_harness.rs | 24 | ||||
| -rw-r--r-- | src/librustc_expand/build.rs | 1 | ||||
| -rw-r--r-- | src/librustc_expand/expand.rs | 1 | ||||
| -rw-r--r-- | src/librustc_expand/placeholders.rs | 3 | ||||
| -rw-r--r-- | src/librustc_metadata/rmeta/decoder/cstore_impl.rs | 1 | ||||
| -rw-r--r-- | src/librustc_parse/parser/item.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/ast.rs | 23 | ||||
| -rw-r--r-- | src/libsyntax/attr/mod.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/mut_visit.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/ast-json/ast-json-output.stdout | 2 |
13 files changed, 35 insertions, 44 deletions
diff --git a/src/librustc_ast_pretty/pprust.rs b/src/librustc_ast_pretty/pprust.rs index abe3165df4b..503310c6db5 100644 --- a/src/librustc_ast_pretty/pprust.rs +++ b/src/librustc_ast_pretty/pprust.rs @@ -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( diff --git a/src/librustc_builtin_macros/global_asm.rs b/src/librustc_builtin_macros/global_asm.rs index 052e62ee9ff..70b9fccbafc 100644 --- a/src/librustc_builtin_macros/global_asm.rs +++ b/src/librustc_builtin_macros/global_asm.rs @@ -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, })]), diff --git a/src/librustc_builtin_macros/test_harness.rs b/src/librustc_builtin_macros/test_harness.rs index f0ea256cf2b..1d8ade1b2ba 100644 --- a/src/librustc_builtin_macros/test_harness.rs +++ b/src/librustc_builtin_macros/test_harness.rs @@ -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); + let attrs = attrs + .into_iter() + .filter(|attr| !attr.check_name(sym::main) && !attr.check_name(sym::start)) + .chain(iter::once(allow_dead_code)) + .collect(); - ast::Item { - id, - ident, - attrs: attrs - .into_iter() - .filter(|attr| { - !attr.check_name(sym::main) && !attr.check_name(sym::start) - }) - .chain(iter::once(allow_dead_code)) - .collect(), - kind, - vis, - span, - tokens, - } + 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, }); diff --git a/src/librustc_expand/build.rs b/src/librustc_expand/build.rs index 8a53e1d1861..246b3bff71d 100644 --- a/src/librustc_expand/build.rs +++ b/src/librustc_expand/build.rs @@ -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, }) diff --git a/src/librustc_expand/expand.rs b/src/librustc_expand/expand.rs index 5d0c474140f..ba26780dea2 100644 --- a/src/librustc_expand/expand.rs +++ b/src/librustc_expand/expand.rs @@ -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, })]); diff --git a/src/librustc_expand/placeholders.rs b/src/librustc_expand/placeholders.rs index c96b394c7b5..e7e4f482a5e 100644 --- a/src/librustc_expand/placeholders.rs +++ b/src/librustc_expand/placeholders.rs @@ -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, diff --git a/src/librustc_metadata/rmeta/decoder/cstore_impl.rs b/src/librustc_metadata/rmeta/decoder/cstore_impl.rs index fb7e5541e26..602be372573 100644 --- a/src/librustc_metadata/rmeta/decoder/cstore_impl.rs +++ b/src/librustc_metadata/rmeta/decoder/cstore_impl.rs @@ -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, diff --git a/src/librustc_parse/parser/item.rs b/src/librustc_parse/parser/item.rs index e770b4212e5..190baa9b2d9 100644 --- a/src/librustc_parse/parser/item.rs +++ b/src/librustc_parse/parser/item.rs @@ -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 } } } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index bcf94d19613..dd3319fcba1 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -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. /// diff --git a/src/libsyntax/attr/mod.rs b/src/libsyntax/attr/mod.rs index 313f5269235..cd485e71378 100644 --- a/src/libsyntax/attr/mod.rs +++ b/src/libsyntax/attr/mod.rs @@ -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 } diff --git a/src/libsyntax/mut_visit.rs b/src/libsyntax/mut_visit.rs index 02f790dfbb4..048026cbb24 100644 --- a/src/libsyntax/mut_visit.rs +++ b/src/libsyntax/mut_visit.rs @@ -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] } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index bd35918dba7..244cb80064e 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -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); } diff --git a/src/test/ui/ast-json/ast-json-output.stdout b/src/test/ui/ast-json/ast-json-output.stdout index 35e418696f1..bbda63955e0 100644 --- a/src/test/ui/ast-json/ast-json-output.stdout +++ b/src/test/ui/ast-json/ast-json-output.stdout @@ -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":[]} |
