@@ -720,8 +720,15 @@ impl<'a> TraitDef<'a> {
720
720
from_scratch : bool ,
721
721
use_temporaries : bool ,
722
722
) -> 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 ( ) ;
725
732
726
733
let methods = self
727
734
. methods
@@ -769,7 +776,13 @@ impl<'a> TraitDef<'a> {
769
776
let mut field_tys = Vec :: new ( ) ;
770
777
771
778
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
+ ) )
773
786
}
774
787
775
788
let methods = self
@@ -1515,8 +1528,11 @@ impl<'a> TraitDef<'a> {
1515
1528
let mut just_spans = Vec :: new ( ) ;
1516
1529
for field in struct_def. fields ( ) {
1517
1530
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
1520
1536
_ => just_spans. push ( sp) ,
1521
1537
}
1522
1538
}
@@ -1576,7 +1592,13 @@ impl<'a> TraitDef<'a> {
1576
1592
let val = if use_temporaries { val } else { cx. expr_deref ( sp, val) } ;
1577
1593
let val = cx. expr ( sp, ast:: ExprKind :: Paren ( val) ) ;
1578
1594
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
+ }
1580
1602
}
1581
1603
1582
1604
let subpats = self . create_subpatterns ( cx, paths, mutbl, use_temporaries) ;
0 commit comments