Skip to content

Commit dd65f16

Browse files
committed
testdata/issues: add test case for #240
This uncovered a bug where a cyclical reference between a variant and a resource could lead to incorrect serialization.
1 parent 0fa67c8 commit dd65f16

File tree

3 files changed

+137
-0
lines changed

3 files changed

+137
-0
lines changed

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+
}

0 commit comments

Comments
 (0)