about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/hir/lowering/expr.rs46
1 files changed, 24 insertions, 22 deletions
diff --git a/src/librustc/hir/lowering/expr.rs b/src/librustc/hir/lowering/expr.rs
index 0c626d6b15f..9b4074294b3 100644
--- a/src/librustc/hir/lowering/expr.rs
+++ b/src/librustc/hir/lowering/expr.rs
@@ -505,28 +505,7 @@ impl LoweringContext<'_> {
                 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 @@ impl LoweringContext<'_> {
         }
     }
 
+    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
     /// {