diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index fd5efbe..56e45ad 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -15,7 +15,8 @@ static_path = { identifier ~ ("::" ~ identifier)* } export = { "public" } mutable = { "mut" } sharp = _{ "#" } -var_decl = { type_expr ~ mutable? ~ identifier } +var = { "var" } +var_decl = { (var | type_expr) ~ mutable? ~ identifier } semicolon = _{ ";" } // ================= TOP LEVEL ================= diff --git a/parser/src/lib.rs b/parser/src/lib.rs index 14c4e46..ce1dd56 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -516,7 +516,13 @@ impl From> for VarDecl { Rule::var_decl => { let mut inner = pair.into_inner(); - let type_ = Some(inner.next().map(TypeExpr::from).unwrap()); + let type_ = inner.next().and_then(|pair| { + if pair.as_str().trim() == "var" { + None + } else { + Some(TypeExpr::from(pair)) + } + }); let mutable = if inner.peek().unwrap().as_rule() == Rule::mutable { inner.next(); true diff --git a/test/src/main.mist b/test/src/main.mist index d07cd7b..fe1d604 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -1,5 +1,5 @@ void main() { - Vec iter = vec!(1, 2, 3, 4, 5); + var iter = vec!(1, 2, 3, 4, 5); for (i in iter) { println!("{i}");