From a4980b8dbf1394c2b302f1de7c72d2264426b86e Mon Sep 17 00:00:00 2001 From: Mel Date: Wed, 20 Oct 2021 22:15:08 +0200 Subject: Statement parsing. --- src/parse/macros.rs | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/parse/macros.rs (limited to 'src/parse/macros.rs') 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 -- cgit 1.4.1