Commit graph

10521 commits

Author SHA1 Message Date
Mazdak Farrokhzad
f2cc0cc09d
Rollup merge of #68733 - cata0309:patch-1, r=Dylan-DPC
Update option.rs

I updated the example of the `expect` examples so they won't contain depressing sentences any more !
2020-02-02 14:15:48 +01:00
Tim Diekmann
8bbaeb7ff9
Remove Alloc in favor of AllocRef
`AllocRef` was reexported as `Alloc` in order to not break toolstate in the week before the next stable release.
2020-02-01 18:40:12 +01:00
Marincia Catalin
2ce14b8a19
Update option.rs
I updated the example of the `expect` examples so they won't contain depressing sentences any more !
2020-02-01 19:05:50 +02:00
Dylan DPC
f159045adc
Rollup merge of #68638 - GuillaumeGomez:links-cmp-traits, r=Dylan-DPC
Add missing links for cmp traits

r? @Dylan-DPC
2020-01-31 01:21:25 +01:00
bors
34700c15c7 Auto merge of #66577 - WaffleLapkin:iter_take_while_map, r=mark-simulcrum
Add `Iterator::map_while`

In `Iterator` trait there is `*_map` version of [`filter`] — [`filter_map`], however, there is no `*_map` version of [`take_while`], that can also be useful.

