Commit graph

965 commits

Author SHA1 Message Date
Jonas Platte
4589bd57e9
Fix since attribute for nonzero_bitor impl's 2020-04-26 11:28:44 +02:00
Dylan DPC
b6e03c464a
Rollup merge of #69813 - thomcc:nonzero-bitor, r=Amanieu
Implement BitOr and BitOrAssign for the NonZero integer types

This provides overloaded operators for `NonZero$Int | NonZero$Int`, `NonZero$Int | $Int`, and `$Int | NonZero$Int`. It also provides `BitOrAssign` where `self` is `NonZero$Int`, for symmetry.

It's a pretty small conceptual addition, but is good becasue but avoids a case where the operation is obviously sound, but you'd otherwise need unsafe to do it.

In crates trying to minimize `unsafe` usage, this is unfortunate and makes working with `NonZero` types often not worth it, even if the operations you're doing are clearly sound.

I've marked these as stable as I've been told in the past that trait impls are automatically stable. I'm happy to change it to unstable if this wasn't correct information.

I'm not entirely confident what version I should have put down, so I followed https://www.whatrustisit.com. Hopefully it's correct for this.

Apologies in advance if this has come up before, but I couldn't find it.
2020-04-25 18:30:24 +02:00
Linus Färnstrand
6850e4a1ae Use assoc float consts instead of module level 2020-04-20 23:38:06 +02:00
Linus Färnstrand
4ddf66187a Define module level int consts from assoc consts 2020-04-20 23:38:06 +02:00
Linus Färnstrand
9fc0833235 Stop accessing module level int consts via crate::<Ty> 2020-04-20 23:38:06 +02:00
Josh Stone
2edd123a23 Dogfood or_patterns in the standard library 2020-04-16 12:44:57 -07:00
Linus Färnstrand
28c9231a91 Make libcore float constant examples similar to libstd 2020-04-05 12:20:27 +02:00
Linus Färnstrand
e9ce03648d Make documentation examples use new integer assoc consts 2020-04-03 09:33:10 +02:00
Mazdak Farrokhzad
2f28058a34
Rollup merge of #70708 - Pocakking:fix-ascii-case-conv-typo, r=sfackler
Fix typo in u8::to_ascii_uppercase and u8::to_ascii_lowercase

Corrects misspelling of fifth.
2020-04-03 00:32:07 +02:00
Pocakking
354ddbfb3f Fix typo in u8::to_ascii_uppercase and u8::to_ascii_lowercase
fith => fifth
2020-04-02 20:01:29 +02:00
Mark Rousskov
56147219a5 Stabilize float::to_int_unchecked
This renames and stabilizes unsafe floating point to integer casts, which are
intended to be the substitute for the currently unsound `as` behavior, once that
changes to safe-but-slower saturating casts.
2020-03-29 10:27:07 -04:00
Amanieu d'Antras
d162d096dd Rename asm! to llvm_asm!
asm! is left as a wrapper around llvm_asm! to maintain compatibility.
2020-03-26 15:49:22 +00:00
Trevor Spiteri
08a7fa6dd8 update stable-since version for const_int_conversion 2020-03-13 14:25:35 +01:00
Mazdak Farrokhzad
43079147f4
Rollup merge of #69373 - tspiteri:const_int_conversion, r=oli-obk
Stabilize const for integer {to,from}_{be,le,ne}_bytes methods

All of these functions can be implemented simply and naturally as const functions, e.g. `u32::from_le_bytes` can be implemented as
```rust
(bytes[0] as u32)
    | (bytes[1] as u32) << 8
    | (bytes[2] as u32) << 16
    | (bytes[3] as u32) << 24
```
So stabilizing the constness will not expose that internally they are implemented using transmute which is not const in stable.
2020-03-11 10:36:18 +01:00
Thom Chiovoloni
6cdb8257dd Implement BitOr and BitOrAssign for the NonZero integer types 2020-03-07 16:14:10 -08:00
bors
7a3700c371 Auto merge of #68952 - faern:stabilize-assoc-int-consts, r=dtolnay
Stabilize assoc_int_consts associated int/float constants

