@@ -195,9 +195,6 @@ pub struct TraitDef<'a> {
195
195
/// other than the current trait
196
196
pub additional_bounds : Vec < Ty > ,
197
197
198
- /// Any extra lifetimes and/or bounds, e.g., `D: serialize::Decoder`
199
- pub generics : Bounds ,
200
-
201
198
/// Can this trait be derived for unions?
202
199
pub supports_unions : bool ,
203
200
@@ -583,19 +580,21 @@ impl<'a> TraitDef<'a> {
583
580
} )
584
581
} ) ;
585
582
586
- let Generics { mut params, mut where_clause, .. } =
587
- self . generics . to_generics ( cx, self . span , type_ident, generics) ;
583
+ let mut where_clause = ast:: WhereClause :: default ( ) ;
588
584
where_clause. span = generics. where_clause . span ;
589
585
let ctxt = self . span . ctxt ( ) ;
590
586
let span = generics. span . with_ctxt ( ctxt) ;
591
587
592
588
// Create the generic parameters
593
- params. extend ( generics. params . iter ( ) . map ( |param| match & param. kind {
594
- GenericParamKind :: Lifetime { .. } => param. clone ( ) ,
595
- GenericParamKind :: Type { .. } => {
596
- // I don't think this can be moved out of the loop, since
597
- // a GenericBound requires an ast id
598
- let bounds: Vec < _ > =
589
+ let params: Vec < _ > = generics
590
+ . params
591
+ . iter ( )
592
+ . map ( |param| match & param. kind {
593
+ GenericParamKind :: Lifetime { .. } => param. clone ( ) ,
594
+ GenericParamKind :: Type { .. } => {
595
+ // I don't think this can be moved out of the loop, since
596
+ // a GenericBound requires an ast id
597
+ let bounds: Vec < _ > =
599
598
// extra restrictions on the generics parameters to the
600
599
// type being derived upon
601
600
self . additional_bounds . iter ( ) . map ( |p| {
@@ -608,21 +607,22 @@ impl<'a> TraitDef<'a> {
608
607
param. bounds . iter ( ) . cloned ( )
609
608
) . collect ( ) ;
610
609
611
- cx. typaram ( param. ident . span . with_ctxt ( ctxt) , param. ident , bounds, None )
612
- }
613
- GenericParamKind :: Const { ty, kw_span, .. } => {
614
- let const_nodefault_kind = GenericParamKind :: Const {
615
- ty : ty. clone ( ) ,
616
- kw_span : kw_span. with_ctxt ( ctxt) ,
617
-
618
- // We can't have default values inside impl block
619
- default : None ,
620
- } ;
621
- let mut param_clone = param. clone ( ) ;
622
- param_clone. kind = const_nodefault_kind;
623
- param_clone
624
- }
625
- } ) ) ;
610
+ cx. typaram ( param. ident . span . with_ctxt ( ctxt) , param. ident , bounds, None )
611
+ }
612
+ GenericParamKind :: Const { ty, kw_span, .. } => {
613
+ let const_nodefault_kind = GenericParamKind :: Const {
614
+ ty : ty. clone ( ) ,
615
+ kw_span : kw_span. with_ctxt ( ctxt) ,
616
+
617
+ // We can't have default values inside impl block
618
+ default : None ,
619
+ } ;
620
+ let mut param_clone = param. clone ( ) ;
621
+ param_clone. kind = const_nodefault_kind;
622
+ param_clone
623
+ }
624
+ } )
625
+ . collect ( ) ;
626
626
627
627
// and similarly for where clauses
628
628
where_clause. predicates . extend ( generics. where_clause . predicates . iter ( ) . map ( |clause| {
@@ -1062,18 +1062,15 @@ impl<'a> MethodDef<'a> {
1062
1062
trait_. create_struct_field_access_fields ( cx, selflike_args, struct_def, true ) ;
1063
1063
mk_body ( cx, selflike_fields)
1064
1064
} else {
1065
- // Neither packed nor copy. Need to use ref patterns.
1065
+ // Packed and not copy. Need to use ref patterns.
1066
1066
let prefixes: Vec < _ > =
1067
1067
( 0 ..selflike_args. len ( ) ) . map ( |i| format ! ( "__self_{}" , i) ) . collect ( ) ;
1068
- let addr_of = always_copy;
1069
- let selflike_fields =
1070
- trait_. create_struct_pattern_fields ( cx, struct_def, & prefixes, addr_of) ;
1068
+ let selflike_fields = trait_. create_struct_pattern_fields ( cx, struct_def, & prefixes) ;
1071
1069
let mut body = mk_body ( cx, selflike_fields) ;
1072
1070
1073
1071
let struct_path = cx. path ( span, vec ! [ Ident :: new( kw:: SelfUpper , type_ident. span) ] ) ;
1074
- let by_ref = ByRef :: from ( is_packed && !always_copy) ;
1075
1072
let patterns =
1076
- trait_. create_struct_patterns ( cx, struct_path, struct_def, & prefixes, by_ref ) ;
1073
+ trait_. create_struct_patterns ( cx, struct_path, struct_def, & prefixes, ByRef :: Yes ) ;
1077
1074
1078
1075
// Do the let-destructuring.
1079
1076
let mut stmts: Vec < _ > = iter:: zip ( selflike_args, patterns)
@@ -1254,9 +1251,7 @@ impl<'a> MethodDef<'a> {
1254
1251
// A single arm has form (&VariantK, &VariantK, ...) => BodyK
1255
1252
// (see "Final wrinkle" note below for why.)
1256
1253
1257
- let addr_of = false ; // because enums can't be repr(packed)
1258
- let fields =
1259
- trait_. create_struct_pattern_fields ( cx, & variant. data , & prefixes, addr_of) ;
1254
+ let fields = trait_. create_struct_pattern_fields ( cx, & variant. data , & prefixes) ;
1260
1255
1261
1256
let sp = variant. span . with_ctxt ( trait_. span . ctxt ( ) ) ;
1262
1257
let variant_path = cx. path ( sp, vec ! [ type_ident, variant. ident] ) ;
@@ -1519,15 +1514,13 @@ impl<'a> TraitDef<'a> {
1519
1514
cx : & mut ExtCtxt < ' _ > ,
1520
1515
struct_def : & ' a VariantData ,
1521
1516
prefixes : & [ String ] ,
1522
- addr_of : bool ,
1523
1517
) -> Vec < FieldInfo > {
1524
1518
self . create_fields ( struct_def, |i, _struct_field, sp| {
1525
1519
prefixes
1526
1520
. iter ( )
1527
1521
. map ( |prefix| {
1528
1522
let ident = self . mk_pattern_ident ( prefix, i) ;
1529
- let expr = cx. expr_path ( cx. path_ident ( sp, ident) ) ;
1530
- if addr_of { cx. expr_addr_of ( sp, expr) } else { expr }
1523
+ cx. expr_path ( cx. path_ident ( sp, ident) )
1531
1524
} )
1532
1525
. collect ( )
1533
1526
} )
0 commit comments