summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs82
1 files changed, 40 insertions, 42 deletions
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)
}