internal: add iterator to minicore

This commit is contained in:
Aleksey Kladov 2021-06-16 22:48:48 +03:00
parent 7ba5482a04
commit 604267088c
2 changed files with 38 additions and 39 deletions

View File

@ -418,48 +418,17 @@ fn issue_2705() {
fn issue_2683_chars_impl() { fn issue_2683_chars_impl() {
check_types( check_types(
r#" r#"
//- /main.rs crate:main deps:std //- minicore: iterator
pub struct Chars<'a> {}
impl<'a> Iterator for Chars<'a> {
type Item = char;
fn next(&mut self) -> Option<char> {}
}
fn test() { fn test() {
let chars: std::str::Chars<'_>; let chars: Chars<'_>;
(chars.next(), chars.nth(1)); (chars.next(), chars.nth(1));
} //^ (Option<char>, Option<char>) } //^ (Option<char>, Option<char>)
//- /std.rs crate:std
#[prelude_import]
use self::prelude::rust_2018::*;
pub mod prelude {
pub mod rust_2018 {
pub use crate::iter::Iterator;
pub use crate::option::Option;
}
}
pub mod iter {
pub use self::traits::Iterator;
pub mod traits {
pub use self::iterator::Iterator;
pub mod iterator {
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
fn nth(&mut self, n: usize) -> Option<Self::Item> {}
}
}
}
}
pub mod option {
pub enum Option<T> {}
}
pub mod str {
pub struct Chars<'a> {}
impl<'a> Iterator for Chars<'a> {
type Item = char;
fn next(&mut self) -> Option<char> {}
}
}
"#, "#,
); );
} }

View File

@ -20,6 +20,7 @@
//! future: pin //! future: pin
//! option: //! option:
//! result: //! result:
//! iterator: option
pub mod marker { pub mod marker {
// region:sized // region:sized
@ -206,9 +207,38 @@ pub mod task {
} }
// endregion:future // endregion:future
// region:iterator
pub mod iter {
mod traits {
mod iterator {
pub trait Iterator {
type Item;
#[lang = "next"]
fn next(&mut self) -> Option<Self::Item>;
fn nth(&mut self, n: usize) -> Option<Self::Item> {
loop {}
}
}
}
mod collect {
pub trait IntoIterator {
type Item;
type IntoIter: Iterator<Item = Self::Item>;
#[lang = "into_iter"]
fn into_iter(self) -> Self::IntoIter;
}
}
pub use self::collect::IntoIterator;
pub use self::iterator::Iterator;
}
pub use self::traits::{IntoIterator, Iterator};
}
// endregion:iterator
pub mod prelude { pub mod prelude {
pub mod v1 { pub mod v1 {
pub use crate::{ pub use crate::{
iter::{IntoIterator, Iterator}, // :iterator
marker::Sized, // :sized marker::Sized, // :sized
ops::{Fn, FnMut, FnOnce}, // :fn ops::{Fn, FnMut, FnOnce}, // :fn
option::Option::{self, None, Some}, // :option option::Option::{self, None, Some}, // :option