assert, IO.read_file, set, substr, strrev

This commit is contained in:
2025-06-02 17:41:52 +02:00
parent e647e7f508
commit 89d54dfc81
6 changed files with 90 additions and 34 deletions

View File

@@ -31,6 +31,10 @@ pub enum Stmt {
body: Box<Stmt>,
},
Return(Expr),
Assert {
keyword: Token,
value: Expr,
},
}
#[derive(Debug, Clone)]
@@ -164,16 +168,17 @@ impl Parser {
} else if self.match_token(&[TokenType::KeywordWhile]) {
self.while_statement()
} else if self.match_token(&[TokenType::KeywordReturn]) {
self.return_statement()
Ok(Stmt::Return(self.expression()?))
} else if self.match_token(&[TokenType::KeywordAssert]) {
Ok(Stmt::Assert {
keyword: self.previous().clone(),
value: self.expression()?,
})
} else {
Ok(Stmt::Expression(self.expression()?))
}
}
fn return_statement(&mut self) -> Result<Stmt, ZernError> {
Ok(Stmt::Return(self.expression()?))
}
fn if_statement(&mut self) -> Result<Stmt, ZernError> {
let condition = self.expression()?;
let then_branch = self.block()?;