diff options
Diffstat (limited to 'src/parse/mod.rs')
| -rw-r--r-- | src/parse/mod.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index ccf333b9..8687ac24 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -423,7 +423,7 @@ fn expr_for(p: &mut Parser) -> Option<Expr> { p.assert(Token::For); let mut expr_for = None; - if let Some(pat) = p.span_if(ident) { + if let Some(pat) = p.span_if(for_pattern) { if p.expect(Token::In) { if let Some(iter) = p.span_if(expr) { if let Some(body) = p.span_if(body) { @@ -440,6 +440,17 @@ fn expr_for(p: &mut Parser) -> Option<Expr> { expr_for } +/// Parse a for loop pattern. +fn for_pattern(p: &mut Parser) -> Option<ForPattern> { + let first = ident(p)?; + if p.eat_if(Token::Comma) { + if let Some(second) = ident(p) { + return Some(ForPattern::KeyValue(first, second)); + } + } + Some(ForPattern::Value(first)) +} + /// Parse an identifier. fn ident(p: &mut Parser) -> Option<Ident> { match p.peek() { |
