feat: add a histrical wit-bindgen

This commit is contained in:
2023-01-01 00:25:48 +08:00
parent 01e8f5a959
commit aa50d63aec
419 changed files with 45283 additions and 1 deletions

View File

@@ -0,0 +1,9 @@
a: async func()
b: async func(x: s32)
c: async func() -> u32
resource y {
a: async func()
b: async func(x: s32)
c: async func() -> u32
}

View File

@@ -0,0 +1,60 @@
{
"resources": [
{
"name": "y"
}
],
"types": [
{
"idx": 0,
"primitive": "handle-0"
}
],
"functions": [
{
"name": "a",
"async": true,
"params": [],
"result": "unit"
},
{
"name": "b",
"async": true,
"params": [
"s32"
],
"result": "unit"
},
{
"name": "c",
"async": true,
"params": [],
"result": "u32"
},
{
"name": "y::a",
"async": true,
"params": [
"handle-0"
],
"result": "unit"
},
{
"name": "y::b",
"async": true,
"params": [
"handle-0",
"s32"
],
"result": "unit"
},
{
"name": "y::c",
"async": true,
"params": [
"handle-0"
],
"result": "u32"
}
]
}

View File

@@ -0,0 +1,19 @@
// hello
// world
// why, yes
// this is a comment
/* this too */ /* is a comment */
/* this /* is /* a */ nested */ comment */
type /* foo */ bar /* baz */ = //
handle //
//
//
x
resource /* x */ x // ...

View File

@@ -0,0 +1,18 @@
{
"resources": [
{
"name": "x"
}
],
"types": [
{
"idx": 0,
"name": "bar",
"primitive": "handle-0"
},
{
"idx": 1,
"primitive": "handle-0"
}
]
}

View File

@@ -0,0 +1,24 @@
# A Markdown file!
containing stuff, and also some code blocks, wit and other.
```wit
x: func()
```
Intervening content, including a non-wit codeblock:
```js
function func() {}
```
```wit
y: func()
```
## A new section
In which, another wit code block!
```wit
z: func()
```

View File

@@ -0,0 +1,19 @@
{
"functions": [
{
"name": "x",
"params": [],
"result": "unit"
},
{
"name": "y",
"params": [],
"result": "unit"
},
{
"name": "z",
"params": [],
"result": "unit"
}
]
}

View File

@@ -0,0 +1,7 @@
f1: func()
f2: func(a: u32)
f3: func(a: u32,)
f4: func() -> u32
f6: func() -> tuple<u32, u32>
f7: func(a: float32, b: float32) -> tuple<u32, u32>
f8: func(a: option<u32>) -> expected<u32, float32>

View File

@@ -0,0 +1,70 @@
{
"types": [
{
"idx": 0,
"tuple": {
"types": [
"u32",
"u32"
]
}
},
{
"idx": 1,
"option": "u32"
},
{
"idx": 2,
"expected": {
"ok": "u32",
"err": "float32"
}
}
],
"functions": [
{
"name": "f1",
"params": [],
"result": "unit"
},
{
"name": "f2",
"params": [
"u32"
],
"result": "unit"
},
{
"name": "f3",
"params": [
"u32"
],
"result": "unit"
},
{
"name": "f4",
"params": [],
"result": "u32"
},
{
"name": "f6",
"params": [],
"result": "type-0"
},
{
"name": "f7",
"params": [
"float32",
"float32"
],
"result": "type-0"
},
{
"name": "f8",
"params": [
"type-1"
],
"result": "type-2"
}
]
}

View File

@@ -0,0 +1,28 @@
# Title
This file is like import-me.wit, but it's a Markdown file with embedded wit
code blocks.
## `foo`
```wit
/// This is foo.
type foo = u32
```
## `x`
```wit
/// This is x.
resource x
```
## `handle`
```wit
/// This is handle.
type %handle = handle x
```
## `some-record`
```wit
/// This is some-record.
type some-record = tuple<u32, u64, float32>
```

