LINUX.ORG.RU

История изменений

Исправление 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)
}