From 3f7891dec692eb2f319f437adee972d2f4e5bf7b Mon Sep 17 00:00:00 2001 From: StunxFS Date: Tue, 24 Dec 2024 14:56:59 -0400 Subject: [PATCH] parse `(expr)` --- Makefile | 3 +++ compiler/ast/Expr.v | 7 +++++++ compiler/parser/expr.v | 6 ++++++ tests/valid/let_stmt.ri | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c3f98a21..e5fcf80f 100644 --- a/Makefile +++ b/Makefile @@ -7,3 +7,6 @@ build: test: build v test compiler v tests/run_tests.vsh + +fmt: + v fmt -w . diff --git a/compiler/ast/Expr.v b/compiler/ast/Expr.v index b24c5c0a..34c68bf4 100644 --- a/compiler/ast/Expr.v +++ b/compiler/ast/Expr.v @@ -4,6 +4,7 @@ module ast pub type Expr = EmptyExpr + | ParenExpr | Ident | CharLiteral | IntegerLiteral @@ -23,6 +24,12 @@ pub: pub const empty_expr = Expr(EmptyExpr{}) +pub struct ParenExpr { +pub: + expr Expr + pos FilePos +} + pub struct Ident { pub: name string diff --git a/compiler/parser/expr.v b/compiler/parser/expr.v index b3b55896..8bac2979 100644 --- a/compiler/parser/expr.v +++ b/compiler/parser/expr.v @@ -201,6 +201,12 @@ fn (mut p Parser) parse_primary_expr() ast.Expr { expr = p.parse_ident_expr() } } + .lparen { + pos := p.tok.pos + p.next() + expr = ast.ParenExpr{p.parse_expr(), pos + p.tok.pos} + p.expect(.rparen) + } .kw_if { expr = p.parse_if_expr() } diff --git a/tests/valid/let_stmt.ri b/tests/valid/let_stmt.ri index af76a2cd..d4d3c9f7 100644 --- a/tests/valid/let_stmt.ri +++ b/tests/valid/let_stmt.ri @@ -6,7 +6,7 @@ let x = 1; fn main() { let y = 1; - let abc, def = 1; + let abc, def = (11 + 15) / 99; fn inside() { let inside_var = false;