View File

@@ -0,0 +1,34 @@
{
"resources": [
{
"name": "x"
}
],
"types": [
{
"idx": 0,
"name": "foo",
"primitive": "u32"
},
{
"idx": 1,
"primitive": "handle-0"
},
{
"idx": 2,
"name": "handle",
"primitive": "handle-0"
},
{
"idx": 3,
"name": "some-record",
"tuple": {
"types": [
"u32",
"u64",
"float32"
]
}
}
]
}

View File

@@ -0,0 +1,7 @@
type foo = u32
resource x
type %handle = handle x
type some-record = tuple<u32, u64, float32>

View File

@@ -0,0 +1,34 @@
{
"resources": [
{
"name": "x"
}
],
"types": [
{
"idx": 0,
"name": "foo",
"primitive": "u32"
},
{
"idx": 1,
"primitive": "handle-0"
},
{
"idx": 2,
"name": "handle",
"primitive": "handle-0"
},
{
"idx": 3,
"name": "some-record",
"tuple": {
"types": [
"u32",
"u64",
"float32"
]
}
}
]
}

View File

@@ -0,0 +1,18 @@
// This test is like imports.wit, but uses import-me-too, which is a markdown
// file instead of a plain wit file.
use { foo } from import-me-too
use { foo as bar } from import-me-too
use { x as import-me-x } from import-me-too
type x = foo
type y = bar
type z1 = import-me-x
type z2 = handle import-me-x
use { %handle } from import-me-too
resource xyz
type my-handle = handle xyz
type my-handle2 = xyz
use { some-record } from import-me-too

View File

@@ -0,0 +1,76 @@
{
"resources": [
{
"name": "x",
"foreign_module": "import-me-too"
},
{
"name": "xyz"
}
],
"types": [
{
"idx": 0,
"name": "foo",
"primitive": "u32",
"foreign_module": "import-me-too"
},
{
"idx": 1,
"primitive": "handle-0",
"foreign_module": "import-me-too"
},
{
"idx": 2,
"name": "handle",
"primitive": "handle-0",
"foreign_module": "import-me-too"
},
{
"idx": 3,
"name": "some-record",
"tuple": {
"types": [
"u32",
"u64",
"float32"
]
},
"foreign_module": "import-me-too"
},
{
"idx": 4,
"name": "x",
"primitive": "type-0"
},
{
"idx": 5,
"name": "y",
"primitive": "type-0"
},
{
"idx": 6,
"name": "z1",
"primitive": "type-1"
},
{
"idx": 7,
"name": "z2",
"primitive": "handle-0"
},
{
"idx": 8,
"primitive": "handle-1"
},
{
"idx": 9,
"name": "my-handle",
"primitive": "handle-1"
},
{
"idx": 10,
"name": "my-handle2",
"primitive": "type-8"
}
]
}

View File

@@ -0,0 +1,15 @@
use { foo } from import-me
use { foo as bar } from import-me
use { x as import-me-x } from import-me
type x = foo
type y = bar
type z1 = import-me-x
type z2 = handle import-me-x
use { %handle } from import-me
resource xyz
type my-handle = handle xyz
type my-handle2 = xyz
use { some-record } from import-me

View File

@@ -0,0 +1,76 @@
{
"resources": [
{
"name": "x",
"foreign_module": "import-me"
},
{
"name": "xyz"
}
],
"types": [
{
"idx": 0,
"name": "foo",
"primitive": "u32",
"foreign_module": "import-me"
},
{
"idx": 1,
"primitive": "handle-0",
"foreign_module": "import-me"
},
{
"idx": 2,
"name": "handle",
"primitive": "handle-0",
"foreign_module": "import-me"
},
{
"idx": 3,
"name": "some-record",
"tuple": {
"types": [
"u32",
"u64",
"float32"
]
},
"foreign_module": "import-me"
},
{
"idx": 4,
"name": "x",
"primitive": "type-0"
},
{
"idx": 5,
"name": "y",
"primitive": "type-0"
},
{
"idx": 6,
"name": "z1",
"primitive": "type-1"
},
{
"idx": 7,
"name": "z2",
"primitive": "handle-0"
},
{
"idx": 8,
"primitive": "handle-1"
},
{
"idx": 9,
"name": "my-handle",
"primitive": "handle-1"
},
{
"idx": 10,
"name": "my-handle2",
"primitive": "type-8"
}
]
}

