Commit graph

7929 commits

Author SHA1 Message Date
Mark Simulacrum
b35c60e95e
Rollup merge of #51299 - faern:const-int-ops, r=oli-obk
const fn integer operations

A follow up to #51171
Fixes #51267

Makes a lot of the integer methods (`swap_bytes`, `count_ones` etc) `const fn`s. See #51267 for a discussion about why this is wanted and the solution used.
2018-06-03 18:18:03 -06:00
Jorge Aparicio
430ad76900 undo payload in core::panic! changes 2018-06-03 13:46:19 +02:00
Jorge Aparicio
eb19361416 document that panic_impl never passes the FFI boundary 2018-06-03 13:46:19 +02:00
Jorge Aparicio
b442348d53 remove unused struct NoPayload 2018-06-03 13:46:19 +02:00
Jorge Aparicio
63f18e108a s/panic_fmt/panic_impl/g in docs 2018-06-03 13:46:19 +02:00
Jorge Aparicio
e44ad61a2d implement #[panic_implementation] 2018-06-03 13:46:19 +02:00
Mark Simulacrum
5bbe1ebe00
Rollup merge of #51306 - kennytm:impl-default-for-mut-str, r=SimonSapin
impl Default for &mut str

Rationale: There is already `impl Default for &mut [T]`.

Note: This impl is insta-stable.
2018-06-02 19:55:08 -06:00
Mark Simulacrum
4ce7ef5f59
Rollup merge of #51226 - gnzlbg:nonzero_align, r=SimonSapin
Make Layout's align a NonZeroUsize

This PR makes the `Layout`'s align field a `NonZeroUsize` since it cannot ever be zero, not even while building a `Layout`. It also contains some drive-by minor cleanups over the docs and the code, like updating the documented error types, or using the `size()` and `align()` methods instead of accessing the fields directly (the latter was required for the `NonZeroUsize` change anyways).

r? @SimonSapin

cc @Amanieu
2018-06-02 19:55:06 -06:00
Mark Simulacrum
5a575b542d
Rollup merge of #51147 - tmccombs:sliceindex, r=SimonSapin
Stabilize SliceIndex trait.

CC #35729

According to recommendations in
https://github.com/rust-lang/rust/issues/35729#issuecomment-377784884
2018-06-02 13:14:25 -06:00
Mark Simulacrum
dd61a32459
Rollup merge of #51124 - frewsxcv:frewsxcv-replace, r=QuietMisdreavus
Reword {ptr,mem}::replace docs.

Fixes https://github.com/rust-lang/rust/issues/50657.
2018-06-02 13:14:24 -06:00
Mark Simulacrum
6ff9108e12
Rollup merge of #50919 - frewsxcv:frewsxcv-epsilon, r=steveklabnik
Provide more context for what the {f32,f64}::EPSILON values represent.

Introduce the 'machine epsilon' term because if one googles 'epsilon', they might stumble upon https://en.wikipedia.org/wiki/Epsilon_numbers_(mathematics) instead of https://en.wikipedia.org/wiki/Machine_epsilon
2018-06-02 13:14:23 -06:00
Mark Simulacrum
77c8bd0b4e
Rollup merge of #50167 - fintelia:duration-nanos, r=sfackler
Add as_nanos function to Duration

Duration has historically lacked a way to get the actual number of nanoseconds it contained as a normal Rust type because u64 was of insufficient range, and f64 of insufficient precision. The u128 type solves both issues, so I propose adding an `as_nanos` function to expose the capability.
2018-06-02 13:14:22 -06:00
kennytm
0ff8d40fa1
impl Default for &mut str 2018-06-03 00:29:50 +08:00
gnzlbg
2d7cd70b1a add missing inline's and optimizations 2018-06-02 16:46:25 +02:00
gnzlbg
6ff67ee0d7 remove debug_assert in padding_needed_for 2018-06-02 16:03:33 +02:00
Linus Färnstrand
8a27c19c92 Make integer methods non-const in stage0 2018-06-02 13:57:31 +02:00
Linus Färnstrand
1b9ab8939e Make most integer operations const fns 2018-06-02 12:03:10 +02:00
bors
2954cb5119 Auto merge of #50554 - clarcharr:from_bool, r=TimNN
Add From<bool> for int types

Fixes #46109.
2018-06-02 07:50:10 +00:00
Corey Farwell
61b5bd25b5 Reword {ptr,mem}::replace docs.
Fixes https://github.com/rust-lang/rust/issues/50657.
2018-06-01 23:08:12 -04:00
Mark Simulacrum
4959cb1fca
Rollup merge of #51262 - GuillaumeGomez:add-missing-whitespace, r=QuietMisdreavus
Add missing whitespace in num example

r? @QuietMisdreavus
2018-06-01 17:25:16 -06:00
Mark Simulacrum
b6013b2ef5
Rollup merge of #51152 - crlf0710:patch-1, r=kennytm
Replace `if` with `if and only if` in the definition dox of `Sync`

The old text was: "The precise definition is: a type `T` is `Sync` if `&T` is Send."

