diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-08-29 05:04:31 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-08-29 05:20:40 +0000 |
| commit | 4fe94e0be65865bef1d0283873158baa523afddc (patch) | |
| tree | 53c10dc8ad7beee5595e0f2d26b5dadc7d0f334f /src/libsyntax | |
| parent | c14ff2884dc46a8a0ef7f5916b4730a4e516d9ab (diff) | |
| download | rust-4fe94e0be65865bef1d0283873158baa523afddc.tar.gz rust-4fe94e0be65865bef1d0283873158baa523afddc.zip | |
Future proof the AST for `union`.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/config.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 3 |
5 files changed, 18 insertions, 2 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index c0994ccb2ac..fcb99444957 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1883,6 +1883,10 @@ pub enum ItemKind { /// /// E.g. `struct Foo<A> { x: A }` Struct(VariantData, Generics), + /// A union definition (`union` or `pub union`). + /// + /// E.g. `union Foo<A, B> { x: A, y: B }` + Union(VariantData, Generics), // FIXME: not yet implemented /// A Trait declaration (`trait` or `pub trait`). /// /// E.g. `trait Foo { .. }` or `trait Foo<T> { .. }` @@ -1919,6 +1923,7 @@ impl ItemKind { ItemKind::Ty(..) => "type alias", ItemKind::Enum(..) => "enum", ItemKind::Struct(..) => "struct", + ItemKind::Union(..) => "union", ItemKind::Trait(..) => "trait", ItemKind::Mac(..) | ItemKind::Impl(..) | diff --git a/src/libsyntax/config.rs b/src/libsyntax/config.rs index ff1ecd44371..69a97917652 100644 --- a/src/libsyntax/config.rs +++ b/src/libsyntax/config.rs @@ -180,6 +180,9 @@ impl<'a> fold::Folder for StripUnconfigured<'a> { ast::ItemKind::Struct(def, generics) => { ast::ItemKind::Struct(fold_struct(self, def), generics) } + ast::ItemKind::Union(def, generics) => { + ast::ItemKind::Union(fold_struct(self, def), generics) + } ast::ItemKind::Enum(def, generics) => { let variants = def.variants.into_iter().filter_map(|v| { self.configure(v).map(|v| { diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index fad0b6f65a7..7500bfe9caa 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -885,6 +885,10 @@ pub fn noop_fold_item_kind<T: Folder>(i: ItemKind, folder: &mut T) -> ItemKind { let struct_def = folder.fold_variant_data(struct_def); ItemKind::Struct(struct_def, folder.fold_generics(generics)) } + ItemKind::Union(struct_def, generics) => { + let struct_def = folder.fold_variant_data(struct_def); + ItemKind::Union(struct_def, folder.fold_generics(generics)) + } ItemKind::DefaultImpl(unsafety, ref trait_ref) => { ItemKind::DefaultImpl(unsafety, folder.fold_trait_ref((*trait_ref).clone())) } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 99c00789219..8563d27908d 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1251,7 +1251,10 @@ impl<'a> State<'a> { try!(self.head(&visibility_qualified(&item.vis, "struct"))); try!(self.print_struct(&struct_def, generics, item.ident, item.span, true)); } - + ast::ItemKind::Union(ref struct_def, ref generics) => { + try!(self.head(&visibility_qualified(&item.vis, "union"))); + try!(self.print_struct(&struct_def, generics, item.ident, item.span, true)); + } ast::ItemKind::DefaultImpl(unsafety, ref trait_ref) => { try!(self.head("")); try!(self.print_visibility(&item.vis)); diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index b2d47996659..efd9b027504 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -278,7 +278,8 @@ pub fn walk_item<V: Visitor>(visitor: &mut V, item: &Item) { visitor.visit_ty(typ); walk_list!(visitor, visit_impl_item, impl_items); } - ItemKind::Struct(ref struct_definition, ref generics) => { + ItemKind::Struct(ref struct_definition, ref generics) | + ItemKind::Union(ref struct_definition, ref generics) => { visitor.visit_generics(generics); visitor.visit_variant_data(struct_definition, item.ident, generics, item.id, item.span); |
