parser: parse let statements
- TODO: Type expressions token: Add `mut` keyword
This commit is contained in:
parent
f3aad36f32
commit
ac540ebd22
@ -359,7 +359,15 @@ impl Parser {
|
||||
fn stmt(&mut self) -> PResult<Stmt> {
|
||||
let token = self.peek()?;
|
||||
match token.ty() {
|
||||
Type::Keyword(Keyword::Let) => todo!("Let statements"),
|
||||
Type::Keyword(Keyword::Let) => Ok(Stmt::Let {
|
||||
mutable: self.consume().keyword(Keyword::Mut).is_ok(),
|
||||
name: self.identifier()?,
|
||||
ty: self
|
||||
.consume_type(Type::Colon)
|
||||
.and_then(Self::identifier)
|
||||
.ok(),
|
||||
init: self.consume_type(Type::Eq).and_then(Self::expr).ok(),
|
||||
}),
|
||||
_ => {
|
||||
let out = Stmt::Expr(self.expr()?);
|
||||
self.consume_type(Type::Semi)?;
|
||||
|
@ -83,6 +83,7 @@ pub enum Keyword {
|
||||
If,
|
||||
In,
|
||||
Let,
|
||||
Mut,
|
||||
Return,
|
||||
True,
|
||||
While,
|
||||
@ -167,6 +168,7 @@ impl Display for Keyword {
|
||||
Self::If => "if".fmt(f),
|
||||
Self::In => "in".fmt(f),
|
||||
Self::Let => "let".fmt(f),
|
||||
Self::Mut => "mut".fmt(f),
|
||||
Self::Return => "return".fmt(f),
|
||||
Self::True => "true".fmt(f),
|
||||
Self::While => "while".fmt(f),
|
||||
@ -187,6 +189,7 @@ impl FromStr for Keyword {
|
||||
"if" => Self::If,
|
||||
"in" => Self::In,
|
||||
"let" => Self::Let,
|
||||
"mut" => Self::Mut,
|
||||
"return" => Self::Return,
|
||||
"true" => Self::True,
|
||||
"while" => Self::While,
|
||||
|
Loading…
Reference in New Issue
Block a user