zen_parser/parser/
definitions.rs

1#[derive(Debug, PartialEq)]
2pub(crate) enum Associativity {
3    Left,
4    Right,
5}
6
7#[derive(Debug, PartialEq)]
8pub(crate) enum Arity {
9    Single,
10    Closure,
11    Dual,
12}
13
14#[derive(Debug, PartialEq)]
15pub(crate) struct Operator {
16    pub precedence: u8,
17    pub associativity: Associativity,
18}
19
20#[derive(Debug, PartialEq)]
21pub(crate) struct BuiltIn {
22    pub arity: Arity,
23}
24
25#[macro_export]
26macro_rules! hashmap {
27    (@single $($x:tt)*) => (());
28    (@count $($rest:expr),*) => (<[()]>::len(&[$(hashmap!(@single $rest)),*]));
29
30    ($($key:expr => $value:expr,)+) => { hashmap!($($key => $value),+) };
31    ($($key:expr => $value:expr),*) => {
32        {
33            let _cap = hashmap!(@count $($key),*);
34            let mut _map = ::std::collections::HashMap::default();
35            _map.reserve(_cap);
36            $(
37                let _ = _map.insert($key, $value);
38            )*
39            _map
40        }
41    };
42}