aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2021-06-15 20:49:00 +0100
committerAleksey Kladov <[email protected]>2021-06-15 20:49:00 +0100
commit3efe5c3426a311b6d617f9718b82e9a598dfa06d (patch)
tree261a0436ebf1192644ce398144d005e767326fbc
parent2eef66a2ed9b02962511e38c620efb23e2d65b00 (diff)
internal: add future to minicore
-rw-r--r--crates/hir_ty/src/tests/traits.rs14
-rw-r--r--crates/test_utils/src/minicore.rs37
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 fb13e3ac5..33689e081 100644
--- a/crates/hir_ty/src/tests/traits.rs
+++ b/crates/hir_ty/src/tests/traits.rs
@@ -6,10 +6,10 @@ use super::{check_infer, check_infer_with_mismatches, check_types};
6fn infer_await() { 6fn infer_await() {
7 check_types( 7 check_types(
8 r#" 8 r#"
9//- /main.rs crate:main deps:core 9//- minicore: future
10struct IntFuture; 10struct IntFuture;
11 11
12impl Future for IntFuture { 12impl core::future::Future for IntFuture {
13 type Output = u64; 13 type Output = u64;
14} 14}
15 15
@@ -18,16 +18,6 @@ fn test() {
18 let v = r.await; 18 let v = r.await;
19 v; 19 v;
20} //^ u64 20} //^ u64
21
22//- /core.rs crate:core
23pub mod prelude {
24 pub mod rust_2018 {
25 #[lang = "future_trait"]
26 pub trait Future {
27 type Output;
28 }
29 }
30}
31"#, 21"#,
32 ); 22 );
33} 23}
diff --git a/crates/test_utils/src/minicore.rs b/crates/test_utils/src/minicore.rs
index 8c0d122dc..127d06e59 100644
--- a/crates/test_utils/src/minicore.rs
+++ b/crates/test_utils/src/minicore.rs
@@ -14,6 +14,8 @@
14//! unsize: sized 14//! unsize: sized
15//! deref: sized 15//! deref: sized
16//! coerce_unsized: unsize 16//! coerce_unsized: unsize
17//! pin:
18//! future: pin
17 19
18pub mod marker { 20pub mod marker {
19 // region:sized 21 // region:sized
@@ -113,6 +115,41 @@ pub mod slice {
113} 115}
114// endregion:slice 116// endregion:slice
115 117
118// region:pin
119pub mod pin {
120 #[lang = "pin"]
121 #[fundamental]
122 pub struct Pin<P> {
123 pointer: P,
124 }
125}
126// endregion:pin
127
128// region:future
129pub mod future {
130 use crate::{pin::Pin, task::{Poll, Context}};
131
132 #[lang = "future_trait"]
133 pub trait Future {
134 type Output;
135 #[lang = "poll"]
136 fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>;
137 }
138}
139pub mod task {
140 pub enum Poll<T> {
141 #[lang = "Ready"]
142 Ready(T),
143 #[lang = "Pending"]
144 Pending,
145 }
146
147 pub struct Context<'a> {
148 waker: &'a (),
149 }
150}
151// endregion:future
152
116pub mod prelude { 153pub mod prelude {
117 pub mod v1 { 154 pub mod v1 {
118 pub use crate::marker::Sized; // :sized 155 pub use crate::marker::Sized; // :sized