(&mut self, mut expr: Expression)
| 1015 | left: Box::new(expr), |
| 1016 | right: Box::new(right), |
| 1017 | }; |
| 1018 | } |
| 1019 | Ok(expr) |
| 1020 | } |
| 1021 | |
| 1022 | fn parse_bitwise_xor(&mut self) -> Result<Expression, ParserError> { |
| 1023 | let mut expr = self.parse_bitwise_and()?; |
| 1024 | while self.match_bitwise_xor() { |
| 1025 | self.consume_terminators(); |
| 1026 | let right = self.parse_bitwise_and()?; |
| 1027 | expr = Expression::Binary { |
| 1028 | op: BinaryOp::BitwiseXor, |
| 1029 | left: Box::new(expr), |
| 1030 | right: Box::new(right), |
| 1031 | }; |
| 1032 | } |
| 1033 | Ok(expr) |
| 1034 | } |
| 1035 | |
| 1036 | fn parse_bitwise_and(&mut self) -> Result<Expression, ParserError> { |
| 1037 | let mut expr = self.parse_shift()?; |
| 1038 | while self.match_bitwise_and() { |
| 1039 | self.consume_terminators(); |
| 1040 | let right = self.parse_shift()?; |
| 1041 | expr = Expression::Binary { |
| 1042 | op: BinaryOp::BitwiseAnd, |
| 1043 | left: Box::new(expr), |
| 1044 | right: Box::new(right), |
| 1045 | }; |
| 1046 | } |
| 1047 | Ok(expr) |
| 1048 | } |
| 1049 | |
| 1050 | fn parse_equality(&mut self) -> Result<Expression, ParserError> { |
| 1051 | let mut expr = self.parse_comparison()?; |
| 1052 | loop { |
| 1053 | self.consume_terminators(); |
| 1054 | let op = if self.match_eq() { |
| 1055 | Some(BinaryOp::Eq) |
| 1056 | } else if self.match_neq() { |
| 1057 | Some(BinaryOp::Neq) |
| 1058 | } else { |
| 1059 | None |
| 1060 | }; |
| 1061 | |
| 1062 | let Some(op) = op else { break }; |
| 1063 | self.consume_terminators(); |
| 1064 | let right = self.parse_comparison()?; |
| 1065 | expr = Expression::Binary { |
| 1066 | op, |
| 1067 | left: Box::new(expr), |
| 1068 | right: Box::new(right), |
| 1069 | }; |
| 1070 | } |
| 1071 | Ok(expr) |
| 1072 | } |
| 1073 | |
| 1074 | fn parse_comparison(&mut self) -> Result<Expression, ParserError> { |
no test coverage detected