diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-08-10 16:42:14 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-08-10 20:24:43 +0200 |
| commit | 5cba0ac0bf60644130992bb2b0e730911782e85a (patch) | |
| tree | 4ab5b4bd00968642e786c183ce1885d0ebc10946 | |
| parent | 199d5859812e3b9d6f2171df8fe637fb9777868f (diff) | |
| download | rust-5cba0ac0bf60644130992bb2b0e730911782e85a.tar.gz rust-5cba0ac0bf60644130992bb2b0e730911782e85a.zip | |
lowering: move make_async_expr -> expr.rs
| -rw-r--r-- | src/librustc/hir/lowering.rs | 41 | ||||
| -rw-r--r-- | src/librustc/hir/lowering/expr.rs | 56 |
2 files changed, 56 insertions, 41 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index db70d18bd83..12d3ebb3e0f 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -1151,47 +1151,6 @@ impl<'a> LoweringContext<'a> { result } - fn make_async_expr( - &mut self, - capture_clause: CaptureBy, - closure_node_id: NodeId, - ret_ty: Option<AstP<Ty>>, - span: Span, - body: impl FnOnce(&mut LoweringContext<'_>) -> hir::Expr, - ) -> hir::ExprKind { - let capture_clause = self.lower_capture_clause(capture_clause); - let output = match ret_ty { - Some(ty) => FunctionRetTy::Ty(ty), - None => FunctionRetTy::Default(span), - }; - let ast_decl = FnDecl { - inputs: vec![], - output, - c_variadic: false - }; - let decl = self.lower_fn_decl(&ast_decl, None, /* impl trait allowed */ false, None); - let body_id = self.lower_fn_body(&ast_decl, |this| { - this.generator_kind = Some(hir::GeneratorKind::Async); - body(this) - }); - let generator = hir::Expr { - hir_id: self.lower_node_id(closure_node_id), - node: hir::ExprKind::Closure(capture_clause, decl, body_id, span, - Some(hir::GeneratorMovability::Static)), - span, - attrs: ThinVec::new(), - }; - - let unstable_span = self.mark_span_with_reason( - DesugaringKind::Async, - span, - self.allow_gen_future.clone(), - ); - let gen_future = self.expr_std_path( - unstable_span, &[sym::future, sym::from_generator], None, ThinVec::new()); - hir::ExprKind::Call(P(gen_future), hir_vec![generator]) - } - fn lower_body( &mut self, f: impl FnOnce(&mut LoweringContext<'_>) -> (HirVec<hir::Arg>, hir::Expr), diff --git a/src/librustc/hir/lowering/expr.rs b/src/librustc/hir/lowering/expr.rs index 25a77f95a57..2ff67ac877c 100644 --- a/src/librustc/hir/lowering/expr.rs +++ b/src/librustc/hir/lowering/expr.rs @@ -416,6 +416,62 @@ impl LoweringContext<'_> { P(self.expr_call(e.span, from_err, hir_vec![e])) } + pub(super) fn make_async_expr( + &mut self, + capture_clause: CaptureBy, + closure_node_id: NodeId, + ret_ty: Option<AstP<Ty>>, + span: Span, + body: impl FnOnce(&mut LoweringContext<'_>) -> hir::Expr, + ) -> hir::ExprKind { + let capture_clause = self.lower_capture_clause(capture_clause); + let output = match ret_ty { + Some(ty) => FunctionRetTy::Ty(ty), + None => FunctionRetTy::Default(span), + }; + let ast_decl = FnDecl { + inputs: vec![], + output, + c_variadic: false + }; + let decl = self.lower_fn_decl(&ast_decl, None, /* impl trait allowed */ false, None); + let body_id = self.lower_fn_body(&ast_decl, |this| { + this.generator_kind = Some(hir::GeneratorKind::Async); + body(this) + }); + + // `static || -> <ret_ty> { body }`: + let generator_node = hir::ExprKind::Closure( + capture_clause, + decl, + body_id, + span, + Some(hir::GeneratorMovability::Static) + ); + let generator = hir::Expr { + hir_id: self.lower_node_id(closure_node_id), + node: generator_node, + span, + attrs: ThinVec::new(), + }; + + // `future::from_generator`: + let unstable_span = self.mark_span_with_reason( + DesugaringKind::Async, + span, + self.allow_gen_future.clone(), + ); + let gen_future = self.expr_std_path( + unstable_span, + &[sym::future, sym::from_generator], + None, + ThinVec::new() + ); + + // `future::from_generator(generator)`: + hir::ExprKind::Call(P(gen_future), hir_vec![generator]) + } + /// Desugar `<expr>.await` into: /// ```rust /// { |
