summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2018-02-14 20:45:15 +0100
committerGitHub <noreply@github.com>2018-02-14 20:45:15 +0100
commit3379a90a2d88c7d6333d64fe33ea1bd992904c71 (patch)
treeaaa7fb15b9216c015afdbb8ae1690ca57535d59c /src
parent8c5f862f828b1f85eb29a4159c0f9237ac473fbf (diff)
parentad6b2231924da983ad818068413c61979bf95ac7 (diff)
Merge pull request #1256 from fitzgen/fix-missing-dylibs. r=emilio
Fix missing dylibs
Diffstat (limited to 'src')
-rw-r--r--src/codegen/helpers.rs49
-rw-r--r--src/codegen/impl_partialeq.rs3
-rw-r--r--src/codegen/mod.rs82
-rw-r--r--src/codegen/struct_layout.rs3
-rw-r--r--src/ir/context.rs12
-rw-r--r--src/ir/function.rs2
-rw-r--r--src/ir/objc.rs8
-rw-r--r--src/lib.rs5
8 files changed, 84 insertions, 80 deletions
diff --git a/src/codegen/helpers.rs b/src/codegen/helpers.rs
index ca93b519..99054305 100644
--- a/src/codegen/helpers.rs
+++ b/src/codegen/helpers.rs
@@ -3,29 +3,27 @@
use ir::context::BindgenContext;
use ir::layout::Layout;
use quote;
-use proc_macro2;
use std::mem;
pub mod attributes {
use quote;
- use proc_macro2;
pub fn repr(which: &str) -> quote::Tokens {
- let which = proc_macro2::Term::intern(which);
+ let which = quote::Ident::new(which);
quote! {
#[repr( #which )]
}
}
pub fn repr_list(which_ones: &[&str]) -> quote::Tokens {
- let which_ones = which_ones.iter().cloned().map(proc_macro2::Term::intern);
+ let which_ones = which_ones.iter().cloned().map(quote::Ident::new);
quote! {
#[repr( #( #which_ones ),* )]
}
}
pub fn derives(which_ones: &[&str]) -> quote::Tokens {
- let which_ones = which_ones.iter().cloned().map(proc_macro2::Term::intern);
+ let which_ones = which_ones.iter().cloned().map(quote::Ident::new);
quote! {
#[derive( #( #which_ones ),* )]
}
@@ -41,8 +39,11 @@ pub mod attributes {
// Doc comments are already preprocessed into nice `///` formats by the
// time they get here. Just make sure that we have newlines around it so
// that nothing else gets wrapped into the comment.
- let comment = proc_macro2::Literal::doccomment(&comment);
- quote! {#comment}
+ let mut tokens = quote! {};
+ tokens.append("\n");
+ tokens.append(comment);
+ tokens.append("\n");
+ tokens
}
pub fn link_name(name: &str) -> quote::Tokens {
@@ -72,7 +73,7 @@ pub fn blob(layout: Layout) -> quote::Tokens {
}
};
- let ty_name = proc_macro2::Term::intern(ty_name);
+ let ty_name = quote::Ident::new(ty_name);
let data_len = opaque.array_size().unwrap_or(layout.size);
@@ -102,7 +103,7 @@ pub fn bitfield_unit(ctx: &BindgenContext, layout: Layout) -> quote::Tokens {
let mut tokens = quote! {};
if ctx.options().enable_cxx_namespaces {
- tokens.append_all(quote! { root:: });
+ tokens.append(quote! { root:: });
}
let align = match layout.align {
@@ -113,7 +114,7 @@ pub fn bitfield_unit(ctx: &BindgenContext, layout: Layout) -> quote::Tokens {
};
let size = layout.size;
- tokens.append_all(quote! {
+ tokens.append(quote! {
__BindgenBitfieldUnit<[u8; #size], #align>
});
@@ -125,7 +126,6 @@ pub mod ast_ty {
use ir::function::FunctionSig;
use ir::ty::FloatKind;
use quote;
- use proc_macro2;
pub fn raw_type(ctx: &BindgenContext, name: &str) -> quote::Tokens {
let ident = ctx.rust_ident_raw(name);
@@ -166,25 +166,29 @@ pub mod ast_ty {
pub fn int_expr(val: i64) -> quote::Tokens {
// Don't use quote! { #val } because that adds the type suffix.
- let val = proc_macro2::Literal::integer(val);
- quote!(#val)
+ let mut tokens = quote! {};
+ tokens.append(val.to_string());
+ tokens
}
pub fn uint_expr(val: u64) -> quote::Tokens {
// Don't use quote! { #val } because that adds the type suffix.
- let val = proc_macro2::Term::intern(&val.to_string());
- quote!(#val)
+ let mut tokens = quote! {};
+ tokens.append(val.to_string());
+ tokens
}
pub fn byte_array_expr(bytes: &[u8]) -> quote::Tokens {
let mut bytes: Vec<_> = bytes.iter().cloned().collect();
bytes.push(0);
- quote! { [ #(#bytes),* ] }
+ quote! {
+ #bytes
+ }
}
pub fn cstr_expr(mut string: String) -> quote::Tokens {
string.push('\0');
- let b = proc_macro2::Literal::byte_string(&string.as_bytes());
+ let b = quote::ByteStr(&string);
quote! {
#b
}
@@ -195,9 +199,16 @@ pub mod ast_ty {
f: f64,
) -> Result<quote::Tokens, ()> {
if f.is_finite() {
- let val = proc_macro2::Literal::float(f);
+ let mut string = f.to_string();
+
+ // So it gets properly recognised as a floating point constant.
+ if !string.contains('.') {
+ string.push('.');
+ }
- return Ok(quote!(#val));
+ let mut tokens = quote! {};
+ tokens.append(string);
+ return Ok(tokens);
}
let prefix = ctx.trait_prefix();
diff --git a/src/codegen/impl_partialeq.rs b/src/codegen/impl_partialeq.rs
index 155f8741..02783808 100644
--- a/src/codegen/impl_partialeq.rs
+++ b/src/codegen/impl_partialeq.rs
@@ -4,7 +4,6 @@ use ir::context::BindgenContext;
use ir::item::{IsOpaque, Item};
use ir::ty::{TypeKind, RUST_DERIVE_IN_ARRAY_LIMIT};
use quote;
-use proc_macro2;
/// Generate a manual implementation of `PartialEq` trait for the
/// specified compound type.
@@ -72,7 +71,7 @@ pub fn gen_partialeq_impl(
}
fn gen_field(ctx: &BindgenContext, ty_item: &Item, name: &str) -> quote::Tokens {
- fn quote_equals(name_ident: proc_macro2::Term) -> quote::Tokens {
+ fn quote_equals(name_ident: quote::Ident) -> quote::Tokens {
quote! { self.#name_ident == other.#name_ident }
}
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 493a1ce9..b21c0dc4 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -38,7 +38,6 @@ use ir::ty::{Type, TypeKind};
use ir::var::Var;
use quote;
-use proc_macro2;
use std::borrow::Cow;
use std::cell::Cell;
@@ -76,7 +75,7 @@ fn root_import(ctx: &BindgenContext, module: &Item) -> quote::Tokens {
let mut tokens = quote! {};
- tokens.append_separated(path, proc_macro2::Term::intern("::"));
+ tokens.append_separated(path, "::");
quote! {
#[allow(unused_imports)]
@@ -310,7 +309,7 @@ impl AppendImplicitTemplateParams for quote::Tokens {
.expect("template params cannot fail to be a rust type")
});
- self.append_all(quote! {
+ self.append(quote! {
< #( #params ),* >
});
}
@@ -692,7 +691,7 @@ impl CodeGenerator for Type {
// We prefer using `pub use` over `pub type` because of:
// https://github.com/rust-lang/rust/issues/26264
- if inner_rust_type.to_string()
+ if inner_rust_type.as_str()
.chars()
.all(|c| match c {
// These are the only characters allowed in simple
@@ -703,19 +702,19 @@ impl CodeGenerator for Type {
outer_params.is_none() &&
inner_item.expect_type().canonical_type(ctx).is_enum()
{
- tokens.append_all(quote! {
+ tokens.append(quote! {
pub use
});
let path = top_level_path(ctx, item);
- tokens.append_separated(path, proc_macro2::Term::intern("::"));
- tokens.append_all(quote! {
+ tokens.append_separated(path, "::");
+ tokens.append(quote! {
:: #inner_rust_type as #rust_name ;
});
result.push(tokens);
return;
}
- tokens.append_all(quote! {
+ tokens.append(quote! {
pub type #rust_name
});
@@ -738,12 +737,12 @@ impl CodeGenerator for Type {
.expect("type parameters can always convert to rust ty OK")
});
- tokens.append_all(quote! {
+ tokens.append(quote! {
< #( #params ),* >
});
}
- tokens.append_all(quote! {
+ tokens.append(quote! {
= #inner_rust_type ;
});
@@ -1060,11 +1059,11 @@ impl<'a> FieldCodegen<'a> for FieldData {
self.annotations().accessor_kind().unwrap_or(accessor_kind);
if is_private {
- field.append_all(quote! {
+ field.append(quote! {
#field_ident : #ty ,
});
} else {
- field.append_all(quote! {
+ field.append(quote! {
pub #field_ident : #ty ,
});
}
@@ -1124,7 +1123,7 @@ impl<'a> FieldCodegen<'a> for FieldData {
impl BitfieldUnit {
/// Get the constructor name for this bitfield unit.
fn ctor_name(&self) -> quote::Tokens {
- let ctor_name = proc_macro2::Term::intern(&format!("new_bitfield_{}", self.nth()));
+ let ctor_name = quote::Ident::new(format!("new_bitfield_{}", self.nth()));
quote! {
#ctor_name
}
@@ -1155,7 +1154,7 @@ impl Bitfield {
let width = self.width() as u8;
let prefix = ctx.trait_prefix();
- ctor_impl.append_all(quote! {
+ ctor_impl.append(quote! {
__bindgen_bitfield_unit.set(
#offset,
#width,
@@ -1323,7 +1322,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
let prefix = ctx.trait_prefix();
let getter_name = bitfield_getter_name(ctx, self);
let setter_name = bitfield_setter_name(ctx, self);
- let unit_field_ident = proc_macro2::Term::intern(unit_field_name);
+ let unit_field_ident = quote::Ident::new(unit_field_name);
let bitfield_ty_item = ctx.resolve_item(self.ty());
let bitfield_ty = bitfield_ty_item.expect_type();
@@ -1712,7 +1711,7 @@ impl CodeGenerator for CompInfo {
}
};
- tokens.append_all(quote! {
+ tokens.append(quote! {
#generics {
#( #fields )*
}
@@ -1735,7 +1734,7 @@ impl CodeGenerator for CompInfo {
if self.found_unknown_attr() {
warn!(
"Type {} has an unkown attribute that may affect layout",
- canonical_ident.as_str()
+ canonical_ident
);
}
@@ -1749,7 +1748,7 @@ impl CodeGenerator for CompInfo {
if ctx.options().layout_tests && !self.is_forward_declaration() {
if let Some(layout) = layout {
let fn_name =
- format!("bindgen_test_layout_{}", canonical_ident.as_str());
+ format!("bindgen_test_layout_{}", canonical_ident);
let fn_name = ctx.rust_ident_raw(fn_name);
let prefix = ctx.trait_prefix();
let size_of_expr = quote! {
@@ -2131,7 +2130,7 @@ enum EnumBuilder<'a> {
Rust {
codegen_depth: usize,
attrs: Vec<quote::Tokens>,
- ident: proc_macro2::Term,
+ ident: quote::Ident,
tokens: quote::Tokens,
emitted_any_variants: bool,
},
@@ -2171,7 +2170,7 @@ impl<'a> EnumBuilder<'a> {
enum_variation: EnumVariation,
enum_codegen_depth: usize,
) -> Self {
- let ident = proc_macro2::Term::intern(name);
+ let ident = quote::Ident::new(name);
match enum_variation {
EnumVariation::Bitfield => {
@@ -2186,7 +2185,7 @@ impl<'a> EnumBuilder<'a> {
}
EnumVariation::Rust => {
- let tokens = quote!();
+ let tokens = quote!{};
EnumBuilder::Rust {
codegen_depth: enum_codegen_depth + 1,
attrs,
@@ -2209,7 +2208,7 @@ impl<'a> EnumBuilder<'a> {
}
EnumVariation::ModuleConsts => {
- let ident = proc_macro2::Term::intern(CONSTIFIED_ENUM_MODULE_REPR_NAME);
+ let ident = quote::Ident::new(CONSTIFIED_ENUM_MODULE_REPR_NAME);
let type_definition = quote! {
#( #attrs )*
pub type #ident = #repr;
@@ -2496,18 +2495,18 @@ impl CodeGenerator for Enum {
ctx: &BindgenContext,
enum_: &Type,
// Only to avoid recomputing every time.
- enum_canonical_name: &proc_macro2::Term,
+ enum_canonical_name: &quote::Ident,
// May be the same as "variant" if it's because the
// enum is unnamed and we still haven't seen the
// value.
variant_name: &str,
- referenced_name: &proc_macro2::Term,
+ referenced_name: &quote::Ident,
enum_rust_ty: quote::Tokens,
result: &mut CodegenResult<'a>,
) {
let constant_name = if enum_.name().is_some() {
if ctx.options().prepend_enum_name {
- format!("{}_{}", enum_canonical_name.as_str(), variant_name)
+ format!("{}_{}", enum_canonical_name, variant_name)
} else {
variant_name.into()
}
@@ -2536,7 +2535,7 @@ impl CodeGenerator for Enum {
);
// A map where we keep a value -> variant relation.
- let mut seen_values = HashMap::<_, proc_macro2::Term>::new();
+ let mut seen_values = HashMap::<_, quote::Ident>::new();
let enum_rust_ty = item.to_rust_ty_or_opaque(ctx, &());
let is_toplevel = item.is_toplevel(ctx);
@@ -2634,11 +2633,11 @@ impl CodeGenerator for Enum {
let parent_name =
parent_canonical_name.as_ref().unwrap();
- proc_macro2::Term::intern(
- &format!(
+ quote::Ident::new(
+ format!(
"{}_{}",
parent_name,
- variant_name.as_str()
+ variant_name
)
)
};
@@ -2647,14 +2646,14 @@ impl CodeGenerator for Enum {
ctx,
enum_ty,
&ident,
- mangled_name.as_str(),
+ mangled_name.as_ref(),
&variant_name,
enum_rust_ty.clone(),
result,
);
}
- entry.insert(variant_name);
+ entry.insert(quote::Ident::new(variant_name));
}
}
}
@@ -2982,9 +2981,10 @@ impl TryToRustTy for Type {
})
}
TypeKind::Enum(..) => {
+ let mut tokens = quote! {};
let path = item.namespace_aware_canonical_path(ctx);
- let path = proc_macro2::Term::intern(&path.join("::"));
- Ok(quote!(#path))
+ tokens.append_separated(path.into_iter().map(quote::Ident::new), "::");
+ Ok(tokens)
}
TypeKind::TemplateInstantiation(ref inst) => {
inst.try_to_rust_ty(ctx, item)
@@ -3106,7 +3106,7 @@ impl TryToRustTy for TemplateInstantiation {
let mut ty = quote! {};
let def_path = def.namespace_aware_canonical_path(ctx);
- ty.append_separated(def_path.into_iter().map(|p| ctx.rust_ident(p)), proc_macro2::Term::intern("::"));
+ ty.append_separated(def_path.into_iter().map(|p| ctx.rust_ident(p)), "::");
let def_params = match def.self_template_params(ctx) {
Some(params) => params,
@@ -3319,7 +3319,7 @@ fn objc_method_codegen(
let class_name = class_name
.expect("Generating a class method without class name?")
.to_owned();
- let expect_msg = proc_macro2::Literal::string(&format!("Couldn't find {}", class_name));
+ let expect_msg = format!("Couldn't find {}", class_name);
quote! {
msg_send!(objc::runtime::Class::get(#class_name).expect(#expect_msg), #methods_and_args)
}
@@ -3445,12 +3445,11 @@ mod utils {
use ir::item::{Item, ItemCanonicalPath};
use ir::ty::TypeKind;
use quote;
- use proc_macro2;
use std::mem;
pub fn prepend_bitfield_unit_type(result: &mut Vec<quote::Tokens>) {
- let bitfield_unit_type = proc_macro2::Term::intern(include_str!("./bitfield_unit.rs"));
- let bitfield_unit_type = quote!(#bitfield_unit_type);
+ let mut bitfield_unit_type = quote! {};
+ bitfield_unit_type.append(include_str!("./bitfield_unit.rs"));
let items = vec![bitfield_unit_type];
let old_items = mem::replace(result, items);
@@ -3676,11 +3675,10 @@ mod utils {
item: &Item,
ctx: &BindgenContext,
) -> error::Result<quote::Tokens> {
- use proc_macro2;
let path = item.namespace_aware_canonical_path(ctx);
- let path = proc_macro2::Term::intern(&path.join("::"));
- let tokens = quote! {#path};
- //tokens.append_separated(path, "::");
+
+ let mut tokens = quote! {};
+ tokens.append_separated(path.into_iter().map(quote::Ident::new), "::");
Ok(tokens)
}
diff --git a/src/codegen/struct_layout.rs b/src/codegen/struct_layout.rs
index 92ba49f7..32b48965 100644
--- a/src/codegen/struct_layout.rs
+++ b/src/codegen/struct_layout.rs
@@ -7,7 +7,6 @@ use ir::context::BindgenContext;
use ir::layout::Layout;
use ir::ty::{Type, TypeKind};
use quote;
-use proc_macro2;
use std::cmp;
use std::mem;
@@ -307,7 +306,7 @@ impl<'a> StructLayoutTracker<'a> {
self.padding_count += 1;
- let padding_field_name = proc_macro2::Term::intern(&format!("__bindgen_padding_{}", padding_count));
+ let padding_field_name = quote::Ident::new(format!("__bindgen_padding_{}", padding_count));
self.max_field_align = cmp::max(self.max_field_align, layout.align);
diff --git a/src/ir/context.rs b/src/ir/context.rs
index 21801c9f..0a914523 100644
--- a/src/ir/context.rs
+++ b/src/ir/context.rs
@@ -24,7 +24,7 @@ use cexpr;
use clang::{self, Cursor};
use clang_sys;
use parse::ClangItemParser;
-use proc_macro2;
+use quote;
use std::borrow::Cow;
use std::cell::Cell;
use std::collections::{HashMap, HashSet, hash_map};
@@ -880,7 +880,7 @@ impl BindgenContext {
}
/// Returns a mangled name as a rust identifier.
- pub fn rust_ident<S>(&self, name: S) -> proc_macro2::Term
+ pub fn rust_ident<S>(&self, name: S) -> quote::Ident
where
S: AsRef<str>
{
@@ -888,11 +888,11 @@ impl BindgenContext {
}
/// Returns a mangled name as a rust identifier.
- pub fn rust_ident_raw<T>(&self, name: T) -> proc_macro2::Term
+ pub fn rust_ident_raw<T>(&self, name: T) -> quote::Ident
where
- T: AsRef<str>
+ T: Into<quote::Ident>
{
- proc_macro2::Term::intern(name.as_ref())
+ name.into()
}
/// Iterate over all items that have been defined.
@@ -2320,7 +2320,7 @@ impl BindgenContext {
/// Convenient method for getting the prefix to use for most traits in
/// codegen depending on the `use_core` option.
- pub fn trait_prefix(&self) -> proc_macro2::Term {
+ pub fn trait_prefix(&self) -> quote::Ident {
if self.options().use_core {
self.rust_ident_raw("core")
} else {
diff --git a/src/ir/function.rs b/src/ir/function.rs
index f027e47c..481ab9f7 100644
--- a/src/ir/function.rs
+++ b/src/ir/function.rs
@@ -193,7 +193,7 @@ impl Abi {
impl quote::ToTokens for Abi {
fn to_tokens(&self, tokens: &mut quote::Tokens) {
- tokens.append_all(match *self {
+ tokens.append(match *self {
Abi::C => quote! { "C" },
Abi::Stdcall => quote! { "stdcall" },
Abi::Fastcall => quote! { "fastcall" },
diff --git a/src/ir/objc.rs b/src/ir/objc.rs
index 18b51978..0f72c399 100644
--- a/src/ir/objc.rs
+++ b/src/ir/objc.rs
@@ -13,7 +13,6 @@ use clang_sys::CXCursor_ObjCInstanceMethodDecl;
use clang_sys::CXCursor_ObjCProtocolDecl;
use clang_sys::CXCursor_ObjCProtocolRef;
use quote;
-use proc_macro2;
/// Objective C interface as used in TypeKind
///
@@ -217,7 +216,7 @@ impl ObjCMethod {
let split_name: Vec<_> = self.name
.split(':')
.filter(|p| !p.is_empty())
- .map(proc_macro2::Term::intern)
+ .map(quote::Ident::new)
.collect();
// No arguments
@@ -240,10 +239,9 @@ impl ObjCMethod {
// Get arguments without type signatures to pass to `msg_send!`
let mut args_without_types = vec![];
for arg in args.iter() {
- let arg = arg.to_string();
- let name_and_sig: Vec<&str> = arg.split(' ').collect();
+ let name_and_sig: Vec<&str> = arg.as_str().split(' ').collect();
let name = name_and_sig[0];
- args_without_types.push(proc_macro2::Term::intern(name))
+ args_without_types.push(quote::Ident::new(name))
};
let args = split_name
diff --git a/src/lib.rs b/src/lib.rs
index d4c69071..1cd64b2e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -23,7 +23,6 @@ extern crate lazy_static;
extern crate peeking_take_while;
#[macro_use]
extern crate quote;
-extern crate proc_macro2;
extern crate regex;
extern crate which;
@@ -1697,7 +1696,7 @@ impl Bindings {
writer.write("\n".as_bytes())?;
}
- let bindings = self.module.to_string();
+ let bindings = self.module.as_str().to_string();
match self.rustfmt_generated_string(&bindings) {
Ok(rustfmt_bindings) => {
@@ -1705,7 +1704,7 @@ impl Bindings {
},
Err(err) => {
eprintln!("{:?}", err);
- writer.write(bindings.as_bytes())?;
+ writer.write(bindings.as_str().as_bytes())?;
},
}
Ok(())