View File

@@ -0,0 +1,4 @@
use * from import-me
type my-handle = handle x
type my-handle2 = x

View File

@@ -0,0 +1,49 @@
{
"resources": [
{
"name": "x",
"foreign_module": "import-me"
}
],
"types": [
{
"idx": 0,
"name": "foo",
"primitive": "u32",
"foreign_module": "import-me"
},
{
"idx": 1,
"name": "handle",
"primitive": "handle-0",
"foreign_module": "import-me"
},
{
"idx": 2,
"name": "some-record",
"tuple": {
"types": [
"u32",
"u64",
"float32"
]
},
"foreign_module": "import-me"
},
{
"idx": 3,
"primitive": "handle-0",
"foreign_module": "import-me"
},
{
"idx": 4,
"name": "my-handle",
"primitive": "handle-0"
},
{
"idx": 5,
"name": "my-handle2",
"primitive": "type-3"
}
]
}

View File

@@ -0,0 +1,2 @@
// parse-fail
a: async

View File

@@ -0,0 +1,5 @@
expected keyword `func`, found eof
--> tests/ui/parse-fail/async.wit:3:1
|
3 |
| ^

View File

@@ -0,0 +1,3 @@
// parse-fail
a: async()

View File

@@ -0,0 +1,5 @@
expected keyword `func`, found '('
--> tests/ui/parse-fail/async1.wit:2:9
|
2 | a: async()
| ^

View File

@@ -0,0 +1,5 @@
// parse-fail
type x = list<u32
type y = u32

View File

@@ -0,0 +1,5 @@
expected '>', found keyword `type`
--> tests/ui/parse-fail/bad-list.wit:5:1
|
5 | type y = u32
| ^

View File

@@ -0,0 +1,5 @@
// parse-fail
resource x {
x: s32
}

View File

@@ -0,0 +1,5 @@
globals not allowed in resources
--> tests/ui/parse-fail/bad-resource.wit:4:3
|
4 | x: s32
| ^

View File

@@ -0,0 +1,6 @@
// parse-fail
resource x {
x: func()
x: func()
}

View File

@@ -0,0 +1,5 @@
"x" defined twice in this resource
--> tests/ui/parse-fail/bad-resource2.wit:5:3
|
5 | x: func()
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
use {} from foo

View File

@@ -0,0 +1,5 @@
expected an identifier or string, found '}'
--> tests/ui/parse-fail/bad-use.wit:2:6
|
2 | use {} from foo
| ^

View File

@@ -0,0 +1,4 @@
// parse-fail
use { a } from
type foo = u32

View File

@@ -0,0 +1,5 @@
expected an identifier or string, found keyword `type`
--> tests/ui/parse-fail/bad-use2.wit:4:1
|
4 | type foo = u32
| ^---

View File

@@ -0,0 +1,2 @@
// parse-fail
use * from type

View File

@@ -0,0 +1,5 @@
expected an identifier or string, found keyword `type`
--> tests/ui/parse-fail/bad-use3.wit:2:12
|
2 | use * from type
| ^---

View File

@@ -0,0 +1,2 @@
// parse-fail
use { foo } from bar:

View File

@@ -0,0 +1,5 @@
expected ':', found whitespace
--> tests/ui/parse-fail/bad-use4.wit:2:22
|
2 | use { foo } from bar:
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
use { foo } from bar:baz

