This adds support for dropping cleanups for temporary values when they are moved somewhere else. It then adds wraps most copy operations (return, put in data structure, box, etc) in a way that will fall back to a move when it is safe. This saves a lot of taking/dropping, shaving over a megabyte off the stage2/rustc binary size. In some cases, most notably function returns, we could detect that the returned value is a local variable, and can thus be safely moved even though it is not a temporary. This will require putting some more information in lvals. I did not yet handle function arguments, since the logic for passing them looked too convoluted to touch. I'll probably try that in the near future, since it's bound to be a big win.
12 lines
269 B
Rust
12 lines
269 B
Rust
|
|
use std;
|
|
import std::fs;
|
|
|
|
fn test_connect() {
|
|
auto slash = fs::path_sep();
|
|
log_err fs::connect("a", "b");
|
|
assert (fs::connect("a", "b") == "a" + slash + "b");
|
|
assert (fs::connect("a" + slash, "b") == "a" + slash + "b");
|
|
}
|
|
|
|
fn main() { test_connect(); } |