aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/trans.rs
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-04-15 12:23:00 -0700
committerPatrick Walton <[email protected]>2011-04-15 13:01:31 -0700
commit790084ced18ca391c30d8e1045c04cbf2111499e (patch)
treec9f845a7d24125514c6181159927cd8811928ef4 /src/comp/middle/trans.rs
parentWork on destructors, not entirely functional yet (no tydesc integration). (diff)
downloadrust-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.rs30
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);
}