Since we've also got
```
impl<'a, T> Send for &'a T
where
    T: Sync + ?Sized,
```
I purpose we can change the `if` to `if and only if` to make it more precise.
2018-06-01 17:25:14 -06:00
Clar Charr
b1797d57ff Add @ithinuel's tests from #50597 2018-06-01 17:46:19 -04:00
Clar Charr
7fe56e81b7 Fix ambiguity in Result test 2018-06-01 17:46:19 -04:00
Clar Charr
8c3bdcc35a Add From<bool> for int types 2018-06-01 17:46:19 -04:00
Amanieu d'Antras
c6bebf4554 Simplify HashMap layout calculation by using Layout 2018-06-01 17:24:03 +01:00
Thayne McCombs
9d770e9959 Stabilize SliceIndex trait.
Fixes #35729

According to recommendations in
https://github.com/rust-lang/rust/issues/35729#issuecomment-377784884
2018-06-01 00:04:26 -06:00
CrLF0710
8e90a2d02f Replace if with if and only if in the definition dox of Sync
The old text was: "The precise definition is: a type T is Sync if &T is Send."

Since we've also got
```
impl<'a, T> Send for &'a T 
where
    T: Sync + ?Sized,
```
I purpose we can change the `if` to `if and only if` to make it more precise.
2018-06-01 09:37:05 +08:00
bors
b7a9d4ea74 Auto merge of #50836 - jsgf:arc-downcast, r=SimonSapin
Arc downcast

Implement `downcast` for `Arc<Any + Send + Sync>` as part of #44608, and gated by the same `rc_downcast` feature.

This PR is mostly lightly-edited cut'n'paste.

This has two additional changes:
- The `downcast` implementation needs `Any + Send + Sync` implementations for `is` and `Debug`, and I added `downcast_ref` and `downcast_mut` for completeness/consistency. (Can these be insta-stabilized?)
- At @SimonSapin's suggestion, I converted `Arc` and `Rc` to use `NonNull::cast` to avoid an `unsafe` block in each which tidied things up nicely.
2018-06-01 01:09:25 +00:00
Guillaume Gomez
32dcaab585 Add missing whitespace in num example 2018-06-01 01:29:22 +02:00
Jeremy Fitzhardinge
87c3d7bee5 Fix up Any doc examples
Make the Any+Send+Sync examples use the right trait bounds, and fix a small whitespace issue.
2018-05-31 13:27:08 -07:00
Jeremy Fitzhardinge
72433e179d Add implementations for Any + Send + Sync
Implement `is`, `downcast_ref`, `downcast_mut` and `Debug` for
`Any + Send + Sync`.
2018-05-31 13:27:08 -07:00
Guillaume Gomez
33ad846740
Rollup merge of #51227 - uuttff8:master, r=dtolnay
mod.rs isn't beautiful

I hate this spaces.
2018-05-31 22:17:15 +02:00
Corey Farwell
1c883d6761 Add doc link from discriminant struct to function. 2018-05-30 23:25:30 -04:00
uuttff8
d6b8c67ee6
mod.rs isn't beautiful 2018-05-30 22:24:24 +03:00
gnzlbg
6c3ebcd223 make Layout's align a NonZeroUsize 2018-05-30 21:00:37 +02:00
bors
889d8dcaa7 Auto merge of #51134 - RalfJung:from_raw_parts, r=SimonSapin
extend from_raw_parts docs for slices and strs to mention alignment requirement

The documentation for `str::from_raw_parts_mut` seems to not be visible because that method is private, bit I figured it could still be fixed. I also removed the reference to the no-longer-existing `str::from_raw_parts` while I was at it.

Alternatively, should I remove `str::from_raw_parts_mut` completely? it is only used in `str::split_at_mut`, where it might as well be inlined.
2018-05-29 12:50:06 +00:00
bors
4f6d9bf209 Auto merge of #51142 - nickbabcock:doc-inspect, r=frewsxcv
Document additional use case for iter::inspect

Adds docs for `iter::inspect` showing the non-debug use case

Closes #49564
2018-05-29 06:50:12 +00:00
Nick Babcock
18cf47bc7d Document additional use case for iter::inspect 2018-05-28 18:50:16 -05:00
Jonathan Behrens
fc895665c9 Avoid 128-bit arithmetic where possible 2018-05-28 19:01:50 -04:00
bors
e9a489be94 Auto merge of #50465 - clarcharr:wrapping, r=KodrAus
Add missing Wrapping methods, use doc_comment!

Re-opened version of #49393 . Finishing touches for #32463.

Note that this adds `Shl` and `Shr` implementations for `Wrapping<i128>` and `Wrapping<u128>`, which were previously missed. This is technically insta-stable, but I don't know why this would be a problem.
2018-05-28 22:28:43 +00:00
Ralf Jung
b30aaf244e get rid of str::from_raw_parts_mut
str::from_raw_parts has been removed long ago because it can be obtained via
str::from_utf8_unchecked and slice::from_raw_parts.  The same goes for
str::from_raw_parts_mut.
2018-05-28 22:04:52 +02:00
Ralf Jung
3ee9d89969 extend from_raw_parts docs for slices and strs to mention alignment requirement 2018-05-28 18:34:15 +02:00
Corey Farwell
12878a78a7 Provide more context for what the {f32,f64}::EPSILON values represent. 2018-05-28 09:28:40 -04:00
bors
dcb405667c Auto merge of #51078 - GuillaumeGomez:stabilize-formatter, r=SimonSapin
Stabilize Formatter alignment

