diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-13 14:46:10 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-13 14:46:10 +0100 |
| commit | 92f18d8f4278a6e6322c4162f78494762ba7cbb6 (patch) | |
| tree | deb3bda67411b7d968e729165ee05a49fad55202 /src/compiler.rs | |
| parent | 5492b85a79807dab301ab5f040504bf2538ffaf7 (diff) | |
| download | sylt-92f18d8f4278a6e6322c4162f78494762ba7cbb6.tar.gz | |
Change the assignment syntax
Diffstat (limited to 'src/compiler.rs')
| -rw-r--r-- | src/compiler.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index b7e946c..c59de4d 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -446,6 +446,15 @@ impl Compiler { self.stack.truncate(h); } + fn type_ident(&mut self) -> Result<Type, ()> { + if let Token::Identifier(typ) = self.peek() { + self.eat(); + Type::try_from(typ.as_ref()) + } else { + Err(()) + } + } + fn statement(&mut self, block: &mut Block) { self.clear_panic(); @@ -462,14 +471,14 @@ impl Compiler { block.add(Op::Print, self.line()); }, - tokens!(Token::Identifier(name), Token::Identifier(typ), Token::ColonEqual) => { - self.eat(); + tokens!(Token::Identifier(name), Token::Colon) => { self.eat(); self.eat(); - if let Ok(typ) = Type::try_from(typ.as_ref()) { + if let Ok(typ) = self.type_ident() { + expect!(self, Token::Equal, "Expected assignment."); self.define_variable(&name, typ, block); } else { - error!(self, format!("Failed to parse type '{}'.", typ)); + error!(self, format!("Expected type found '{:?}'.", self.peek())); } } |
