Skip to content

Commit 61243cf

Browse files
fix(rust): qualify world-owned type paths in future/stream payload vtables (#1601)
* rust: qualify world-owned type paths so future/stream payload vtables resolve * add regression test to .wit file * add ignores for wit test to cpp and go
1 parent 5f20865 commit 61243cf

5 files changed

Lines changed: 25 additions & 0 deletions

File tree

crates/rust/src/interface.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,11 @@ unsafe fn call_import(&mut self, _params: Self::ParamsLower, _results: *mut u8)
18871887
return format!("{path}::{name}");
18881888
}
18891889
}
1890+
// World-level aliases live at macro root. `path_to_root()` is
1891+
// `""` at root, `"super::super::"` in stream/future payload mode.
1892+
if let TypeOwner::World(_) = self.resolve.types[id].owner {
1893+
return format!("{}{name}", self.path_to_root());
1894+
}
18901895
name
18911896
}
18921897

crates/test/src/cpp.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ impl LanguageMethods for Cpp {
4545
config: &crate::config::WitConfig,
4646
_args: &[String],
4747
) -> bool {
48+
// Compiles on C++ despite the blanket async exclusion below.
49+
if name == "issue-1598.wit" {
50+
return false;
51+
}
4852
return match name {
4953
"issue1514-6.wit" | "named-fixed-length-list.wit" | "map.wit" => true,
5054
_ => false,

crates/test/src/csharp.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ impl LanguageMethods for Csharp {
4848
| "async-resource-func.wit"
4949
| "import-export-resource.wit"
5050
| "issue-1433.wit"
51+
| "issue-1598.wit"
5152
| "named-fixed-length-list.wit"
5253
| "map.wit"
5354
)

crates/test/src/go.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ impl LanguageMethods for Go {
3030
config.error_context
3131
|| name == "async-trait-function.wit"
3232
|| name == "named-fixed-length-list.wit"
33+
|| name == "issue-1598.wit"
3334
}
3435

3536
fn default_bindgen_args_for_codegen(&self) -> &[&str] {

tests/codegen/issue-1598.wit

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//@ async = true
2+
3+
package a:b;
4+
5+
world w {
6+
use t.{r};
7+
export f: async func() -> future<result<r, string>>;
8+
}
9+
10+
interface t {
11+
record r {
12+
x: u32,
13+
}
14+
}

0 commit comments

Comments
 (0)