@@ -239,21 +239,21 @@ pub(crate) fn sub_vdict_get<'d>(
239239) -> Option < & ' d ValueObj > {
240240 let mut matches = vec ! [ ] ;
241241 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*/ =>
245248 {
246249 matches. push ( ( idx, kt, v) ) ;
247250 }
248- ( idx, k) if idx == k => {
249- return Some ( v) ;
250- }
251251 _ => { }
252252 }
253253 }
254254 for ( idx, kt, v) in matches. into_iter ( ) {
255255 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 ) {
257257 Ok ( _) => {
258258 return Some ( v) ;
259259 }
@@ -272,21 +272,24 @@ pub(crate) fn sub_tpdict_get<'d>(
272272) -> Option < & ' d TyParam > {
273273 let mut matches = vec ! [ ] ;
274274 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+ ) {
276282 ( Ok ( idx) , Ok ( kt) )
277283 if ctx. subtype_of ( & idx. lower_bounded ( ) , & kt. lower_bounded ( ) ) || dict. len ( ) == 1 =>
278284 {
279285 matches. push ( ( idx, kt, v) ) ;
280286 }
281- ( _, _) if key == k => {
282- return Some ( v) ;
283- }
284287 _ => { }
285288 }
286289 }
287290 for ( idx, kt, v) in matches. into_iter ( ) {
288291 let list = UndoableLinkedList :: new ( ) ;
289- match ctx. undoable_sub_unify ( idx, kt, & ( ) , & list, None ) {
292+ match ctx. undoable_sub_unify ( & idx, & kt, & ( ) , & list, None ) {
290293 Ok ( _) => {
291294 return Some ( v) ;
292295 }
0 commit comments