The next step in RFC https://github.com/rust-lang/rfcs/pull/2700 (tracking issue #68490). Stabilizing the associated constants that were added in #68325.

* Stabilize all constants under the `assoc_int_consts` feature flag.
* Update documentation on old constants to say they are soft-deprecated and the new ones should be preferred.
* Update documentation examples to use new constants.
* Remove `uint_macro` and use `int_macro` for all integer types since the macros were identical anyway.

r? @LukasKalbertodt
2020-03-04 07:29:32 +00:00
Dylan DPC
e028f26e1d
Rollup merge of #69209 - Mark-Simulacrum:strip-unsafe, r=dtolnay
Miscellaneous cleanup to formatting

Each commit stands alone.

This pull request will also resolve #58320.
2020-02-26 15:34:30 +01:00
Trevor Spiteri
87f0dc63a8 use unions instead of transmute and add const safety comments 2020-02-26 11:59:37 +01:00
Dylan DPC
c261ff1a77
Rollup merge of #68984 - ecstatic-morse:const-u8-is-ascii, r=sfackler
Make `u8::is_ascii` a stable `const fn`

`char::is_ascii` was already stabilized as `const fn` in #55278, so there is no reason for `u8::is_ascii` to go through an unstable period.

cc @rust-lang/libs
2020-02-22 18:42:59 +05:30
Trevor Spiteri
d15a98b878 Stabilize const for integer {to,from}_{be,le,ne}_bytes methods
All of these functions can be implemented simply and naturally as
const functions, e.g. u32::from_le_bytes can be implemented as

    (bytes[0] as u32)
        | (bytes[1] as u32) << 8
        | (bytes[2] as u32) << 16
        | (bytes[3] as u32) << 24

So stabilizing the constness will not expose that internally they are
implemented using transmute which is not const in stable.
2020-02-22 14:03:46 +01:00
Dylan DPC
d96951f554
Rollup merge of #68978 - ecstatic-morse:const-int-pow, r=oli-obk
Make integer exponentiation methods unstably const

cc #53718

This makes the following inherent methods on integer primitives into unstable `const fn`:
- `pow`
- `checked_pow`
- `wrapping_pow`
- `overflowing_pow`
- `saturating_pow`
- `next_power_of_two`
- `checked_next_power_of_two`
- `wrapping_next_power_of_two`

Only two changes were made to the implementation of these methods. First, I had to switch from the `?` operator, which is not yet implemented in a const context, to a `try_opt` macro. Second, `next_power_of_two` was using `ops::Add::add` (see the first commit) to "get overflow checks", so I switched to `#[rustc_inherit_overflow_checks]`. I'm not quite sure why the attribute wasn't used in the first place.
2020-02-20 10:49:12 +01:00
Mark Rousskov
6c45e4540b Drop unused argument to float functions 2020-02-17 09:18:33 -05:00
LeSeulArtichaut
2ae493a767 Stabilize {f32, f64}::{LOG2_10, LOG10_2} 2020-02-16 18:53:02 +01:00
Mark Rousskov
bd12cd3d2f Formatter::sign is &'static str
The contents were always UTF-8 anyway, and &str has an equivalent representation
to &[u8], so this should not affect performance while removing unsafety at
edges.

