]> git.lizzy.rs Git - rust.git/commitdiff
auto merge of #20363 : japaric/rust/moar-uc, r=nmatsakis
authorbors <bors@rust-lang.org>
Thu, 1 Jan 2015 04:01:02 +0000 (04:01 +0000)
committerbors <bors@rust-lang.org>
Thu, 1 Jan 2015 04:01:02 +0000 (04:01 +0000)
The the last argument of the `ItemDecorator::expand` method has changed to `Box<FnMut>`. Syntax extensions will break.

[breaking-change]

---

This PR removes pretty much all the remaining uses of boxed closures from the libraries. There are still boxed closures under the `test` directory, but I think those should be removed or replaced with unboxed closures at the same time we remove boxed closures from the language.

In a few places I had to do some contortions (see the first commit for an example) to work around issue #19596. I have marked those workarounds with FIXMEs. In the future when `&mut F where F: FnMut` implements the `FnMut` trait, we should be able to remove those workarounds. I've take care to avoid placing the workaround functions in the public API.

Since `let f = || {}` always gets type checked as a boxed closure, I have explictly annotated those closures (with e.g. `|&:| {}`) to force the compiler to type check them as unboxed closures.

Instead of removing the type aliases (like `GetCrateDataCb`), I could have replaced them with newtypes. But this seemed like overcomplicating things for little to no gain.

I think we should be able to remove the boxed closures from the languge after this PR lands. (I'm being optimistic here)

r? @alexcrichton or @aturon
cc @nikomatsakis

1  2 
src/librustc/metadata/encoder.rs
src/librustc/middle/ty.rs
src/librustc_trans/trans/monomorphize.rs

Simple merge
Simple merge