From 2a3ab5c161ac98cb3c6326173e5ed78089a9ed68 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 14 Nov 2021 22:31:34 +0100 Subject: Function calling and the ensuing scope shenanigans --- src/parse/parser.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/parse') diff --git a/src/parse/parser.rs b/src/parse/parser.rs index 5a09a8f..ee83293 100644 --- a/src/parse/parser.rs +++ b/src/parse/parser.rs @@ -217,10 +217,10 @@ impl> Parser { while let Some(token) = consume_if!(self, GroupOpen | ArrayOpen | Dot) { match token.variant { - GroupOpen => loop { + GroupOpen => { let mut arguments = Vec::new(); - loop { + while consume_if!(self, GroupClose).is_none() { arguments.push(self.expression()?); if consume_if!(self, Comma).is_none() { @@ -232,8 +232,8 @@ impl> Parser { left = Expression::Call(Box::new(CallNode { called: left, arguments, - })) - }, + })); + } ArrayOpen => { let index = self.expression()?; consume!(self, ArrayClose)?; @@ -335,10 +335,9 @@ impl> Parser { fn function(&mut self) -> Result { consume!(self, KeywordFn)?; - let token = self.tokens.next().expect("Expected function header."); let header = { - let has_self_receiver = if let KeywordSelf = token.variant { + let has_self_receiver = if consume_if!(self, KeywordSelf).is_some() { consume_if!(self, Comma); true } else { -- cgit 1.4.1