+
+ // Calls `f` with the internal `let_expr_allowed` set to `let_expr_allowed` and then
+ // sets the internal `let_expr_allowed` back to its original value.
+ fn with_let_management<T>(
+ &mut self,
+ let_expr_allowed: bool,
+ f: impl FnOnce(&mut Self) -> T,
+ ) -> T {
+ let last_let_expr_allowed = mem::replace(&mut self.let_expr_allowed, let_expr_allowed);
+ let rslt = f(self);
+ self.let_expr_allowed = last_let_expr_allowed;
+ rslt
+ }