#[macro_export]
macro_rules! s2u {
($s:expr) => ( $crate::utf::s2un($s.as_ref()).0 )
}
#[macro_export]
macro_rules! s2un {
($s:expr) => ( $crate::utf::s2un($s.as_ref()) )
}
#[macro_export]
macro_rules! s2w {
($s:expr) => ( $crate::utf::s2vec($s.as_ref()) )
}
#[macro_export]
macro_rules! s2wn {
($s:expr) => ( $crate::utf::s2vecn($s.as_ref()) )
}
#[macro_export]
macro_rules! w2s {
($s:expr) => ( $crate::utf::w2s($s) )
}
#[macro_export]
macro_rules! u2s {
($s:expr) => ( $crate::utf::u2s($s) )
}
#[doc(hidden)]
#[macro_export]
macro_rules! pack_args {
() => { $crate::value::Value::pack_args(&[]) };
( $($s:expr),* ) => {
{
let args = [
$(
$crate::value::Value::from($s)
),*
];
$crate::value::Value::pack_args(&args)
}
};
}
#[macro_export]
macro_rules! make_args {
() => { { let args : [$crate::value::Value; 0] = []; args } };
( $($s:expr),* ) => {
{
let args = [
$(
$crate::value::Value::from($s)
),*
];
args
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! MAKE_HANDLE {
($(#[$attrs:meta])* $name:ident, $inner:ident) => {
#[repr(C)] #[doc(hidden)]
pub struct $inner { _unused: usize }
$(#[$attrs])*
pub type $name = *mut $inner;
};
}
#[macro_export]
macro_rules! dispatch_script_call {
(
$(
fn $name:ident ( $( $argt:ident ),* );
)*
) => {
fn dispatch_script_call(&mut self, _root: $crate::HELEMENT, name: &str, argv: &[$crate::Value]) -> Option<$crate::Value>
{
match name {
$(
stringify!($name) => {
let mut _i = 0;
$(
let _: $argt;
_i += 1;
)*
let argc = _i;
if argv.len() != argc {
return Some($crate::Value::error(&format!("{} error: {} of {} arguments provided.", stringify!($name), argv.len(), argc)));
}
let mut _i = 0;
let rv = self.$name(
$(
{
match $crate::FromValue::from_value(&argv[_i]) {
Some(arg) => { _i += 1; arg },
None => {
return Some($crate::Value::error(&format!("{} error: invalid type of {} argument ({} expected, {:?} provided).",
stringify!($name), _i, stringify!($argt), argv[_i])));
},
}
}
),*
);
return Some($crate::Value::from(rv));
},
)*
_ => ()
};
return None;
}
};
}
#[macro_export]
macro_rules! vmap {
( $($key:expr => $value:expr,)+ ) => { vmap!($($key => $value),+) };
( $($key:expr => $value:expr),* ) => {
{
let mut _v = $crate::Value::map();
$(
_v.set_item($key, $value);
)*
_v
}
};
}
#[macro_export]
macro_rules! varray {
( $($value:expr,)+ ) => { varray!($($value),+) };
( $($value:expr),* ) => {
{
let mut _i = 0;
$(
let _ = &$value;
_i += 1;
)*
let argc = _i;
let mut _v = $crate::Value::array(argc);
let mut _i = 0;
$(
_v.set(_i, $value);
_i += 1;
)*
_v
}
};
}