diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-02-09 00:01:29 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-02-09 17:47:24 +0100 |
| commit | c574e4f707b1a2e638407bb60bf51355371874d3 (patch) | |
| tree | 7e272363059a50fe18d58b1824efc3e0e992961a /src | |
| parent | be4559ed0af1d12401365b5ffeae99885842314f (diff) | |
| download | sylt-c574e4f707b1a2e638407bb60bf51355371874d3.tar.gz | |
refactor function parsing
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index 7f0d32d..1d41c32 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -600,6 +600,9 @@ impl Compiler { } } } + if self.panic { + break; + } } add_op(self, block, Op::Call(arity)); @@ -718,18 +721,17 @@ impl Compiler { break; } } - Token::LeftParen => { - self.call(block); + _ => { + if !parse_branch!(self, block, self.call(block)) { + break + } } - _ => { break } } } } else if let Some(blob) = self.find_blob(&name) { let string = self.add_constant(Value::Blob(blob)); add_op(self, block, Op::Constant(string)); - if self.peek() == Token::LeftParen { - self.call(block); - } + parse_branch!(self, block, self.call(block)); } else if let Some(slot) = self.find_extern_function(&name) { let string = self.add_constant(Value::ExternFunction(slot)); add_op(self, block, Op::Constant(string)); @@ -1059,15 +1061,14 @@ impl Compiler { add_op(self, block, Op::Set(field)); return; } - Token::LeftParen => { - self.call(block); - } Token::Newline => { return; } _ => { - error!(self, "Unexpected token when parsing blob-field."); - return; + if !parse_branch!(self, block, self.call(block)) { + error!(self, "Unexpected token when parsing blob-field."); + return; + } } } } |