View File

@@ -0,0 +1,5 @@
expected ':', found an identifier
--> tests/ui/parse-fail/bad-use5.wit:2:22
|
2 | use { foo } from bar:baz
| ^

View File

@@ -0,0 +1,3 @@
// parse-fail
use { foo } from import-me::bar

View File

@@ -0,0 +1,5 @@
`bar` not defined in `import-me`
--> tests/ui/parse-fail/bad-use6.wit:3:29
|
3 | use { foo } from import-me::bar
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
use from import-me

View File

@@ -0,0 +1,5 @@
expected '{', found keyword `from`
--> tests/ui/parse-fail/bad-use7.wit:3:5
|
3 | use from import-me
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
type foo = foo

View File

@@ -0,0 +1,5 @@
type can recursively refer to itself
--> tests/ui/parse-fail/cycle.wit:2:6
|
2 | type foo = foo
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
type foo = bar
type bar = foo

View File

@@ -0,0 +1,5 @@
type can recursively refer to itself
--> tests/ui/parse-fail/cycle2.wit:2:6
|
2 | type foo = bar
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
type foo = bar
type bar = option<foo>

View File

@@ -0,0 +1,5 @@
type can recursively refer to itself
--> tests/ui/parse-fail/cycle3.wit:2:6
|
2 | type foo = bar
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
type foo = bar
record bar { x: foo }

View File

@@ -0,0 +1,5 @@
type can recursively refer to itself
--> tests/ui/parse-fail/cycle4.wit:2:6
|
2 | type foo = bar
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
type foo = bar
type bar = list<foo>

View File

@@ -0,0 +1,5 @@
type can recursively refer to itself
--> tests/ui/parse-fail/cycle5.wit:2:6
|
2 | type foo = bar
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
type

View File

@@ -0,0 +1,5 @@
expected an identifier or string, found eof
--> tests/ui/parse-fail/dangling-type.wit:4:1
|
4 |
| ^

View File

@@ -0,0 +1,4 @@
// parse-fail
foo: func()
foo: func()

View File

@@ -0,0 +1,5 @@
"foo" defined twice
--> tests/ui/parse-fail/duplicate-functions.wit:4:1
|
4 | foo: func()
| ^--

View File

@@ -0,0 +1,4 @@
// parse-fail
resource a
resource a

View File

@@ -0,0 +1,5 @@
resource "a" defined twice
--> tests/ui/parse-fail/duplicate-resource.wit:4:10
|
4 | resource a
| ^

View File

@@ -0,0 +1,4 @@
// parse-fail
type foo = s32
type foo = s32

View File

@@ -0,0 +1,5 @@
type "foo" defined twice
--> tests/ui/parse-fail/duplicate-type.wit:4:6
|
4 | type foo = s32
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
a: s32
a: u32

View File

@@ -0,0 +1,5 @@
"a" defined twice
--> tests/ui/parse-fail/duplicate-value.wit:3:1
|
3 | a: u32
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
enum t {}

View File

@@ -0,0 +1,5 @@
empty enum
--> tests/ui/parse-fail/empty-enum.wit:2:6
|
2 | enum t {}
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
union t {}

View File

@@ -0,0 +1,5 @@
empty union
--> tests/ui/parse-fail/empty-union.wit:2:7
|
2 | union t {}
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
variant t {}

View File

@@ -0,0 +1,5 @@
empty variant
--> tests/ui/parse-fail/empty-variant1.wit:2:9
|
2 | variant t {}
| ^

View File

@@ -0,0 +1,2 @@
// parse-fail
type foo = handle foo

View File

@@ -0,0 +1,5 @@
no resource named `foo`
--> tests/ui/parse-fail/handle-no-resource.wit:2:19
|
2 | type foo = handle foo
| ^--

View File

@@ -0,0 +1,2 @@
// parse-fail
use { nonexistent } from import-me

