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