Created
May 29, 2012 23:00
-
-
Save eholk/2831323 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/src/librustsyntax/fold.rs b/src/librustsyntax/fold.rs | |
| index 9a6afd8..12fd705 100644 | |
| --- a/src/librustsyntax/fold.rs | |
| +++ b/src/librustsyntax/fold.rs | |
| @@ -427,8 +427,11 @@ fn noop_fold_expr(e: expr_, fld: ast_fold) -> expr_ { | |
| expr_alt(fld.fold_expr(expr), vec::map(arms, fld.fold_arm), mode) | |
| } | |
| expr_fn(proto, decl, body, captures) { | |
| - expr_fn(proto, fold_fn_decl(decl, fld), | |
| - fld.fold_block(body), captures) | |
| + expr_fn(proto, fold_fn_decl(decl, fld), | |
| + fld.fold_block(body), | |
| + @((*captures).map({|cap_item| | |
| + @({id: fld.new_id((*cap_item).id) | |
| + with *cap_item})}))) | |
| } | |
| expr_fn_block(decl, body, captures) { | |
| expr_fn_block(fold_fn_decl(decl, fld), fld.fold_block(body), | |
| diff --git a/src/rustc/middle/astencode.rs b/src/rustc/middle/astencode.rs | |
| index 5a43611..4d41244 100644 | |
| --- a/src/rustc/middle/astencode.rs | |
| +++ b/src/rustc/middle/astencode.rs | |
| @@ -252,7 +252,11 @@ fn visit_ids(item: ast::inlined_item, vfn: fn@(ast::node_id)) { | |
| vfn(m.self_id); | |
| vec::iter(tps) {|tp| vfn(tp.id)} | |
| } | |
| - visit::fk_anon(*) | visit::fk_fn_block(*) { | |
| + visit::fk_anon(_, capture_clause) | |
| + | visit::fk_fn_block(capture_clause) { | |
| + for vec::each(*capture_clause) {|clause| | |
| + vfn(clause.id); | |
| + } | |
| } | |
| } | |
| diff --git a/src/rustc/middle/capture.rs b/src/rustc/middle/capture.rs | |
| index d6edd2b..64dafc0 100644 | |
| --- a/src/rustc/middle/capture.rs | |
| +++ b/src/rustc/middle/capture.rs | |
| @@ -67,6 +67,9 @@ fn compute_capture_vars(tcx: ty::ctxt, | |
| // first add entries for anything explicitly named in the cap clause | |
| for (*cap_clause).each { |cap_item| | |
| + #debug("Doing capture var: %s (%?)", | |
| + cap_item.name, cap_item.id); | |
| + | |
| let cap_def = tcx.def_map.get(cap_item.id); | |
| let cap_def_id = ast_util::def_id_of_def(cap_def).node; | |
| if cap_item.is_move { | |
| diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs | |
| index 45f43f5..0779179 100644 | |
| --- a/src/test/bench/graph500-bfs.rs | |
| +++ b/src/test/bench/graph500-bfs.rs | |
| @@ -1,5 +1,3 @@ | |
| -// xfail-test :( | |
| - | |
| /** | |
| An implementation of the Graph500 Bread First Search problem in Rust. | |
| @@ -267,8 +265,7 @@ fn pbfs(graph: graph, key: node_id) -> bfs_result { | |
| } | |
| } | |
| - let graph_arc = arc::shared_arc(copy graph); | |
| - let graph = *graph_arc; | |
| + let (res, graph) = arc::shared_arc(copy graph); | |
| let mut i = 0u; | |
| while par::any(colors, is_gray) { | |
| @@ -277,8 +274,7 @@ fn pbfs(graph: graph, key: node_id) -> bfs_result { | |
| i += 1u; | |
| let old_len = colors.len(); | |
| - let colors_arc = arc::shared_arc(copy colors); | |
| - let color = *colors_arc; | |
| + let (res, color) = arc::shared_arc(copy colors); | |
| colors = par::mapi(colors) {|i, c| | |
| let c : color = c; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment