1
Fork 0

Rollup merge of #98617 - ChrisDenton:const-unwrap, r=Mark-Simulacrum

Remove feature `const_option` from std

This is part of the effort to reduce the number of unstable features used by std. This one is easy as it's only used in one place.
This commit is contained in:
Matthias Krüger 2022-06-28 18:34:33 +02:00 committed by GitHub
commit a3bdd46431
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 5 deletions

View file

@ -335,7 +335,6 @@
#![feature(const_ip)] #![feature(const_ip)]
#![feature(const_ipv4)] #![feature(const_ipv4)]
#![feature(const_ipv6)] #![feature(const_ipv6)]
#![feature(const_option)]
#![feature(const_socketaddr)] #![feature(const_socketaddr)]
#![feature(thread_local_internals)] #![feature(thread_local_internals)]
// //

View file

@ -21,6 +21,17 @@ use crate::vec;
use core::iter; use core::iter;
/// This is the const equivalent to `NonZeroU16::new(n).unwrap()`
///
/// FIXME: This can be removed once `Option::unwrap` is stably const.
/// See the `const_option` feature (#67441).
const fn non_zero_u16(n: u16) -> NonZeroU16 {
match NonZeroU16::new(n) {
Some(n) => n,
None => panic!("called `unwrap` on a `None` value"),
}
}
pub fn args() -> Args { pub fn args() -> Args {
// SAFETY: `GetCommandLineW` returns a pointer to a null terminated UTF-16 // SAFETY: `GetCommandLineW` returns a pointer to a null terminated UTF-16
// string so it's safe for `WStrUnits` to use. // string so it's safe for `WStrUnits` to use.
@ -58,10 +69,10 @@ fn parse_lp_cmd_line<'a, F: Fn() -> OsString>(
lp_cmd_line: Option<WStrUnits<'a>>, lp_cmd_line: Option<WStrUnits<'a>>,
exe_name: F, exe_name: F,
) -> Vec<OsString> { ) -> Vec<OsString> {
const BACKSLASH: NonZeroU16 = NonZeroU16::new(b'\\' as u16).unwrap(); const BACKSLASH: NonZeroU16 = non_zero_u16(b'\\' as u16);
const QUOTE: NonZeroU16 = NonZeroU16::new(b'"' as u16).unwrap(); const QUOTE: NonZeroU16 = non_zero_u16(b'"' as u16);
const TAB: NonZeroU16 = NonZeroU16::new(b'\t' as u16).unwrap(); const TAB: NonZeroU16 = non_zero_u16(b'\t' as u16);
const SPACE: NonZeroU16 = NonZeroU16::new(b' ' as u16).unwrap(); const SPACE: NonZeroU16 = non_zero_u16(b' ' as u16);
let mut ret_val = Vec::new(); let mut ret_val = Vec::new();
// If the cmd line pointer is null or it points to an empty string then // If the cmd line pointer is null or it points to an empty string then