summaryrefslogtreecommitdiff
path: root/dhall_core
diff options
context:
space:
mode:
authorNadrieril2019-03-20 23:40:57 +0100
committerNadrieril2019-03-20 23:40:57 +0100
commit2cc3743ba92bc1c9379903e0fc96d534408e9788 (patch)
tree9fe85cd71eb027da8c076b5551399aa8d51b6bb9 /dhall_core
parentc15c71b4fb390913914c7669d906dc892078df7c (diff)
Parser macro tweaks
Diffstat (limited to 'dhall_core')
-rw-r--r--dhall_core/src/parser.rs12
1 files changed, 6 insertions, 6 deletions
diff --git a/dhall_core/src/parser.rs b/dhall_core/src/parser.rs
index caeebd0..66581a3 100644
--- a/dhall_core/src/parser.rs
+++ b/dhall_core/src/parser.rs
@@ -118,7 +118,8 @@ macro_rules! match_pair {
}
macro_rules! make_parser {
- // Filter out definitions that should not be matched on (i.e. rule_group)
+ (@pattern, rule, $name:ident) => (Rule::$name);
+ (@pattern, rule_group, $name:ident) => (_);
(@filter, rule) => (true);
(@filter, rule_group) => (false);
@@ -130,7 +131,7 @@ macro_rules! make_parser {
let res: $o = $body;
Ok(ParsedValue::$group(res))
});
- (@body, $pair:expr, $parsed:expr, rule!( $name:ident<$o:ty> as $group:ident; captured_str!($x:ident) => $body:expr )) => ( {
+ (@body, $pair:expr, $parsed:expr, rule!( $name:ident<$o:ty> as $group:ident; captured_str!($x:pat) => $body:expr )) => ( {
let $x = $pair.as_str();
let res: $o = $body;
Ok(ParsedValue::$group(res))
@@ -143,7 +144,6 @@ macro_rules! make_parser {
unreachable!()
);
-
($( $submac:ident!( $name:ident<$o:ty> $($args:tt)* ); )*) => (
#[allow(non_camel_case_types, dead_code)]
#[derive(Debug)]
@@ -181,9 +181,9 @@ macro_rules! make_parser {
parsed.reverse();
let val = match pair.as_rule() {
$(
- Rule::$name if make_parser!(@filter, $submac)
- =>
- make_parser!(@body, pair, parsed, $submac!( $name<$o> $($args)* ))
+ make_parser!(@pattern, $submac, $name)
+ if make_parser!(@filter, $submac)
+ => make_parser!(@body, pair, parsed, $submac!( $name<$o> $($args)* ))
,
)*
r => Err(custom_parse_error(&pair, format!("parse_any: Unexpected {:?}", r))),