diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-03-26 12:53:34 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-03-29 19:41:09 -0700 |
| commit | 76d0a13ae5a82aaaa1eff409d873cca29bdcb88e (patch) | |
| tree | 567ebc1c0f4717b59b16e015f6cf05d6720252c5 /src/rustc | |
| parent | f452973a7fa8dcd3c7846c3eb333f968748443f6 (diff) | |
resolve type variables with no constraints to bot
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/infer.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/rustc/middle/infer.rs b/src/rustc/middle/infer.rs index efe01f2cbd8..f0e2bcf40fe 100644 --- a/src/rustc/middle/infer.rs +++ b/src/rustc/middle/infer.rs @@ -707,7 +707,7 @@ impl resolve_methods for infer_ctxt { fn resolve_var<T:copy to_str>( vb: vals_and_bindings<T>, bot_guard: fn(T)->bool, - vid: int) -> fres<T> { + vid: int, unbound: fn() -> fres<T>) -> fres<T> { let {root:_, bounds} = self.get(vb, vid as uint); @@ -724,16 +724,24 @@ impl resolve_methods for infer_ctxt { { ub:_, lb:some(t) } if !bot_guard(t) { ok(t) } { ub:some(t), lb:_ } { ok(t) } { ub:_, lb:some(t) } { ok(t) } - { ub:none, lb:none } { self.rerr(vid) } + { ub:none, lb:none } { unbound() } } } fn resolve_ty_var(vid: int) -> fres<ty::t> { - ret self.resolve_var(self.vb, {|t| type_is_bot(t)}, vid); + ret self.resolve_var( + self.vb, + {|t| type_is_bot(t) }, + vid, + {|| ok(ty::mk_bot(self.tcx)) }); } fn resolve_region_var(rid: int) -> fres<ty::region> { - ret self.resolve_var(self.rb, {|_t| false}, rid); + ret self.resolve_var( + self.rb, + {|_t| false }, + rid, + {|| err(rid) }); } fn resolve_ty(typ: ty::t) -> fres<ty::t> { |
