Skip to content

Commit ac9f266

Browse files
authored
Merge pull request #56 from fitzgen/disambiguate
Disambiguate generated wrappers
2 parents 46f1b56 + 3ad3123 commit ac9f266

File tree

1 file changed

+31
-2
lines changed
  • crates/wasm-bindgen-macro/src

1 file changed

+31
-2
lines changed

crates/wasm-bindgen-macro/src/lib.rs

100644100755
Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ extern crate proc_macro2;
1010
extern crate serde_json;
1111
extern crate wasm_bindgen_shared as shared;
1212

13+
use std::borrow::Cow;
14+
use std::env;
1315
use std::sync::atomic::*;
1416

1517
use proc_macro::TokenStream;
@@ -39,6 +41,24 @@ pub fn wasm_bindgen(attr: TokenStream, input: TokenStream) -> TokenStream {
3941
ret.into()
4042
}
4143

44+
fn to_ident_name(s: &str) -> Cow<str> {
45+
if s.chars().all(|c| match c {
46+
'a'...'z' | 'A'...'Z' | '0'...'9' | '_' => true,
47+
_ => false,
48+
}) {
49+
return Cow::from(s);
50+
}
51+
52+
Cow::from(
53+
s.chars()
54+
.map(|c| match c {
55+
'a'...'z' | 'A'...'Z' | '0'...'9' | '_' => c,
56+
_ => '_',
57+
})
58+
.collect::<String>(),
59+
)
60+
}
61+
4262
// Generate wrappers for all the items that we've found
4363
fn generate_wrappers(program: ast::Program, tokens: &mut Tokens) {
4464
for export in program.exports.iter() {
@@ -62,9 +82,18 @@ fn generate_wrappers(program: ast::Program, tokens: &mut Tokens) {
6282
// eventually have it actually in its own section.
6383

6484
static CNT: AtomicUsize = ATOMIC_USIZE_INIT;
65-
let generated_static_name = format!("__WASM_BINDGEN_GENERATED{}",
66-
CNT.fetch_add(1, Ordering::SeqCst));
85+
86+
let crate_name = env::var("CARGO_PKG_NAME").expect("should have CARGO_PKG_NAME env var");
87+
let crate_vers = env::var("CARGO_PKG_VERSION").expect("should have CARGO_PKG_VERSION env var");
88+
89+
let generated_static_name = format!(
90+
"__WASM_BINDGEN_GENERATED_{}_{}_{}",
91+
to_ident_name(&crate_name),
92+
to_ident_name(&crate_vers),
93+
CNT.fetch_add(1, Ordering::SeqCst)
94+
);
6795
let generated_static_name = syn::Ident::from(generated_static_name);
96+
6897
let mut generated_static_value = Tokens::new();
6998
let generated_static_length = program.wbg_literal(&mut generated_static_value);
7099

0 commit comments

Comments
 (0)