1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#[macro_export]
macro_rules! import {
    ($name:ident, fn($($argument_name:ident: $argument_type:ty),* $(,)?) -> $result_type:ty $(,)?) => {
        extern "C" {
            fn $name($($argument_name: $argument_type),*) -> $result_type;
        }
    };
    ($name:ident, async fn($($argument_name:ident: $argument_type:ty),* $(,)?) -> $result_type:ty $(,)?) => {
        extern "C" {
            fn $name(
                stack: &mut $crate::cps::AsyncStack<$result_type>,
                continue_: $crate::cps::ContinuationFunction<$result_type, $result_type>,
                $($argument_name: $argument_type),*
            );
        }
    };
}