diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-08 23:45:46 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2015-10-13 15:19:25 +0300 |
| commit | 40aa09e4c9f4c3f0fa2b088895c8f5125325eaa4 (patch) | |
| tree | 0ea29987683fbd21b30e2bc23769517a7984a116 /src/libsyntax/ext | |
| parent | 30af54dede8b9f03a83dd5ad588bb430a5a76270 (diff) | |
| download | rust-40aa09e4c9f4c3f0fa2b088895c8f5125325eaa4.tar.gz rust-40aa09e4c9f4c3f0fa2b088895c8f5125325eaa4.zip | |
Merge struct fields and struct kind
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/build.rs | 11 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/generic/mod.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/primitive.rs | 2 |
3 files changed, 13 insertions, 10 deletions
diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 105a7036c5f..25657b9c6cc 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -1002,15 +1002,18 @@ impl<'a> AstBuilder for ExtCtxt<'a> { }} }).collect(); - let kind = if fields.is_empty() { ast::VariantKind::Unit } else { ast::VariantKind::Tuple }; + let data_ = if fields.is_empty() { + ast::VariantData_::Unit + } else { + ast::VariantData_::Tuple(fields) + }; respan(span, ast::Variant_ { name: name, attrs: Vec::new(), - data: P(ast::VariantData { fields: fields, - id: ast::DUMMY_NODE_ID, - kind: kind }), + data: P(ast::VariantData { data_: data_, + id: ast::DUMMY_NODE_ID}), disr_expr: None, }) } diff --git a/src/libsyntax/ext/deriving/generic/mod.rs b/src/libsyntax/ext/deriving/generic/mod.rs index b375dee4e2c..2a5c4993112 100644 --- a/src/libsyntax/ext/deriving/generic/mod.rs +++ b/src/libsyntax/ext/deriving/generic/mod.rs @@ -652,7 +652,7 @@ impl<'a> TraitDef<'a> { struct_def: &'a VariantData, type_ident: Ident, generics: &Generics) -> P<ast::Item> { - let field_tys: Vec<P<ast::Ty>> = struct_def.fields.iter() + let field_tys: Vec<P<ast::Ty>> = struct_def.fields() .map(|field| field.node.ty.clone()) .collect(); @@ -700,7 +700,7 @@ impl<'a> TraitDef<'a> { let mut field_tys = Vec::new(); for variant in &enum_def.variants { - field_tys.extend(variant.node.data.fields.iter() + field_tys.extend(variant.node.data.fields() .map(|field| field.node.ty.clone())); } @@ -1444,7 +1444,7 @@ impl<'a> TraitDef<'a> { struct_def: &VariantData) -> StaticFields { let mut named_idents = Vec::new(); let mut just_spans = Vec::new(); - for field in struct_def.fields.iter(){ + for field in struct_def.fields(){ let sp = self.set_expn_info(cx, field.span); match field.node.kind { ast::NamedField(ident, _) => named_idents.push((ident, sp)), @@ -1483,7 +1483,7 @@ impl<'a> TraitDef<'a> { -> (P<ast::Pat>, Vec<(Span, Option<Ident>, P<Expr>, &'a [ast::Attribute])>) { - if struct_def.fields.is_empty() { + if struct_def.fields().count() == 0 { return (cx.pat_enum(self.span, struct_path, vec![]), vec![]); } @@ -1491,7 +1491,7 @@ impl<'a> TraitDef<'a> { let mut ident_expr = Vec::new(); let mut struct_type = Unknown; - for (i, struct_field) in struct_def.fields.iter().enumerate() { + for (i, struct_field) in struct_def.fields().enumerate() { let sp = self.set_expn_info(cx, struct_field.span); let opt_id = match struct_field.node.kind { ast::NamedField(ident, _) if (struct_type == Unknown || diff --git a/src/libsyntax/ext/deriving/primitive.rs b/src/libsyntax/ext/deriving/primitive.rs index 3a079717b8b..07b58778358 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.data; - if def.kind != ast::VariantKind::Unit { + if !def.is_unit() { cx.span_err(trait_span, "`FromPrimitive` cannot be derived \ for enums with non-unit variants"); return cx.expr_fail(trait_span, |
