@@ -49,7 +49,6 @@ pub struct At<'a, 'tcx> {
4949
5050pub  struct  Trace < ' a ,  ' tcx >  { 
5151    at :  At < ' a ,  ' tcx > , 
52-     a_is_expected :  bool , 
5352    trace :  TypeTrace < ' tcx > , 
5453} 
5554
@@ -105,23 +104,6 @@ pub trait ToTrace<'tcx>: Relate<'tcx> + Copy {
105104} 
106105
107106impl < ' a ,  ' tcx >  At < ' a ,  ' tcx >  { 
108-     /// Makes `a <: b`, where `a` may or may not be expected. 
109- /// 
110- /// See [`At::trace_exp`] and [`Trace::sub`] for a version of 
111- /// this method that only requires `T: Relate<'tcx>` 
112- pub  fn  sub_exp < T > ( 
113-         self , 
114-         define_opaque_types :  DefineOpaqueTypes , 
115-         a_is_expected :  bool , 
116-         a :  T , 
117-         b :  T , 
118-     )  -> InferResult < ' tcx ,  ( ) > 
119-     where 
120-         T :  ToTrace < ' tcx > , 
121-     { 
122-         self . trace_exp ( a_is_expected,  a,  b) . sub ( define_opaque_types,  a,  b) 
123-     } 
124- 
125107    /// Makes `actual <: expected`. For example, if type-checking a 
126108/// call like `foo(x)`, where `foo: fn(i32)`, you might have 
127109/// `sup(i32, x)`, since the "expected" type is the type that 
@@ -138,7 +120,7 @@ impl<'a, 'tcx> At<'a, 'tcx> {
138120    where 
139121        T :  ToTrace < ' tcx > , 
140122    { 
141-         self . sub_exp ( define_opaque_types ,   false ,   actual,  expected) 
123+         self . trace ( expected ,   actual) . sup ( define_opaque_types ,  expected,  actual ) 
142124    } 
143125
144126    /// Makes `expected <: actual`. 
@@ -154,24 +136,7 @@ impl<'a, 'tcx> At<'a, 'tcx> {
154136    where 
155137        T :  ToTrace < ' tcx > , 
156138    { 
157-         self . sub_exp ( define_opaque_types,  true ,  expected,  actual) 
158-     } 
159- 
160-     /// Makes `expected <: actual`. 
161- /// 
162- /// See [`At::trace_exp`] and [`Trace::eq`] for a version of 
163- /// this method that only requires `T: Relate<'tcx>` 
164- pub  fn  eq_exp < T > ( 
165-         self , 
166-         define_opaque_types :  DefineOpaqueTypes , 
167-         a_is_expected :  bool , 
168-         a :  T , 
169-         b :  T , 
170-     )  -> InferResult < ' tcx ,  ( ) > 
171-     where 
172-         T :  ToTrace < ' tcx > , 
173-     { 
174-         self . trace_exp ( a_is_expected,  a,  b) . eq ( define_opaque_types,  a,  b) 
139+         self . trace ( expected,  actual) . sub ( define_opaque_types,  expected,  actual) 
175140    } 
176141
177142    /// Makes `expected <: actual`. 
@@ -260,48 +225,50 @@ impl<'a, 'tcx> At<'a, 'tcx> {
260225    where 
261226        T :  ToTrace < ' tcx > , 
262227    { 
263-         self . trace_exp ( true ,  expected,  actual) 
228+         let  trace = ToTrace :: to_trace ( self . cause ,  true ,  expected,  actual) ; 
229+         Trace  {  at :  self ,  trace } 
264230    } 
231+ } 
265232
266-      /// Like `trace`, but the expected value is determined by the 
267- /// boolean argument (if true, then the first argument `a` is the  
268- /// "expected" value). 
269- pub  fn  trace_exp < T > ( self ,  a_is_expected :   bool ,  a :  T ,  b :  T )  -> Trace < ' a ,   ' tcx > 
233+ impl < ' a ,   ' tcx >   Trace < ' a ,   ' tcx >   { 
234+     /// Makes `a <: b`.  
235+ # [ instrument ( skip ( self ) ,  level =  "debug" ) ] 
236+     pub  fn  sub < T > ( self ,  define_opaque_types :   DefineOpaqueTypes ,  a :  T ,  b :  T )  -> InferResult < ' tcx ,   ( ) > 
270237    where 
271-         T :  ToTrace < ' tcx > , 
238+         T :  Relate < ' tcx > , 
272239    { 
273-         let  trace = ToTrace :: to_trace ( self . cause ,  a_is_expected,  a,  b) ; 
274-         Trace  {  at :  self ,  trace,  a_is_expected } 
240+         let  Trace  {  at,  trace }  = self ; 
241+         let  mut  fields = at. infcx . combine_fields ( trace,  at. param_env ,  define_opaque_types) ; 
242+         fields
243+             . sub ( ) 
244+             . relate ( a,  b) 
245+             . map ( move  |_| InferOk  {  value :  ( ) ,  obligations :  fields. obligations  } ) 
275246    } 
276- } 
277247
278- impl < ' a ,  ' tcx >  Trace < ' a ,  ' tcx >  { 
279-     /// Makes `a <: b` where `a` may or may not be expected (if 
280- /// `a_is_expected` is true, then `a` is expected). 
248+     /// Makes `a :> b`. 
281249#[ instrument( skip( self ) ,  level = "debug" ) ]  
282-     pub  fn  sub < T > ( self ,  define_opaque_types :  DefineOpaqueTypes ,  a :  T ,  b :  T )  -> InferResult < ' tcx ,  ( ) > 
250+     pub  fn  sup < T > ( self ,  define_opaque_types :  DefineOpaqueTypes ,  a :  T ,  b :  T )  -> InferResult < ' tcx ,  ( ) > 
283251    where 
284252        T :  Relate < ' tcx > , 
285253    { 
286-         let  Trace  {  at,  trace,  a_is_expected  }  = self ; 
254+         let  Trace  {  at,  trace }  = self ; 
287255        let  mut  fields = at. infcx . combine_fields ( trace,  at. param_env ,  define_opaque_types) ; 
288256        fields
289-             . sub ( a_is_expected ) 
257+             . sup ( ) 
290258            . relate ( a,  b) 
291259            . map ( move  |_| InferOk  {  value :  ( ) ,  obligations :  fields. obligations  } ) 
292260    } 
293261
294-     /// Makes `a == b`; the expectation is set by the call to 
295- /// `trace()`. 
262+     /// Makes `a == b`. 
296263#[ instrument( skip( self ) ,  level = "debug" ) ]  
297264    pub  fn  eq < T > ( self ,  define_opaque_types :  DefineOpaqueTypes ,  a :  T ,  b :  T )  -> InferResult < ' tcx ,  ( ) > 
298265    where 
299266        T :  Relate < ' tcx > , 
300267    { 
301-         let  Trace  {  at,  trace,  a_is_expected  }  = self ; 
268+         let  Trace  {  at,  trace }  = self ; 
302269        let  mut  fields = at. infcx . combine_fields ( trace,  at. param_env ,  define_opaque_types) ; 
303270        fields
304-             . equate ( StructurallyRelateAliases :: No ,  a_is_expected ) 
271+             . equate ( StructurallyRelateAliases :: No ) 
305272            . relate ( a,  b) 
306273            . map ( move  |_| InferOk  {  value :  ( ) ,  obligations :  fields. obligations  } ) 
307274    } 
@@ -313,11 +280,11 @@ impl<'a, 'tcx> Trace<'a, 'tcx> {
313280    where 
314281        T :  Relate < ' tcx > , 
315282    { 
316-         let  Trace  {  at,  trace,  a_is_expected  }  = self ; 
283+         let  Trace  {  at,  trace }  = self ; 
317284        debug_assert ! ( at. infcx. next_trait_solver( ) ) ; 
318285        let  mut  fields = at. infcx . combine_fields ( trace,  at. param_env ,  DefineOpaqueTypes :: No ) ; 
319286        fields
320-             . equate ( StructurallyRelateAliases :: Yes ,  a_is_expected ) 
287+             . equate ( StructurallyRelateAliases :: Yes ) 
321288            . relate ( a,  b) 
322289            . map ( move  |_| InferOk  {  value :  ( ) ,  obligations :  fields. obligations  } ) 
323290    } 
@@ -327,10 +294,10 @@ impl<'a, 'tcx> Trace<'a, 'tcx> {
327294    where 
328295        T :  Relate < ' tcx > , 
329296    { 
330-         let  Trace  {  at,  trace,  a_is_expected  }  = self ; 
297+         let  Trace  {  at,  trace }  = self ; 
331298        let  mut  fields = at. infcx . combine_fields ( trace,  at. param_env ,  define_opaque_types) ; 
332299        fields
333-             . lub ( a_is_expected ) 
300+             . lub ( ) 
334301            . relate ( a,  b) 
335302            . map ( move  |t| InferOk  {  value :  t,  obligations :  fields. obligations  } ) 
336303    } 
@@ -340,10 +307,10 @@ impl<'a, 'tcx> Trace<'a, 'tcx> {
340307    where 
341308        T :  Relate < ' tcx > , 
342309    { 
343-         let  Trace  {  at,  trace,  a_is_expected  }  = self ; 
310+         let  Trace  {  at,  trace }  = self ; 
344311        let  mut  fields = at. infcx . combine_fields ( trace,  at. param_env ,  define_opaque_types) ; 
345312        fields
346-             . glb ( a_is_expected ) 
313+             . glb ( ) 
347314            . relate ( a,  b) 
348315            . map ( move  |t| InferOk  {  value :  t,  obligations :  fields. obligations  } ) 
349316    } 
0 commit comments