diff options
| -rw-r--r-- | src/compiler.rs | 17 | ||||
| -rw-r--r-- | src/tokenizer.rs | 3 | ||||
| -rw-r--r-- | tests/if.tdy | 4 | ||||
| -rw-r--r-- | tests/scoping.tdy | 6 | ||||
| -rw-r--r-- | tests/variables.tdy | 15 |
5 files changed, 32 insertions, 13 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())); } } diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 62397c5..2e28cd2 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -96,6 +96,9 @@ pub enum Token { #[token("<=")] LessEqual, + #[token("|")] + Pipe, + #[token("&&")] And, #[token("||")] diff --git a/tests/if.tdy b/tests/if.tdy index 196e221..be3e3ca 100644 --- a/tests/if.tdy +++ b/tests/if.tdy @@ -1,5 +1,5 @@ -a int := 0 -res int := 0 +a : int = 0 +res : int = 0 if 1 == 2 { <!> diff --git a/tests/scoping.tdy b/tests/scoping.tdy index 6424985..7679948 100644 --- a/tests/scoping.tdy +++ b/tests/scoping.tdy @@ -1,13 +1,13 @@ -a int := 1 +a : int = 1 { a <=> 1 - a int := a + a + a : int = a + a a <=> 2 } a <=> 1 { a = 2 - a int := 1 + a : int = 1 } a <=> 2 diff --git a/tests/variables.tdy b/tests/variables.tdy index 62b30d2..74d8cdd 100644 --- a/tests/variables.tdy +++ b/tests/variables.tdy @@ -1,9 +1,9 @@ // a variable -a int := 1 +a : int = 1 a <=> 1 // another variable -b int := 2 +b : int = 2 b <=> 2 // assignment @@ -11,7 +11,14 @@ a = b a <=> 2 // ordering -c int := 3 -d int := 4 +c : int = 3 +d : int = 4 c <=> 3 d <=> 4 + +// No types + +e := 1 +f := e + 1 +e <=> 1 +f <=> 2 |