### Use cases
In my code, I've found that I need to iterate through iterator of `Option`s, stopping on the first `None`. So I've written code like this:
```rust
let arr = [Some(4), Some(10), None, Some(3)];
let mut iter = arr.iter()
    .take_while(|x| x.is_some())
    .map(|x| x.unwrap());

assert_eq!(iter.next(), Some(4));
assert_eq!(iter.next(), Some(10));
assert_eq!(iter.next(), None);
assert_eq!(iter.next(), None);
```
Thit code
1) isn't clean
2) In theory, can generate bad bytecode (I'm actually **not** sure, but I think that `unwrap` would generate additional branches with `panic!`)

The same code, but with `map_while` (in the original PR message it was named "take_while_map"):
```rust
let arr = [Some(4), Some(10), None, Some(3)];
let mut iter = arr.iter().map_while(std::convert::identity);
```

Also, `map_while` can be useful when converting something (as in [examples]).

[`filter`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.filter
[`filter_map`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.filter_map
[`take_while`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.take_while
[examples]: https://github.com/rust-lang/rust/compare/master...WaffleLapkin:iter_take_while_map?expand=1#diff-7e57917f962fe6ffdfba51e4955ad6acR1042
2020-01-30 20:58:57 +00:00
Guillaume Gomez
2f575dab30 Add missing links for cmp traits 2020-01-30 13:58:33 +01:00
bors
c4071d0919 Auto merge of #68325 - faern:move-numeric-consts-to-associated-consts-step1, r=LukasKalbertodt
Move numeric consts to associated consts step1

A subset of #67913. Implements the first step of RFC https://github.com/rust-lang/rfcs/pull/2700

This PR adds the new constants as unstable constants and defines the old ones in terms of the new ones. Then fix a tiny bit of code that started having naming collisions because of the new assoc consts.

Removed a test that did not seem relevant any longer. Since doing just `u8::MIN` should now indeed be valid.
2020-01-30 08:55:07 +00:00
LeSeulArtichaut
684bd50148 Document From implementation for NonZero nums 2020-01-29 17:49:38 +01:00
Peter Todd
f722964d00
Minor: note why we can rely on Any trait for safety 2020-01-28 20:53:45 -05:00
Waffle
db1a107b3f Fill tracking issue for iter_map_while feature 2020-01-28 21:30:34 +03:00
Waffle
1aff08010d Add Iterator::map_while method and corresponding MapWhile adapter 2020-01-28 21:30:34 +03:00
bors
b181835a6b Auto merge of #68529 - TimDiekmann:rename-alloc, r=Amanieu
Rename `Alloc` to `AllocRef`

The allocator-wg has decided to merge this change upstream in https://github.com/rust-lang/wg-allocators/issues/8#issuecomment-577122958.

This renames `Alloc` to `AllocRef` because types that implement `Alloc` are a reference, smart pointer, or ZSTs. It is not possible to have an allocator like `MyAlloc([u8; N])`, that owns the memory and also implements `Alloc`, since that would mean, that moving a `Vec<T, MyAlloc>` would need to correct the internal pointer, which is not possible as we don't have move constructors.

For further explanation please see https://github.com/rust-lang/wg-allocators/issues/8#issuecomment-489464843 and the comments after that one.

Additionally it clarifies the semantics of `Clone` on an allocator. In the case of `AllocRef`, it is clear that the cloned handle still points to the same allocator instance, and that you can free data allocated from one handle with another handle.

The initial proposal was to rename `Alloc` to `AllocHandle`, but `Ref` expresses the semantics better than `Handle`. Also, the only appearance of `Handle` in `std` are for windows specific resources, which might be confusing.

Blocked on https://github.com/rust-lang/miri/pull/1160
2020-01-28 08:44:20 +00:00
bors
82018665a5 Auto merge of #68234 - CAD97:slice-from-raw-parts, r=KodrAus
Stabilize ptr::slice_from_raw_parts[_mut]

Closes #36925, the tracking issue.
Initial impl: #60667

r? @rust-lang/libs

In addition to stabilizing, I've adjusted the example of `ptr::slice_from_raw_parts` to use `slice_from_raw_parts` instead of `slice_from_raw_parts_mut`, which was unnecessary for the example as written.
2020-01-28 05:31:34 +00:00
Ashley Mannix
2c07a621ef stabilize the debug_map_key_value feature 2020-01-28 11:15:22 +10:00
Tim Diekmann
7ca25db816
Rename Alloc to AllocRef 2020-01-27 21:39:51 +01:00
bors
1d5f6d41e1 Auto merge of #68165 - thomcc:lt_ones, r=sfackler
Add leading_ones and trailing_ones methods to the primitive integer types

I was surprised these were missing (given that `leading_zeros` and `trailing_zeros` exist), and they seem trivial and hopefully not controversial.

Note that there's some precedent in that `count_ones` and `count_zeros` are both supported even though only one of these has an intrinsic.

I'm not sure if these need a `rustc_const_unstable` flag (the tests don't seem to mind that it's missing). I just made them const, since there's not really any reason for these to be non-const when the `_zeros` variants are const.

Note: My understanding is trivial stuff like (hopefully) this can land without an RFC, but I'm not fully sure about the process though. Questions like "when does the tracking issue get filed?", are a total mystery to me. So, any guidance is appreciated, and sorry in advance if I should have gone through some more involved process for this.
2020-01-27 08:42:56 +00:00
Lzu Tao
2d7f8b31db Use Self instead of self return type 2020-01-24 17:43:57 +01:00
Tyler Mandry
e7752aefdc
Rollup merge of #68469 - ollie27:skip_count, r=sfackler
Avoid overflow in `std::iter::Skip::count`

The call to `count` on the inner iterator can overflow even if `Skip` itself would return less that `usize::max_value()` items.

Fixes #68139
2020-01-24 00:30:56 -08:00
Tyler Mandry
eb769ed6b0
Rollup merge of #68424 - estebank:suggest-borrow-for-non-copy-vec, r=davidtwco
Suggest borrowing `Vec<NonCopy>` in for loop

Partially address #64167.
2020-01-24 00:30:53 -08:00
Linus Färnstrand
002c7897a6 Unlock assoc_int_consts in documentation examples using it 2020-01-23 20:55:06 +01:00
Linus Färnstrand
4d9e90d2a5 Unlock assoc_int_consts in core+std 2020-01-23 20:55:06 +01:00
Linus Färnstrand
9d257579fc Fix some float operations to work together with the assoc consts 2020-01-23 20:55:06 +01:00
Linus Färnstrand
22dcfa1d8d Add relevant associated constants to the float types 2020-01-23 20:55:06 +01:00
Linus Färnstrand
b5ff8064a4 Add MIN/MAX associated constants to the integer types 2020-01-23 20:55:06 +01:00
Esteban Küber
6eaf59dfc8 use diagnostic_item and modify wording 2020-01-23 11:51:56 -08:00
Oliver Middleton
9d3e84432d Avoid overflow in std::iter::Skip::count
The call to `count` on the inner iterator can overflow even if `Skip` itself would return less that `usize::max_value()` items.
2020-01-22 20:28:28 +00:00
bors
06b945049b Auto merge of #68405 - JohnTitor:rollup-kj0x4za, r=JohnTitor
Rollup of 8 pull requests

Successful merges:

 - #67734 (Remove appendix from Apache license)
 - #67795 (Cleanup formatting code)
 - #68290 (Fix some tests failing in `--pass check` mode)
 - #68297 ( Filter and test predicates using `normalize_and_test_predicates` for const-prop)
 - #68302 (Fix #[track_caller] and function pointers)
 - #68339 (Add `riscv64gc-unknown-linux-gnu` into target list in build-manifest)
 - #68381 (Added minor clarification to specification of GlobalAlloc::realloc.)
 - #68397 (rustdoc: Correct order of `async` and `unsafe` in `async unsafe fn`s)

Failed merges:

r? @ghost
2020-01-20 23:35:50 +00:00
Yuki Okushi
32ecb6f1f2
Rollup merge of #68381 - mjp41:master, r=Dylan-DPC
Added minor clarification to specification of GlobalAlloc::realloc.

The specification of `realloc` is slightly unclear:

```
    /// * `layout` must be the same layout that was used
    ///   to allocate that block of memory,
```
https://github.com/rust-lang/rust/blob/master/src/libcore/alloc.rs#L541-L542

In the case of an `alloc` or `alloc_zeroed` this is fairly evidently the `layout` parameter passed into the original call.  In the case of a `realloc`, this I assume is `layout` modified to contain `new_size`.  However, I could not find this case specified in the documentation.  Thus technically in a sequence of calls to `realloc`, it would be valid to provide the second call to `realloc` the same `layout` as the first call to `realloc`, which is almost certainly not going to be handled correctly.

This PR attempts to clarify the specification.
2020-01-21 07:32:48 +09:00
bors
b5a3341f1b Auto merge of #68066 - CAD97:stabilize-manuallydrop-take, r=Amanieu,Mark-Simulacrum
Stabilize ManuallyDrop::take

Tracking issue: closes #55422
FCP merge: https://github.com/rust-lang/rust/issues/55422#issuecomment-572653619

Reclaims the doc improvements from closed #62198.

-----

Stable version is a simple change if necessary.

Proposal: [relnotes] (this changes how to best take advantage of `ManuallyDrop`, esp. wrt. `Drop::drop` and finalize-by-value members)
2020-01-20 20:11:20 +00:00
Mark Rousskov
9ae32c9b27 Drop args from Formatter
These are no longer used by Formatter methods.
2020-01-20 11:57:27 -05:00
Mark Rousskov
4919b96f81 Move run/getcount to functions
These are only called from one place and don't generally support being called
from other places; furthermore, they're the only formatter functions that look
at the `args` field (which a future commit will remove).
2020-01-20 11:57:27 -05:00
Mark Rousskov
fdef4f185e Delete unused "next" variants from formatting infrastructure
The formatting infrastructure stopped emitting these a while back, and in
removing them we can simplify related code.
2020-01-20 11:57:27 -05:00
Matthew Parkinson
6be3446f92 Added minor clarification to specification of realloc.
The `layout` for the returned allocation of a `realloc` is
only implicitly specified.  This change makes it explicit.
2020-01-20 10:09:51 +00:00
Dylan DPC
5d8edc99aa
Rollup merge of #68335 - RalfJung:drop-in-place, r=Mark-Simulacrum
Remove real_drop_in_place

In af9b057156, I added `real_drop_in_place` because Stacked Borrows at the time couldn't handle transmuting of mutable references to raw pointers and back. Stacked Borrows 2, however, doesn't have any issue with these transmutes, so it is time to remove this hack again.
2020-01-20 11:14:46 +05:30
Dylan DPC
d276e6942e
Rollup merge of #68348 - xfix:patch-14, r=nagisa
Make iter::Empty<T> Send and Sync for any T

Continuing from #57682

It's quite funny, when I initially submitted this pull request, I said "Likely nobody will be using that property of `iter::empty`", but then a year later I got a compilation error because it wasn't `Send` and `Sync`.

Unfortunately, `PhantomData<fn() -> T>` still errors out. Oh well. I proposed `
struct PhantomFnWorkaround<T>(fn() -> T);`, but dtolnay did not like it, so using explicit implementations.
2020-01-19 17:22:09 +05:30
Mazdak Farrokhzad
e8819b62b4
Rollup merge of #68342 - lcnr:type_name_docs, r=Dylan-DPC
improve type_name_of_val docs

suggested by @Globidev in https://github.com/rust-lang/rust/issues/66359#issuecomment-575016612
2020-01-18 19:36:08 +01:00
Mazdak Farrokhzad
3ccb0f9b8f slice_patterns: remove internal uses of gate 2020-01-18 19:33:47 +01:00
Konrad Borowski
a70b240189 Make iter::Empty<T> implement Send and Sync for any T 2020-01-18 18:50:10 +01:00
lcnr/Bastian Kauschke
6b7f3e50df improve type_name_of_val docs 2020-01-18 14:43:08 +01:00
Ralf Jung
79359315d6 get rid of real_drop_in_place again 2020-01-18 11:15:56 +01:00
Dylan DPC
d3589aa4ed
Rollup merge of #66564 - foeb:66219-document-unsafe-sync-cell-str, r=Amanieu
Document unsafe blocks in core::{cell, str, sync}

Split from #66506 (issue #66219). Hopefully doing a chunk at a time is more manageable!

r? @RalfJung
2020-01-17 18:53:38 +05:30
Phoebe Bell
022a7de26f Add SAFETY comment for atomic example 2020-01-16 19:26:02 -08:00
Phoebe Bell
0f2ee495e9 Fix formatting: ./x.py fmt 2020-01-16 18:50:53 -08:00
Phoebe Bell
c103c284b9 Move comments for tidy 2020-01-16 18:38:04 -08:00
Phoebe Bell
ca2fae8edb Elaborate on SAFETY comments 2020-01-16 18:32:21 -08:00
Phoebe Bell
e0140ffeb0 Apply suggestions from code review
Co-Authored-By: Ralf Jung <post@ralfj.de>
2020-01-16 18:27:44 -08:00
Phoebe Bell
a93e99cae7 Fix typo "gurantees -> guarantees" 2020-01-16 18:27:08 -08:00
Phoebe Bell
19fdc6e091 Document unsafe blocks in core::{cell, str, sync} 2020-01-16 18:26:14 -08:00
bors
8cacf50563 Auto merge of #66716 - derekdreery:debug_non_exhaustive, r=dtolnay
Implement `DebugStruct::non_exhaustive`.

This patch adds a function (finish_non_exhaustive) to add ellipsis before the closing brace when formatting using `DebugStruct`.

 ## Example

 ```rust
 #![feature(debug_non_exhaustive)]
 use std::fmt;

 struct Bar {
     bar: i32,
     hidden: f32,
 }

 impl fmt::Debug for Bar {
     fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
         fmt.debug_struct("Bar")
            .field("bar", &self.bar)
            .non_exhaustive(true) // Show that some other field(s) exist.
            .finish()
     }
 }

 assert_eq!(
     format!("{:?}", Bar { bar: 10, hidden: 1.0 }),
     "Bar { bar: 10, .. }",
 );
 ```
2020-01-17 00:20:48 +00:00
Richard Dodd
73124df6eb Rust ./x.py fmt 2020-01-16 20:11:16 +00:00