aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-02-09 00:01:29 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-02-09 17:47:24 +0100
commitc574e4f707b1a2e638407bb60bf51355371874d3 (patch)
tree7e272363059a50fe18d58b1824efc3e0e992961a
parentbe4559ed0af1d12401365b5ffeae99885842314f (diff)
downloadsylt-c574e4f707b1a2e638407bb60bf51355371874d3.tar.gz
refactor function parsing
-rw-r--r--src/compiler.rs23
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;
+ }
}
}
}