Skip to content

Commit

Permalink
Revert "Bump quote to 0.4"
Browse files Browse the repository at this point in the history
This reverts commit 6899c27.

The `proc_macro2` crate depends on rustc internal crates, which means that
`bindgen` would need to be run under `rustup`.

We can follow rust-lang/rust#47931 to get updates on
when this issue might be resolved and we can update `quote` again.

Fixes #1248
  • Loading branch information
fitzgen committed Feb 14, 2018
1 parent a09a8ff commit eb415c7
Show file tree
Hide file tree
Showing 17 changed files with 108 additions and 115 deletions.
25 changes: 3 additions & 22 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,9 @@ clap = "2"
clang-sys = { version = "0.21.0", features = ["runtime", "clang_3_9"] }
lazy_static = "1"
peeking_take_while = "0.1.2"
quote = "0.4"
quote = "0.3.15"
regex = "0.2"
which = "1.0.2"
proc-macro2 = "0.2"

[dependencies.env_logger]
optional = true
Expand Down
49 changes: 30 additions & 19 deletions src/codegen/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 ),* )]
}
Expand All @@ -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 {
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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 {
Expand All @@ -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>
});

Expand All @@ -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);
Expand Down Expand Up @@ -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
}
Expand All @@ -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();
Expand Down
3 changes: 1 addition & 2 deletions src/codegen/impl_partialeq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 }
}

Expand Down
Loading

0 comments on commit eb415c7

Please sign in to comment.