diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-01-21 17:09:31 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2020-01-21 17:09:31 +0100 |
| commit | 78da2bdd5d77d1b8572e5e9da119bfa68127a3fa (patch) | |
| tree | 020c8c39268690d34226eb7e33e75f86304988d6 /src/func/macros.rs | |
| parent | 1c1c994c46f7dc30ee34dbc99b02f2342c4617f3 (diff) | |
Decoupled function parser 🔗 [WIP]
Diffstat (limited to 'src/func/macros.rs')
| -rw-r--r-- | src/func/macros.rs | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/func/macros.rs b/src/func/macros.rs index 1e92d735..92b6c16e 100644 --- a/src/func/macros.rs +++ b/src/func/macros.rs @@ -22,7 +22,7 @@ macro_rules! function { // Parse trait. (@parse($($a:tt)*) parse(default) $($r:tt)*) => { - function!(@parse($($a)*) parse() { Default::default() } $($r)*); + function!(@parse($($a)*) parse(_h, _b, _c, _e, _d, _m) {Default::default() } $($r)*); }; (@parse($($a:tt)*) parse($h:ident, $b:ident, $c:ident, $e:ident, $d:ident) $($r:tt)* ) => { function!(@parse($($a)*) parse($h, $b, $c, $e, $d, _metadata) $($r)*); @@ -40,7 +40,7 @@ macro_rules! function { fn parse( #[allow(unused)] mut $header: FuncHeader, - #[allow(unused)] $body: Option<Spanned<&str>>, + #[allow(unused)] $body: Option<(Position, &str)>, #[allow(unused)] $ctx: ParseContext, #[allow(unused)] $metadata: Self::Meta, ) -> Parsed<Self> where Self: Sized { @@ -85,7 +85,7 @@ macro_rules! function { macro_rules! body { (opt: $body:expr, $ctx:expr, $errors:expr, $decos:expr) => ({ $body.map(|body| { - let parsed = $crate::syntax::parse(body.span.start, body.v, $ctx); + let parsed = $crate::syntax::parse(body.0, body.1, $ctx); $errors.extend(parsed.errors); $decos.extend(parsed.decorations); parsed.output @@ -99,13 +99,19 @@ macro_rules! body { }; } -/// Construct a spanned error. +/// Construct an error with an optional span. #[macro_export] macro_rules! err { - ($span:expr, $($args:tt)*) => { - $crate::syntax::Spanned { - v: $crate::error::Error::new(format!($($args)*)), - span: $span, + (@$severity:ident: $span:expr; $($args:tt)*) => { + $crate::syntax::Spanned { v: err!(@Error: $($args)*), span: $span } + }; + + (@$severity:ident: $($args:tt)*) => { + $crate::error::Error { + message: format!($($args)*), + severity: $crate::error::Severity::$severity, } }; + + ($($tts:tt)*) => { err!(@Error: $($tts)*) }; } |
