diff --git a/src/parser/rules.rs b/src/parser/rules.rs index 92febf2..7f0ab7a 100644 --- a/src/parser/rules.rs +++ b/src/parser/rules.rs @@ -180,6 +180,7 @@ impl Parser { let token = self.peek()?; match &token.kind { TokenKind::CurlyBracesOpen => self.parse_block(), + TokenKind::BraceOpen => Ok(Statement::Exp(self.parse_expression()?)), TokenKind::Keyword(Keyword::Let) => self.parse_declare(), TokenKind::Keyword(Keyword::Return) => self.parse_return(), TokenKind::Keyword(Keyword::If) => self.parse_conditional_statement(), @@ -292,7 +293,10 @@ impl Parser { TokenKind::BraceOpen => { let expr = self.parse_expression()?; self.match_token(TokenKind::BraceClose)?; - expr + match BinOp::try_from(self.peek()?.kind) { + Ok(_) => self.parse_bin_op(Some(expr))?, + Err(_) => expr, + } } TokenKind::Keyword(Keyword::Boolean) => match BinOp::try_from(self.peek()?.kind) { Ok(_) => self.parse_bin_op(None)?, diff --git a/src/parser/tests.rs b/src/parser/tests.rs index b7831d1..7c45237 100644 --- a/src/parser/tests.rs +++ b/src/parser/tests.rs @@ -747,7 +747,6 @@ fn test_break() { } #[test] -#[ignore] fn test_complex_nested_expressions() { let raw = " fn main() { @@ -800,7 +799,6 @@ fn test_struct_initialization() { } #[test] -#[ignore] fn test_arithmetic() { // These should pass let raw = "fn main() {1*1}";