bytecodealliance / bytecodealliance/wit-bindgen

Cannot generate Rust bindings for worlds with overlapping exports in the same crate using `pub_export_macro: true`

Aperta
#1,502 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
gen-rust
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.