@@ -125,8 +125,9 @@ impl<'a, 'tcx> Canonicalizer<'a, 'tcx> {
125
125
// - var_infos: [E0, U1, E1, U1, E1, E6, U6], curr_compressed_uv: 1, next_orig_uv: 6
126
126
// - var_infos: [E0, U1, E1, U1, E1, E2, U2], curr_compressed_uv: 2, next_orig_uv: -
127
127
//
128
- // This algorithm runs in `O(n²)` where `n` is the number of different universe
129
- // indices in the input. This should be fine as `n` is expected to be small.
128
+ // This algorithm runs in `O(nm)` where `n` is the number of different universe
129
+ // indices in the input and `m` is the number of canonical variables.
130
+ // This should be fine as both `n` and `m` are expected to be small.
130
131
let mut curr_compressed_uv = ty:: UniverseIndex :: ROOT ;
131
132
let mut existential_in_new_uv = false ;
132
133
let mut next_orig_uv = Some ( ty:: UniverseIndex :: ROOT ) ;
@@ -245,18 +246,14 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'_, 'tcx> {
245
246
ty:: ReError ( _) => return r,
246
247
} ;
247
248
248
- let existing_bound_var = match self . canonicalize_mode {
249
- CanonicalizeMode :: Input => None ,
250
- CanonicalizeMode :: Response { .. } => {
251
- self . variables . iter ( ) . position ( |& v| v == r. into ( ) ) . map ( ty:: BoundVar :: from)
252
- }
253
- } ;
254
- let var = existing_bound_var. unwrap_or_else ( || {
255
- let var = ty:: BoundVar :: from ( self . variables . len ( ) ) ;
256
- self . variables . push ( r. into ( ) ) ;
257
- self . primitive_var_infos . push ( CanonicalVarInfo { kind } ) ;
258
- var
259
- } ) ;
249
+ let var = ty:: BoundVar :: from (
250
+ self . variables . iter ( ) . position ( |& v| v == r. into ( ) ) . unwrap_or_else ( || {
251
+ let var = self . variables . len ( ) ;
252
+ self . variables . push ( r. into ( ) ) ;
253
+ self . primitive_var_infos . push ( CanonicalVarInfo { kind } ) ;
254
+ var
255
+ } ) ,
256
+ ) ;
260
257
let br = ty:: BoundRegion { var, kind : BrAnon ( None ) } ;
261
258
self . interner ( ) . mk_re_late_bound ( self . binder_index , br)
262
259
}
0 commit comments