aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-02-06 12:32:30 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-02-06 12:32:30 +0100
commitcf087b75ff3c2e872aed34c11a1f859ba1fbc64f (patch)
tree74e3e108859f8bf53d37e7f490f5787a97fa1aa2 /src/compiler.rs
parentc3b655bad99c1c4110d2af18b5b5845b4b2a65df (diff)
downloadsylt-cf087b75ff3c2e872aed34c11a1f859ba1fbc64f.tar.gz
try_blob_field -> blob_field working like you expect
Diffstat (limited to 'src/compiler.rs')
-rw-r--r--src/compiler.rs25
1 files changed, 10 insertions, 15 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index 914f720..abe3a5b 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -946,7 +946,7 @@ impl Compiler {
self.blobs.push(blob);
}
- fn try_blob_field(&mut self, block: &mut Block) -> Result<(), ()> {
+ fn blob_field(&mut self, block: &mut Block) {
let name = match self.eat() {
Token::Identifier(name) => name,
_ => unreachable!(),
@@ -965,7 +965,7 @@ impl Compiler {
String::from(field)
} else {
error!(self, "Expected fieldname after '.'.");
- return Err(());
+ return;
};
let op = match self.peek() {
@@ -973,7 +973,7 @@ impl Compiler {
self.eat();
self.expression(block);
add_op(self, block, Op::Set(field));
- return Ok(());
+ return;
}
Token::PlusEqual => Op::Add,
@@ -992,21 +992,23 @@ impl Compiler {
self.expression(block);
add_op(self, block, op);
add_op(self, block, Op::Set(field));
- return Ok(());
+ return;
}
Token::LeftParen => {
self.call(block);
}
Token::Newline => {
- return Ok(());
+ return;
}
_ => {
- return Err(());
+ error!(self, "Unexpected token when parsing blob-field.");
+ return;
}
}
}
} else {
- Err(())
+ error!(self, format!("Cannot find variable '{}'.", name));
+ return;
}
}
@@ -1031,14 +1033,7 @@ impl Compiler {
}
(Token::Identifier(_), Token::Dot, ..) => {
- let block_length = block.ops.len();
- let token_length = self.curr;
- // reset block and token stream if blob field fails
- if self.try_blob_field(block).is_err() {
- block.ops.truncate(block_length);
- self.curr = token_length;
- self.expression(block);
- }
+ parse_branch!(self, block, [self.blob_field(block), self.expression(block)]);
}
(Token::Identifier(name), Token::Colon, ..) => {