bytecodealliance / bytecodealliance/wit-bindgen
Cannot generate Rust bindings for worlds with overlapping exports in the same crate using `pub_export_macro: true`
- Lingua principale
- Rust
- Stelle
- 1.5k
- Fork
- 286
- Merge medio
- 6h 32m
- PR unite (30g)
- 19
Descrizione
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.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
Start by running the inline Rust reproducer and inspecting the expansion of wit_bindgen::generate with pub_export_macro: true. Trace how the exported macros are named and scoped across modules; done means both generate! invocations compile without duplicate macro definitions.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust, wasm
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Attiva
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100