Skip to content

Commit 818abf0

Browse files
committed
---
yaml --- r: 3399 b: refs/heads/master c: e2cb97a h: refs/heads/master i: 3397: a6dbc0c 3395: d7ea552 3391: f256c57 v: v3
1 parent a2b7a92 commit 818abf0

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: d730bb730a9bda5e2ed50bed1993352c497f7c94
2+
refs/heads/master: e2cb97a2fcf542192ff9776dd6a6e2b3c7bc64b2

trunk/src/comp/middle/ty.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,7 @@ fn type_has_pointers(&ctxt cx, &t ty) -> bool {
10471047
if (type_has_pointers(cx, tup_ty)) { result = true; }
10481048
}
10491049
}
1050+
case (ty_res(?did, ?inner)) { result = type_has_pointers(cx, inner); }
10501051
case (_) { result = true; }
10511052
}
10521053

@@ -1517,8 +1518,7 @@ fn equal_type_structures(&sty a, &sty b) -> bool {
15171518
auto len = vec::len[mt](mts_a);
15181519
if (len != vec::len[mt](mts_b)) { ret false; }
15191520
auto i = 0u;
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; }
15221522
i += 1u;
15231523
}
15241524
ret true;
@@ -1587,6 +1587,14 @@ fn equal_type_structures(&sty a, &sty b) -> bool {
15871587
case (_) { ret false; }
15881588
}
15891589
}
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+
}
15901598
case (ty_var(?v_a)) {
15911599
alt (b) {
15921600
case (ty_var(?v_b)) { ret v_a == v_b; }
@@ -2375,6 +2383,24 @@ mod unify {
23752383
case (_) { ret ures_err(terr_mismatch); }
23762384
}
23772385
}
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+
}
23782404
case (ty::ty_chan(?expected_sub)) {
23792405
alt (struct(cx.tcx, actual)) {
23802406
case (ty::ty_chan(?actual_sub)) {

0 commit comments

Comments
 (0)