Finalize moves-based-on-type implementation.
Changes: - Refactor move mode computation - Removes move mode arguments, unary move, capture clauses (though they still parse for backwards compatibility) - Simplify how moves are handled in trans - Fix a number of illegal copies that cropped up - Workaround for bug involving def-ids in params (see details below) Future work (I'll open bugs for these...): - Improve error messages for moves that are due to bindings - Add support for moving owned content like a.b.c to borrow check, test in trans (but I think it'll "just work") - Proper fix for def-ids in params Def ids in params: Move captures into a map instead of recomputing. This is a workaround for a larger bug having to do with the def-ids associated with ty_params, which are not always properly preserved when inlining. I am not sure of my preferred fix for the larger bug yet. This current fix removes the only code in trans that I know of which relies on ty_param def-ids, but feels fragile.
This commit is contained in:
@@ -256,7 +256,7 @@ pub fn ident_to_path(s: span, +i: ident) -> @path {
|
||||
|
||||
pub fn ident_to_pat(id: node_id, s: span, +i: ident) -> @pat {
|
||||
@ast::pat { id: id,
|
||||
node: pat_ident(bind_by_value, ident_to_path(s, i), None),
|
||||
node: pat_ident(bind_by_copy, ident_to_path(s, i), None),
|
||||
span: s }
|
||||
}
|
||||
|
||||
@@ -503,11 +503,8 @@ pub fn id_visitor(vfn: fn@(node_id)) -> visit::vt<()> {
|
||||
vfn(m.self_id);
|
||||
for vec::each(tps) |tp| { vfn(tp.id); }
|
||||
}
|
||||
visit::fk_anon(_, capture_clause) |
|
||||
visit::fk_fn_block(capture_clause) => {
|
||||
for vec::each(*capture_clause) |clause| {
|
||||
vfn(clause.id);
|
||||
}
|
||||
visit::fk_anon(_) |
|
||||
visit::fk_fn_block => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user