lowering: extract lower_expr_yield

This commit is contained in:
Mazdak Farrokhzad
2019-08-10 14:24:34 +02:00
parent 9d739ca12d
commit 45d507d39e
+24 -22
View File
@@ -505,28 +505,7 @@ pub(super) fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
return ex;
}
ExprKind::Yield(ref opt_expr) => {
match self.generator_kind {
Some(hir::GeneratorKind::Gen) => {},
Some(hir::GeneratorKind::Async) => {
span_err!(
self.sess,
e.span,
E0727,
"`async` generators are not yet supported",
);
self.sess.abort_if_errors();
},
None => {
self.generator_kind = Some(hir::GeneratorKind::Gen);
}
}
let expr = opt_expr
.as_ref()
.map(|x| self.lower_expr(x))
.unwrap_or_else(|| self.expr_unit(e.span));
hir::ExprKind::Yield(P(expr), hir::YieldSource::Yield)
}
ExprKind::Yield(ref opt_expr) => self.lower_expr_yield(e.span, opt_expr.as_deref()),
ExprKind::Err => hir::ExprKind::Err,
@@ -547,6 +526,29 @@ pub(super) fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
}
}
fn lower_expr_yield(&mut self, span: Span, opt_expr: Option<&Expr>) -> hir::ExprKind {
match self.generator_kind {
Some(hir::GeneratorKind::Gen) => {},
Some(hir::GeneratorKind::Async) => {
span_err!(
self.sess,
span,
E0727,
"`async` generators are not yet supported",
);
self.sess.abort_if_errors();
},
None => self.generator_kind = Some(hir::GeneratorKind::Gen),
}
let expr = opt_expr
.as_ref()
.map(|x| self.lower_expr(x))
.unwrap_or_else(|| self.expr_unit(span));
hir::ExprKind::Yield(P(expr), hir::YieldSource::Yield)
}
/// Desugar `ExprForLoop` from: `[opt_ident]: for <pat> in <head> <body>` into:
/// ```rust
/// {