Skip to content

Commit c6dc35f

Browse files
author
Guy Bedford
authored
fix resource alias case (#831)
1 parent 475ce00 commit c6dc35f

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

crates/rust/src/bindgen.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -432,13 +432,15 @@ impl Bindgen for FunctionBindgen<'_, '_> {
432432
Handle::Borrow(resource) => ("&", resource),
433433
Handle::Own(resource) => ("", resource),
434434
};
435-
let resource = dealias(resolve, *resource);
435+
436+
let dealiased_resource = dealias(resolve, *resource);
436437

437438
results.push(
438-
if let Direction::Export = self.gen.gen.resources[&resource].direction {
439+
if let Direction::Export = self.gen.gen.resources[&dealiased_resource].direction
440+
{
439441
match handle {
440442
Handle::Borrow(_) => {
441-
let name = resolve.types[resource]
443+
let name = resolve.types[*resource]
442444
.name
443445
.as_deref()
444446
.unwrap()
@@ -449,17 +451,17 @@ impl Bindgen for FunctionBindgen<'_, '_> {
449451
)
450452
}
451453
Handle::Own(_) => {
452-
let name = self.gen.type_path(resource, true);
454+
let name = self.gen.type_path(dealiased_resource, true);
453455
format!("{name}::from_handle({op} as u32)")
454456
}
455457
}
456458
} else if prefix == "" {
457-
let name = self.gen.type_path(resource, true);
459+
let name = self.gen.type_path(dealiased_resource, true);
458460
format!("{name}::from_handle({op} as u32)")
459461
} else {
460462
let tmp = format!("handle{}", self.tmp());
461463
self.handle_decls.push(format!("let {tmp};"));
462-
let name = self.gen.type_path(resource, true);
464+
let name = self.gen.type_path(dealiased_resource, true);
463465
format!(
464466
"{{\n
465467
{tmp} = {name}::from_handle({op} as u32);

tests/runtime/resource_alias.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,13 @@ fn run_test(instance: ResourceAlias, store: &mut Store<crate::Wasi<()>>) -> anyh
5050
.x()
5151
.call_constructor(&mut *store, 8)?,
5252
};
53+
let y = instance
54+
.test_resource_alias_e1()
55+
.x()
56+
.call_constructor(&mut *store, 8)?;
5357
let _ = instance
5458
.test_resource_alias_e2()
55-
.call_a(&mut *store, foo_e2, bar_e2)?;
59+
.call_a(&mut *store, foo_e2, bar_e2, y)?;
5660

5761
// TODO: how do I test deep equal of ResourceAny type?
5862
// assert_eq!(

tests/runtime/resource_alias/wasm.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ impl exports::test::resource_alias::e2::Guest for E2 {
3232
fn a(
3333
f: exports::test::resource_alias::e2::Foo,
3434
g: exports::test::resource_alias::e2::Bar,
35-
) -> wit_bindgen::rt::vec::Vec<exports::test::resource_alias::e2::OwnX> {
35+
h: &exports::test::resource_alias::e1::X,
36+
) -> wit_bindgen::rt::vec::Vec<exports::test::resource_alias::e2::OwnY> {
3637
vec![f.x, g.x]
3738
}
3839
}

tests/runtime/resource_alias/world.wit

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ interface e1 {
1111
}
1212

1313
interface e2 {
14-
use e1.{x, foo as bar};
14+
use e1.{x as y, foo as bar};
1515

16-
record foo { x: x }
16+
record foo { x: y }
1717

18-
a: func(f: foo, g: bar) -> list<x>;
18+
a: func(f: foo, g: bar, h: borrow<y>) -> list<y>;
1919
}
2020

2121
world resource-alias {

0 commit comments

Comments
 (0)