From 3efe5c3426a311b6d617f9718b82e9a598dfa06d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 15 Jun 2021 22:49:00 +0300 Subject: [PATCH] internal: add future to minicore --- crates/hir_ty/src/tests/traits.rs | 14 ++---------- crates/test_utils/src/minicore.rs | 37 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/crates/hir_ty/src/tests/traits.rs b/crates/hir_ty/src/tests/traits.rs index fb13e3ac5dd..33689e08192 100644 --- a/crates/hir_ty/src/tests/traits.rs +++ b/crates/hir_ty/src/tests/traits.rs @@ -6,10 +6,10 @@ fn infer_await() { check_types( r#" -//- /main.rs crate:main deps:core +//- minicore: future struct IntFuture; -impl Future for IntFuture { +impl core::future::Future for IntFuture { type Output = u64; } @@ -18,16 +18,6 @@ fn test() { let v = r.await; v; } //^ u64 - -//- /core.rs crate:core -pub mod prelude { - pub mod rust_2018 { - #[lang = "future_trait"] - pub trait Future { - type Output; - } - } -} "#, ); } diff --git a/crates/test_utils/src/minicore.rs b/crates/test_utils/src/minicore.rs index 8c0d122dc83..127d06e5971 100644 --- a/crates/test_utils/src/minicore.rs +++ b/crates/test_utils/src/minicore.rs @@ -14,6 +14,8 @@ //! unsize: sized //! deref: sized //! coerce_unsized: unsize +//! pin: +//! future: pin pub mod marker { // region:sized @@ -113,6 +115,41 @@ pub fn len(&self) -> usize { } // endregion:slice +// region:pin +pub mod pin { + #[lang = "pin"] + #[fundamental] + pub struct Pin

{ + 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; + } +} +pub mod task { + pub enum Poll { + #[lang = "Ready"] + Ready(T), + #[lang = "Pending"] + Pending, + } + + pub struct Context<'a> { + waker: &'a (), + } +} +// endregion:future + pub mod prelude { pub mod v1 { pub use crate::marker::Sized; // :sized -- 2.44.0