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
336 B
Rust
19 lines
336 B
Rust
extern mod std;
|
|
|
|
use std::ebml::reader;
|
|
use std::ebml::writer;
|
|
use std::serialize;
|
|
|
|
fn main() {
|
|
let foo = ~3;
|
|
let _pfoo = &foo;
|
|
let _f: @fn() -> int = || *foo + 5;
|
|
//~^ ERROR by-move capture
|
|
|
|
let bar = ~3;
|
|
let _g = || {
|
|
let _h: @fn() -> int = || *bar;
|
|
//~^ ERROR illegal by-move capture
|
|
};
|
|
}
|