Auto merge of #137571 - tgross35:rollup-i1tcnv1, r=tgross35
Rollup of 8 pull requests Successful merges: - #134655 (Stabilize `hash_extract_if`) - #135933 (Explain how Vec::with_capacity is faithful) - #136668 (Stabilize `core::str::from_utf8_mut` as `const`) - #136775 (Update `String::from_raw_parts` safety requirements) - #137109 (stabilize extract_if) - #137349 (Implement `read_buf` for zkVM stdin) - #137493 (configure.py: don't instruct user to run nonexistent program) - #137516 (remove some unnecessary rustc_const_unstable) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
ad27045c31
@ -15,7 +15,6 @@
|
||||
#![feature(box_into_inner)]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(error_reporter)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(if_let_guard)]
|
||||
#![feature(let_chains)]
|
||||
#![feature(negative_impls)]
|
||||
|
@ -26,7 +26,6 @@
|
||||
#![feature(array_windows)]
|
||||
#![feature(assert_matches)]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(if_let_guard)]
|
||||
#![feature(iter_order_by)]
|
||||
#![feature(let_chains)]
|
||||
|
@ -5,7 +5,6 @@
|
||||
#![feature(coroutines)]
|
||||
#![feature(decl_macro)]
|
||||
#![feature(error_iter)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(file_buffered)]
|
||||
#![feature(if_let_guard)]
|
||||
#![feature(iter_from_coroutine)]
|
||||
|
@ -44,7 +44,6 @@
|
||||
#![feature(decl_macro)]
|
||||
#![feature(discriminant_kind)]
|
||||
#![feature(extern_types)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(file_buffered)]
|
||||
#![feature(if_let_guard)]
|
||||
#![feature(intra_doc_pointers)]
|
||||
|
@ -15,7 +15,6 @@
|
||||
#![doc(rust_logo)]
|
||||
#![feature(assert_matches)]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(if_let_guard)]
|
||||
#![feature(iter_intersperse)]
|
||||
#![feature(let_chains)]
|
||||
|
@ -20,7 +20,6 @@
|
||||
#![feature(associated_type_defaults)]
|
||||
#![feature(box_patterns)]
|
||||
#![feature(cfg_version)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(if_let_guard)]
|
||||
#![feature(iter_intersperse)]
|
||||
#![feature(iterator_try_reduce)]
|
||||
|
@ -1140,7 +1140,6 @@ impl<T, A: Allocator> LinkedList<T, A> {
|
||||
/// Splitting a list into evens and odds, reusing the original list:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(extract_if)]
|
||||
/// use std::collections::LinkedList;
|
||||
///
|
||||
/// let mut numbers: LinkedList<u32> = LinkedList::new();
|
||||
@ -1152,7 +1151,7 @@ impl<T, A: Allocator> LinkedList<T, A> {
|
||||
/// assert_eq!(evens.into_iter().collect::<Vec<_>>(), vec![2, 4, 6, 8, 14]);
|
||||
/// assert_eq!(odds.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 9, 11, 13, 15]);
|
||||
/// ```
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub fn extract_if<F>(&mut self, filter: F) -> ExtractIf<'_, T, F, A>
|
||||
where
|
||||
F: FnMut(&mut T) -> bool,
|
||||
@ -1932,7 +1931,7 @@ impl<'a, T, A: Allocator> CursorMut<'a, T, A> {
|
||||
}
|
||||
|
||||
/// An iterator produced by calling `extract_if` on LinkedList.
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[must_use = "iterators are lazy and do nothing unless consumed"]
|
||||
pub struct ExtractIf<
|
||||
'a,
|
||||
@ -1947,7 +1946,7 @@ pub struct ExtractIf<
|
||||
old_len: usize,
|
||||
}
|
||||
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<T, F, A: Allocator> Iterator for ExtractIf<'_, T, F, A>
|
||||
where
|
||||
F: FnMut(&mut T) -> bool,
|
||||
@ -1976,7 +1975,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<T: fmt::Debug, F> fmt::Debug for ExtractIf<'_, T, F> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_tuple("ExtractIf").field(&self.list).finish()
|
||||
|
@ -966,11 +966,8 @@ impl String {
|
||||
/// This is highly unsafe, due to the number of invariants that aren't
|
||||
/// checked:
|
||||
///
|
||||
/// * The memory at `buf` needs to have been previously allocated by the
|
||||
/// same allocator the standard library uses, with a required alignment of exactly 1.
|
||||
/// * `length` needs to be less than or equal to `capacity`.
|
||||
/// * `capacity` needs to be the correct value.
|
||||
/// * The first `length` bytes at `buf` need to be valid UTF-8.
|
||||
/// * all safety requirements for [`Vec::<u8>::from_raw_parts`].
|
||||
/// * all safety requirements for [`String::from_utf8_unchecked`].
|
||||
///
|
||||
/// Violating these may cause problems like corrupting the allocator's
|
||||
/// internal data structures. For example, it is normally **not** safe to
|
||||
|
@ -12,12 +12,10 @@ use crate::alloc::{Allocator, Global};
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(extract_if)]
|
||||
///
|
||||
/// let mut v = vec![0, 1, 2];
|
||||
/// let iter: std::vec::ExtractIf<'_, _, _> = v.extract_if(.., |x| *x % 2 == 0);
|
||||
/// ```
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[derive(Debug)]
|
||||
#[must_use = "iterators are lazy and do nothing unless consumed"]
|
||||
pub struct ExtractIf<
|
||||
@ -59,7 +57,7 @@ impl<'a, T, F, A: Allocator> ExtractIf<'a, T, F, A> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<T, F, A: Allocator> Iterator for ExtractIf<'_, T, F, A>
|
||||
where
|
||||
F: FnMut(&mut T) -> bool,
|
||||
@ -95,7 +93,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<T, F, A: Allocator> Drop for ExtractIf<'_, T, F, A> {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
|
@ -66,7 +66,7 @@ use core::ptr::{self, NonNull};
|
||||
use core::slice::{self, SliceIndex};
|
||||
use core::{fmt, intrinsics};
|
||||
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub use self::extract_if::ExtractIf;
|
||||
use crate::alloc::{Allocator, Global};
|
||||
use crate::borrow::{Cow, ToOwned};
|
||||
@ -355,11 +355,20 @@ mod spec_extend;
|
||||
/// and it may prove desirable to use a non-constant growth factor. Whatever
|
||||
/// strategy is used will of course guarantee *O*(1) amortized [`push`].
|
||||
///
|
||||
/// `vec![x; n]`, `vec![a, b, c, d]`, and
|
||||
/// [`Vec::with_capacity(n)`][`Vec::with_capacity`], will all produce a `Vec`
|
||||
/// with at least the requested capacity. If <code>[len] == [capacity]</code>,
|
||||
/// (as is the case for the [`vec!`] macro), then a `Vec<T>` can be converted to
|
||||
/// and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements.
|
||||
/// It is guaranteed, in order to respect the intentions of the programmer, that
|
||||
/// all of `vec![e_1, e_2, ..., e_n]`, `vec![x; n]`, and [`Vec::with_capacity(n)`] produce a `Vec`
|
||||
/// that requests an allocation of the exact size needed for precisely `n` elements from the allocator,
|
||||
/// and no other size (such as, for example: a size rounded up to the nearest power of 2).
|
||||
/// The allocator will return an allocation that is at least as large as requested, but it may be larger.
|
||||
///
|
||||
/// It is guaranteed that the [`Vec::capacity`] method returns a value that is at least the requested capacity
|
||||
/// and not more than the allocated capacity.
|
||||
///
|
||||
/// The method [`Vec::shrink_to_fit`] will attempt to discard excess capacity an allocator has given to a `Vec`.
|
||||
/// If <code>[len] == [capacity]</code>, then a `Vec<T>` can be converted
|
||||
/// to and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements.
|
||||
/// `Vec` exploits this fact as much as reasonable when implementing common conversions
|
||||
/// such as [`into_boxed_slice`].
|
||||
///
|
||||
/// `Vec` will not specifically overwrite any data that is removed from it,
|
||||
/// but also won't specifically preserve it. Its uninitialized memory is
|
||||
@ -383,14 +392,17 @@ mod spec_extend;
|
||||
/// [`shrink_to`]: Vec::shrink_to
|
||||
/// [capacity]: Vec::capacity
|
||||
/// [`capacity`]: Vec::capacity
|
||||
/// [`Vec::capacity`]: Vec::capacity
|
||||
/// [mem::size_of::\<T>]: core::mem::size_of
|
||||
/// [len]: Vec::len
|
||||
/// [`len`]: Vec::len
|
||||
/// [`push`]: Vec::push
|
||||
/// [`insert`]: Vec::insert
|
||||
/// [`reserve`]: Vec::reserve
|
||||
/// [`Vec::with_capacity(n)`]: Vec::with_capacity
|
||||
/// [`MaybeUninit`]: core::mem::MaybeUninit
|
||||
/// [owned slice]: Box
|
||||
/// [`into_boxed_slice`]: Vec::into_boxed_slice
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[cfg_attr(not(test), rustc_diagnostic_item = "Vec")]
|
||||
#[rustc_insignificant_dtor]
|
||||
@ -3684,7 +3696,6 @@ impl<T, A: Allocator> Vec<T, A> {
|
||||
/// Splitting an array into evens and odds, reusing the original allocation:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(extract_if)]
|
||||
/// let mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];
|
||||
///
|
||||
/// let evens = numbers.extract_if(.., |x| *x % 2 == 0).collect::<Vec<_>>();
|
||||
@ -3697,13 +3708,12 @@ impl<T, A: Allocator> Vec<T, A> {
|
||||
/// Using the range argument to only process a part of the vector:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(extract_if)]
|
||||
/// let mut items = vec![0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2];
|
||||
/// let ones = items.extract_if(7.., |x| *x == 1).collect::<Vec<_>>();
|
||||
/// assert_eq!(items, vec![0, 0, 0, 0, 0, 0, 0, 2, 2, 2]);
|
||||
/// assert_eq!(ones.len(), 3);
|
||||
/// ```
|
||||
#[unstable(feature = "extract_if", reason = "recently added", issue = "43244")]
|
||||
#[stable(feature = "extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub fn extract_if<F, R>(&mut self, range: R, filter: F) -> ExtractIf<'_, T, F, A>
|
||||
where
|
||||
F: FnMut(&mut T) -> bool,
|
||||
|
@ -7,7 +7,6 @@
|
||||
#![feature(cow_is_borrowed)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(downcast_unchecked)]
|
||||
#![feature(extract_if)]
|
||||
#![feature(exact_size_is_empty)]
|
||||
#![feature(hashmap_internals)]
|
||||
#![feature(linked_list_cursors)]
|
||||
@ -29,7 +28,6 @@
|
||||
#![feature(string_remove_matches)]
|
||||
#![feature(const_btree_len)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_str_from_utf8)]
|
||||
#![feature(panic_update_hook)]
|
||||
#![feature(pointer_is_aligned_to)]
|
||||
#![feature(test)]
|
||||
|
@ -1041,7 +1041,6 @@ impl<T> MaybeUninit<T> {
|
||||
|
||||
/// Deprecated version of [`slice::assume_init_ref`].
|
||||
#[unstable(feature = "maybe_uninit_slice", issue = "63569")]
|
||||
#[rustc_const_unstable(feature = "maybe_uninit_slice", issue = "63569")]
|
||||
#[deprecated(
|
||||
note = "replaced by inherent assume_init_ref method; will eventually be removed",
|
||||
since = "1.83.0"
|
||||
@ -1053,7 +1052,6 @@ impl<T> MaybeUninit<T> {
|
||||
|
||||
/// Deprecated version of [`slice::assume_init_mut`].
|
||||
#[unstable(feature = "maybe_uninit_slice", issue = "63569")]
|
||||
#[rustc_const_unstable(feature = "maybe_uninit_slice", issue = "63569")]
|
||||
#[deprecated(
|
||||
note = "replaced by inherent assume_init_mut method; will eventually be removed",
|
||||
since = "1.83.0"
|
||||
@ -1326,7 +1324,6 @@ impl<T> [MaybeUninit<T>] {
|
||||
///
|
||||
/// [`write_clone_of_slice`]: slice::write_clone_of_slice
|
||||
#[unstable(feature = "maybe_uninit_write_slice", issue = "79995")]
|
||||
#[rustc_const_unstable(feature = "maybe_uninit_write_slice", issue = "79995")]
|
||||
pub const fn write_copy_of_slice(&mut self, src: &[T]) -> &mut [T]
|
||||
where
|
||||
T: Copy,
|
||||
|
@ -956,7 +956,6 @@ impl<T> [T] {
|
||||
/// [`swap`]: slice::swap
|
||||
/// [undefined behavior]: https://doc.rust-lang.org/reference/behavior-considered-undefined.html
|
||||
#[unstable(feature = "slice_swap_unchecked", issue = "88539")]
|
||||
#[rustc_const_unstable(feature = "slice_swap_unchecked", issue = "88539")]
|
||||
pub const unsafe fn swap_unchecked(&mut self, a: usize, b: usize) {
|
||||
assert_unsafe_precondition!(
|
||||
check_library_ub,
|
||||
@ -3734,6 +3733,7 @@ impl<T> [T] {
|
||||
#[inline]
|
||||
#[stable(feature = "copy_from_slice", since = "1.9.0")]
|
||||
#[rustc_const_unstable(feature = "const_copy_from_slice", issue = "131415")]
|
||||
#[rustc_const_stable_indirect]
|
||||
#[track_caller]
|
||||
pub const fn copy_from_slice(&mut self, src: &[T])
|
||||
where
|
||||
|
@ -126,7 +126,7 @@ pub const fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error> {
|
||||
/// See the docs for [`Utf8Error`] for more details on the kinds of
|
||||
/// errors that can be returned.
|
||||
#[stable(feature = "str_mut_extras", since = "1.20.0")]
|
||||
#[rustc_const_unstable(feature = "const_str_from_utf8", issue = "91006")]
|
||||
#[rustc_const_stable(feature = "const_str_from_utf8", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[rustc_diagnostic_item = "str_from_utf8_mut"]
|
||||
pub const fn from_utf8_mut(v: &mut [u8]) -> Result<&mut str, Utf8Error> {
|
||||
// FIXME(const-hack): This should use `?` again, once it's `const`
|
||||
|
@ -265,7 +265,7 @@ impl str {
|
||||
/// See the docs for [`Utf8Error`] for more details on the kinds of
|
||||
/// errors that can be returned.
|
||||
#[stable(feature = "inherent_str_constructors", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[rustc_const_unstable(feature = "const_str_from_utf8", issue = "91006")]
|
||||
#[rustc_const_stable(feature = "const_str_from_utf8", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[rustc_diagnostic_item = "str_inherent_from_utf8_mut"]
|
||||
pub const fn from_utf8_mut(v: &mut [u8]) -> Result<&mut str, Utf8Error> {
|
||||
converts::from_utf8_mut(v)
|
||||
|
@ -656,7 +656,6 @@ impl<K, V, S> HashMap<K, V, S> {
|
||||
/// Splitting a map into even and odd keys, reusing the original map:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(hash_extract_if)]
|
||||
/// use std::collections::HashMap;
|
||||
///
|
||||
/// let mut map: HashMap<i32, i32> = (0..8).map(|x| (x, x)).collect();
|
||||
@ -672,7 +671,7 @@ impl<K, V, S> HashMap<K, V, S> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[rustc_lint_query_instability]
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F>
|
||||
where
|
||||
F: FnMut(&K, &mut V) -> bool,
|
||||
@ -1722,8 +1721,6 @@ impl<'a, K, V> Drain<'a, K, V> {
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(hash_extract_if)]
|
||||
///
|
||||
/// use std::collections::HashMap;
|
||||
///
|
||||
/// let mut map = HashMap::from([
|
||||
@ -1731,7 +1728,7 @@ impl<'a, K, V> Drain<'a, K, V> {
|
||||
/// ]);
|
||||
/// let iter = map.extract_if(|_k, v| *v % 2 == 0);
|
||||
/// ```
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[must_use = "iterators are lazy and do nothing unless consumed"]
|
||||
pub struct ExtractIf<'a, K, V, F>
|
||||
where
|
||||
@ -2746,7 +2743,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<K, V, F> Iterator for ExtractIf<'_, K, V, F>
|
||||
where
|
||||
F: FnMut(&K, &mut V) -> bool,
|
||||
@ -2763,10 +2760,10 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<K, V, F> FusedIterator for ExtractIf<'_, K, V, F> where F: FnMut(&K, &mut V) -> bool {}
|
||||
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<'a, K, V, F> fmt::Debug for ExtractIf<'a, K, V, F>
|
||||
where
|
||||
F: FnMut(&K, &mut V) -> bool,
|
||||
|
@ -293,7 +293,6 @@ impl<T, S> HashSet<T, S> {
|
||||
/// Splitting a set into even and odd values, reusing the original set:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(hash_extract_if)]
|
||||
/// use std::collections::HashSet;
|
||||
///
|
||||
/// let mut set: HashSet<i32> = (0..8).collect();
|
||||
@ -309,7 +308,7 @@ impl<T, S> HashSet<T, S> {
|
||||
/// ```
|
||||
#[inline]
|
||||
#[rustc_lint_query_instability]
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, T, F>
|
||||
where
|
||||
F: FnMut(&T) -> bool,
|
||||
@ -1385,15 +1384,13 @@ pub struct Drain<'a, K: 'a> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(hash_extract_if)]
|
||||
///
|
||||
/// use std::collections::HashSet;
|
||||
///
|
||||
/// let mut a = HashSet::from([1, 2, 3]);
|
||||
///
|
||||
/// let mut extract_ifed = a.extract_if(|v| v % 2 == 0);
|
||||
/// ```
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub struct ExtractIf<'a, K, F>
|
||||
where
|
||||
F: FnMut(&K) -> bool,
|
||||
@ -1676,7 +1673,7 @@ impl<K: fmt::Debug> fmt::Debug for Drain<'_, K> {
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<K, F> Iterator for ExtractIf<'_, K, F>
|
||||
where
|
||||
F: FnMut(&K) -> bool,
|
||||
@ -1693,10 +1690,10 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<K, F> FusedIterator for ExtractIf<'_, K, F> where F: FnMut(&K) -> bool {}
|
||||
|
||||
#[unstable(feature = "hash_extract_if", issue = "59618")]
|
||||
#[stable(feature = "hash_extract_if", since = "CURRENT_RUSTC_VERSION")]
|
||||
impl<'a, K, F> fmt::Debug for ExtractIf<'a, K, F>
|
||||
where
|
||||
F: FnMut(&K) -> bool,
|
||||
|
@ -1,6 +1,6 @@
|
||||
use super::abi;
|
||||
use super::abi::fileno;
|
||||
use crate::io;
|
||||
use crate::io::{self, BorrowedCursor};
|
||||
|
||||
pub struct Stdin;
|
||||
pub struct Stdout;
|
||||
@ -16,6 +16,14 @@ impl io::Read for Stdin {
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
Ok(unsafe { abi::sys_read(fileno::STDIN, buf.as_mut_ptr(), buf.len()) })
|
||||
}
|
||||
|
||||
fn read_buf(&mut self, mut buf: BorrowedCursor<'_>) -> io::Result<()> {
|
||||
unsafe {
|
||||
let n = abi::sys_read(fileno::STDIN, buf.as_mut().as_mut_ptr().cast(), buf.capacity());
|
||||
buf.advance_unchecked(n);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Stdout {
|
||||
|
@ -776,6 +776,6 @@ if __name__ == "__main__":
|
||||
f.write(contents)
|
||||
|
||||
p("")
|
||||
p("run `python {}/x.py --help`".format(rust_dir))
|
||||
p("run `{} {}/x.py --help`".format(os.path.basename(sys.executable), rust_dir))
|
||||
if "GITHUB_ACTIONS" in os.environ:
|
||||
print("::endgroup::")
|
||||
|
@ -15,7 +15,6 @@
|
||||
#![feature(unqualified_local_imports)]
|
||||
#![feature(derive_coerce_pointee)]
|
||||
#![feature(arbitrary_self_types)]
|
||||
#![feature(extract_if)]
|
||||
// Configure clippy and other lints
|
||||
#![allow(
|
||||
clippy::collapsible_else_if,
|
||||
|
Loading…
x
Reference in New Issue
Block a user