From 31901291f3fdb7d5e98fea37dda0064188dd0961 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 24 Oct 2021 23:59:39 +0200 Subject: And Or expressions --- src/parse/parser.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'src/parse/parser.rs') diff --git a/src/parse/parser.rs b/src/parse/parser.rs index a882f35..6b0a785 100644 --- a/src/parse/parser.rs +++ b/src/parse/parser.rs @@ -87,7 +87,7 @@ impl> Parser { fn assignment_expression(&mut self) -> Result { // Parse any expressions as l-values for now. - let left = self.equality_expression()?; + let left = self.or_expression()?; if let Some(op) = consume_if!(self, Assign | ConstAssign) { let right = self.assignment_expression()?; @@ -102,6 +102,38 @@ impl> Parser { } } + fn or_expression(&mut self) -> Result { + let mut left = self.and_expression()?; + + while let Some(op) = consume_if!(self, OpAnd) { + let right = self.and_expression()?; + + left = Expression::Binary { + left: Box::new(left), + op: BinaryOperator::from_token(op), + right: Box::new(right), + }; + } + + Ok(left) + } + + fn and_expression(&mut self) -> Result { + let mut left = self.equality_expression()?; + + while let Some(op) = consume_if!(self, OpOr) { + let right = self.equality_expression()?; + + left = Expression::Binary { + left: Box::new(left), + op: BinaryOperator::from_token(op), + right: Box::new(right), + }; + } + + Ok(left) + } + fn equality_expression(&mut self) -> Result { let mut left = self.comparison_expression()?; -- cgit 1.4.1