@@ -505,6 +505,7 @@ fn walk_ty(&ctxt cx, ty_walk walker, t ty) {
505
505
case ( ty_box ( ?tm) ) { walk_ty ( cx, walker, tm. ty ) ; }
506
506
case ( ty_vec ( ?tm) ) { walk_ty ( cx, walker, tm. ty ) ; }
507
507
case ( ty_ivec ( ?tm) ) { walk_ty ( cx, walker, tm. ty ) ; }
508
+ case ( ty_ptr ( ?tm) ) { walk_ty ( cx, walker, tm. ty ) ; }
508
509
case ( ty_port ( ?subty) ) { walk_ty ( cx, walker, subty) ; }
509
510
case ( ty_chan ( ?subty) ) { walk_ty ( cx, walker, subty) ; }
510
511
case ( ty_tag ( ?tid, ?subtys) ) {
@@ -2088,6 +2089,27 @@ mod unify {
2088
2089
case ( _) { ret ures_err( terr_mismatch) ; }
2089
2090
}
2090
2091
}
2092
+ case ( ty:: ty_ptr( ?expected_mt) ) {
2093
+ alt ( struct ( cx. tcx, actual) ) {
2094
+ case ( ty:: ty_ptr( ?actual_mt) ) {
2095
+ auto mut ;
2096
+ alt ( unify_mut( expected_mt. mut , actual_mt. mut ) ) {
2097
+ case ( none) { ret ures_err( terr_vec_mutability) ; }
2098
+ case ( some( ?m) ) { mut = m; }
2099
+ }
2100
+ auto result =
2101
+ unify_step( cx, expected_mt. ty, actual_mt. ty) ;
2102
+ alt ( result) {
2103
+ case ( ures_ok( ?result_sub) ) {
2104
+ auto mt = rec( ty=result_sub, mut =mut ) ;
2105
+ ret ures_ok( mk_ptr( cx. tcx, mt) ) ;
2106
+ }
2107
+ case ( _) { ret result; }
2108
+ }
2109
+ }
2110
+ case ( _) { ret ures_err( terr_mismatch) ; }
2111
+ }
2112
+ }
2091
2113
case ( ty:: ty_port( ?expected_sub) ) {
2092
2114
alt ( struct ( cx. tcx, actual) ) {
2093
2115
case ( ty:: ty_port( ?actual_sub) ) {
0 commit comments