about summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2015-10-02 03:53:28 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2015-10-13 15:19:17 +0300
commit495566ee61174066014b928fffd182834c1eb214 (patch)
tree6af573a725d3b5916cccc8d3122163166fc40f64 /src/libsyntax/ext
parent2314ab29c26c9364c7f8e26b55ce091998489f58 (diff)
downloadrust-495566ee61174066014b928fffd182834c1eb214.tar.gz
rust-495566ee61174066014b928fffd182834c1eb214.zip
Decouple structure kinds from NodeIds
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/build.rs8
-rw-r--r--src/libsyntax/ext/deriving/primitive.rs2
2 files changed, 7 insertions, 3 deletions
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<P<ast::Ty>> ) -> 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,