@@ -720,8 +720,15 @@ impl<'a> TraitDef<'a> {
720720 from_scratch : bool ,
721721 use_temporaries : bool ,
722722 ) -> P < ast:: Item > {
723- let field_tys: Vec < P < ast:: Ty > > =
724- struct_def. fields ( ) . iter ( ) . map ( |field| field. ty . clone ( ) ) . collect ( ) ;
723+ let field_tys: Vec < P < ast:: Ty > > = struct_def
724+ . fields ( )
725+ . iter ( )
726+ . filter_map ( |field| match & field. variant {
727+ ast:: FieldVariant :: Named ( ast:: NamedField { ident : _, ty } ) => Some ( ty. clone ( ) ) ,
728+ // FIXME: Handle Unnamed variant
729+ _ => None ,
730+ } )
731+ . collect ( ) ;
725732
726733 let methods = self
727734 . methods
@@ -769,7 +776,13 @@ impl<'a> TraitDef<'a> {
769776 let mut field_tys = Vec :: new ( ) ;
770777
771778 for variant in & enum_def. variants {
772- field_tys. extend ( variant. data . fields ( ) . iter ( ) . map ( |field| field. ty . clone ( ) ) ) ;
779+ field_tys. extend ( variant. data . fields ( ) . iter ( ) . filter_map (
780+ |field| match & field. variant {
781+ ast:: FieldVariant :: Named ( ast:: NamedField { ident : _, ty } ) => Some ( ty. clone ( ) ) ,
782+ // FIXME: Handle Unnamed variant
783+ _ => None ,
784+ } ,
785+ ) )
773786 }
774787
775788 let methods = self
@@ -1515,8 +1528,11 @@ impl<'a> TraitDef<'a> {
15151528 let mut just_spans = Vec :: new ( ) ;
15161529 for field in struct_def. fields ( ) {
15171530 let sp = field. span . with_ctxt ( self . span . ctxt ( ) ) ;
1518- match field. ident {
1519- Some ( ident) => named_idents. push ( ( ident, sp) ) ,
1531+ match field. variant {
1532+ ast:: FieldVariant :: Named ( ast:: NamedField { ident : Some ( ident) , ty : _ } ) => {
1533+ named_idents. push ( ( ident, sp) )
1534+ }
1535+ // FIXME: Handle Unnamed variant
15201536 _ => just_spans. push ( sp) ,
15211537 }
15221538 }
@@ -1576,7 +1592,13 @@ impl<'a> TraitDef<'a> {
15761592 let val = if use_temporaries { val } else { cx. expr_deref ( sp, val) } ;
15771593 let val = cx. expr ( sp, ast:: ExprKind :: Paren ( val) ) ;
15781594
1579- ident_exprs. push ( ( sp, struct_field. ident , val, & struct_field. attrs [ ..] ) ) ;
1595+ match struct_field. variant {
1596+ ast:: FieldVariant :: Named ( ast:: NamedField { ident, ty : _ } ) => {
1597+ ident_exprs. push ( ( sp, ident, val, & struct_field. attrs [ ..] ) )
1598+ }
1599+ // FIXME: Handle Unnamed variant
1600+ _ => { }
1601+ }
15801602 }
15811603
15821604 let subpats = self . create_subpatterns ( cx, paths, mutbl, use_temporaries) ;
0 commit comments