@@ -389,17 +389,8 @@ fn determine_parameters_to_be_inferred<'a, 'tcx>(tcx: &'a ty::ctxt<'tcx>,
389
389
390
390
fn lang_items ( tcx : & ty:: ctxt ) -> Vec < ( ast:: NodeId , Vec < ty:: Variance > ) > {
391
391
let all = vec ! [
392
- ( tcx. lang_items. phantom_data( ) , vec![ ty:: Covariant ] ) ,
393
- ( tcx. lang_items. unsafe_cell_type( ) , vec![ ty:: Invariant ] ) ,
394
-
395
- // Deprecated:
396
- ( tcx. lang_items. covariant_type( ) , vec![ ty:: Covariant ] ) ,
397
- ( tcx. lang_items. contravariant_type( ) , vec![ ty:: Contravariant ] ) ,
398
- ( tcx. lang_items. invariant_type( ) , vec![ ty:: Invariant ] ) ,
399
- ( tcx. lang_items. covariant_lifetime( ) , vec![ ty:: Covariant ] ) ,
400
- ( tcx. lang_items. contravariant_lifetime( ) , vec![ ty:: Contravariant ] ) ,
401
- ( tcx. lang_items. invariant_lifetime( ) , vec![ ty:: Invariant ] ) ,
402
-
392
+ ( tcx. lang_items. phantom_data( ) , vec![ ty:: Variance :: V ] ) ,
393
+ ( tcx. lang_items. unsafe_cell_type( ) , vec![ ty:: Variance :: I ] ) ,
403
394
] ;
404
395
405
396
all. into_iter ( )
@@ -498,13 +489,13 @@ impl<'a, 'tcx> TermsContext<'a, 'tcx> {
498
489
{
499
490
match space {
500
491
SelfSpace | FnSpace => {
501
- ty:: Bivariant
492
+ ty:: Variance :: B
502
493
}
503
494
504
495
TypeSpace => {
505
496
match self . lang_items . iter ( ) . find ( |& & ( n, _) | n == item_id) {
506
497
Some ( & ( _, ref variances) ) => variances[ index] ,
507
- None => ty:: Bivariant
498
+ None => ty:: Variance :: B
508
499
}
509
500
}
510
501
}
@@ -558,8 +549,7 @@ struct ConstraintContext<'a, 'tcx: 'a> {
558
549
terms_cx : TermsContext < ' a , ' tcx > ,
559
550
560
551
// These are pointers to common `ConstantTerm` instances
561
- covariant : VarianceTermPtr < ' a > ,
562
- contravariant : VarianceTermPtr < ' a > ,
552
+ variant : VarianceTermPtr < ' a > ,
563
553
invariant : VarianceTermPtr < ' a > ,
564
554
bivariant : VarianceTermPtr < ' a > ,
565
555
@@ -578,14 +568,12 @@ fn add_constraints_from_crate<'a, 'tcx>(terms_cx: TermsContext<'a, 'tcx>,
578
568
krate : & ast:: Crate )
579
569
-> ConstraintContext < ' a , ' tcx >
580
570
{
581
- let covariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Covariant ) ) ;
582
- let contravariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Contravariant ) ) ;
583
- let invariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Invariant ) ) ;
584
- let bivariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Bivariant ) ) ;
571
+ let variant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Variance :: V ) ) ;
572
+ let invariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Variance :: I ) ) ;
573
+ let bivariant = terms_cx. arena . alloc ( ConstantTerm ( ty:: Variance :: B ) ) ;
585
574
let mut constraint_cx = ConstraintContext {
586
575
terms_cx : terms_cx,
587
- covariant : covariant,
588
- contravariant : contravariant,
576
+ variant : variant,
589
577
invariant : invariant,
590
578
bivariant : bivariant,
591
579
constraints : Vec :: new ( ) ,
@@ -627,7 +615,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for ConstraintContext<'a, 'tcx> {
627
615
& * * ast_variant,
628
616
/*discriminant*/ 0 ) ;
629
617
for arg_ty in & variant. args {
630
- self . add_constraints_from_ty ( & scheme. generics , * arg_ty, self . covariant ) ;
618
+ self . add_constraints_from_ty ( & scheme. generics , * arg_ty, self . variant ) ;
631
619
}
632
620
}
633
621
}
@@ -645,7 +633,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for ConstraintContext<'a, 'tcx> {
645
633
for field_info in & struct_fields {
646
634
assert_eq ! ( field_info. id. krate, ast:: LOCAL_CRATE ) ;
647
635
let field_ty = tcx. node_id_to_type ( field_info. id . node ) ;
648
- self . add_constraints_from_ty ( & scheme. generics , field_ty, self . covariant ) ;
636
+ self . add_constraints_from_ty ( & scheme. generics , field_ty, self . variant ) ;
649
637
}
650
638
}
651
639
@@ -799,12 +787,6 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
799
787
variance : variance } ) ;
800
788
}
801
789
802
- fn contravariant ( & mut self ,
803
- variance : VarianceTermPtr < ' a > )
804
- -> VarianceTermPtr < ' a > {
805
- self . xform ( variance, self . contravariant )
806
- }
807
-
808
790
fn invariant ( & mut self ,
809
791
variance : VarianceTermPtr < ' a > )
810
792
-> VarianceTermPtr < ' a > {
@@ -813,10 +795,9 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
813
795
814
796
fn constant_term ( & self , v : ty:: Variance ) -> VarianceTermPtr < ' a > {
815
797
match v {
816
- ty:: Covariant => self . covariant ,
817
- ty:: Invariant => self . invariant ,
818
- ty:: Contravariant => self . contravariant ,
819
- ty:: Bivariant => self . bivariant ,
798
+ ty:: Variance :: V => self . variant ,
799
+ ty:: Variance :: I => self . invariant ,
800
+ ty:: Variance :: B => self . bivariant ,
820
801
}
821
802
}
822
803
@@ -825,8 +806,8 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
825
806
v2 : VarianceTermPtr < ' a > )
826
807
-> VarianceTermPtr < ' a > {
827
808
match ( * v1, * v2) {
828
- ( _, ConstantTerm ( ty:: Covariant ) ) => {
829
- // Applying a "covariant " transform is always a no-op
809
+ ( _, ConstantTerm ( ty:: Variance :: V ) ) => {
810
+ // Applying a "variant " transform is always a no-op
830
811
v1
831
812
}
832
813
@@ -882,8 +863,7 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
882
863
}
883
864
884
865
ty:: TyRef ( region, ref mt) => {
885
- let contra = self . contravariant ( variance) ;
886
- self . add_constraints_from_region ( generics, * region, contra) ;
866
+ self . add_constraints_from_region ( generics, * region, variance) ;
887
867
self . add_constraints_from_mt ( generics, mt, variance) ;
888
868
}
889
869
@@ -939,9 +919,8 @@ impl<'a, 'tcx> ConstraintContext<'a, 'tcx> {
939
919
data. principal_trait_ref_with_self_ty ( self . tcx ( ) ,
940
920
self . tcx ( ) . types . err ) ;
941
921
942
- // The type `Foo<T+'a>` is contravariant w/r/t `'a`:
943
- let contra = self . contravariant ( variance) ;
944
- self . add_constraints_from_region ( generics, data. bounds . region_bound , contra) ;
922
+ // The type `Foo<T+'a>` is variant w/r/t `'a`:
923
+ self . add_constraints_from_region ( generics, data. bounds . region_bound , variance) ;
945
924
946
925
// Ignore the SelfSpace, it is erased.
947
926
self . add_constraints_from_trait_ref ( generics, poly_trait_ref. 0 , variance) ;
@@ -1240,22 +1219,13 @@ impl Xform for ty::Variance {
1240
1219
// "Variance transformation", Figure 1 of The Paper
1241
1220
match ( self , v) {
1242
1221
// Figure 1, column 1.
1243
- ( ty:: Covariant , ty:: Covariant ) => ty:: Covariant ,
1244
- ( ty:: Covariant , ty:: Contravariant ) => ty:: Contravariant ,
1245
- ( ty:: Covariant , ty:: Invariant ) => ty:: Invariant ,
1246
- ( ty:: Covariant , ty:: Bivariant ) => ty:: Bivariant ,
1247
-
1248
- // Figure 1, column 2.
1249
- ( ty:: Contravariant , ty:: Covariant ) => ty:: Contravariant ,
1250
- ( ty:: Contravariant , ty:: Contravariant ) => ty:: Covariant ,
1251
- ( ty:: Contravariant , ty:: Invariant ) => ty:: Invariant ,
1252
- ( ty:: Contravariant , ty:: Bivariant ) => ty:: Bivariant ,
1222
+ ( ty:: Variance :: V , v) => v,
1253
1223
1254
1224
// Figure 1, column 3.
1255
- ( ty:: Invariant , _) => ty:: Invariant ,
1225
+ ( ty:: Variance :: I , _) => ty:: Variance :: I ,
1256
1226
1257
1227
// Figure 1, column 4.
1258
- ( ty:: Bivariant , _) => ty:: Bivariant ,
1228
+ ( ty:: Variance :: B , _) => ty:: Variance :: B ,
1259
1229
}
1260
1230
}
1261
1231
}
@@ -1265,18 +1235,11 @@ fn glb(v1: ty::Variance, v2: ty::Variance) -> ty::Variance {
1265
1235
// defined in The Paper:
1266
1236
//
1267
1237
// *
1268
- // - +
1269
- // o
1238
+ // v
1239
+ // i
1270
1240
match ( v1, v2) {
1271
- ( ty:: Invariant , _) | ( _, ty:: Invariant ) => ty:: Invariant ,
1272
-
1273
- ( ty:: Covariant , ty:: Contravariant ) => ty:: Invariant ,
1274
- ( ty:: Contravariant , ty:: Covariant ) => ty:: Invariant ,
1275
-
1276
- ( ty:: Covariant , ty:: Covariant ) => ty:: Covariant ,
1277
-
1278
- ( ty:: Contravariant , ty:: Contravariant ) => ty:: Contravariant ,
1279
-
1280
- ( x, ty:: Bivariant ) | ( ty:: Bivariant , x) => x,
1241
+ ( ty:: Variance :: I , _) | ( _, ty:: Variance :: I ) => ty:: Variance :: I ,
1242
+ ( ty:: Variance :: V , _) | ( _, ty:: Variance :: V ) => ty:: Variance :: V ,
1243
+ ( ty:: Variance :: B , _) => ty:: Variance :: B ,
1281
1244
}
1282
1245
}
0 commit comments