aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-01-12 18:47:49 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-01-12 18:47:49 +0100
commit840d820d0951dc38e266bd4d184be2cf8bf142e3 (patch)
tree35ef466f0e9d52c2b0600cabd0b2ae48f7125385 /src
parentf957f0ba7bce1c1fb18df37cc11bb3906b96735f (diff)
downloadsylt-840d820d0951dc38e266bd4d184be2cf8bf142e3.tar.gz
peek tokens helper macro
Diffstat (limited to 'src')
-rw-r--r--src/compiler.rs22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index 15d92fd..50e8ee4 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -378,14 +378,20 @@ impl Compiler {
fn statement(&mut self, block: &mut Block) {
self.clear_panic();
+ macro_rules! tokens {
+ ($( $token:pat ),*) => {
+ ($( $token , )* ..)
+ };
+ }
+
match self.peek_four() {
- (Token::Print, _, _, _) => {
+ tokens!(Token::Print) => {
self.eat();
self.expression(block);
block.add(Op::Print, self.line());
},
- (Token::Identifier(name), Token::Identifier(typ), Token::ColonEqual, _) => {
+ tokens!(Token::Identifier(name), Token::Identifier(typ), Token::ColonEqual) => {
self.eat();
self.eat();
self.eat();
@@ -396,32 +402,32 @@ impl Compiler {
}
}
- (Token::Identifier(name), Token::ColonEqual, _, _) => {
+ tokens!(Token::Identifier(name), Token::ColonEqual) => {
self.eat();
self.eat();
self.define_variable(&name, Type::UnkownType, block);
}
- (Token::Identifier(name), Token::Equal, _, _) => {
+ tokens!(Token::Identifier(name), Token::Equal) => {
self.eat();
self.eat();
self.assign(&name, block);
}
- (Token::If, _, _, _) => {
+ tokens!(Token::If) => {
self.if_statment(block);
}
- (Token::Unreachable, _, _, _) => {
+ tokens!(Token::Unreachable) => {
self.eat();
block.add(Op::Unreachable, self.line());
}
- (Token::LeftBrace, _, _, _) => {
+ tokens!(Token::LeftBrace) => {
self.scope(block);
}
- (Token::Newline, _, _, _) => {}
+ tokens!(Token::Newline) => {}
_ => {
self.expression(block);