It may be worth exploring a further adjustment that stores a single byte
(instead of 16) as the contents are always "", "-", or "+".
2020-02-15 18:17:51 -05:00
Linus Färnstrand
b2dc618769 Add usage recommendation to old float constants 2020-02-12 20:20:56 +01:00
Linus Färnstrand
83191c2da6 Update float documentation to use associated consts 2020-02-12 20:20:56 +01:00
Linus Färnstrand
086927480b Add notice about using new consts in new code on int modules 2020-02-12 20:20:56 +01:00
Linus Färnstrand
c67de2570f Add notice about using new consts in new code on float modules 2020-02-12 20:20:56 +01:00
Linus Färnstrand
847a0dd845 Remove uint_macros that was identical to int_macros 2020-02-12 20:20:56 +01:00
Linus Färnstrand
5e17f31d94 Replace min/max_value() with MIN/MAX in integer docs 2020-02-12 20:20:56 +01:00
Linus Färnstrand
cf255c6dc1 Use new preferred consts in int docs 2020-02-12 20:20:56 +01:00
Linus Färnstrand
97bdd31b0e Add "soft deprecation" notice to old MIN/MAX docs 2020-02-12 20:20:55 +01:00
Linus Färnstrand
35298349c3 Add "soft deprecation" notice to old min/max_value() docs 2020-02-12 20:20:55 +01:00
Linus Färnstrand
271ba5a3ea Stabilize assoc_int_consts 2020-02-12 20:20:39 +01:00
Dylan DPC
6e1b75b7e1
Rollup merge of #68986 - ecstatic-morse:const-ascii-ctype, r=Centril
Make ASCII ctype functions unstably const

Makes the following inherent methods on `u8` and `char` unstable `const fn`:

 * `is_ascii_alphabetic`
 * `is_ascii_uppercase`
 * `is_ascii_lowercase`
 * `is_ascii_alphanumeric`
 * `is_ascii_digit`
 * `is_ascii_hexdigit`
 * `is_ascii_punctuation`
 * `is_ascii_graphic`
 * `is_ascii_whitespace`
 * `is_ascii_control`

cc #68983
2020-02-10 17:28:59 +01:00
Dylan MacKenzie
f6d4720f26 Make u8::is_ascii a stable const fn
`char::is_ascii` is already a stable `const fn`, so there is no reason
for `u8::is_ascii` to be unstable.
2020-02-08 21:29:32 -08:00
Dylan MacKenzie
a9212b8e93 Make the ASCII ctype inherent methods const 2020-02-08 21:29:25 -08:00
Dylan MacKenzie
269bf89865 Make integer power methods const 2020-02-08 17:19:09 -08:00
Dylan MacKenzie
2afa99379d Use bespoke macro instead of ? inside const fns 2020-02-08 17:18:13 -08:00
Dylan MacKenzie
c981d67b50 [!] Use rustc_inherit_overflow_checks in next_power_of_two
I believe the previous code was calling `ops::Add::add` instead of the
`+` operator to get this behavior.
2020-02-08 17:16:43 -08:00
Dylan MacKenzie
0b20ce97f7 Make num::NonZeroX::new an unstable const fn 2020-02-08 16:02:20 -08:00
Dylan MacKenzie
09160d1b84 Use consistent feature naming 2020-02-04 20:36:18 -08:00
Dylan MacKenzie
dda015aebc Make saturating arithmetic using intrinsics const 2020-02-04 11:04:04 -08:00
Dylan MacKenzie
526304da16 Make checked division const 2020-02-04 11:04:04 -08:00
Dylan MacKenzie
b46d1d2718 Make wrapping arithmetic const
Co-Authored-By: 9999years <rbt@sent.as>
2020-02-04 11:04:04 -08:00
Dylan MacKenzie
b422a19c43 Make saturating_mul a const fn
Co-Authored-By: 9999years <rbt@sent.as>
2020-02-04 11:04:04 -08:00
Dylan MacKenzie
de52a541d5 Make overflowing arithmetic const
Co-Authored-By: 9999years <rbt@sent.as>
2020-02-04 11:04:03 -08:00
Dylan MacKenzie
37c141885a Make checked arithmetic besides division const
Co-Authored-By: 9999years <rbt@sent.as>
2020-02-04 11:04:03 -08:00
Dylan MacKenzie
d9e3d2a531 Make euclidean division const
Co-Authored-By: 9999years <rbt@sent.as>
2020-02-04 11:04:03 -08: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