internal: add future to minicore

This commit is contained in:
Aleksey Kladov 2021-06-15 22:49:00 +03:00
parent 2eef66a2ed
commit 3efe5c3426
2 changed files with 39 additions and 12 deletions

View File

@ -6,10 +6,10 @@ use super::{check_infer, check_infer_with_mismatches, check_types};
fn infer_await() { fn infer_await() {
check_types( check_types(
r#" r#"
//- /main.rs crate:main deps:core //- minicore: future
struct IntFuture; struct IntFuture;
impl Future for IntFuture { impl core::future::Future for IntFuture {
type Output = u64; type Output = u64;
} }
@ -18,16 +18,6 @@ fn test() {
let v = r.await; let v = r.await;
v; v;
} //^ u64 } //^ u64
//- /core.rs crate:core
pub mod prelude {
pub mod rust_2018 {
#[lang = "future_trait"]
pub trait Future {
type Output;
}
}
}
"#, "#,
); );
} }

View File

@ -14,6 +14,8 @@
//! unsize: sized //! unsize: sized
//! deref: sized //! deref: sized
//! coerce_unsized: unsize //! coerce_unsized: unsize
//! pin:
//! future: pin
pub mod marker { pub mod marker {
// region:sized // region:sized
@ -113,6 +115,41 @@ pub mod slice {
} }
// endregion:slice // endregion:slice
// region:pin
pub mod pin {
#[lang = "pin"]
#[fundamental]
pub struct Pin<P> {
pointer: P,
}
}
// endregion:pin
// region:future
pub mod future {
use crate::{pin::Pin, task::{Poll, Context}};
#[lang = "future_trait"]
pub trait Future {
type Output;
#[lang = "poll"]
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>;
}
}
pub mod task {
pub enum Poll<T> {
#[lang = "Ready"]
Ready(T),
#[lang = "Pending"]
Pending,
}
pub struct Context<'a> {
waker: &'a (),
}
}
// endregion:future
pub mod prelude { pub mod prelude {
pub mod v1 { pub mod v1 {
pub use crate::marker::Sized; // :sized pub use crate::marker::Sized; // :sized