rust/src/libcore
Manish Goregaokar 726850170d Rollup merge of #36384 - petrochenkov:derclone, r=alexcrichton
Improve shallow `Clone` deriving

`Copy` unions now support `#[derive(Clone)]`.
Less code is generated for `#[derive(Clone, Copy)]`.
+
Unions now support `#[derive(Eq)]`.
Less code is generated for `#[derive(Eq)]`.

---
Example of code reduction:
```
enum E {
	A { a: u8, b: u16 },
	B { c: [u8; 100] },
}
```
Before:
```
fn clone(&self) -> E {
    match (&*self,) {
        (&E::A { a: ref __self_0, b: ref __self_1 },) => {
            ::std::clone::assert_receiver_is_clone(&(*__self_0));
            ::std::clone::assert_receiver_is_clone(&(*__self_1));
            *self
        }
        (&E::B { c: ref __self_0 },) => {
            ::std::clone::assert_receiver_is_clone(&(*__self_0));
            *self
        }
    }
}
```
After:
```
fn clone(&self) -> E {
    {
        let _: ::std::clone::AssertParamIsClone<u8>;
        let _: ::std::clone::AssertParamIsClone<u16>;
        let _: ::std::clone::AssertParamIsClone<[u8; 100]>;
        *self
    }
}
```

All the matches are removed, bound assertions are more lightweight.
`let _: Checker<CheckMe>;`, unlike `checker(&check_me);`, doesn't have to be translated by rustc_trans and then inlined by LLVM, it doesn't even exist in MIR, this means faster compilation.

---
Union impls are generated like this:
```
union U {
	a: u8,
	b: u16,
	c: [u8; 100],
}
```
```
fn clone(&self) -> U {
    {
        let _: ::std::clone::AssertParamIsCopy<Self>;
        *self
    }
}
```

Fixes https://github.com/rust-lang/rust/issues/36043
cc @durka
r? @alexcrichton
2016-09-15 18:16:19 +05:30
..
fmt Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
hash Documentation of what does for each type 2016-09-11 17:00:09 +05:30
iter Auto merge of #35856 - phimuemue:master, r=brson 2016-09-02 21:02:41 -07:00
num Use question_mark feature in libcore. 2016-09-11 16:00:50 -07:00
prelude Add missing annotations and some tests 2015-11-18 01:24:21 +03:00
str Documentation of what does for each type 2016-09-11 17:00:09 +05:30
sync Documentation for default types modified 2016-09-11 22:58:01 +05:30
any.rs Replace unnecessary uses of TraitObject with casts 2016-08-26 06:37:36 -04:00
array.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
borrow.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
Cargo.toml No build.rs for libcore 2016-06-04 15:10:26 -07:00
cell.rs Documentation of what does for each type 2016-09-11 17:00:09 +05:30
char.rs Implement TryFrom<u32> for char 2016-08-29 17:34:02 +02:00
char_private.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
clone.rs Rollup merge of #36384 - petrochenkov:derclone, r=alexcrichton 2016-09-15 18:16:19 +05:30
cmp.rs Improve Eq deriving 2016-09-10 22:37:06 +03:00
convert.rs Add missing urls into convert module 2016-08-31 16:15:19 +02:00
default.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
intrinsics.rs Auto merge of #36181 - seanmonstar:likely, r=nikomatsakis 2016-09-13 10:54:55 -07:00
iter_private.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
lib.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
macros.rs Document try!'s error conversion behaviour 2016-09-01 19:16:19 +02:00
marker.rs Improve Copy trait doc 2016-09-11 11:58:20 +02:00
mem.rs Tweak std::mem docs 2016-09-10 10:48:01 -07:00
nonzero.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00
ops.rs Rollup merge of #35793 - matthew-piziak:add-rhs-example, r=steveklabnik 2016-09-02 15:28:50 -07:00
option.rs Rollup merge of #36396 - athulappadan:Default-docs, r=bluss 2016-09-14 17:15:37 +02:00
panicking.rs Mark all extern functions as nounwind 2015-09-14 11:36:09 +02:00
ptr.rs Auto merge of #35906 - jseyfried:local_prelude, r=eddyb 2016-08-25 20:45:32 -07:00
raw.rs Clean up std::raw docs 2016-08-05 17:52:37 -04:00
result.rs Improve Result doc 2016-09-11 11:58:20 +02:00
slice.rs Documentation for default types modified 2016-09-11 22:58:01 +05:30
tuple.rs Use #[prelude_import] in libcore. 2016-08-24 22:12:23 +00:00