From 1f3b7ef4d189063808a61062d512dbf95aa25ebe Mon Sep 17 00:00:00 2001 From: rzvxa Date: Tue, 5 Mar 2024 18:12:37 +0330 Subject: [PATCH] fix(parser): add unary operators to both expressions and statements. --- crates/fuse-parser/src/parsers/expressions.rs | 5 +++++ crates/fuse-parser/src/parsers/statements.rs | 1 + 2 files changed, 6 insertions(+) diff --git a/crates/fuse-parser/src/parsers/expressions.rs b/crates/fuse-parser/src/parsers/expressions.rs index 7f72855..0ec5fe0 100644 --- a/crates/fuse-parser/src/parsers/expressions.rs +++ b/crates/fuse-parser/src/parsers/expressions.rs @@ -38,6 +38,11 @@ impl<'a> Parser<'a> { .map(|id| self.ast.identifier_expression(id)), TokenKind::Function | TokenKind::Fn => self.parse_function_expression(), TokenKind::If => self.parse_if_expression(), + + TokenKind::Not | TokenKind::Plus | TokenKind::Minus => { + self.parse_unary_operator_expression() + } + _ => Err(Self::unexpected_error(self.cur_token())), } } diff --git a/crates/fuse-parser/src/parsers/statements.rs b/crates/fuse-parser/src/parsers/statements.rs index bcf9930..9fc9259 100644 --- a/crates/fuse-parser/src/parsers/statements.rs +++ b/crates/fuse-parser/src/parsers/statements.rs @@ -62,6 +62,7 @@ impl<'a> Parser<'a> { .parse_expression() .map(|expr| self.ast.expression_statement(expr)), + // Short circuit the unary operators to prevent extra checks. TokenKind::Not | TokenKind::Plus | TokenKind::Minus => self .parse_unary_operator_expression() .map(|expr| self.ast.expression_statement(expr)),