summaryrefslogtreecommitdiff
path: root/src/parse/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/mod.rs')
-rw-r--r--src/parse/mod.rs13
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() {