diff options
| author | Mel <einebeere@gmail.com> | 2021-10-20 22:15:08 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2021-10-20 22:15:08 +0200 |
| commit | a4980b8dbf1394c2b302f1de7c72d2264426b86e (patch) | |
| tree | 97160332c53d8036ea3f6865ff60dabb2c55ef49 /src/parse/macros.rs | |
| parent | 8d5a74566beba45f4642838102c5a066ef2aa18d (diff) | |
| download | rabbithole-a4980b8dbf1394c2b302f1de7c72d2264426b86e.tar.zst rabbithole-a4980b8dbf1394c2b302f1de7c72d2264426b86e.zip | |
Statement parsing.
Diffstat (limited to 'src/parse/macros.rs')
| -rw-r--r-- | src/parse/macros.rs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/parse/macros.rs b/src/parse/macros.rs new file mode 100644 index 0000000..0b09152 --- /dev/null +++ b/src/parse/macros.rs @@ -0,0 +1,59 @@ +#[macro_export] +macro_rules! check { + ($self:ident, $($variant:pat_param)|+) => { + if let Some(token) = $self.tokens.peek() { + if let Token {variant: $( $variant )|+, ..} = token { + true + } else { + false + } + } else { + false + } + }; +} + +#[macro_export] +macro_rules! consume { + ($self:ident, $($variant:pat_param)|+) => { + if let Some(token) = $self.tokens.next() { + if let Token {variant: $( $variant )|+, ..} = token { + Ok(token) + } else { + Err(anyhow!( + // Make a better error message + "Received unexpected token: '{:?}'.", + token.variant + )) + } + } else { + // Here too + Err(anyhow!("Expected a token.")) + } + }; +} + +#[macro_export] +macro_rules! consume_if { + ($self:ident, $($variant:pat_param)|+) => { + if let Some(token) = $self.tokens.peek() { + if let Token {variant: $( $variant )|+, ..} = token { + Some($self.tokens.next().unwrap()) + } else { + None + } + } else { + None + } + }; +} + +#[macro_export] +macro_rules! inner { + ($token:expr, $variant:path ) => { + match $token.variant { + $variant(inner) => inner, + _ => panic!("Tried getting inner content of incorrect variant.") + } + }; +} \ No newline at end of file |
