Skip to content

Commit e105312

Browse files
authored
Merge pull request #241 from bytecodealliance/ydnar/issue240
wit/bindgen: correctly handle cyclical type dependencies
2 parents 0fa67c8 + 3aa5739 commit e105312

File tree

11 files changed

+258
-12
lines changed

11 files changed

+258
-12
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
44

5+
## [Unreleased]
6+
7+
### Fixed
8+
9+
- [#240](https://github.com/bytecodealliance/go-modules/issues/240): correctly handle cyclical data structures when generating variant lowering code.
10+
511
## [v0.4.0] — 2024-11-05
612

713
This module has been renamed. Going forward, please use `go.bytecodealliance.org` instead of `github.com/bytecodealliance/wasm-tools-go`.

testdata/issues/issue240.wit

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package issues:issue240;
2+
3+
interface i {
4+
// v refers to r
5+
variant v {
6+
one(r),
7+
}
8+
9+
// r refers to v
10+
resource r {
11+
f: func(param: v);
12+
}
13+
}
14+
15+
world w {
16+
import i;
17+
}

testdata/issues/issue240.wit.json

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
{
2+
"worlds": [
3+
{
4+
"name": "w",
5+
"imports": {
6+
"interface-0": {
7+
"interface": {
8+
"id": 0
9+
}
10+
}
11+
},
12+
"exports": {},
13+
"package": 0
14+
}
15+
],
16+
"interfaces": [
17+
{
18+
"name": "i",
19+
"types": {
20+
"r": 0,
21+
"v": 2
22+
},
23+
"functions": {
24+
"[method]r.f": {
25+
"name": "[method]r.f",
26+
"kind": {
27+
"method": 0
28+
},
29+
"params": [
30+
{
31+
"name": "self",
32+
"type": 3
33+
},
34+
{
35+
"name": "param",
36+
"type": 2
37+
}
38+
],
39+
"results": []
40+
}
41+
},
42+
"package": 0
43+
}
44+
],
45+
"types": [
46+
{
47+
"name": "r",
48+
"kind": "resource",
49+
"owner": {
50+
"interface": 0
51+
},
52+
"docs": {
53+
"contents": "r refers to v"
54+
}
55+
},
56+
{
57+
"name": null,
58+
"kind": {
59+
"handle": {
60+
"own": 0
61+
}
62+
},
63+
"owner": null
64+
},
65+
{
66+
"name": "v",
67+
"kind": {
68+
"variant": {
69+
"cases": [
70+
{
71+
"name": "one",
72+
"type": 1
73+
}
74+
]
75+
}
76+
},
77+
"owner": {
78+
"interface": 0
79+
},
80+
"docs": {
81+
"contents": "v refers to r"
82+
}
83+
},
84+
{
85+
"name": null,
86+
"kind": {
87+
"handle": {
88+
"borrow": 0
89+
}
90+
},
91+
"owner": null
92+
}
93+
],
94+
"packages": [
95+
{
96+
"name": "issues:issue240",
97+
"interfaces": {
98+
"i": 0
99+
},
100+
"worlds": {
101+
"w": 0
102+
}
103+
}
104+
]
105+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package issues:issue240;
2+
3+
interface i {
4+
/// r refers to v
5+
resource r {
6+
f: func(param: v);
7+
}
8+
9+
/// v refers to r
10+
variant v { one(r) }
11+
}
12+
13+
world w {
14+
import i;
15+
}

testdata/issues/issue242.wit

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package issues:issue242;
2+
3+
interface i {
4+
variant v {
5+
a,
6+
b,
7+
// tag might collide with (cm.Variant).Tag() method
8+
tag,
9+
%string(string),
10+
}
11+
}
12+
13+
world w {
14+
import i;
15+
}

testdata/issues/issue242.wit.json

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"worlds": [
3+
{
4+
"name": "w",
5+
"imports": {
6+
"interface-0": {
7+
"interface": {
8+
"id": 0
9+
}
10+
}
11+
},
12+
"exports": {},
13+
"package": 0
14+
}
15+
],
16+
"interfaces": [
17+
{
18+
"name": "i",
19+
"types": {
20+
"v": 0
21+
},
22+
"functions": {},
23+
"package": 0
24+
}
25+
],
26+
"types": [
27+
{
28+
"name": "v",
29+
"kind": {
30+
"variant": {
31+
"cases": [
32+
{
33+
"name": "a",
34+
"type": null
35+
},
36+
{
37+
"name": "b",
38+
"type": null
39+
},
40+
{
41+
"name": "tag",
42+
"type": null,
43+
"docs": {
44+
"contents": "tag might collide with (cm.Variant).Tag() method"
45+
}
46+
},
47+
{
48+
"name": "string",
49+
"type": "string"
50+
}
51+
]
52+
}
53+
},
54+
"owner": {
55+
"interface": 0
56+
}
57+
}
58+
],
59+
"packages": [
60+
{
61+
"name": "issues:issue242",
62+
"interfaces": {
63+
"i": 0
64+
},
65+
"worlds": {
66+
"w": 0
67+
}
68+
}
69+
]
70+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package issues:issue242;
2+
3+
interface i {
4+
variant v {
5+
a,
6+
b,
7+
/// tag might collide with (cm.Variant).Tag() method
8+
tag,
9+
%string(string),
10+
}
11+
}
12+
13+
world w {
14+
import i;
15+
}

tests/generated/wasi/filesystem/v0.2.0/types/abi.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/generated/wasi/sockets/v0.2.0/tcp/abi.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/generated/wasi/sockets/v0.2.0/udp/abi.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)