Lines Matching full:precedence
9 use crate::precedence::Precedence;
15 previous_operator: Precedence,
17 next_operator: Precedence,
158 previous_operator: Precedence::MIN,
160 next_operator: Precedence::MIN,
231 #[cfg(feature = "full")] precedence: Precedence, in leftmost_subexpression_with_operator()
232 ) -> (Precedence, Self) { in leftmost_subexpression_with_operator() argument
235 next_operator: precedence, in leftmost_subexpression_with_operator()
262 pub fn leftmost_subexpression_with_dot(self, expr: &Expr) -> (Precedence, Self) { in leftmost_subexpression_with_dot() argument
265 next_operator: Precedence::Unambiguous, in leftmost_subexpression_with_dot()
287 fn leftmost_subexpression_precedence(self, expr: &Expr) -> Precedence { in leftmost_subexpression_precedence() argument
289 if !self.next_operator_can_begin_expr || self.next_operator == Precedence::Range { in leftmost_subexpression_precedence()
290 if let Scan::Bailout = scan_right(expr, self, Precedence::MIN, 0, 0) { in leftmost_subexpression_precedence()
292 return Precedence::Unambiguous; in leftmost_subexpression_precedence()
297 self.precedence(expr) in leftmost_subexpression_precedence()
314 #[cfg(feature = "full")] precedence: Precedence, in rightmost_subexpression()
315 ) -> (Precedence, Self) { in rightmost_subexpression() argument
322 precedence, in rightmost_subexpression()
331 #[cfg(feature = "full")] precedence: Precedence, in rightmost_subexpression_fixup()
335 previous_operator: precedence, in rightmost_subexpression_fixup()
352 pub fn rightmost_subexpression_precedence(self, expr: &Expr) -> Precedence { in rightmost_subexpression_precedence() argument
353 let default_prec = self.precedence(expr); in rightmost_subexpression_precedence()
357 Precedence::Assign | Precedence::Let | Precedence::Prefix => { in rightmost_subexpression_precedence()
362 Precedence::Range | Precedence::Or | Precedence::And => true, in rightmost_subexpression_precedence()
368 return Precedence::Prefix; in rightmost_subexpression_precedence()
403 /// Determines the effective precedence of a subexpression. Some expressions
404 /// have higher or lower precedence when adjacent to particular operators.
405 fn precedence(self, expr: &Expr) -> Precedence { in precedence() argument
408 // Decrease precedence of value-less jumps when followed by an in precedence()
415 return Precedence::Jump; in precedence()
422 // Increase precedence of expressions that extend to the end of in precedence()
429 return Precedence::Prefix; in precedence()
431 Expr::Range(e) if e.start.is_none() => return Precedence::Prefix, in precedence()
439 return Precedence::MIN; in precedence()
444 Precedence::of(expr) in precedence()
483 Expr::Assign(_) => fixup.previous_operator <= Precedence::Assign, in scan_left()
484 Expr::Binary(e) => match Precedence::of_binop(&e.op) { in scan_left()
485 Precedence::Assign => fixup.previous_operator <= Precedence::Assign, in scan_left()
488 Expr::Cast(_) => fixup.previous_operator < Precedence::Cast, in scan_left()
489 Expr::Range(e) => e.start.is_none() || fixup.previous_operator < Precedence::Assign, in scan_left()
498 precedence: Precedence, in scan_right() argument
502 let consume_by_precedence = if match precedence { in scan_right()
503 Precedence::Assign | Precedence::Compare => precedence <= fixup.next_operator, in scan_right()
504 _ => precedence < fixup.next_operator, in scan_right()
505 } || fixup.next_operator == Precedence::MIN in scan_right()
517 Precedence::Unambiguous => fail_offset >= 2, in scan_right()
522 let right_fixup = fixup.rightmost_subexpression_fixup(false, false, Precedence::Assign); in scan_right()
526 Precedence::Assign, in scan_right()
528 Precedence::Unambiguous => fail_offset, in scan_right()
535 } else if let Precedence::Unambiguous = fixup.next_operator { in scan_right()
543 Precedence::Unambiguous => { in scan_right()
551 let binop_prec = Precedence::of_binop(&e.op); in scan_right()
552 if binop_prec == Precedence::Compare && fixup.next_operator == Precedence::Compare { in scan_right()
561 Precedence::Unambiguous => fail_offset, in scan_right()
571 let right_needs_group = binop_prec != Precedence::Assign in scan_right()
575 } else if let (Scan::Fail, Precedence::Unambiguous) = (scan, fixup.next_operator) { in scan_right()
585 Precedence::Unambiguous => { in scan_right()
593 let right_fixup = fixup.rightmost_subexpression_fixup(false, false, Precedence::Prefix); in scan_right()
597 precedence, in scan_right()
599 Precedence::Unambiguous => fail_offset, in scan_right()
609 if right_fixup.rightmost_subexpression_precedence(expr) < Precedence::Prefix { in scan_right()
611 } else if let (Scan::Fail, Precedence::Unambiguous) = (scan, fixup.next_operator) { in scan_right()
623 fixup.rightmost_subexpression_fixup(false, true, Precedence::Range); in scan_right()
627 Precedence::Range, in scan_right()
630 Precedence::Assign | Precedence::Range => 0, in scan_right()
636 (Scan::Bailout, Precedence::Assign | Precedence::Range) => false, in scan_right()
641 if right_fixup.rightmost_subexpression_precedence(end) <= Precedence::Range { in scan_right()
660 let right_fixup = fixup.rightmost_subexpression_fixup(true, true, Precedence::Jump); in scan_right()
661 match scan_right(value, right_fixup, Precedence::Jump, 1, 1) { in scan_right()
667 Precedence::Assign if precedence > Precedence::Assign => Scan::Fail, in scan_right()
677 fixup.rightmost_subexpression_fixup(true, false, Precedence::Jump); in scan_right()
678 match scan_right(e, right_fixup, Precedence::Jump, 1, 1) { in scan_right()
684 Precedence::Assign if precedence > Precedence::Assign => Scan::Fail, in scan_right()
696 fixup.rightmost_subexpression_fixup(false, false, Precedence::Jump); in scan_right()
697 match scan_right(&e.body, right_fixup, Precedence::Jump, 1, 1) { in scan_right()
709 let right_fixup = fixup.rightmost_subexpression_fixup(false, false, Precedence::Let); in scan_right()
713 Precedence::Let, in scan_right()
715 if fixup.next_operator < Precedence::Let { in scan_right()
722 Scan::Fail | Scan::Bailout if fixup.next_operator < Precedence::Let => { in scan_right()
728 if right_fixup.rightmost_subexpression_precedence(&e.expr) < Precedence::Let { in scan_right()
768 Precedence::Assign | Precedence::Range if precedence == Precedence::Range => Scan::Fail, in scan_right()
769 _ if precedence == Precedence::Let && fixup.next_operator < Precedence::Let => { in scan_right()