История изменений
Исправление monk, (текущая версия) :
Что-то вроде
#[config]
struct VecConfig {
#[source(env, config, default = 0)]
use_check: u8,
}
#[proc_macro]
pub fn with_bound_check(input: TokenStream) -> TokenStream {
let input_parsed = parse_macro_input!(input as VecIdentBody);
let name = input_parsed.vec;
let index = input_parsed.index;
let body = input_parsed.body;
let expanded =
if VecConfig::parse().unwrap().use_check == 1 {
quote! {
{
check_bound(stringify!(#name), stringify!(#index));
#body
}
}
} else {
quote! {
{
#body
}
}
};
TokenStream::from(expanded)
}
Исходная версия monk, :
Что-то вроде
#[config]
struct VecConfig {
#[source(env, config, default = 0)]
use_check: u8,
}
#[proc_macro]
pub fn (input: TokenStream) -> TokenStream {
let input_parsed = parse_macro_input!(input as VecIdentBody);
let name = input_parsed.vec;
let index = input_parsed.index;
let body = input_parsed.body;
let expanded =
if VecConfig::parse().unwrap().use_check == 1 {
quote! {
{
check_bound(stringify!(#name), stringify!(#index));
#body
}
}
} else {
quote! {
{
#body
}
}
};
TokenStream::from(expanded)
}