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)),