From d8eeb510e5c4e48f6c05b98d5eebca57106d6acb Mon Sep 17 00:00:00 2001 From: felipegchi Date: Mon, 23 Jan 2023 09:56:42 -0300 Subject: [PATCH] fix: parsing of open --- crates/kind-parser/src/expr.rs | 7 +++++-- .../suite/checker/SimpleOpenWithMotive.golden | 1 + .../suite/checker/SimpleOpenWithMotive.kind2 | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 crates/kind-tests/suite/checker/SimpleOpenWithMotive.golden create mode 100644 crates/kind-tests/suite/checker/SimpleOpenWithMotive.kind2 diff --git a/crates/kind-parser/src/expr.rs b/crates/kind-parser/src/expr.rs index 399308a3..a742a301 100644 --- a/crates/kind-parser/src/expr.rs +++ b/crates/kind-parser/src/expr.rs @@ -618,14 +618,17 @@ impl<'a> Parser<'a> { self.advance(); // 'open' let type_name = self.parse_upper_id()?; let var_name = self.parse_id()?; - let next = self.parse_expr(false)?; - let end = next.range; let motive = self.try_single(&|this| { this.eat_variant(Token::Colon)?; this.parse_expr(false) })?; + self.check_and_eat(Token::Semi); + + let next = self.parse_expr(false)?; + let end = next.range; + Ok(Box::new(Expr { data: ExprKind::Open { type_name, var_name, motive, next }, range: start.mix(end), diff --git a/crates/kind-tests/suite/checker/SimpleOpenWithMotive.golden b/crates/kind-tests/suite/checker/SimpleOpenWithMotive.golden new file mode 100644 index 00000000..db814b93 --- /dev/null +++ b/crates/kind-tests/suite/checker/SimpleOpenWithMotive.golden @@ -0,0 +1 @@ +Ok! \ No newline at end of file diff --git a/crates/kind-tests/suite/checker/SimpleOpenWithMotive.kind2 b/crates/kind-tests/suite/checker/SimpleOpenWithMotive.kind2 new file mode 100644 index 00000000..55401ce5 --- /dev/null +++ b/crates/kind-tests/suite/checker/SimpleOpenWithMotive.kind2 @@ -0,0 +1,14 @@ +#derive[match] +record Pudim { + owo : U60 + uwu : U60 +} + +#keep +Ok (n: Pudim) : U60 +Ok n = + open Pudim n : _; + (+ n.owo n.uwu) + +Main : U60 +Main = Ok (Pudim.new 10 20) \ No newline at end of file