diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-02 03:53:28 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-13 15:19:17 +0300 |
| commit | 495566ee61174066014b928fffd182834c1eb214 (patch) | |
| tree | 6af573a725d3b5916cccc8d3122163166fc40f64 /src/libsyntax/ext | |
| parent | 2314ab29c26c9364c7f8e26b55ce091998489f58 (diff) | |
| download | rust-495566ee61174066014b928fffd182834c1eb214.tar.gz rust-495566ee61174066014b928fffd182834c1eb214.zip | |
Decouple structure kinds from NodeIds
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/build.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/primitive.rs | 2 |
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, |
