rust/src/librustc/metadata
Patrick Walton 8d27232141 librustc: Tie up loose ends in unboxed closures.
This patch primarily does two things: (1) it prevents lifetimes from
leaking out of unboxed closures; (2) it allows unboxed closure type
notation, call notation, and construction notation to construct closures
matching any of the three traits.

This breaks code that looked like:

    let mut f;
    {
        let x = &5i;
        f = |&mut:| *x + 10;
    }

Change this code to avoid having a reference escape. For example:

    {
        let x = &5i;
        let mut f; // <-- move here to avoid dangling reference
        f = |&mut:| *x + 10;
    }

I believe this is enough to consider unboxed closures essentially
implemented. Further issues (for example, higher-rank lifetimes) should
be filed as followups.

Closes #14449.

[breaking-change]
2014-08-14 08:53:25 -07:00
..
common.rs librustc: Tie up loose ends in unboxed closures. 2014-08-14 08:53:25 -07:00
creader.rs rustc: Compare paths with --extern, not bytes 2014-07-24 22:41:52 -07:00
csearch.rs remove serialize::ebml, add librbml 2014-07-31 07:30:49 -07:00
cstore.rs
decoder.rs remove serialize::ebml, add librbml 2014-07-31 07:30:49 -07:00
encoder.rs librustc: Tie up loose ends in unboxed closures. 2014-08-14 08:53:25 -07:00
filesearch.rs Rename functions in the CloneableVector trait 2014-07-17 16:35:48 +02:00
loader.rs Fix misspelled comments. 2014-08-01 19:42:52 -04:00
mod.rs
tydecode.rs librustc: Tie up loose ends in unboxed closures. 2014-08-14 08:53:25 -07:00
tyencode.rs librustc: Tie up loose ends in unboxed closures. 2014-08-14 08:53:25 -07:00