MCPcopy Create free account
hub / github.com/bvanjoi/bolt-ts / parse_binary_expr_rest

Method parse_binary_expr_rest

crates/parser/src/expr.rs:359–426  ·  view source on GitHub ↗
(
        &mut self,
        prec: BinPrec,
        left: &'cx ast::Expr<'_>,
        start: u32,
    )

Source from the content-addressed store, hash-verified

357 }
358 ast::ExprKind::PropAccess(_)
359 | ast::ExprKind::EleAccess(_)
360 | ast::ExprKind::ArrayLit(_)
361 | ast::ExprKind::ObjectLit(_) => {}
362 _ => {
363 let error = errors::TheLeftHandSideOfAnAssignmentExpressionMustBeAVariableOrAPropertyAccess {
364 span: expr.span()
365 };
366 self.push_error(Box::new(error));
367 }
368 }
369 let op = self.token.kind.into();
370 self.next_token();
371 let right = self.parse_assign_expr_or_higher::<ALLOW_RET_TY_IN_ARROW_FN>()?;
372 let expr = self.create_assignment_expression(self.new_span(start), expr, op, right);
373 let expr = self.alloc(ast::Expr {
374 kind: ast::ExprKind::Assign(expr),
375 });
376 Ok(expr)
377 } else {
378 self.parse_cond_expr_rest::<ALLOW_RET_TY_IN_ARROW_FN>(expr)
379 }
380 }
381
382 pub(super) fn parse_binary_expr(&mut self, prec: BinPrec) -> PResult<&'cx ast::Expr<'cx>> {
383 let start = self.token.start();
384 let left = self.parse_unary_expr()?;
385 self.parse_binary_expr_rest(prec, left, start)
386 }
387
388 fn parse_binary_expr_rest(
389 &mut self,
390 prec: BinPrec,
391 left: &'cx ast::Expr<'_>,
392 start: u32,
393 ) -> PResult<&'cx ast::Expr<'cx>> {
394 let mut left = left;
395 loop {
396 self.re_scan_greater();
397
398 let next_prec = self.token.kind.prec();
399 let consume = if self.token.kind == TokenKind::AsteriskAsterisk {
400 next_prec >= prec
401 } else {
402 next_prec > prec
403 };
404 if !consume {
405 break Ok(left);
406 }
407 if self.token.kind == TokenKind::In && self.in_disallow_in_context() {
408 break Ok(left);
409 }
410
411 if matches!(self.token.kind, TokenKind::As | TokenKind::Satisfies)
412 && self.has_preceding_line_break()
413 {
414 break Ok(left);
415 }
416

Callers 1

parse_binary_exprMethod · 0.80

Calls 15

SatisfiesExprClass · 0.85
AsExprClass · 0.85
re_scan_greaterMethod · 0.80
precMethod · 0.80
next_tokenMethod · 0.80
parse_tyMethod · 0.80
new_spanMethod · 0.80
intoMethod · 0.80
parse_binary_exprMethod · 0.80
create_binary_exprMethod · 0.80

Tested by

no test coverage detected