@@ -239,21 +239,21 @@ pub(crate) fn sub_vdict_get<'d>(
239
239
) -> Option < & ' d ValueObj > {
240
240
let mut matches = vec ! [ ] ;
241
241
for ( k, v) in dict. iter ( ) {
242
- match ( key, k) {
243
- ( ValueObj :: Type ( idx) , ValueObj :: Type ( kt) )
244
- if ctx. subtype_of ( & idx. typ ( ) . lower_bounded ( ) , & kt. typ ( ) . lower_bounded ( ) ) =>
242
+ if key == k {
243
+ return Some ( v) ;
244
+ }
245
+ match ( ctx. convert_value_into_type ( key. clone ( ) ) , ctx. convert_value_into_type ( k. clone ( ) ) ) {
246
+ ( Ok ( idx) , Ok ( kt) )
247
+ if ctx. subtype_of ( & idx. lower_bounded ( ) , & kt. lower_bounded ( ) ) /*|| dict.len() == 1*/ =>
245
248
{
246
249
matches. push ( ( idx, kt, v) ) ;
247
250
}
248
- ( idx, k) if idx == k => {
249
- return Some ( v) ;
250
- }
251
251
_ => { }
252
252
}
253
253
}
254
254
for ( idx, kt, v) in matches. into_iter ( ) {
255
255
let list = UndoableLinkedList :: new ( ) ;
256
- match ctx. undoable_sub_unify ( idx. typ ( ) , kt . typ ( ) , & ( ) , & list, None ) {
256
+ match ctx. undoable_sub_unify ( & idx, & kt , & ( ) , & list, None ) {
257
257
Ok ( _) => {
258
258
return Some ( v) ;
259
259
}
@@ -272,21 +272,24 @@ pub(crate) fn sub_tpdict_get<'d>(
272
272
) -> Option < & ' d TyParam > {
273
273
let mut matches = vec ! [ ] ;
274
274
for ( k, v) in dict. iter ( ) {
275
- match ( <& Type >:: try_from ( key) , <& Type >:: try_from ( k) ) {
275
+ if key == k {
276
+ return Some ( v) ;
277
+ }
278
+ match (
279
+ ctx. convert_tp_into_type ( key. clone ( ) ) ,
280
+ ctx. convert_tp_into_type ( k. clone ( ) ) ,
281
+ ) {
276
282
( Ok ( idx) , Ok ( kt) )
277
283
if ctx. subtype_of ( & idx. lower_bounded ( ) , & kt. lower_bounded ( ) ) || dict. len ( ) == 1 =>
278
284
{
279
285
matches. push ( ( idx, kt, v) ) ;
280
286
}
281
- ( _, _) if key == k => {
282
- return Some ( v) ;
283
- }
284
287
_ => { }
285
288
}
286
289
}
287
290
for ( idx, kt, v) in matches. into_iter ( ) {
288
291
let list = UndoableLinkedList :: new ( ) ;
289
- match ctx. undoable_sub_unify ( idx, kt, & ( ) , & list, None ) {
292
+ match ctx. undoable_sub_unify ( & idx, & kt, & ( ) , & list, None ) {
290
293
Ok ( _) => {
291
294
return Some ( v) ;
292
295
}
0 commit comments