diff options
-rw-r--r-- | libbindgen/src/codegen/mod.rs | 24 | ||||
-rw-r--r-- | libbindgen/src/ir/context.rs | 4 | ||||
-rw-r--r-- | libbindgen/src/ir/function.rs | 3 | ||||
-rw-r--r-- | libbindgen/src/ir/item.rs | 59 |
4 files changed, 59 insertions, 31 deletions
diff --git a/libbindgen/src/codegen/mod.rs b/libbindgen/src/codegen/mod.rs index a522d887..c8cd4cdf 100644 --- a/libbindgen/src/codegen/mod.rs +++ b/libbindgen/src/codegen/mod.rs @@ -33,7 +33,8 @@ fn root_import(ctx: &BindgenContext) -> P<ast::Item> { assert!(ctx.options().enable_cxx_namespaces, "Somebody messed it up"); let root = ctx.root_module().canonical_name(ctx); let root_ident = ctx.rust_ident(&root); - quote_item!(ctx.ext_cx(), #[allow(unused_imports)] use $root_ident;).unwrap() + quote_item!(ctx.ext_cx(), #[allow(unused_imports)] use $root_ident;) + .unwrap() } struct CodegenResult { @@ -276,7 +277,7 @@ impl CodeGenerator for Module { if !ctx.options().enable_cxx_namespaces { for child in self.children() { ctx.resolve_item(*child) - .codegen(ctx, result, whitelisted_items, &()); + .codegen(ctx, result, whitelisted_items, &()); } return; } @@ -286,7 +287,7 @@ impl CodeGenerator for Module { for child in self.children() { if whitelisted_items.contains(child) { ctx.resolve_item(*child) - .codegen(ctx, result, whitelisted_items, &()); + .codegen(ctx, result, whitelisted_items, &()); } } }); @@ -424,12 +425,15 @@ impl CodeGenerator for Type { // converted to rust types in fields, arguments, and such. return; } - TypeKind::Comp(ref ci) => ci.codegen(ctx, result, whitelisted_items, item), + TypeKind::Comp(ref ci) => { + ci.codegen(ctx, result, whitelisted_items, item) + } TypeKind::TemplateAlias(inner, _) => { // NB: The inner Alias will pick the correct // applicable_template_args. let inner_item = ctx.resolve_item(inner); - inner_item.expect_type().codegen(ctx, result, whitelisted_items, inner_item); + inner_item.expect_type() + .codegen(ctx, result, whitelisted_items, inner_item); } TypeKind::Alias(ref spelling, inner) => { let inner_item = ctx.resolve_item(inner); @@ -487,7 +491,9 @@ impl CodeGenerator for Type { let typedef = generics.build().build_ty(inner_rust_type); result.push(typedef) } - TypeKind::Enum(ref ei) => ei.codegen(ctx, result, whitelisted_items, item), + TypeKind::Enum(ref ei) => { + ei.codegen(ctx, result, whitelisted_items, item) + } ref u @ TypeKind::UnresolvedTypeRef(..) => { unreachable!("Should have been resolved after parsing {:?}!", u) } @@ -1075,7 +1081,8 @@ impl CodeGenerator for CompInfo { if applicable_template_args.is_empty() && !self.found_unknown_attr() { for var in self.inner_vars() { - ctx.resolve_item(*var).codegen(ctx, result, whitelisted_items, &()); + ctx.resolve_item(*var) + .codegen(ctx, result, whitelisted_items, &()); } if let Some(layout) = layout { @@ -1177,7 +1184,8 @@ impl MethodCodegen for Method { return; // FIXME } // First of all, output the actual function. - ctx.resolve_item(self.signature()).codegen(ctx, result, whitelisted_items, &()); + ctx.resolve_item(self.signature()) + .codegen(ctx, result, whitelisted_items, &()); let function_item = ctx.resolve_item(self.signature()); let function = function_item.expect_function(); diff --git a/libbindgen/src/ir/context.rs b/libbindgen/src/ir/context.rs index b7754a40..7c643f04 100644 --- a/libbindgen/src/ir/context.rs +++ b/libbindgen/src/ir/context.rs @@ -938,7 +938,9 @@ impl<'ctx> BindgenContext<'ctx> { let name = item.canonical_name(self); match *item.kind() { - ItemKind::Module(..) => self.options().enable_cxx_namespaces, + ItemKind::Module(..) => { + self.options().enable_cxx_namespaces + } ItemKind::Function(_) => { self.options().whitelisted_functions.matches(&name) } diff --git a/libbindgen/src/ir/function.rs b/libbindgen/src/ir/function.rs index 60bd1e5b..5a864cfc 100644 --- a/libbindgen/src/ir/function.rs +++ b/libbindgen/src/ir/function.rs @@ -150,7 +150,8 @@ impl FunctionSig { CXCursor_CXXMethod => { // For CXCursor_FunctionDecl, cursor.args() is the reliable way // to get parameter names and types. - cursor.args().expect("It cannot be None because we are in a method/function") + cursor.args() + .unwrap() .iter() .map(|arg| { let arg_ty = arg.cur_type(); diff --git a/libbindgen/src/ir/item.rs b/libbindgen/src/ir/item.rs index 176eca14..c370c8b0 100644 --- a/libbindgen/src/ir/item.rs +++ b/libbindgen/src/ir/item.rs @@ -527,7 +527,10 @@ impl Item { } /// Get the target item id for name generation. - fn name_target(&self, ctx: &BindgenContext, for_name_checking: bool) -> ItemId { + fn name_target(&self, + ctx: &BindgenContext, + for_name_checking: bool) + -> ItemId { let mut item = self; loop { match *item.kind() { @@ -535,24 +538,31 @@ impl Item { match *ty.kind() { // If we're a template specialization, our name is our // parent's name. - TypeKind::Comp(ref ci) if ci.is_template_specialization() => { - item = ctx.resolve_item(ci.specialized_template().unwrap()); - }, + TypeKind::Comp(ref ci) + if ci.is_template_specialization() => { + let specialized = + ci.specialized_template().unwrap(); + item = ctx.resolve_item(specialized); + } // Same as above. TypeKind::ResolvedTypeRef(inner) | TypeKind::TemplateRef(inner, _) => { item = ctx.resolve_item(inner); } - // Template aliases use their inner alias type's name if we - // are checking names for whitelisting/replacement/etc. - TypeKind::TemplateAlias(inner, _) if for_name_checking => { + // Template aliases use their inner alias type's name if + // we are checking names for + // whitelisting/replacement/etc. + TypeKind::TemplateAlias(inner, _) + if for_name_checking => { item = ctx.resolve_item(inner); - assert_eq!(item.id(), item.name_target(ctx, for_name_checking)); + assert_eq!(item.id(), + item.name_target(ctx, + for_name_checking)); return item.id(); } _ => return item.id(), } - }, + } _ => return item.id(), } } @@ -580,9 +590,7 @@ impl Item { let func = item.expect_function(); func.name() == func_name }) - .enumerate() - .find(|&(_, ref method)| method.signature() == self.id()) - .map(|(idx, _)| idx); + .position(|method| method.signature() == self.id()); } } @@ -595,24 +603,33 @@ impl Item { /// The `for_name_checking` boolean parameter informs us whether we are /// asking for the name in order to do a whitelisting/replacement/etc check /// or if we are instead using it for code generation. - fn base_name(&self, ctx: &BindgenContext, for_name_checking: bool) -> String { + fn base_name(&self, + ctx: &BindgenContext, + for_name_checking: bool) + -> String { match *self.kind() { ItemKind::Var(ref var) => var.name().to_owned(), ItemKind::Module(ref module) => { module.name() .map(ToOwned::to_owned) - .unwrap_or_else(|| format!("_bindgen_mod_{}", self.exposed_id(ctx))) - }, + .unwrap_or_else(|| { + format!("_bindgen_mod_{}", self.exposed_id(ctx)) + }) + } ItemKind::Type(ref ty) => { let name = match *ty.kind() { - TypeKind::ResolvedTypeRef(..) => - panic!("should have resolved this in name_target()"), - TypeKind::TemplateAlias(..) if !for_name_checking => Some(""), - TypeKind::TemplateAlias(..) => None, + TypeKind::ResolvedTypeRef(..) => { + panic!("should have resolved this in name_target()") + } + TypeKind::TemplateAlias(..) => { + if for_name_checking { None } else { Some("") } + } _ => ty.name(), }; name.map(ToOwned::to_owned) - .unwrap_or_else(|| format!("_bindgen_ty_{}", self.exposed_id(ctx))) + .unwrap_or_else(|| { + format!("_bindgen_ty_{}", self.exposed_id(ctx)) + }) } ItemKind::Function(ref fun) => { let mut name = fun.name().to_owned(); @@ -624,7 +641,7 @@ impl Item { } name - }, + } } } |