From 495566ee61174066014b928fffd182834c1eb214 Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Fri, 2 Oct 2015 03:53:28 +0300 Subject: Decouple structure kinds from NodeIds --- src/libsyntax/ext/build.rs | 8 ++++++-- src/libsyntax/ext/deriving/primitive.rs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src/libsyntax/ext') diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index d448eb63204..132ab6e67fe 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -993,7 +993,7 @@ impl<'a> AstBuilder for ExtCtxt<'a> { } fn variant(&self, span: Span, name: Ident, tys: Vec> ) -> ast::Variant { - let fields = tys.into_iter().map(|ty| { + let fields: Vec<_> = tys.into_iter().map(|ty| { Spanned { span: ty.span, node: ast::StructField_ { ty: ty, kind: ast::UnnamedField(ast::Inherited), @@ -1002,11 +1002,15 @@ impl<'a> AstBuilder for ExtCtxt<'a> { }} }).collect(); + let kind = if fields.is_empty() { ast::VariantKind::Unit } else { ast::VariantKind::Tuple }; + respan(span, ast::Variant_ { name: name, attrs: Vec::new(), - def: P(ast::StructDef { fields: fields, ctor_id: Some(ast::DUMMY_NODE_ID) }), + def: P(ast::StructDef { fields: fields, + id: ast::DUMMY_NODE_ID, + kind: kind }), id: ast::DUMMY_NODE_ID, disr_expr: None, }) diff --git a/src/libsyntax/ext/deriving/primitive.rs b/src/libsyntax/ext/deriving/primitive.rs index 2fdaa9b7550..7b64e5522a4 100644 --- a/src/libsyntax/ext/deriving/primitive.rs +++ b/src/libsyntax/ext/deriving/primitive.rs @@ -95,7 +95,7 @@ fn cs_from(name: &str, cx: &mut ExtCtxt, trait_span: Span, substr: &Substructure for variant in &enum_def.variants { let def = &variant.node.def; - if def.ctor_id.is_none() || !def.fields.is_empty() { + if def.kind != ast::VariantKind::Unit { cx.span_err(trait_span, "`FromPrimitive` cannot be derived \ for enums with non-unit variants"); return cx.expr_fail(trait_span, -- cgit 1.4.1-3-g733a5