diff options
| author | Patrick Walton <[email protected]> | 2011-04-15 12:23:00 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-04-15 13:01:31 -0700 |
| commit | 790084ced18ca391c30d8e1045c04cbf2111499e (patch) | |
| tree | c9f845a7d24125514c6181159927cd8811928ef4 /src/comp/middle/trans.rs | |
| parent | Work on destructors, not entirely functional yet (no tydesc integration). (diff) | |
| download | rust-790084ced18ca391c30d8e1045c04cbf2111499e.tar.xz rust-790084ced18ca391c30d8e1045c04cbf2111499e.zip | |
rustc: Make fold_ty no longer use an object; introduce walk_ty
Diffstat (limited to 'src/comp/middle/trans.rs')
| -rw-r--r-- | src/comp/middle/trans.rs | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index c5bb601b..71ad468c 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -1477,24 +1477,21 @@ fn linearize_ty_params(@block_ctxt cx, @ty.t t) -> mutable vec[ValueRef] vals, mutable vec[uint] defs); - state obj folder(@rr r) { - fn fold_simple_ty(@ty.t t) -> @ty.t { - alt(t.struct) { - case (ty.ty_param(?pid)) { - let bool seen = false; - for (uint d in r.defs) { - if (d == pid) { - seen = true; - } - } - if (!seen) { - r.vals += vec(r.cx.fcx.lltydescs.get(pid)); - r.defs += vec(pid); + fn linearizer(@rr r, @ty.t t) { + alt(t.struct) { + case (ty.ty_param(?pid)) { + let bool seen = false; + for (uint d in r.defs) { + if (d == pid) { + seen = true; } } - case (_) { } + if (!seen) { + r.vals += vec(r.cx.fcx.lltydescs.get(pid)); + r.defs += vec(pid); + } } - ret t; + case (_) { } } } @@ -1503,7 +1500,8 @@ fn linearize_ty_params(@block_ctxt cx, @ty.t t) -> mutable vals = param_vals, mutable defs = param_defs); - ty.fold_ty(folder(x), t); + auto f = bind linearizer(x, _); + ty.walk_ty(f, t); ret tup(x.defs, x.vals); } |