aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-01-24 16:32:49 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-01-24 16:32:49 +0100
commit7e0a98ffb4c6b7ee50e1dc2e7b67a73924a36cba (patch)
treecceeb15084702582b7ff69c37cb9223cce851fad
parentafefce4eabcae1ab9680909b3edb583dd0300b07 (diff)
downloadsylt-7e0a98ffb4c6b7ee50e1dc2e7b67a73924a36cba.tar.gz
Parse a blob statement
-rw-r--r--src/compiler.rs25
-rw-r--r--src/tokenizer.rs10
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")]