From fddd4555f7162fb64b1fa1b57282de63d0f4d452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Thu, 28 Jan 2021 21:10:48 +0100 Subject: Access fields --- src/compiler.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/compiler.rs') 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()); -- cgit v1.2.1