bytecodealliance / bytecodealliance/wit-bindgen
Cannot generate Rust bindings for worlds with overlapping exports in the same crate using `pub_export_macro: true`
- Dominant language
- Rust
- Stars
- 1.5k
- Forks
- 286
- Avg merge
- 6h 32m
- Merged PRs (30d)
- 19
Description
This input:
```rust
mod a {
wit_bindgen::generate!({
inline: r#"
package a:b;
interface foo {
x: func();
}
world a {
export foo;
}
"#,
world: "a",
pub_export_macro: true,
});
}
mod b {
wit_bindgen::generate!({
inline: r#"
package a:b;
interface foo {
x: func();
}
interface bar {
x: func();
}
world b {
export foo;
export bar;
}
"#,
world: "b",
pub_export_macro: true,
});
}
fn main() {}
```
fails with:
```
error[E0428]: the name `__export_a_b_foo_cabi` is defined multiple times
--> src/main.rs:20:5
|
2 | wit_bindgen::generate!({
| ----------------------- previous definition of the macro `__export_a_b_foo_cabi` here
...
20 | wit_bindgen::generate!({
| ^^^^^^^^^^^^^^^^^^^^^^^ `__export_a_b_foo_cabi` redefined here
|
= note: `__export_a_b_foo_cabi` must be defined only once in the macro namespace of this module
= note: this error originates in the macro `wit_bindgen::generate` (in Nightly builds, run with -Z macro-backtrace for more info)
For more information about this error, try `rustc --explain E0428`.
error: could not compile `wat` (bin "wat") due to 1 previous error
```
Basically we need to do more namespacing/scoping of macros that avoids `#[macro_export]`. I couldn't figure it out earlier but it's probably possible nowadays.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.