fn load_builtin_macro()

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_)
    }