Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions crates/rust/src/interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1887,6 +1887,11 @@ unsafe fn call_import(&mut self, _params: Self::ParamsLower, _results: *mut u8)
return format!("{path}::{name}");
}
}
// World-level aliases live at macro root. `path_to_root()` is
// `""` at root, `"super::super::"` in stream/future payload mode.
if let TypeOwner::World(_) = self.resolve.types[id].owner {
return format!("{}{name}", self.path_to_root());
}
name
}

Expand Down
22 changes: 22 additions & 0 deletions crates/rust/tests/codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -235,3 +235,25 @@ mod method_chaining {
enable_method_chaining: true
});
}

// Regression for #1598: world-level `use t.{r};` inside
// `future<result<r, _>>` used to emit unresolved bare `R` in vtable{N}.
#[allow(unused, reason = "testing codegen, not functionality")]
mod issue_1598_future_result_use {
wit_bindgen::generate!({
inline: r#"
package a:b;

world w {
use t.{r};
export f: func() -> future<result<r, string>>;
}

interface t {
record r {
x: u32,
}
}
"#,
});
}
Loading