View File

@@ -0,0 +1,5 @@
name not defined in submodule
--> tests/ui/parse-fail/import-bad.wit:2:7
|
2 | use { nonexistent } from import-me
| ^----------

View File

@@ -0,0 +1,3 @@
// parse-fail
use { foo } from import-me
use { foo } from import-me

View File

@@ -0,0 +1,5 @@
type "foo" defined twice
--> tests/ui/parse-fail/import-bad2.wit:3:7
|
3 | use { foo } from import-me
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
use { bar } from import-me
use { bar } from import-me

View File

@@ -0,0 +1,5 @@
resource "bar" defined twice
--> tests/ui/parse-fail/import-bad3.wit:3:7
|
3 | use { bar } from import-me
| ^--

View File

@@ -0,0 +1,2 @@
// parse-fail
use { bar, bar } from import-me

View File

@@ -0,0 +1,5 @@
resource "bar" defined twice
--> tests/ui/parse-fail/import-bad4.wit:2:12
|
2 | use { bar, bar } from import-me
| ^--

View File

@@ -0,0 +1,3 @@
// parse-fail
use { foo } from import-me
use * from import-me

View File

@@ -0,0 +1,5 @@
type "foo" defined twice
--> tests/ui/parse-fail/import-bad5.wit:3:12
|
3 | use * from import-me
| ^--------

View File

@@ -0,0 +1,2 @@
// parse-fail
use { foo } from import-cycle2-v2

View File

@@ -0,0 +1 @@
file `tests/ui/parse-fail/import-cycle2-v1.wit` recursively imports itself

View File

@@ -0,0 +1,2 @@
// parse-fail
use { foo } from import-cycle2-v1

View File

@@ -0,0 +1 @@
file `tests/ui/parse-fail/import-cycle2-v2.wit` recursively imports itself

View File

@@ -0,0 +1,2 @@
type foo = u32
resource bar

View File

@@ -0,0 +1,18 @@
{
"resources": [
{
"name": "bar"
}
],
"types": [
{
"idx": 0,
"name": "foo",
"primitive": "u32"
},
{
"idx": 1,
"primitive": "handle-0"
}
]
}

View File

@@ -0,0 +1,2 @@
// parse-fail
use { foo } from import1

View File

@@ -0,0 +1 @@
file `tests/ui/parse-fail/import1.wit` recursively imports itself

View File

@@ -0,0 +1,7 @@
// parse-fail
hello
```wit
type foo = bar
```

View File

@@ -0,0 +1,5 @@
no type named `bar`
--> tests/ui/parse-fail/invalid-md.md:6:12
|
6 | type foo = bar
| ^--

View File

@@ -0,0 +1,2 @@
// parse-fail
abcd

View File

@@ -0,0 +1,5 @@
expected ':', found eof
--> tests/ui/parse-fail/invalid-toplevel.wit:3:1
|
3 |
| ^

View File

@@ -0,0 +1,3 @@
// parse-fail
type option = u32

View File

@@ -0,0 +1,5 @@
expected an identifier or string, found keyword `option`
--> tests/ui/parse-fail/keyword.wit:3:6
|
3 | type option = u32
| ^-----

View File

@@ -0,0 +1,3 @@
// parse-fail
type foo = bar

View File

@@ -0,0 +1,5 @@
no type named `bar`
--> tests/ui/parse-fail/undefined-typed.wit:3:12
|
3 | type foo = bar
| ^--

View File

@@ -0,0 +1,5 @@
unterminated string literal
--> tests/ui/parse-fail/unterminated-string.wit:3:1
|
3 | "
| ^

View File

@@ -0,0 +1,16 @@
resource a
resource b
resource c
resource d {}
resource e {
x: func()
}
resource f {
x: func()
y: func()
}
resource g implements a
resource h implements b {}
resource i implements e {
z: func()
}

Some files were not shown because too many files have changed in this diff Show More