@@ -562,8 +562,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
562562 )
563563 }
564564
565- /// Desugar `try { <stmts>; <expr> }` into `{ <stmts>; ::std::ops::Try::from_ok (<expr>) }`,
566- /// `try { <stmts>; }` into `{ <stmts>; ::std::ops::Try::from_ok (()) }`
565+ /// Desugar `try { <stmts>; <expr> }` into `{ <stmts>; ::std::ops::Try::from_output (<expr>) }`,
566+ /// `try { <stmts>; }` into `{ <stmts>; ::std::ops::Try::from_output (()) }`
567567 /// and save the block id to use it as a break target for desugaring of the `?` operator.
568568 fn lower_expr_try_block(&mut self, body: &Block) -> hir::ExprKind<'hir> {
569569 self.with_catch_scope(body.id, |this| {
@@ -592,9 +592,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
592592 let ok_wrapped_span =
593593 this.mark_span_with_reason(DesugaringKind::TryBlock, tail_expr.span, None);
594594
595- // `::std::ops::Try::from_ok ($tail_expr)`
595+ // `::std::ops::Try::from_output ($tail_expr)`
596596 block.expr = Some(this.wrap_in_try_constructor(
597- hir::LangItem::TryFromOk ,
597+ hir::LangItem::TryTraitFromOutput ,
598598 try_span,
599599 tail_expr,
600600 ok_wrapped_span,
@@ -1896,14 +1896,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
18961896 self.allow_try_trait.clone(),
18971897 );
18981898
1899- // `Try::into_result (<expr>)`
1899+ // `Try::branch (<expr>)`
19001900 let scrutinee = {
19011901 // expand <expr>
19021902 let sub_expr = self.lower_expr_mut(sub_expr);
19031903
19041904 self.expr_call_lang_item_fn(
19051905 unstable_span,
1906- hir::LangItem::TryIntoResult ,
1906+ hir::LangItem::TryTraitBranch ,
19071907 arena_vec![self; sub_expr],
19081908 )
19091909 };
@@ -1921,8 +1921,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
19211921 };
19221922 let attrs = vec![attr];
19231923
1924- // `Ok (val) => #[allow(unreachable_code)] val,`
1925- let ok_arm = {
1924+ // `ControlFlow::Continue (val) => #[allow(unreachable_code)] val,`
1925+ let continue_arm = {
19261926 let val_ident = Ident::with_dummy_span(sym::val);
19271927 let (val_pat, val_pat_nid) = self.pat_ident(span, val_ident);
19281928 let val_expr = self.arena.alloc(self.expr_ident_with_attrs(
@@ -1931,27 +1931,21 @@ impl<'hir> LoweringContext<'_, 'hir> {
19311931 val_pat_nid,
19321932 ThinVec::from(attrs.clone()),
19331933 ));
1934- let ok_pat = self.pat_ok(span , val_pat);
1935- self.arm(ok_pat , val_expr)
1934+ let continue_pat = self.pat_cf_continue(unstable_span , val_pat);
1935+ self.arm(continue_pat , val_expr)
19361936 };
19371937
1938- // `Err(err) => #[allow(unreachable_code)]
1939- // return Try::from_error(From::from(err)),`
1940- let err_arm = {
1941- let err_ident = Ident::with_dummy_span(sym::err);
1942- let (err_local, err_local_nid) = self.pat_ident(try_span, err_ident);
1943- let from_expr = {
1944- let err_expr = self.expr_ident_mut(try_span, err_ident, err_local_nid);
1945- self.expr_call_lang_item_fn(
1946- try_span,
1947- hir::LangItem::FromFrom,
1948- arena_vec![self; err_expr],
1949- )
1950- };
1951- let from_err_expr = self.wrap_in_try_constructor(
1952- hir::LangItem::TryFromError,
1953- unstable_span,
1954- from_expr,
1938+ // `ControlFlow::Break(residual) =>
1939+ // #[allow(unreachable_code)]
1940+ // return Try::from_residual(residual),`
1941+ let break_arm = {
1942+ let residual_ident = Ident::with_dummy_span(sym::residual);
1943+ let (residual_local, residual_local_nid) = self.pat_ident(try_span, residual_ident);
1944+ let residual_expr = self.expr_ident_mut(try_span, residual_ident, residual_local_nid);
1945+ let from_residual_expr = self.wrap_in_try_constructor(
1946+ hir::LangItem::TryTraitFromResidual,
1947+ try_span,
1948+ self.arena.alloc(residual_expr),
19551949 unstable_span,
19561950 );
19571951 let thin_attrs = ThinVec::from(attrs);
@@ -1962,25 +1956,25 @@ impl<'hir> LoweringContext<'_, 'hir> {
19621956 try_span,
19631957 hir::ExprKind::Break(
19641958 hir::Destination { label: None, target_id },
1965- Some(from_err_expr ),
1959+ Some(from_residual_expr ),
19661960 ),
19671961 thin_attrs,
19681962 ))
19691963 } else {
19701964 self.arena.alloc(self.expr(
19711965 try_span,
1972- hir::ExprKind::Ret(Some(from_err_expr )),
1966+ hir::ExprKind::Ret(Some(from_residual_expr )),
19731967 thin_attrs,
19741968 ))
19751969 };
19761970
1977- let err_pat = self.pat_err (try_span, err_local );
1978- self.arm(err_pat , ret_expr)
1971+ let break_pat = self.pat_cf_break (try_span, residual_local );
1972+ self.arm(break_pat , ret_expr)
19791973 };
19801974
19811975 hir::ExprKind::Match(
19821976 scrutinee,
1983- arena_vec![self; err_arm, ok_arm ],
1977+ arena_vec![self; break_arm, continue_arm ],
19841978 hir::MatchSource::TryDesugar,
19851979 )
19861980 }
0 commit comments