bytecodealliance / bytecodealliance/wit-bindgen

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

Abierto
#1,502 1 comentario 0 reacciones 0 asignados Ver en GitHub
gen-rust
Lenguaje dominante
Rust
Estrellas
1.5k
Forks
288
Merge medio
6 h 32 min
PR fusionados (30 d)
19

Descripción

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.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
rust, wasm
Área
tooling
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Activo
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.