Mir borrowck does not generate lifetime variables for 'static lifetimes during opaque type resolution
This commit is contained in:
parent
fc24bcead1
commit
2953a2fb18
2 changed files with 74 additions and 0 deletions
|
@ -83,6 +83,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
.and_then(|ur_vid| self.definitions[*ur_vid].external_name)
|
.and_then(|ur_vid| self.definitions[*ur_vid].external_name)
|
||||||
.unwrap_or(infcx.tcx.lifetimes.re_root_empty),
|
.unwrap_or(infcx.tcx.lifetimes.re_root_empty),
|
||||||
ty::ReLateBound(..) => region,
|
ty::ReLateBound(..) => region,
|
||||||
|
ty::ReStatic => region,
|
||||||
_ => {
|
_ => {
|
||||||
infcx.tcx.sess.delay_span_bug(
|
infcx.tcx.sess.delay_span_bug(
|
||||||
span,
|
span,
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
// check-pass
|
||||||
|
|
||||||
|
use std::error::Error as StdError;
|
||||||
|
use std::pin::Pin;
|
||||||
|
use std::task::{Context, Poll};
|
||||||
|
|
||||||
|
pub trait Stream {
|
||||||
|
type Item;
|
||||||
|
fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>;
|
||||||
|
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||||
|
(0, None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait TryStream: Stream {
|
||||||
|
type Ok;
|
||||||
|
type Error;
|
||||||
|
|
||||||
|
fn try_poll_next(
|
||||||
|
self: Pin<&mut Self>,
|
||||||
|
cx: &mut Context<'_>,
|
||||||
|
) -> Poll<Option<Result<Self::Ok, Self::Error>>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S, T, E> TryStream for S
|
||||||
|
where
|
||||||
|
S: ?Sized + Stream<Item = Result<T, E>>,
|
||||||
|
{
|
||||||
|
type Ok = T;
|
||||||
|
type Error = E;
|
||||||
|
|
||||||
|
fn try_poll_next(
|
||||||
|
self: Pin<&mut Self>,
|
||||||
|
cx: &mut Context<'_>,
|
||||||
|
) -> Poll<Option<Result<Self::Ok, Self::Error>>> {
|
||||||
|
self.poll_next(cx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait ServerSentEvent: Sized + Send + Sync + 'static {}
|
||||||
|
|
||||||
|
impl<T: Send + Sync + 'static> ServerSentEvent for T {}
|
||||||
|
|
||||||
|
struct SseKeepAlive<S> {
|
||||||
|
event_stream: S,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SseComment<T>(T);
|
||||||
|
|
||||||
|
impl<S> Stream for SseKeepAlive<S>
|
||||||
|
where
|
||||||
|
S: TryStream + Send + 'static,
|
||||||
|
S::Ok: ServerSentEvent,
|
||||||
|
S::Error: StdError + Send + Sync + 'static,
|
||||||
|
{
|
||||||
|
type Item = Result<SseComment<&'static str>, ()>;
|
||||||
|
fn poll_next(self: Pin<&mut Self>, _cx: &mut Context) -> Poll<Option<Self::Item>> {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn keep<S>(
|
||||||
|
event_stream: S,
|
||||||
|
) -> impl TryStream<Ok = impl ServerSentEvent + Send + 'static, Error = ()> + Send + 'static
|
||||||
|
where
|
||||||
|
S: TryStream + Send + 'static,
|
||||||
|
S::Ok: ServerSentEvent + Send,
|
||||||
|
S::Error: StdError + Send + Sync + 'static,
|
||||||
|
{
|
||||||
|
SseKeepAlive { event_stream }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue