in src/bindgen/parser.rs [999:1037]
fn load_builtin_macro(
&mut self,
config: &Config,
crate_name: &str,
mod_cfg: Option<&Cfg>,
item: &syn::ItemMacro,
) {
let name = match item.mac.path.segments.last() {
Some(n) => n.ident.unraw().to_string(),
None => return,
};
if name != "bitflags" || !config.macro_expansion.bitflags {
return;
}
let bitflags = match bitflags::parse(item.mac.tokens.clone()) {
Ok(bf) => bf,
Err(e) => {
warn!("Failed to parse bitflags invocation: {:?}", e);
return;
}
};
let (struct_, impl_) = bitflags.expand();
if let Some(struct_) = struct_ {
self.load_syn_struct(config, crate_name, mod_cfg, &struct_);
}
if let syn::Type::Path(ref path) = *impl_.self_ty {
if let Some(type_name) = path.path.get_ident() {
self.structs
.for_items_mut(&Path::new(type_name.unraw().to_string()), |item| {
item.annotations
.add_default("internal-derive-bitflags", AnnotationValue::Bool(true));
});
}
}
self.load_syn_assoc_consts_from_impl(crate_name, mod_cfg, &impl_)
}