aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.rs
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-01-28 21:10:48 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-01-28 21:10:48 +0100
commitfddd4555f7162fb64b1fa1b57282de63d0f4d452 (patch)
tree633da5904617f5d7e1f7c6e9805540ce8ceb9938 /src/compiler.rs
parentb7e480f93f8ea3feb9155df207bb308b11e79303 (diff)
downloadsylt-fddd4555f7162fb64b1fa1b57282de63d0f4d452.tar.gz
Access fields
Diffstat (limited to 'src/compiler.rs')
-rw-r--r--src/compiler.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index 4dd3517..256ce49 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -650,8 +650,22 @@ impl Compiler {
} else {
block.add(Op::ReadLocal(var.slot), self.line());
}
- if self.peek() == Token::LeftParen {
- self.call(block);
+ loop {
+ match self.peek() {
+ Token::Dot => {
+ self.eat();
+ if let Token::Identifier(field) = self.eat() {
+ block.add(Op::Get(String::from(field)), self.line());
+ } else {
+ error!(self, "Expected fieldname after '.'");
+ break;
+ }
+ }
+ Token::LeftParen => {
+ self.call(block);
+ }
+ _ => { break }
+ }
}
} else if let Some(blob) = self.find_blob(&name) {
block.add(Op::Constant(Value::Blob(blob)), self.line());