@@ -1047,6 +1047,7 @@ fn type_has_pointers(&ctxt cx, &t ty) -> bool {
1047
1047
if ( type_has_pointers( cx, tup_ty) ) { result = true; }
1048
1048
}
1049
1049
}
1050
+ case ( ty_res( ?did, ?inner) ) { result = type_has_pointers( cx, inner) ; }
1050
1051
case ( _) { result = true; }
1051
1052
}
1052
1053
@@ -1517,8 +1518,7 @@ fn equal_type_structures(&sty a, &sty b) -> bool {
1517
1518
auto len = vec:: len[ mt] ( mts_a) ;
1518
1519
if ( len != vec:: len[ mt] ( mts_b) ) { ret false; }
1519
1520
auto i = 0 u;
1520
- while ( i < len) {
1521
- if ( !equal_mt( mts_a. ( i) , mts_b. ( i) ) ) { ret false; }
1521
+ while ( i < len) { if ( !equal_mt( mts_a. ( i) , mts_b. ( i) ) ) { ret false; }
1522
1522
i += 1 u;
1523
1523
}
1524
1524
ret true;
@@ -1587,6 +1587,14 @@ fn equal_type_structures(&sty a, &sty b) -> bool {
1587
1587
case ( _) { ret false; }
1588
1588
}
1589
1589
}
1590
+ case ( ty_res( ?id_a, ?inner_a) ) {
1591
+ alt ( b) {
1592
+ case ( ty_res( ?id_b, ?inner_b) ) {
1593
+ ret equal_def( id_a, id_b) && ret eq_ty( inner_a, inner_b) ;
1594
+ }
1595
+ case ( _) { ret false; }
1596
+ }
1597
+ }
1590
1598
case ( ty_var( ?v_a) ) {
1591
1599
alt ( b) {
1592
1600
case ( ty_var( ?v_b) ) { ret v_a == v_b; }
@@ -2375,6 +2383,24 @@ mod unify {
2375
2383
case ( _) { ret ures_err( terr_mismatch) ; }
2376
2384
}
2377
2385
}
2386
+ case ( ty:: ty_res( ?ex_id, ?ex_inner) ) {
2387
+ alt ( struct ( cx. tcx, actual) ) {
2388
+ case ( ty:: ty_res( ?act_id, ?act_inner) ) {
2389
+ if ( ex_id. _0 != act_id. _0 || ex_id. _1 != act_id. _1) {
2390
+ ret ures_err( terr_mismatch) ;
2391
+ }
2392
+ auto result = unify_step( cx, ex_inner, act_inner) ;
2393
+ alt ( result) {
2394
+ case ( ures_ok( ?res_inner) ) {
2395
+ ret ures_ok( mk_res( cx. tcx, act_id,
2396
+ res_inner) ) ;
2397
+ }
2398
+ case ( _) { ret result; }
2399
+ }
2400
+ }
2401
+ case ( _) { ret ures_err( terr_mismatch) ; }
2402
+ }
2403
+ }
2378
2404
case ( ty:: ty_chan( ?expected_sub) ) {
2379
2405
alt ( struct ( cx. tcx, actual) ) {
2380
2406
case ( ty:: ty_chan( ?actual_sub) ) {
0 commit comments