0682ad0eb9
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.
19 lines
240 B
Rust
19 lines
240 B
Rust
struct S {
|
|
x: ~int
|
|
}
|
|
|
|
impl S {
|
|
fn foo(self) -> int {
|
|
self.bar();
|
|
return *self.x; //~ ERROR use of moved value
|
|
}
|
|
|
|
fn bar(self) {}
|
|
}
|
|
|
|
fn main() {
|
|
let x = S { x: ~1 };
|
|
io::println(x.foo().to_str());
|
|
}
|
|
|