@@ -1089,6 +1089,15 @@ mod collect {
1089
1089
1090
1090
// Type unification
1091
1091
mod unify {
1092
+ fn unify_with_region_bindings ( fcx : @fn_ctxt ,
1093
+ rb : @ty:: unify:: region_bindings ,
1094
+ expected : ty:: t ,
1095
+ actual : ty:: t )
1096
+ -> result < ty:: t , ty:: type_err > {
1097
+ let irb = ty:: unify:: in_region_bindings ( fcx. var_bindings , rb) ;
1098
+ ret ty:: unify:: unify ( expected, actual, irb, fcx. ccx . tcx ) ;
1099
+ }
1100
+
1092
1101
fn unify ( fcx : @fn_ctxt , expected : ty:: t , actual : ty:: t ) ->
1093
1102
result < ty:: t , ty:: type_err > {
1094
1103
ret ty:: unify:: unify ( expected, actual,
@@ -1146,17 +1155,32 @@ type ty_param_substs_and_ty = {substs: [ty::t], ty: ty::t};
1146
1155
mod demand {
1147
1156
fn simple ( fcx : @fn_ctxt , sp : span , expected : ty:: t , actual : ty:: t ) ->
1148
1157
ty:: t {
1149
- full ( fcx, sp, expected, actual, [ ] ) . ty
1158
+ full ( fcx, sp, unify:: unify, expected, actual, [ ] ) . ty
1159
+ }
1160
+
1161
+ fn with_region_bindings ( fcx : @fn_ctxt ,
1162
+ sp : span ,
1163
+ rb : @ty:: unify:: region_bindings ,
1164
+ expected : ty:: t ,
1165
+ actual : ty:: t )
1166
+ -> ty:: t {
1167
+ full ( fcx, sp, bind unify:: unify_with_region_bindings ( _, rb, _, _) ,
1168
+ expected, actual, [ ] ) . ty
1150
1169
}
1151
1170
1152
1171
fn with_substs ( fcx : @fn_ctxt , sp : span , expected : ty:: t , actual : ty:: t ,
1153
1172
ty_param_substs_0 : [ ty:: t ] ) -> ty_param_substs_and_ty {
1154
- full ( fcx, sp, expected, actual, ty_param_substs_0)
1173
+ full ( fcx, sp, unify :: unify , expected, actual, ty_param_substs_0)
1155
1174
}
1156
1175
1157
1176
// Requires that the two types unify, and prints an error message if they
1158
1177
// don't. Returns the unified type and the type parameter substitutions.
1159
- fn full ( fcx : @fn_ctxt , sp : span , expected : ty:: t , actual : ty:: t ,
1178
+ fn full ( fcx : @fn_ctxt ,
1179
+ sp : span ,
1180
+ unifier : fn @( @fn_ctxt , ty:: t , ty:: t )
1181
+ -> result < ty:: t , ty:: type_err > ,
1182
+ expected : ty:: t ,
1183
+ actual : ty:: t ,
1160
1184
ty_param_substs_0 : [ ty:: t ] ) ->
1161
1185
ty_param_substs_and_ty {
1162
1186
@@ -1183,7 +1207,7 @@ mod demand {
1183
1207
}
1184
1208
1185
1209
1186
- alt unify :: unify ( fcx, expected, actual) {
1210
+ alt unifier ( fcx, expected, actual) {
1187
1211
result:: ok ( t) { ret mk_result ( fcx, t, ty_param_subst_var_ids) ; }
1188
1212
result:: err ( err) {
1189
1213
let e_err = resolve_type_vars_if_possible ( fcx, expected) ;
0 commit comments