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:
Niko Matsakis
2013-01-10 10:59:58 -08:00
parent 42b462e076
commit 0682ad0eb9
125 changed files with 2674 additions and 2633 deletions

View File

@@ -569,7 +569,7 @@ fn mk_ser_method(
pat: @ast::pat {
id: cx.next_id(),
node: ast::pat_ident(
ast::bind_by_value,
ast::bind_by_copy,
ast_util::ident_to_path(span, cx.ident_of(~"__s")),
None),
span: span,
@@ -633,7 +633,7 @@ fn mk_deser_method(
pat: @ast::pat {
id: cx.next_id(),
node: ast::pat_ident(
ast::bind_by_value,
ast::bind_by_copy,
ast_util::ident_to_path(span, cx.ident_of(~"__d")),
None),
span: span,
@@ -1095,7 +1095,7 @@ fn mk_enum_deser_body(
pat: @ast::pat {
id: cx.next_id(),
node: ast::pat_ident(
ast::bind_by_value,
ast::bind_by_copy,
ast_util::ident_to_path(span, cx.ident_of(~"i")),
None),
span: span,
@@ -1114,8 +1114,7 @@ fn mk_enum_deser_body(
span,
ast::expr_match(cx.expr_var(span, ~"i"), arms)
)
),
@~[]
)
)
);