Skip to content

Commit

Permalink
Support underscore identifiers as function params in nix!()
Browse files Browse the repository at this point in the history
  • Loading branch information
ebkalderon committed Oct 13, 2019
1 parent 5c2cd6a commit 89ec4b5
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions nix-parser/src/ast/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,26 +90,52 @@ macro_rules! nix_token {
#[doc(hidden)]
#[macro_export]
macro_rules! nix_formals {
(@formals (_ ? $($default:tt)+) , $($rest:tt)*) => {{
let name = $crate::nix_token!(_);
let default = $crate::nix!($($default)+);
let formal = Formal::new(name, Some(default), Default::default());
::std::iter::once(formal).chain($crate::nix_formals!($($rest)*))
}};

(@formals ($name:ident ? $($default:tt)+) , $($rest:tt)*) => {{
let name = $crate::nix_token!($name);
let default = $crate::nix!($($default)+);
let formal = Formal::new(name, Some(default), Default::default());
::std::iter::once(formal).chain($crate::nix_formals!($($rest)*))
}};

(@formals (_) , $($rest:tt)*) => {{
let name = $crate::nix_token!(_);
let formal = Formal::new(name, None, Default::default());
::std::iter::once(formal).chain($crate::nix_formals!($($rest)*))
}};

(@formals ($name:ident) , $($rest:tt)*) => {{
let name = $crate::nix_token!($name);
let formal = Formal::new(name, None, Default::default());
::std::iter::once(formal).chain($crate::nix_formals!($($rest)*))
}};

(@formals (_ ? $($default:tt)+)) => {{
let name = $crate::nix_token!(_);
let default = $crate::nix!($($default)+);
let formal = Formal::new(name, Some(default), Default::default());
::std::iter::once(formal)
}};

(@formals ($name:ident ? $($default:tt)+)) => {{
let name = $crate::nix_token!($name);
let default = $crate::nix!($($default)+);
let formal = Formal::new(name, Some(default), Default::default());
::std::iter::once(formal)
}};

(@formals (_)) => {{
let name = $crate::nix_token!(_);
let formal = Formal::new(name, None, Default::default());
::std::iter::once(formal)
}};

(@formals ($name:ident)) => {{
let name = $crate::nix_token!($name);
let formal = Formal::new(name, None, Default::default());
Expand Down Expand Up @@ -325,6 +351,13 @@ macro_rules! nix_expr {
#[doc(hidden)]
#[macro_export]
macro_rules! function {
(@rule (_:) $($rest:tt)+) => {{
let name = $crate::nix_token!(_);
let body = $crate::nix!($($rest)+);
let simple = FnDeclSimple::new(name, body, Default::default());
Expr::from(ExprFnDecl::Simple(simple))
}};

(@rule ($arg:ident:) $($rest:tt)+) => {{
let name = $crate::nix_token!($arg);
let body = $crate::nix!($($rest)+);
Expand Down

0 comments on commit 89ec4b5

Please sign in to comment.