summaryrefslogtreecommitdiff
path: root/src/func/macros.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-01-21 17:09:31 +0100
committerLaurenz <laurmaedje@gmail.com>2020-01-21 17:09:31 +0100
commit78da2bdd5d77d1b8572e5e9da119bfa68127a3fa (patch)
tree020c8c39268690d34226eb7e33e75f86304988d6 /src/func/macros.rs
parent1c1c994c46f7dc30ee34dbc99b02f2342c4617f3 (diff)
Decoupled function parser 🔗 [WIP]
Diffstat (limited to 'src/func/macros.rs')
-rw-r--r--src/func/macros.rs22
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)*) };
}