diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-24 16:32:49 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-24 16:32:49 +0100 |
| commit | 7e0a98ffb4c6b7ee50e1dc2e7b67a73924a36cba (patch) | |
| tree | cceeb15084702582b7ff69c37cb9223cce851fad | |
| parent | afefce4eabcae1ab9680909b3edb583dd0300b07 (diff) | |
| download | sylt-7e0a98ffb4c6b7ee50e1dc2e7b67a73924a36cba.tar.gz | |
Parse a blob statement
| -rw-r--r-- | src/compiler.rs | 25 | ||||
| -rw-r--r-- | src/tokenizer.rs | 10 |
2 files changed, 31 insertions, 4 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index 70c9a51..9d9deaa 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -787,6 +787,27 @@ impl Compiler { } } + fn blob_statement(&mut self, _block: &mut Block) { + expect!(self, Token::Blob, "Expected blob when declaring a blob"); + let name = if let Token::Identifier(name) = self.eat() { + name + } else { + error!(self, "Expected identifier after 'blob'."); + return; + }; + + expect!(self, Token::LeftBrace, "Expected 'blob' body. AKA '{'."); + + loop { + if matches!(self.peek(), Token::EOF | Token::RightBrace) { break; } + if matches!(self.peek(), Token::Newline) { self.eat(); continue; } + } + + expect!(self, Token::RightBrace, "Expected '}' 'blob' body. AKA '}'."); + + println!("Blob: {}", name); + } + fn statement(&mut self, block: &mut Block) { self.clear_panic(); @@ -820,6 +841,10 @@ impl Compiler { self.assign(&name, block); } + (Token::Blob, Token::Identifier(name), ..) => { + self.blob_statement(block); + } + (Token::If, ..) => { self.if_statment(block); } diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 54712d0..7bd0849 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -24,10 +24,12 @@ pub enum Token { Else, #[token("for")] For, - #[token("in")] - In, - #[token("loop")] - Loop, + // #[token("in")] + // In, + // #[token("loop")] + // Loop, + #[token("blob")] + Blob, // TODO(ed): Remove #[token("print")] |
