diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-03-07 23:16:26 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-03-07 23:28:11 +0100 |
| commit | ad0618e8d1f81d98cd6228ab365186dad560d3c9 (patch) | |
| tree | e8777e791d375ad0508c83c1f9182638d6c0326a /src/compiler.rs | |
| parent | 14bdddbe019ec1733b36e63f64969156bde070f7 (diff) | |
| download | sylt-ad0618e8d1f81d98cd6228ab365186dad560d3c9.tar.gz | |
allow trailing commas in tuples
Diffstat (limited to 'src/compiler.rs')
| -rw-r--r-- | src/compiler.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index dc3bd96..17c6330 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -683,10 +683,10 @@ impl Compiler { expect!(self, Token::LeftParen, "Expected '(' at start of tuple"); let mut num_args = 0; - loop { + let trailing_comma = loop { match self.peek() { Token::RightParen | Token::EOF => { - break; + break false; } Token::Newline => { self.eat(); @@ -695,7 +695,12 @@ impl Compiler { self.expression(block); num_args += 1; match self.peek() { - Token::Comma => { self.eat(); }, + Token::Comma => { + self.eat(); + if matches!(self.peek(), Token::RightParen) { + break true; + } + }, Token::RightParen => {}, _ => { error!(self, "Expected ',' or ')' in tuple"); @@ -704,9 +709,9 @@ impl Compiler { } } } - } - if num_args == 1 { - error!(self, "A tuple must contain more than 1 element."); + }; + if num_args == 1 && !trailing_comma { + error!(self, "A tuple must contain more than 1 element or end with a trailing comma."); return; } |
