Parses the left-hand side of an expression. This includes prefix expressions such as unary operators, boolean `not`, `await`, `lambda`. It also parses atoms and postfix expressions. The given [`OperatorPrecedence`] is used to determine if the parsed expression is valid in that context. For example, a unary operator is not valid in an `await` expression in which case the `left_precedence` would b
(
&mut self,
left_precedence: OperatorPrecedence,
context: ExpressionContext,
)
| 344 | /// in an `await` expression in which case the `left_precedence` would |
| 345 | /// be [`OperatorPrecedence::Await`]. |
| 346 | fn parse_lhs_expression( |
| 347 | &mut self, |
| 348 | left_precedence: OperatorPrecedence, |
| 349 | context: ExpressionContext, |
| 350 | ) -> ParsedExpr { |
| 351 | let token = self.current_token_kind(); |
| 352 | if !Self::token_starts_recursive_lhs(token) { |
| 353 | return self.parse_lhs_expression_inner(left_precedence, context, token); |
| 354 | } |
| 355 | |
| 356 | if let Some(result) = self.with_recursion(|parser| { |
| 357 | parser.parse_lhs_expression_inner(left_precedence, context, token) |
| 358 | }) { |
| 359 | result |
| 360 | } else { |
| 361 | self.report_recursion_limit_exceeded(self.current_token_range()); |
| 362 | self.recursion_recovery_expr() |
| 363 | } |
| 364 | } |
| 365 | |
| 366 | /// Returns whether parsing an expression that starts with `token` can |
| 367 | /// immediately recurse through another expression parse. |
no test coverage detected