Fixes #27726.

cc @SimonSapin
2018-05-27 16:01:32 +00:00
Guillaume Gomez
fb447f118d Stabilize Formatter alignment 2018-05-27 14:07:43 +02:00
uuttff8
bbd790ced3
lib.rs don't beautiful 2018-05-27 11:53:43 +03:00
kennytm
18028eb217
Rollup merge of #51065 - mbrubeck:docs, r=rkruppe
Update nomicon link in transmute docs

The list of "invalid primitive values" has moved to a different URL within the Rustonomicon.
2018-05-26 19:32:29 +08:00
kennytm
08b417084d
Rollup merge of #51048 - GuillaumeGomez:formatter-examples, r=QuietMisdreavus
Add more missing examples for Formatter

r? @QuietMisdreavus
2018-05-26 19:32:23 +08:00
bors
444a9c3f1a Auto merge of #50364 - LukasKalbertodt:improve-duration-debug-impl, r=KodrAus
Improve `Debug` impl of `time::Duration`

Hi there!

For a long time now, I was getting annoyed by the derived `Debug` impl of `Duration`. Usually, I use `Duration` to either do quick'n'dirty benchmarking or measuring the time of some operation in general. The output of the derived Debug impl is hard to parse for humans: is { secs: 0, nanos: 968360102 } or { secs: 0, nanos 98507324 } longer?

So after running into the annoyance several times (sometimes building my own function to print the Duration properly), I decided to tackle this. Now the output looks like this:

```
Duration::new(1, 0)                 => 1s
Duration::new(1, 1)                 => 1.000000001s
Duration::new(1, 300)               => 1.0000003s
Duration::new(1, 4000)              => 1.000004s
Duration::new(1, 600000)            => 1.0006s
Duration::new(1, 7000000)           => 1.007s
Duration::new(0, 0)                 => 0ns
Duration::new(0, 1)                 => 1ns
Duration::new(0, 300)               => 300ns
Duration::new(0, 4001)              => 4.001µs
Duration::new(0, 600300)            => 600.3µs
Duration::new(0, 7000000)           => 7ms
```

Note that I implemented the formatting manually and didn't use floats. No information is "lost" when printing. So `Duration::new(123_456_789_000, 900_000_001)` prints as `123456789000.900000001s`.

~~This is not yet finished~~, but I wanted to open the PR now already in order to get some feedback (maybe everyone likes the derived impl).

### Still ToDo:

- [x] Respect precision ~~and width~~ parameter of the formatter (see [this comment](https://github.com/rust-lang/rust/pull/50364#issuecomment-386107107))

### Alternatives/Decisions

- Should large durations displayed in minutes, hours, days, ...? For now, I decided not to because the current formatting is close the how a `Duration` is stored. From this new `Debug` output, you can still easily see what the values of `secs` and `nanos` are. A formatting like `3h 27m 12s 9ms` might be more appropriate for a `Display` impl?
- Should this rather be a `Display` impl and should `Debug` be derived? Maybe this formatting is too fancy for `Debug`? In my opinion it's not and, as already mentioned, from the current format one can still very easily determine the values for `secs` and `nanos`.
- Whitespace between the number and the unit?

### Notes for reviewers

- ~~The combined diff sucks. Rather review both commits individually.~~
- ~~In the unit test, I am building my own type implementing `fmt::Write` to test the output. Maybe there is already something like that which I can use?~~
- My `Debug` impl block is marked as `#[stable(...)]`... but that's fine since the derived Debug impl was stable already, right?

---

~~Apart from the main change, I moved all `time` unit tests into the `tests` directory. All other `libcore` tests are there, so I guess it was simply an oversight. Prior to this change, the `time` tests weren't run, so I guess this is kind of a bug fix. If my `Debug` impl is rejected, I can of course just send the fix as PR.~~ (this was already merged in #50466)
2018-05-26 07:33:06 +00:00
bors
07c415c215 Auto merge of #51033 - coryshrmn:master, r=dtolnay
stabilize RangeBounds collections_range #30877

The FCP for #30877 closed last month, with the decision to:
1. move from `collections::range::RangeArgument` to `ops::RangeBounds`, and
2. rename `start()` and `end()` to `start_bounds()` and `end_bounds()`.

Simon Sapin already moved it to `ops::RangeBounds` in #49163.

I renamed the functions, and removed the old `collections::range::RangeArgument` alias.

This is my first Rust PR, please let me know if I can improve anything. This passes all tests for me, except the `clippy` tool (which uses `RangeArgument::start()`).

I considered deprecating `start()` and `end()` instead of removing them, but the contribution guidelines indicate we can break `clippy` temporarily. I thought it was best to remove the functions, since we're worried about name collisions with `Range::start` and `end`.

Closes #30877.
2018-05-25 22:18:27 +00:00