From 3f7d80b746df37ffcb76076d84c15b7027042a89 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Sat, 14 Mar 2026 22:12:42 +0100 Subject: proper blocks --- src/parse/mod.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'src/parse') diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 93d2de8..eda89f1 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -282,7 +282,40 @@ pub struct FunDecl { impl Parse for Block { fn parse(b: &mut Cursor<'_>) -> Result { - todo!() + let mut commands = Vec::new(); + b.spaces(); + + if b.has() && b.peek() == b'{' { + b.adv(); + } else { + return Err(ParseError::NotABlock); + } + + loop { + while { + b.spaces(); + b.has() && b.peek() == b';' + } { + b.adv(); + } + + if b.has() && b"})".contains(&b.peek()) { + break; + } + + let cmd = Ast::parse(b)?; + commands.push(cmd); + } + + if b.has() { + if b.peek() != b'}' { + return Err(ParseError::Expected('}')); + } + } else if !b.is_completion() { + return Err(ParseError::Expected('}')); + } + + Ok(Self { commands }) } } @@ -750,6 +783,8 @@ pub enum ParseError { NotAVarAssign, NotHexDigit, + + NotABlock, } type Result = std::result::Result; -- cgit v1.2.3