chore: checkpoint before Python removal

This commit is contained in:
2026-03-26 22:33:59 +00:00
parent 683cec9307
commit e568ddf82a
29972 changed files with 11269302 additions and 2 deletions

2
vendor/wit-parser/tests/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
!*.wasm
!*.wat

153
vendor/wit-parser/tests/all.rs vendored Normal file
View File

@@ -0,0 +1,153 @@
//! You can run this test suite with:
//!
//! cargo test --test all
//!
//! An argument can be passed as well to filter, based on filename, which test
//! to run
//!
//! cargo test --test all foo.wit
use anyhow::{Context, Result, bail};
use libtest_mimic::{Arguments, Trial};
use pretty_assertions::StrComparison;
use std::env;
use std::ffi::OsStr;
use std::fs;
use std::io;
use std::path::{Path, PathBuf};
use std::str;
use wit_parser::*;
fn main() {
env_logger::init();
let tests = find_tests();
let mut trials = Vec::new();
for test in tests {
let trial = Trial::test(format!("{test:?}"), move || {
Runner {}
.run(&test)
.context(format!("test {test:?} failed"))
.map_err(|e| format!("{e:?}").into())
});
trials.push(trial);
}
let mut args = Arguments::from_args();
if cfg!(target_family = "wasm") && !cfg!(target_feature = "atomics") {
args.test_threads = Some(1);
}
libtest_mimic::run(&args, trials).exit();
}
/// Recursively finds all tests in a whitelisted set of directories which we
/// then load up and test in parallel.
fn find_tests() -> Vec<PathBuf> {
let mut tests = Vec::new();
find_tests("tests/ui".as_ref(), &mut tests);
find_tests("tests/ui/parse-fail".as_ref(), &mut tests);
tests.sort();
return tests;
fn find_tests(path: &Path, tests: &mut Vec<PathBuf>) {
for f in path.read_dir().unwrap() {
let f = f.unwrap();
let path = f.path();
if path.file_name().unwrap().to_str().unwrap() == "parse-fail" {
continue;
}
if f.file_type().unwrap().is_dir() {
tests.push(path);
continue;
}
match path.extension().and_then(|s| s.to_str()) {
Some("md") | Some("wit") | Some("wat") | Some("wasm") => {}
_ => continue,
}
tests.push(path);
}
}
}
struct Runner {}
impl Runner {
fn run(&mut self, test: &Path) -> Result<()> {
let mut resolve = Resolve::new();
resolve.features.insert("active".to_string());
let result = resolve.push_path(test);
let result = if test.iter().any(|s| s == "parse-fail") {
match result {
Ok(_) => bail!("expected test to not parse but it did"),
Err(mut e) => {
if let Some(err) = e.downcast_mut::<io::Error>() {
*err = io::Error::new(
io::ErrorKind::Other,
"some generic platform-agnostic error message",
);
}
format!("{e:#}")
}
}
} else {
result?;
// format json string to human readable
let json_result = serde_json::to_string_pretty(&resolve)?;
// "foo.wit" => "foo.wit.json"
self.read_or_write_to_file(test, &json_result, "json")?;
return Ok(());
};
// "foo.wit" => "foo.wit.result"
// "foo.wit.md" => "foo.wit.md.result"
self.read_or_write_to_file(test, &result, "result")?;
return Ok(());
}
fn read_or_write_to_file(
&mut self,
test: &Path,
result: &str,
extension: &str,
) -> Result<(), anyhow::Error> {
let result_file = if test.extension() == Some(OsStr::new("md"))
&& test
.file_stem()
.and_then(|path| Path::new(path).extension())
== Some(OsStr::new("wit"))
{
test.with_extension(format!("md.{extension}"))
} else {
test.with_extension(format!("wit.{extension}"))
};
if env::var_os("BLESS").is_some() {
let normalized = normalize(&result, extension);
fs::write(&result_file, normalized)?;
} else {
let expected = fs::read_to_string(&result_file).context(format!(
"failed to read test expectation file {result_file:?}\nthis can be fixed with BLESS=1"
))?;
let expected = normalize(&expected, extension);
let result = normalize(&result, extension);
if expected != result {
bail!(
"failed test: result is not as expected:{}",
StrComparison::new(&expected, &result),
);
}
}
Ok(())
}
}
fn normalize(s: &str, extension: &str) -> String {
let s = s.trim();
match extension {
// .result files have error messages with paths, so normalize Windows \ separators to /
"result" => s.replace("\\", "/").replace("\r\n", "\n"),
// .json files escape strings with \, so leave them alone
_ => s.replace("\r\n", "\n"),
}
}

24
vendor/wit-parser/tests/ui/async.wit vendored Normal file
View File

@@ -0,0 +1,24 @@
package test:%async;
interface x {
x: async func(x: u32) -> u64;
y: func();
resource z {
constructor();
x: async func();
y: func();
static-x: static async func();
static-y: static func();
}
}
world y {
import x: async func();
import y: func();
export x: async func();
export y: func();
}

View File

@@ -0,0 +1,151 @@
{
"worlds": [
{
"name": "y",
"imports": {
"x": {
"function": {
"name": "x",
"kind": "async-freestanding",
"params": []
}
},
"y": {
"function": {
"name": "y",
"kind": "freestanding",
"params": []
}
}
},
"exports": {
"x": {
"function": {
"name": "x",
"kind": "async-freestanding",
"params": []
}
},
"y": {
"function": {
"name": "y",
"kind": "freestanding",
"params": []
}
}
},
"package": 0
}
],
"interfaces": [
{
"name": "x",
"types": {
"z": 0
},
"functions": {
"x": {
"name": "x",
"kind": "async-freestanding",
"params": [
{
"name": "x",
"type": "u32"
}
],
"result": "u64"
},
"y": {
"name": "y",
"kind": "freestanding",
"params": []
},
"[constructor]z": {
"name": "[constructor]z",
"kind": {
"constructor": 0
},
"params": [],
"result": 2
},
"[method]z.x": {
"name": "[method]z.x",
"kind": {
"async-method": 0
},
"params": [
{
"name": "self",
"type": 1
}
]
},
"[method]z.y": {
"name": "[method]z.y",
"kind": {
"method": 0
},
"params": [
{
"name": "self",
"type": 1
}
]
},
"[static]z.static-x": {
"name": "[static]z.static-x",
"kind": {
"async-static": 0
},
"params": []
},
"[static]z.static-y": {
"name": "[static]z.static-y",
"kind": {
"static": 0
},
"params": []
}
},
"package": 0
}
],
"types": [
{
"name": "z",
"kind": "resource",
"owner": {
"interface": 0
}
},
{
"name": null,
"kind": {
"handle": {
"borrow": 0
}
},
"owner": null
},
{
"name": null,
"kind": {
"handle": {
"own": 0
}
},
"owner": null
}
],
"packages": [
{
"name": "test:async",
"interfaces": {
"x": 0
},
"worlds": {
"y": 0
}
}
]
}

25
vendor/wit-parser/tests/ui/comments.wit vendored Normal file
View File

@@ -0,0 +1,25 @@
package foo:comments;
// hello
// world
// why, yes
// this is a comment
/* this too */ /* is a comment */
/* this /* is /* a */ nested */ comment */
interface foo {
type x = u32;
type /* foo */ bar /* baz */ = //
stream < //
//
//
x
>;
}

View File

@@ -0,0 +1,46 @@
{
"worlds": [],
"interfaces": [
{
"name": "foo",
"types": {
"x": 0,
"bar": 1
},
"functions": {},
"docs": {
"contents": " hello\n world\n why, yes\n this is a comment\n* this too */\n* is a comment */\n* this /* is /* a */ nested */ comment */"
},
"package": 0
}
],
"types": [
{
"name": "x",
"kind": {
"type": "u32"
},
"owner": {
"interface": 0
}
},
{
"name": "bar",
"kind": {
"stream": 0
},
"owner": {
"interface": 0
}
}
],
"packages": [
{
"name": "foo:comments",
"interfaces": {
"foo": 0
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,200 @@
{
"worlds": [
{
"name": "bar-a",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 0
},
{
"name": "baz-a",
"imports": {
"interface-2": {
"interface": {
"id": 2
}
},
"interface-3": {
"interface": {
"id": 3
}
}
},
"exports": {},
"package": 1
},
{
"name": "a",
"imports": {
"interface-4": {
"interface": {
"id": 4
}
},
"interface-5": {
"interface": {
"id": 5
}
}
},
"exports": {},
"package": 2
},
{
"name": "b",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 2
},
{
"name": "c",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 2
},
{
"name": "union-world",
"imports": {
"interface-4": {
"interface": {
"id": 4
}
},
"interface-5": {
"interface": {
"id": 5
}
},
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
},
"interface-2": {
"interface": {
"id": 2
}
},
"interface-3": {
"interface": {
"id": 3
}
}
},
"exports": {},
"package": 2
}
],
"interfaces": [
{
"name": "a",
"types": {},
"functions": {},
"package": 0
},
{
"name": "b",
"types": {},
"functions": {},
"package": 0
},
{
"name": "a",
"types": {},
"functions": {},
"package": 1
},
{
"name": "b",
"types": {},
"functions": {},
"package": 1
},
{
"name": "ai",
"types": {},
"functions": {},
"package": 2
},
{
"name": "bi",
"types": {},
"functions": {},
"package": 2
}
],
"types": [],
"packages": [
{
"name": "foo:bar",
"interfaces": {
"a": 0,
"b": 1
},
"worlds": {
"bar-a": 0
}
},
{
"name": "foo:baz",
"interfaces": {
"a": 2,
"b": 3
},
"worlds": {
"baz-a": 1
}
},
{
"name": "foo:root",
"interfaces": {
"ai": 4,
"bi": 5
},
"worlds": {
"a": 2,
"b": 3,
"c": 4,
"union-world": 5
}
}
]
}

View File

@@ -0,0 +1,9 @@
package foo:bar;
interface a {}
interface b {}
world bar-a {
import a;
import b;
}

View File

@@ -0,0 +1,9 @@
package foo:baz;
interface a {}
interface b {}
world baz-a {
import a;
import b;
}

View File

@@ -0,0 +1,26 @@
package foo:root;
interface ai {}
interface bi {}
world a {
import ai;
import bi;
}
world b {
include foo:bar/bar-a;
}
world c {
include b;
include foo:bar/bar-a;
}
world union-world {
include a;
include b;
include c;
include foo:bar/bar-a;
include foo:baz/baz-a;
}

View File

@@ -0,0 +1,67 @@
{
"worlds": [],
"interfaces": [
{
"name": "foo",
"types": {
"r": 0
},
"functions": {},
"package": 0
},
{
"name": "foo",
"types": {
"r": 1,
"t": 2
},
"functions": {},
"package": 1
}
],
"types": [
{
"name": "r",
"kind": "resource",
"owner": {
"interface": 0
}
},
{
"name": "r",
"kind": {
"type": 0
},
"owner": {
"interface": 1
}
},
{
"name": "t",
"kind": {
"handle": {
"own": 1
}
},
"owner": {
"interface": 1
}
}
],
"packages": [
{
"name": "some:dep",
"interfaces": {
"foo": 0
},
"worlds": {}
},
{
"name": "foo:bar",
"interfaces": {
"foo": 1
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,5 @@
package some:dep;
interface foo {
resource r;
}

View File

@@ -0,0 +1,7 @@
package foo:bar;
interface foo {
use some:dep/foo.{r};
type t = own<r>;
}

View File

@@ -0,0 +1,59 @@
{
"worlds": [
{
"name": "foo",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 2
}
],
"interfaces": [
{
"name": "types",
"types": {},
"functions": {},
"package": 0
},
{
"name": "types",
"types": {},
"functions": {},
"package": 1
}
],
"types": [],
"packages": [
{
"name": "foo:dep1",
"interfaces": {
"types": 0
},
"worlds": {}
},
{
"name": "foo:dep2",
"interfaces": {
"types": 1
},
"worlds": {}
},
{
"name": "foo:foo",
"interfaces": {},
"worlds": {
"foo": 0
}
}
]
}

View File

@@ -0,0 +1,2 @@
package foo:dep1;
interface types {}

View File

@@ -0,0 +1,2 @@
package foo:dep2;
interface types {}

View File

@@ -0,0 +1,6 @@
package foo:foo;
world foo {
import foo:dep1/types;
import foo:dep2/types;
}

View File

@@ -0,0 +1,115 @@
{
"worlds": [
{
"name": "foo",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"foo": {
"interface": {
"id": 2
}
},
"interface-1": {
"interface": {
"id": 1
}
},
"bar": {
"interface": {
"id": 3
}
}
},
"exports": {},
"package": 0
}
],
"interfaces": [
{
"name": "shared1",
"types": {
"the-type": 0
},
"functions": {},
"package": 0
},
{
"name": "shared2",
"types": {
"the-type": 1
},
"functions": {},
"package": 0
},
{
"name": null,
"types": {
"the-type": 2
},
"functions": {},
"package": 0
},
{
"name": null,
"types": {
"the-type": 3
},
"functions": {},
"package": 0
}
],
"types": [
{
"name": "the-type",
"kind": {
"type": "u32"
},
"owner": {
"interface": 0
}
},
{
"name": "the-type",
"kind": {
"type": "u32"
},
"owner": {
"interface": 1
}
},
{
"name": "the-type",
"kind": {
"type": 0
},
"owner": {
"interface": 2
}
},
{
"name": "the-type",
"kind": {
"type": 1
},
"owner": {
"interface": 3
}
}
],
"packages": [
{
"name": "foo:diamond",
"interfaces": {
"shared1": 0,
"shared2": 1
},
"worlds": {
"foo": 0
}
}
]
}

View File

@@ -0,0 +1,3 @@
interface shared1 {
type the-type = u32;
}

View File

@@ -0,0 +1,3 @@
interface shared2 {
type the-type = u32;
}

View File

@@ -0,0 +1,13 @@
package foo:diamond;
world foo {
import foo: interface {
use shared1.{the-type};
}
import bar: interface {
use shared2.{the-type};
}
import shared1;
import shared2;
}

1
vendor/wit-parser/tests/ui/empty.wit vendored Normal file
View File

@@ -0,0 +1 @@
package foo:empty;

View File

@@ -0,0 +1,12 @@
{
"worlds": [],
"interfaces": [],
"types": [],
"packages": [
{
"name": "foo:empty",
"interfaces": {},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,7 @@
package foo:error-contexts;
interface error-contexts {
type t1 = error-context;
foo: func(x: error-context, y: t1) -> result<_, error-context>;
}

View File

@@ -0,0 +1,59 @@
{
"worlds": [],
"interfaces": [
{
"name": "error-contexts",
"types": {
"t1": 0
},
"functions": {
"foo": {
"name": "foo",
"kind": "freestanding",
"params": [
{
"name": "x",
"type": "error-context"
},
{
"name": "y",
"type": 0
}
],
"result": 1
}
},
"package": 0
}
],
"types": [
{
"name": "t1",
"kind": {
"type": "error-context"
},
"owner": {
"interface": 0
}
},
{
"name": null,
"kind": {
"result": {
"ok": null,
"err": "error-context"
}
},
"owner": null
}
],
"packages": [
{
"name": "foo:error-contexts",
"interfaces": {
"error-contexts": 0
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,118 @@
package a:b;
@unstable(feature = not-active)
interface gated {
}
@unstable(feature = active)
interface ungated {
@unstable(feature = not-active)
gated: func();
@unstable(feature = active)
ungated: func();
}
@unstable(feature = active)
interface ungated2 {
@unstable(feature = not-active)
type gated = u32;
@unstable(feature = not-active)
type gated2 = gated;
@unstable(feature = not-active)
type gated-with-anonymous-type = option<option<gated>>;
@unstable(feature = active)
type ungated = u32;
@unstable(feature = active)
type ungated2 = ungated;
}
@unstable(feature = inactive)
interface gated-use-target {
@unstable(feature = inactive)
type t = u32;
}
@unstable(feature = inactive)
interface gated-use {
@unstable(feature = inactive)
use gated-use-target.{t};
}
@unstable(feature = active)
interface ungated-use-target {
@unstable(feature = active)
type t = u32;
}
@unstable(feature = active)
interface ungated-use {
@unstable(feature = active)
use ungated-use-target.{t};
}
@unstable(feature = inactive)
interface gated-for-world {}
@unstable(feature = inactive)
world gated-world {
@unstable(feature = inactive)
import gated-for-world;
@unstable(feature = inactive)
export gated-for-world;
}
@unstable(feature = active)
interface ungated-for-world {}
@unstable(feature = active)
world ungated-world {
@unstable(feature = active)
import ungated-for-world;
@unstable(feature = active)
export ungated-for-world;
}
world mixed-world {
@unstable(feature = inactive)
import gated-for-world;
@unstable(feature = inactive)
export gated-for-world;
@unstable(feature = inactive)
include gated-world;
@unstable(feature = active)
import ungated-for-world;
@unstable(feature = active)
export ungated-for-world;
@unstable(feature = inactive)
include ungated-world;
}
interface with-resources {
@unstable(feature = inactive)
resource gated {
@unstable(feature = inactive)
constructor();
@unstable(feature = inactive)
x: static func();
@unstable(feature = inactive)
y: func();
}
@unstable(feature = active)
resource ungated {
@unstable(feature = active)
constructor();
@unstable(feature = active)
x: static func();
@unstable(feature = active)
y: func();
}
}

View File

@@ -0,0 +1,301 @@
{
"worlds": [
{
"name": "ungated-world",
"imports": {
"interface-4": {
"interface": {
"id": 4,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {
"interface-4": {
"interface": {
"id": 4,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"package": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "mixed-world",
"imports": {
"interface-4": {
"interface": {
"id": 4,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {
"interface-4": {
"interface": {
"id": 4,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"package": 0
}
],
"interfaces": [
{
"name": "ungated",
"types": {},
"functions": {
"ungated": {
"name": "ungated",
"kind": "freestanding",
"params": [],
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "ungated2",
"types": {
"ungated": 0,
"ungated2": 1
},
"functions": {},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "ungated-use-target",
"types": {
"t": 2
},
"functions": {},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "ungated-use",
"types": {
"t": 3
},
"functions": {},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "ungated-for-world",
"types": {},
"functions": {},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "with-resources",
"types": {
"ungated": 4
},
"functions": {
"[constructor]ungated": {
"name": "[constructor]ungated",
"kind": {
"constructor": 4
},
"params": [],
"result": 6,
"stability": {
"unstable": {
"feature": "active"
}
}
},
"[static]ungated.x": {
"name": "[static]ungated.x",
"kind": {
"static": 4
},
"params": [],
"stability": {
"unstable": {
"feature": "active"
}
}
},
"[method]ungated.y": {
"name": "[method]ungated.y",
"kind": {
"method": 4
},
"params": [
{
"name": "self",
"type": 5
}
],
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"package": 0
}
],
"types": [
{
"name": "ungated",
"kind": {
"type": "u32"
},
"owner": {
"interface": 1
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "ungated2",
"kind": {
"type": 0
},
"owner": {
"interface": 1
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "t",
"kind": {
"type": "u32"
},
"owner": {
"interface": 2
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "t",
"kind": {
"type": 2
},
"owner": {
"interface": 3
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "ungated",
"kind": "resource",
"owner": {
"interface": 5
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": null,
"kind": {
"handle": {
"borrow": 4
}
},
"owner": null,
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": null,
"kind": {
"handle": {
"own": 4
}
},
"owner": null
}
],
"packages": [
{
"name": "a:b",
"interfaces": {
"ungated": 0,
"ungated2": 1,
"ungated-use-target": 2,
"ungated-use": 3,
"ungated-for-world": 4,
"with-resources": 5
},
"worlds": {
"ungated-world": 0,
"mixed-world": 1
}
}
]
}

View File

@@ -0,0 +1,13 @@
package a:b;
interface foo {
variant bar {
x,
y
}
@unstable(feature = my-feature)
my-unstable: func(p: bar) -> result<_, bar>;
my-stable: func(p: bar) -> result<_, bar>;
}

View File

@@ -0,0 +1,66 @@
{
"worlds": [],
"interfaces": [
{
"name": "foo",
"types": {
"bar": 0
},
"functions": {
"my-stable": {
"name": "my-stable",
"kind": "freestanding",
"params": [
{
"name": "p",
"type": 0
}
],
"result": 1
}
},
"package": 0
}
],
"types": [
{
"name": "bar",
"kind": {
"variant": {
"cases": [
{
"name": "x",
"type": null
},
{
"name": "y",
"type": null
}
]
}
},
"owner": {
"interface": 0
}
},
{
"name": null,
"kind": {
"result": {
"ok": null,
"err": 0
}
},
"owner": null
}
],
"packages": [
{
"name": "a:b",
"interfaces": {
"foo": 0
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,410 @@
{
"worlds": [
{
"name": "wasi",
"imports": {
"interface-5": {
"interface": {
"id": 5
}
},
"interface-4": {
"interface": {
"id": 4
}
}
},
"exports": {},
"package": 4
},
{
"name": "my-world",
"imports": {
"interface-5": {
"interface": {
"id": 5
}
},
"interface-4": {
"interface": {
"id": 4
}
}
},
"exports": {
"interface-1": {
"interface": {
"id": 1
}
}
},
"package": 6
},
{
"name": "my-world2",
"imports": {
"interface-5": {
"interface": {
"id": 5
}
},
"interface-4": {
"interface": {
"id": 4
}
}
},
"exports": {
"interface-9": {
"interface": {
"id": 9
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"package": 6
},
{
"name": "bars-world",
"imports": {
"interface-6": {
"interface": {
"id": 6
}
},
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {},
"package": 6
},
{
"name": "unionw-world",
"imports": {
"interface-5": {
"interface": {
"id": 5
}
},
"interface-4": {
"interface": {
"id": 4
}
}
},
"exports": {
"interface-1": {
"interface": {
"id": 1
}
},
"interface-9": {
"interface": {
"id": 9
}
}
},
"package": 6
}
],
"interfaces": [
{
"name": "other-interface",
"types": {},
"functions": {},
"package": 0
},
{
"name": "saas",
"types": {},
"functions": {},
"package": 1
},
{
"name": "i",
"types": {},
"functions": {},
"package": 2
},
{
"name": "the-default",
"types": {
"some-type": 0
},
"functions": {},
"package": 3
},
{
"name": "clocks",
"types": {
"timestamp": 1
},
"functions": {},
"package": 4
},
{
"name": "filesystem",
"types": {
"stat": 2
},
"functions": {},
"package": 4
},
{
"name": "the-default",
"types": {
"from-default": 3
},
"functions": {},
"package": 5
},
{
"name": "some-interface",
"types": {
"another-type": 4
},
"functions": {},
"package": 5
},
{
"name": "another-interface",
"types": {
"yet-another-type": 5
},
"functions": {},
"package": 5
},
{
"name": "foo",
"types": {
"timestamp": 6,
"stat": 7
},
"functions": {},
"package": 6
},
{
"name": "bar",
"types": {
"from-default": 8,
"another-type": 9,
"yet-another-type": 10
},
"functions": {},
"package": 6
},
{
"name": "use1",
"types": {
"some-type": 11
},
"functions": {},
"package": 6
},
{
"name": "use2",
"types": {
"some-type": 12
},
"functions": {},
"package": 6
}
],
"types": [
{
"name": "some-type",
"kind": {
"type": "u32"
},
"owner": {
"interface": 3
}
},
{
"name": "timestamp",
"kind": {
"type": "u64"
},
"owner": {
"interface": 4
}
},
{
"name": "stat",
"kind": {
"record": {
"fields": [
{
"name": "ino",
"type": "u64"
}
]
}
},
"owner": {
"interface": 5
}
},
{
"name": "from-default",
"kind": {
"type": "string"
},
"owner": {
"interface": 6
}
},
{
"name": "another-type",
"kind": {
"type": "u32"
},
"owner": {
"interface": 7
}
},
{
"name": "yet-another-type",
"kind": {
"type": "u8"
},
"owner": {
"interface": 8
}
},
{
"name": "timestamp",
"kind": {
"type": 1
},
"owner": {
"interface": 9
}
},
{
"name": "stat",
"kind": {
"type": 2
},
"owner": {
"interface": 9
}
},
{
"name": "from-default",
"kind": {
"type": 3
},
"owner": {
"interface": 10
}
},
{
"name": "another-type",
"kind": {
"type": 4
},
"owner": {
"interface": 10
}
},
{
"name": "yet-another-type",
"kind": {
"type": 5
},
"owner": {
"interface": 10
}
},
{
"name": "some-type",
"kind": {
"type": 0
},
"owner": {
"interface": 11
}
},
{
"name": "some-type",
"kind": {
"type": 0
},
"owner": {
"interface": 12
}
}
],
"packages": [
{
"name": "foo:another-pkg",
"interfaces": {
"other-interface": 0
},
"worlds": {}
},
{
"name": "foo:corp",
"interfaces": {
"saas": 1
},
"worlds": {}
},
{
"name": "foo:different-pkg",
"interfaces": {
"i": 2
},
"worlds": {}
},
{
"name": "foo:foreign-pkg",
"interfaces": {
"the-default": 3
},
"worlds": {}
},
{
"name": "foo:wasi",
"interfaces": {
"clocks": 4,
"filesystem": 5
},
"worlds": {
"wasi": 0
}
},
{
"name": "foo:some-pkg",
"interfaces": {
"the-default": 6,
"some-interface": 7,
"another-interface": 8
},
"worlds": {}
},
{
"name": "foo:root",
"interfaces": {
"foo": 9,
"bar": 10,
"use1": 11,
"use2": 12
},
"worlds": {
"my-world": 1,
"my-world2": 2,
"bars-world": 3,
"unionw-world": 4
}
}
]
}

View File

@@ -0,0 +1,3 @@
package foo:another-pkg;
interface other-interface {}

View File

@@ -0,0 +1,4 @@
package foo:corp;
interface saas {
}

View File

@@ -0,0 +1,2 @@
package foo:different-pkg;
interface i {}

View File

@@ -0,0 +1,5 @@
package foo:foreign-pkg;
interface the-default {
type some-type = u32;
}

View File

@@ -0,0 +1,13 @@
package foo:some-pkg;
interface the-default {
type from-default = string;
}
interface some-interface {
type another-type = u32;
}
interface another-interface {
type yet-another-type = u8;
}

View File

@@ -0,0 +1,5 @@
package foo:wasi;
interface clocks {
type timestamp = u64;
}

View File

@@ -0,0 +1,7 @@
package foo:wasi;
interface filesystem {
record stat {
ino: u64
}
}

View File

@@ -0,0 +1,6 @@
package foo:wasi;
world wasi {
import filesystem;
import clocks;
}

View File

@@ -0,0 +1,50 @@
package foo:root;
interface foo {
use foo:wasi/clocks.{timestamp};
use foo:wasi/filesystem.{stat};
}
world my-world {
import foo:wasi/filesystem;
import foo:wasi/clocks;
export foo:corp/saas;
}
use foo:wasi/filesystem as filesystem;
use foo:wasi/clocks as clocks;
world my-world2 {
import filesystem;
import clocks;
export foo;
export foo:corp/saas;
}
interface bar {
use filesystem.{};
use foo:some-pkg/the-default.{from-default};
use foo:some-pkg/some-interface.{another-type};
use foo:some-pkg/some-interface.{};
use foo:some-pkg/another-interface.{yet-another-type};
use foo:different-pkg/i.{};
}
world bars-world {
import foo:some-pkg/the-default;
import foo:another-pkg/other-interface;
}
interface use1 {
use foo:foreign-pkg/the-default.{some-type};
}
interface use2 {
use foo:foreign-pkg/the-default.{some-type};
}
world unionw-world {
include my-world;
include my-world2;
include foo:wasi/wasi;
}

View File

@@ -0,0 +1,362 @@
{
"worlds": [
{
"name": "my-world",
"imports": {
"interface-5": {
"interface": {
"id": 5
}
},
"interface-4": {
"interface": {
"id": 4
}
}
},
"exports": {
"interface-1": {
"interface": {
"id": 1
}
}
},
"package": 6
},
{
"name": "my-world2",
"imports": {
"interface-5": {
"interface": {
"id": 5
}
},
"interface-4": {
"interface": {
"id": 4
}
}
},
"exports": {
"interface-9": {
"interface": {
"id": 9
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"package": 6
},
{
"name": "bars-world",
"imports": {
"interface-6": {
"interface": {
"id": 6
}
},
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {},
"package": 6
}
],
"interfaces": [
{
"name": "other-interface",
"types": {},
"functions": {},
"package": 0
},
{
"name": "saas",
"types": {},
"functions": {},
"package": 1
},
{
"name": "i",
"types": {},
"functions": {},
"package": 2
},
{
"name": "the-default",
"types": {
"some-type": 0
},
"functions": {},
"package": 3
},
{
"name": "clocks",
"types": {
"timestamp": 1
},
"functions": {},
"package": 4
},
{
"name": "filesystem",
"types": {
"stat": 2
},
"functions": {},
"package": 4
},
{
"name": "the-default",
"types": {
"from-default": 3
},
"functions": {},
"package": 5
},
{
"name": "some-interface",
"types": {
"another-type": 4
},
"functions": {},
"package": 5
},
{
"name": "another-interface",
"types": {
"yet-another-type": 5
},
"functions": {},
"package": 5
},
{
"name": "foo",
"types": {
"timestamp": 6,
"stat": 7
},
"functions": {},
"package": 6
},
{
"name": "bar",
"types": {
"from-default": 8,
"another-type": 9,
"yet-another-type": 10
},
"functions": {},
"package": 6
},
{
"name": "use1",
"types": {
"some-type": 11
},
"functions": {},
"package": 6
},
{
"name": "use2",
"types": {
"some-type": 12
},
"functions": {},
"package": 6
}
],
"types": [
{
"name": "some-type",
"kind": {
"type": "u32"
},
"owner": {
"interface": 3
}
},
{
"name": "timestamp",
"kind": {
"type": "u64"
},
"owner": {
"interface": 4
}
},
{
"name": "stat",
"kind": {
"record": {
"fields": [
{
"name": "ino",
"type": "u64"
}
]
}
},
"owner": {
"interface": 5
}
},
{
"name": "from-default",
"kind": {
"type": "string"
},
"owner": {
"interface": 6
}
},
{
"name": "another-type",
"kind": {
"type": "u32"
},
"owner": {
"interface": 7
}
},
{
"name": "yet-another-type",
"kind": {
"type": "u8"
},
"owner": {
"interface": 8
}
},
{
"name": "timestamp",
"kind": {
"type": 1
},
"owner": {
"interface": 9
}
},
{
"name": "stat",
"kind": {
"type": 2
},
"owner": {
"interface": 9
}
},
{
"name": "from-default",
"kind": {
"type": 3
},
"owner": {
"interface": 10
}
},
{
"name": "another-type",
"kind": {
"type": 4
},
"owner": {
"interface": 10
}
},
{
"name": "yet-another-type",
"kind": {
"type": 5
},
"owner": {
"interface": 10
}
},
{
"name": "some-type",
"kind": {
"type": 0
},
"owner": {
"interface": 11
}
},
{
"name": "some-type",
"kind": {
"type": 0
},
"owner": {
"interface": 12
}
}
],
"packages": [
{
"name": "foo:another-pkg",
"interfaces": {
"other-interface": 0
},
"worlds": {}
},
{
"name": "foo:corp",
"interfaces": {
"saas": 1
},
"worlds": {}
},
{
"name": "foo:different-pkg",
"interfaces": {
"i": 2
},
"worlds": {}
},
{
"name": "foo:foreign-pkg",
"interfaces": {
"the-default": 3
},
"worlds": {}
},
{
"name": "foo:wasi",
"interfaces": {
"clocks": 4,
"filesystem": 5
},
"worlds": {}
},
{
"name": "foo:some-pkg",
"interfaces": {
"the-default": 6,
"some-interface": 7,
"another-interface": 8
},
"worlds": {}
},
{
"name": "foo:root",
"interfaces": {
"foo": 9,
"bar": 10,
"use1": 11,
"use2": 12
},
"worlds": {
"my-world": 0,
"my-world2": 1,
"bars-world": 2
}
}
]
}

View File

@@ -0,0 +1,3 @@
package foo:another-pkg;
interface other-interface {}

View File

@@ -0,0 +1,4 @@
package foo:corp;
interface saas {
}

View File

@@ -0,0 +1,2 @@
package foo:different-pkg;
interface i {}

View File

@@ -0,0 +1,5 @@
package foo:foreign-pkg;
interface the-default {
type some-type = u32;
}

View File

@@ -0,0 +1,13 @@
package foo:some-pkg;
interface the-default {
type from-default = string;
}
interface some-interface {
type another-type = u32;
}
interface another-interface {
type yet-another-type = u8;
}

View File

@@ -0,0 +1,5 @@
package foo:wasi;
interface clocks {
type timestamp = u64;
}

View File

@@ -0,0 +1,7 @@
package foo:wasi;
interface filesystem {
record stat {
ino: u64
}
}

View File

@@ -0,0 +1,44 @@
package foo:root;
interface foo {
use foo:wasi/clocks.{timestamp};
use foo:wasi/filesystem.{stat};
}
world my-world {
import foo:wasi/filesystem;
import foo:wasi/clocks;
export foo:corp/saas;
}
use foo:wasi/filesystem as filesystem;
use foo:wasi/clocks as clocks;
world my-world2 {
import filesystem;
import clocks;
export foo;
export foo:corp/saas;
}
interface bar {
use filesystem.{};
use foo:some-pkg/the-default.{from-default};
use foo:some-pkg/some-interface.{another-type};
use foo:some-pkg/some-interface.{};
use foo:some-pkg/another-interface.{yet-another-type};
use foo:different-pkg/i.{};
}
world bars-world {
import foo:some-pkg/the-default;
import foo:another-pkg/other-interface;
}
interface use1 {
use foo:foreign-pkg/the-default.{some-type};
}
interface use2 {
use foo:foreign-pkg/the-default.{some-type};
}

View File

@@ -0,0 +1,17 @@
package a:b1;
world the-world {
include a:b2/the-world;
}
package a:b2 {
world the-world {
@unstable(feature = disabled)
import a:b3/thing;
}
}
package a:b3 {
@unstable(feature = disabled)
interface thing {}
}

View File

@@ -0,0 +1,39 @@
{
"worlds": [
{
"name": "the-world",
"imports": {},
"exports": {},
"package": 1
},
{
"name": "the-world",
"imports": {},
"exports": {},
"package": 2
}
],
"interfaces": [],
"types": [],
"packages": [
{
"name": "a:b3",
"interfaces": {},
"worlds": {}
},
{
"name": "a:b2",
"interfaces": {},
"worlds": {
"the-world": 0
}
},
{
"name": "a:b1",
"interfaces": {},
"worlds": {
"the-world": 1
}
}
]
}

View File

@@ -0,0 +1,17 @@
package a:b1;
world the-world {
include a:b2/the-world;
}
package a:b2 {
world the-world {
@unstable(feature = disabled)
import a:b3/another-world;
}
}
package a:b3 {
@unstable(feature = disabled)
world another-world {}
}

View File

@@ -0,0 +1,39 @@
{
"worlds": [
{
"name": "the-world",
"imports": {},
"exports": {},
"package": 1
},
{
"name": "the-world",
"imports": {},
"exports": {},
"package": 2
}
],
"interfaces": [],
"types": [],
"packages": [
{
"name": "a:b3",
"interfaces": {},
"worlds": {}
},
{
"name": "a:b2",
"interfaces": {},
"worlds": {
"the-world": 0
}
},
{
"name": "a:b1",
"interfaces": {},
"worlds": {
"the-world": 1
}
}
]
}

View File

@@ -0,0 +1,11 @@
package foo:functions;
interface functions {
f1: func();
f2: func(a: u32);
f3: func(a: u32,);
f4: func() -> u32;
f6: func() -> tuple<u32, u32>;
f7: func(a: f32, b: f32) -> tuple<u32, u32>;
f8: func(a: option<u32>) -> result<u32, f32>;
}

View File

@@ -0,0 +1,115 @@
{
"worlds": [],
"interfaces": [
{
"name": "functions",
"types": {},
"functions": {
"f1": {
"name": "f1",
"kind": "freestanding",
"params": []
},
"f2": {
"name": "f2",
"kind": "freestanding",
"params": [
{
"name": "a",
"type": "u32"
}
]
},
"f3": {
"name": "f3",
"kind": "freestanding",
"params": [
{
"name": "a",
"type": "u32"
}
]
},
"f4": {
"name": "f4",
"kind": "freestanding",
"params": [],
"result": "u32"
},
"f6": {
"name": "f6",
"kind": "freestanding",
"params": [],
"result": 0
},
"f7": {
"name": "f7",
"kind": "freestanding",
"params": [
{
"name": "a",
"type": "f32"
},
{
"name": "b",
"type": "f32"
}
],
"result": 0
},
"f8": {
"name": "f8",
"kind": "freestanding",
"params": [
{
"name": "a",
"type": 1
}
],
"result": 2
}
},
"package": 0
}
],
"types": [
{
"name": null,
"kind": {
"tuple": {
"types": [
"u32",
"u32"
]
}
},
"owner": null
},
{
"name": null,
"kind": {
"option": "u32"
},
"owner": null
},
{
"name": null,
"kind": {
"result": {
"ok": "u32",
"err": "f32"
}
},
"owner": null
}
],
"packages": [
{
"name": "foo:functions",
"interfaces": {
"functions": 0
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,67 @@
package wasmtime:test@0.1.0;
interface unknown-stability-interface {
resource unknown-stability-resource {
}
stable-func: func();
}
@unstable(feature = active)
interface unstable-interface {
@unstable(feature = active)
resource unstable-resource {
}
@unstable(feature = active)
unstable-func: func();
}
@since(version = 0.1.0)
interface stable-interface {
@since(version = 0.1.0)
resource stable-resource {
}
@since(version = 0.1.0)
stable-func: func();
}
world unknown-stability {
import unknown-stability-interface;
}
world unstable {
@unstable(feature = active)
import unstable-interface;
}
world stable{
@since(version = 0.1.0)
import stable-interface;
}
world simple-include {
include unstable;
include stable;
include unknown-stability;
}
world unstable-include-in-package
{
include unstable;
}
world dup-include-in-package {
include simple-include;
include unstable-include-in-package;
}
world dup-use-package {
@unstable(feature = active)
use stable-interface.{stable-resource};
include simple-include;
}
world dup-use-package-ordered {
include simple-include;
@unstable(feature = active)
use stable-interface.{stable-resource};
}

View File

@@ -0,0 +1,346 @@
{
"worlds": [
{
"name": "unknown-stability",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {},
"package": 0
},
{
"name": "unstable",
"imports": {
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {},
"package": 0
},
{
"name": "stable",
"imports": {
"interface-2": {
"interface": {
"id": 2,
"stability": {
"stable": {
"since": "0.1.0"
}
}
}
}
},
"exports": {},
"package": 0
},
{
"name": "simple-include",
"imports": {
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-2": {
"interface": {
"id": 2,
"stability": {
"stable": {
"since": "0.1.0"
}
}
}
},
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {},
"package": 0
},
{
"name": "unstable-include-in-package",
"imports": {
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {},
"package": 0
},
{
"name": "dup-include-in-package",
"imports": {
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-2": {
"interface": {
"id": 2,
"stability": {
"stable": {
"since": "0.1.0"
}
}
}
},
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {},
"package": 0
},
{
"name": "dup-use-package",
"imports": {
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-2": {
"interface": {
"id": 2,
"stability": {
"stable": {
"since": "0.1.0"
}
}
}
},
"interface-0": {
"interface": {
"id": 0
}
},
"stable-resource": {
"type": 3
}
},
"exports": {},
"package": 0
},
{
"name": "dup-use-package-ordered",
"imports": {
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-2": {
"interface": {
"id": 2,
"stability": {
"stable": {
"since": "0.1.0"
}
}
}
},
"interface-0": {
"interface": {
"id": 0
}
},
"stable-resource": {
"type": 4
}
},
"exports": {},
"package": 0
}
],
"interfaces": [
{
"name": "unknown-stability-interface",
"types": {
"unknown-stability-resource": 0
},
"functions": {
"stable-func": {
"name": "stable-func",
"kind": "freestanding",
"params": []
}
},
"package": 0
},
{
"name": "unstable-interface",
"types": {
"unstable-resource": 1
},
"functions": {
"unstable-func": {
"name": "unstable-func",
"kind": "freestanding",
"params": [],
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "stable-interface",
"types": {
"stable-resource": 2
},
"functions": {
"stable-func": {
"name": "stable-func",
"kind": "freestanding",
"params": [],
"stability": {
"stable": {
"since": "0.1.0"
}
}
}
},
"stability": {
"stable": {
"since": "0.1.0"
}
},
"package": 0
}
],
"types": [
{
"name": "unknown-stability-resource",
"kind": "resource",
"owner": {
"interface": 0
}
},
{
"name": "unstable-resource",
"kind": "resource",
"owner": {
"interface": 1
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "stable-resource",
"kind": "resource",
"owner": {
"interface": 2
},
"stability": {
"stable": {
"since": "0.1.0"
}
}
},
{
"name": "stable-resource",
"kind": {
"type": 2
},
"owner": {
"world": 6
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "stable-resource",
"kind": {
"type": 2
},
"owner": {
"world": 7
},
"stability": {
"unstable": {
"feature": "active"
}
}
}
],
"packages": [
{
"name": "wasmtime:test@0.1.0",
"interfaces": {
"unknown-stability-interface": 0,
"unstable-interface": 1,
"stable-interface": 2
},
"worlds": {
"unknown-stability": 0,
"unstable": 1,
"stable": 2,
"simple-include": 3,
"unstable-include-in-package": 4,
"dup-include-in-package": 5,
"dup-use-package": 6,
"dup-use-package-ordered": 7
}
}
]
}

View File

@@ -0,0 +1,13 @@
package wasmtime:test;
interface types {
@unstable(feature = inactive)
use wasi:dep2/stable@0.2.3.{unstable-resource};
}
package wasi:dep2@0.2.3 {
interface stable {
@unstable(feature = inactive)
resource unstable-resource;
}
}

View File

@@ -0,0 +1,34 @@
{
"worlds": [],
"interfaces": [
{
"name": "stable",
"types": {},
"functions": {},
"package": 0
},
{
"name": "types",
"types": {},
"functions": {},
"package": 1
}
],
"types": [],
"packages": [
{
"name": "wasi:dep2@0.2.3",
"interfaces": {
"stable": 0
},
"worlds": {}
},
{
"name": "wasmtime:test",
"interfaces": {
"types": 1
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,41 @@
{
"worlds": [
{
"name": "foo",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {},
"package": 1
}
],
"interfaces": [
{
"name": "types",
"types": {},
"functions": {},
"package": 0
}
],
"types": [],
"packages": [
{
"name": "foo:bar",
"interfaces": {
"types": 0
},
"worlds": {}
},
{
"name": "foo:foo",
"interfaces": {},
"worlds": {
"foo": 0
}
}
]
}

View File

@@ -0,0 +1,2 @@
package foo:bar;
interface types {}

View File

@@ -0,0 +1 @@
this file should be ignored by the parser

View File

@@ -0,0 +1,5 @@
package foo:foo;
world foo {
import foo:bar/types;
}

View File

@@ -0,0 +1,5 @@
package foo:foo;
world foo {
import a: func();
export a: func();
}

View File

@@ -0,0 +1,37 @@
{
"worlds": [
{
"name": "foo",
"imports": {
"a": {
"function": {
"name": "a",
"kind": "freestanding",
"params": []
}
}
},
"exports": {
"a": {
"function": {
"name": "a",
"kind": "freestanding",
"params": []
}
}
},
"package": 0
}
],
"interfaces": [],
"types": [],
"packages": [
{
"name": "foo:foo",
"interfaces": {},
"worlds": {
"foo": 0
}
}
]
}

View File

@@ -0,0 +1,5 @@
package foo:foo;
world foo {
import a: func();
export a: interface {}
}

View File

@@ -0,0 +1,42 @@
{
"worlds": [
{
"name": "foo",
"imports": {
"a": {
"function": {
"name": "a",
"kind": "freestanding",
"params": []
}
}
},
"exports": {
"a": {
"interface": {
"id": 0
}
}
},
"package": 0
}
],
"interfaces": [
{
"name": null,
"types": {},
"functions": {},
"package": 0
}
],
"types": [],
"packages": [
{
"name": "foo:foo",
"interfaces": {},
"worlds": {
"foo": 0
}
}
]
}

View File

@@ -0,0 +1,15 @@
package foo:foo;
interface a {}
interface b {}
world bar {
import a;
export b;
}
world foo {
include bar;
include bar;
include bar;
}

View File

@@ -0,0 +1,68 @@
{
"worlds": [
{
"name": "bar",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {
"interface-1": {
"interface": {
"id": 1
}
}
},
"package": 0
},
{
"name": "foo",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {
"interface-1": {
"interface": {
"id": 1
}
}
},
"package": 0
}
],
"interfaces": [
{
"name": "a",
"types": {},
"functions": {},
"package": 0
},
{
"name": "b",
"types": {},
"functions": {},
"package": 0
}
],
"types": [],
"packages": [
{
"name": "foo:foo",
"interfaces": {
"a": 0,
"b": 1
},
"worlds": {
"bar": 0,
"foo": 1
}
}
]
}

View File

@@ -0,0 +1,8 @@
package foo:foo;
world foo { import a: func(); }
world bar { import a: func(); }
world baz {
include foo with { a as b }
include bar;
}

View File

@@ -0,0 +1,66 @@
{
"worlds": [
{
"name": "foo",
"imports": {
"a": {
"function": {
"name": "a",
"kind": "freestanding",
"params": []
}
}
},
"exports": {},
"package": 0
},
{
"name": "bar",
"imports": {
"a": {
"function": {
"name": "a",
"kind": "freestanding",
"params": []
}
}
},
"exports": {},
"package": 0
},
{
"name": "baz",
"imports": {
"b": {
"function": {
"name": "b",
"kind": "freestanding",
"params": []
}
},
"a": {
"function": {
"name": "a",
"kind": "freestanding",
"params": []
}
}
},
"exports": {},
"package": 0
}
],
"interfaces": [],
"types": [],
"packages": [
{
"name": "foo:foo",
"interfaces": {},
"worlds": {
"foo": 0,
"bar": 1,
"baz": 2
}
}
]
}

View File

@@ -0,0 +1,95 @@
{
"worlds": [
{
"name": "a",
"imports": {
"interface-2": {
"interface": {
"id": 2
}
},
"interface-3": {
"interface": {
"id": 3
}
},
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 4
}
],
"interfaces": [
{
"name": "d",
"types": {},
"functions": {},
"package": 0
},
{
"name": "e",
"types": {},
"functions": {},
"package": 1
},
{
"name": "b",
"types": {},
"functions": {},
"package": 2
},
{
"name": "c",
"types": {},
"functions": {},
"package": 3
}
],
"types": [],
"packages": [
{
"name": "d:d",
"interfaces": {
"d": 0
},
"worlds": {}
},
{
"name": "e:e",
"interfaces": {
"e": 1
},
"worlds": {}
},
{
"name": "b:b",
"interfaces": {
"b": 2
},
"worlds": {}
},
{
"name": "c:c",
"interfaces": {
"c": 3
},
"worlds": {}
},
{
"name": "a:a",
"interfaces": {},
"worlds": {
"a": 0
}
}
]
}

View File

@@ -0,0 +1,8 @@
package a:a;
world a {
import b:b/b;
import c:c/c;
import d:d/d;
import e:e/e;
}

View File

@@ -0,0 +1,3 @@
package b:b;
interface b {}

View File

@@ -0,0 +1,3 @@
package c:c;
interface c {}

View File

@@ -0,0 +1,6 @@
(component
(type $d (component
(export "d:d/d" (instance))
))
(export "d" (type $d))
)

Binary file not shown.

View File

@@ -0,0 +1,42 @@
{
"worlds": [
{
"name": "name",
"imports": {
"name": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 0
}
],
"interfaces": [
{
"name": "x",
"types": {},
"functions": {},
"package": 0
},
{
"name": null,
"types": {},
"functions": {},
"package": 0
}
],
"types": [],
"packages": [
{
"name": "foo:name",
"interfaces": {
"x": 0
},
"worlds": {
"name": 0
}
}
]
}

View File

@@ -0,0 +1,2 @@
interface x {}
use x as name;

View File

@@ -0,0 +1,5 @@
package foo:name;
world name {
import name: interface {}
}

34
vendor/wit-parser/tests/ui/maps.wit vendored Normal file
View File

@@ -0,0 +1,34 @@
package foo:maps;
interface maps {
// Basic maps
type string-to-u32 = map<string, u32>;
type u32-to-string = map<u32, string>;
// Nested maps
type nested-map = map<string, map<string, u32>>;
// Maps with complex types
record person {
name: string,
age: u32,
}
type person-map = map<string, person>;
// Maps with tuples, lists, options
type complex-map = map<string, option<list<u32>>>;
// Functions using maps
get-value: func(m: map<string, u32>, key: string) -> option<u32>;
set-value: func(m: map<string, u32>, key: string, value: u32) -> map<string, u32>;
merge-maps: func(a: map<string, u32>, b: map<string, u32>) -> map<string, u32>;
// Map with various key types
type int-key-map = map<u32, string>;
type char-key-map = map<char, string>;
}
world maps-world {
import maps;
export maps;
}

255
vendor/wit-parser/tests/ui/maps.wit.json vendored Normal file
View File

@@ -0,0 +1,255 @@
{
"worlds": [
{
"name": "maps-world",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
}
},
"exports": {
"interface-0": {
"interface": {
"id": 0
}
}
},
"package": 0
}
],
"interfaces": [
{
"name": "maps",
"types": {
"string-to-u32": 0,
"u32-to-string": 1,
"nested-map": 3,
"person": 4,
"person-map": 5,
"complex-map": 8,
"int-key-map": 9,
"char-key-map": 10
},
"functions": {
"get-value": {
"name": "get-value",
"kind": "freestanding",
"params": [
{
"name": "m",
"type": 2
},
{
"name": "key",
"type": "string"
}
],
"result": 11,
"docs": {
"contents": "Functions using maps"
}
},
"set-value": {
"name": "set-value",
"kind": "freestanding",
"params": [
{
"name": "m",
"type": 2
},
{
"name": "key",
"type": "string"
},
{
"name": "value",
"type": "u32"
}
],
"result": 2
},
"merge-maps": {
"name": "merge-maps",
"kind": "freestanding",
"params": [
{
"name": "a",
"type": 2
},
{
"name": "b",
"type": 2
}
],
"result": 2
}
},
"package": 0
}
],
"types": [
{
"name": "string-to-u32",
"kind": {
"map": [
"string",
"u32"
]
},
"owner": {
"interface": 0
},
"docs": {
"contents": "Basic maps"
}
},
{
"name": "u32-to-string",
"kind": {
"map": [
"u32",
"string"
]
},
"owner": {
"interface": 0
}
},
{
"name": null,
"kind": {
"map": [
"string",
"u32"
]
},
"owner": null
},
{
"name": "nested-map",
"kind": {
"map": [
"string",
2
]
},
"owner": {
"interface": 0
},
"docs": {
"contents": "Nested maps"
}
},
{
"name": "person",
"kind": {
"record": {
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "u32"
}
]
}
},
"owner": {
"interface": 0
},
"docs": {
"contents": "Maps with complex types"
}
},
{
"name": "person-map",
"kind": {
"map": [
"string",
4
]
},
"owner": {
"interface": 0
}
},
{
"name": null,
"kind": {
"list": "u32"
},
"owner": null
},
{
"name": null,
"kind": {
"option": 6
},
"owner": null
},
{
"name": "complex-map",
"kind": {
"map": [
"string",
7
]
},
"owner": {
"interface": 0
},
"docs": {
"contents": "Maps with tuples, lists, options"
}
},
{
"name": "int-key-map",
"kind": {
"map": [
"u32",
"string"
]
},
"owner": {
"interface": 0
},
"docs": {
"contents": "Map with various key types"
}
},
{
"name": "char-key-map",
"kind": {
"map": [
"char",
"string"
]
},
"owner": {
"interface": 0
}
},
{
"name": null,
"kind": {
"option": "u32"
},
"owner": null
}
],
"packages": [
{
"name": "foo:maps",
"interfaces": {
"maps": 0
},
"worlds": {
"maps-world": 0
}
}
]
}

View File

@@ -0,0 +1,255 @@
{
"worlds": [
{
"name": "w2",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"imp2": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 0
},
{
"name": "w3",
"imports": {
"interface-2": {
"interface": {
"id": 2
}
},
"imp3": {
"interface": {
"id": 3
}
}
},
"exports": {},
"package": 1
},
{
"name": "w1",
"imports": {
"interface-4": {
"interface": {
"id": 4
}
},
"imp1": {
"interface": {
"id": 5
}
}
},
"exports": {},
"package": 3
},
{
"name": "w4",
"imports": {
"interface-6": {
"interface": {
"id": 6
}
},
"imp4": {
"interface": {
"id": 7
}
}
},
"exports": {},
"package": 4
}
],
"interfaces": [
{
"name": "i2",
"types": {
"b": 0
},
"functions": {},
"package": 0
},
{
"name": null,
"types": {
"b": 1
},
"functions": {},
"package": 0
},
{
"name": "i3",
"types": {
"a": 2
},
"functions": {},
"package": 1
},
{
"name": null,
"types": {
"a": 3
},
"functions": {},
"package": 1
},
{
"name": "i1",
"types": {
"a": 4
},
"functions": {},
"package": 3
},
{
"name": null,
"types": {
"a": 5
},
"functions": {},
"package": 3
},
{
"name": "i4",
"types": {
"b": 6
},
"functions": {},
"package": 4
},
{
"name": null,
"types": {
"b": 7
},
"functions": {},
"package": 4
}
],
"types": [
{
"name": "b",
"kind": {
"type": "u32"
},
"owner": {
"interface": 0
}
},
{
"name": "b",
"kind": {
"type": 0
},
"owner": {
"interface": 1
}
},
{
"name": "a",
"kind": {
"type": "u32"
},
"owner": {
"interface": 2
}
},
{
"name": "a",
"kind": {
"type": 2
},
"owner": {
"interface": 3
}
},
{
"name": "a",
"kind": {
"type": "u32"
},
"owner": {
"interface": 4
}
},
{
"name": "a",
"kind": {
"type": 4
},
"owner": {
"interface": 5
}
},
{
"name": "b",
"kind": {
"type": "u32"
},
"owner": {
"interface": 6
}
},
{
"name": "b",
"kind": {
"type": 6
},
"owner": {
"interface": 7
}
}
],
"packages": [
{
"name": "bar:name",
"interfaces": {
"i2": 0
},
"worlds": {
"w2": 0
}
},
{
"name": "baz:name",
"interfaces": {
"i3": 2
},
"worlds": {
"w3": 1
}
},
{
"name": "foo:main",
"interfaces": {},
"worlds": {}
},
{
"name": "foo:name",
"interfaces": {
"i1": 4
},
"worlds": {
"w1": 2
}
},
{
"name": "qux:name",
"interfaces": {
"i4": 6
},
"worlds": {
"w4": 3
}
}
]
}

View File

@@ -0,0 +1,24 @@
package foo:main;
package foo:name {
interface i1 {
type a = u32;
}
world w1 {
import imp1: interface {
use i1.{a};
}
}
}
package bar:name {
interface i2 {
type b = u32;
}
world w2 {
import imp2: interface {
use i2.{b};
}
}
}

View File

@@ -0,0 +1,23 @@
package baz:name {
interface i3 {
type a = u32;
}
world w3 {
import imp3: interface {
use i3.{a};
}
}
}
package qux:name {
interface i4 {
type b = u32;
}
world w4 {
import imp4: interface {
use i4.{b};
}
}
}

View File

@@ -0,0 +1,300 @@
{
"worlds": [
{
"name": "more-depends-on-later-things",
"imports": {
"interface-3": {
"interface": {
"id": 3
}
}
},
"exports": {
"interface-3": {
"interface": {
"id": 3
}
}
},
"package": 0
},
{
"name": "the-world",
"imports": {
"interface-1": {
"interface": {
"id": 1
}
},
"x": {
"type": 15
},
"foo": {
"function": {
"name": "foo",
"kind": "freestanding",
"params": [],
"result": 15
}
}
},
"exports": {},
"package": 0
}
],
"interfaces": [
{
"name": "irrelevant-name",
"types": {
"a-name": 0
},
"functions": {},
"package": 0
},
{
"name": "depend-on-me",
"types": {
"x": 1
},
"functions": {},
"package": 0
},
{
"name": "depends-on-later-item",
"types": {
"x": 2
},
"functions": {},
"package": 0
},
{
"name": "later-interface",
"types": {},
"functions": {},
"package": 0
},
{
"name": "cycle1",
"types": {
"t": 3
},
"functions": {},
"package": 0
},
{
"name": "cycle2",
"types": {
"t": 4
},
"functions": {},
"package": 0
},
{
"name": "cycle3",
"types": {
"t": 5
},
"functions": {},
"package": 0
},
{
"name": "foo",
"types": {
"x": 6
},
"functions": {},
"package": 0
},
{
"name": "something-else",
"types": {
"y": 7
},
"functions": {},
"package": 0
},
{
"name": "bar",
"types": {
"x": 8,
"x2": 9,
"x3": 10,
"x4": 11,
"y": 12,
"y2": 13,
"a-name": 14
},
"functions": {},
"package": 0
}
],
"types": [
{
"name": "a-name",
"kind": {
"record": {
"fields": []
}
},
"owner": {
"interface": 0
}
},
{
"name": "x",
"kind": {
"type": "u32"
},
"owner": {
"interface": 1
}
},
{
"name": "x",
"kind": {
"type": 1
},
"owner": {
"interface": 2
}
},
{
"name": "t",
"kind": {
"type": "u32"
},
"owner": {
"interface": 4
}
},
{
"name": "t",
"kind": {
"type": 3
},
"owner": {
"interface": 5
}
},
{
"name": "t",
"kind": {
"type": 4
},
"owner": {
"interface": 6
}
},
{
"name": "x",
"kind": {
"type": "u32"
},
"owner": {
"interface": 7
}
},
{
"name": "y",
"kind": {
"type": "u64"
},
"owner": {
"interface": 8
}
},
{
"name": "x",
"kind": {
"type": 6
},
"owner": {
"interface": 9
}
},
{
"name": "x2",
"kind": {
"type": 6
},
"owner": {
"interface": 9
}
},
{
"name": "x3",
"kind": {
"type": 6
},
"owner": {
"interface": 9
}
},
{
"name": "x4",
"kind": {
"type": 1
},
"owner": {
"interface": 9
}
},
{
"name": "y",
"kind": {
"type": 7
},
"owner": {
"interface": 9
}
},
{
"name": "y2",
"kind": {
"type": 7
},
"owner": {
"interface": 9
}
},
{
"name": "a-name",
"kind": {
"type": 0
},
"owner": {
"interface": 9
}
},
{
"name": "x",
"kind": {
"type": 1
},
"owner": {
"world": 1
}
}
],
"packages": [
{
"name": "foo:multi-file",
"interfaces": {
"irrelevant-name": 0,
"depend-on-me": 1,
"depends-on-later-item": 2,
"later-interface": 3,
"cycle1": 4,
"cycle2": 5,
"cycle3": 6,
"foo": 7,
"something-else": 8,
"bar": 9
},
"worlds": {
"more-depends-on-later-things": 0,
"the-world": 1
}
}
]
}

View File

@@ -0,0 +1,21 @@
package foo:multi-file;
interface irrelevant-name {
record a-name {}
}
interface depends-on-later-item {
use depend-on-me.{x};
}
interface depend-on-me {
type x = u32;
}
world more-depends-on-later-things {
import later-interface;
export later-interface;
}
interface later-interface {
}

View File

@@ -0,0 +1,7 @@
interface cycle1 {
type t = u32;
}
interface cycle3 {
use cycle2.{t};
}

View File

@@ -0,0 +1,3 @@
interface cycle2 {
use cycle1.{t};
}

View File

@@ -0,0 +1,31 @@
package foo:multi-file;
interface foo {
type x = u32;
}
use foo as foo2;
interface something-else {
type y = u64;
}
use depend-on-me as a-different-name;
interface bar {
use foo.{x};
use foo.{x as x2};
use foo2.{x as x3};
use a-different-name.{x as x4};
use something-else.{y};
use something-else.{y as y2};
use irrelevant-name.{a-name};
}
world the-world {
import a-different-name;
use a-different-name.{x};
import foo: func() -> x;
}

View File

@@ -0,0 +1,161 @@
{
"worlds": [],
"interfaces": [
{
"name": "i2",
"types": {
"t": 0
},
"functions": {},
"package": 0
},
{
"name": "i1",
"types": {
"t": 1,
"o": 2
},
"functions": {},
"package": 1
},
{
"name": "nesty",
"types": {
"o": 3,
"l": 4
},
"functions": {},
"package": 2
},
{
"name": "i0",
"types": {
"o": 5,
"l": 6,
"r": 7,
"r1": 8
},
"functions": {},
"package": 3
}
],
"types": [
{
"name": "t",
"kind": {
"type": "string"
},
"owner": {
"interface": 0
}
},
{
"name": "t",
"kind": {
"type": 0
},
"owner": {
"interface": 1
}
},
{
"name": "o",
"kind": {
"option": 1
},
"owner": {
"interface": 1
}
},
{
"name": "o",
"kind": {
"type": 2
},
"owner": {
"interface": 2
}
},
{
"name": "l",
"kind": {
"list": 3
},
"owner": {
"interface": 2
}
},
{
"name": "o",
"kind": {
"type": 2
},
"owner": {
"interface": 3
}
},
{
"name": "l",
"kind": {
"type": 4
},
"owner": {
"interface": 3
}
},
{
"name": "r",
"kind": {
"result": {
"ok": 5,
"err": null
}
},
"owner": {
"interface": 3
}
},
{
"name": "r1",
"kind": {
"result": {
"ok": 6,
"err": null
}
},
"owner": {
"interface": 3
}
}
],
"packages": [
{
"name": "foo:dep2",
"interfaces": {
"i2": 0
},
"worlds": {}
},
{
"name": "foo:dep1",
"interfaces": {
"i1": 1
},
"worlds": {}
},
{
"name": "foo:nest",
"interfaces": {
"nesty": 2
},
"worlds": {}
},
{
"name": "foo:root",
"interfaces": {
"i0": 3
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,13 @@
package foo:dep1;
package foo:dep2 {
interface i2 {
type t = string;
}
}
interface i1 {
use foo:dep2/i2.{t};
type o = option<t>;
}

View File

@@ -0,0 +1,16 @@
package foo:root;
package foo:nest {
interface nesty {
use foo:dep1/i1.{o};
type l = list<o>;
}
}
interface i0 {
use foo:dep1/i1.{o};
use foo:nest/nesty.{l};
type r = result<o>;
type r1 = result<l>;
}

View File

@@ -0,0 +1,114 @@
package wasmtime:test;
world test{
@unstable(feature = active)
include wasi:unstable/imports@0.2.3;
include wasi:foo/imports@0.2.3;
include wasi:someother/imports@0.2.3;
}
world test-ordered {
include wasi:someother/imports@0.2.3;
include wasi:foo/imports@0.2.3;
@unstable(feature = active)
include wasi:unstable/imports@0.2.3;
}
world test-no-stability {
include wasi:someother/imports@0.2.3;
include wasi:foo/imports@0.2.3;
include wasi:unstable/imports@0.2.3;
}
world test-only-stable {
include wasi:foo/imports@0.2.3;
}
world test-only-stable-with-feature {
@unstable(feature = active)
include wasi:foo/imports@0.2.3;
}
// in test this results in world with nothing
world test-only-stable-with-in-active-feature {
@unstable(feature = in-active)
include wasi:foo/imports@0.2.3;
}
package wasi:unstable@0.2.3 {
@unstable(feature = active)
world imports {
@unstable(feature = active)
use wasi:dep2/stable@0.2.3.{stable-resource};
@unstable(feature = active)
use wasi:dep-unversioned/unversioned.{unversioned-resource};
@unstable(feature = active)
use wasi:dep-unstable/unstable.{unstable-resource};
}
}
package wasi:someother@0.2.3 {
@since(version = 0.2.0)
world imports {
import someother;
}
@since(version = 0.2.0)
interface someother {
@since(version = 0.2.0)
resource someother-resource {
}
}
}
package wasi:foo@0.2.3 {
@since(version = 0.2.0)
world imports {
@since(version = 0.2.0)
include wasi:dep2/imports@0.2.3;
include wasi:dep-unversioned/imports;
include wasi:dep-unstable/imports;
}
}
package wasi:dep2@0.2.3 {
@since(version = 0.2.0)
world imports {
@since(version = 0.2.0)
import stable;
}
@since(version = 0.2.0)
interface stable {
resource stable-resource {
}
}
}
package wasi:dep-unversioned{
world imports {
import unversioned;
}
interface unversioned {
resource unversioned-resource {
}
}
}
package wasi:dep-unstable{
@unstable(feature = active)
world imports {
@unstable(feature = active)
import unstable;
}
@unstable(feature = active)
interface unstable {
@unstable(feature = active)
resource unstable-resource {
}
}
}

View File

@@ -0,0 +1,697 @@
{
"worlds": [
{
"name": "imports",
"imports": {
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {},
"package": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "imports",
"imports": {
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 1
},
{
"name": "imports",
"imports": {
"interface-2": {
"interface": {
"id": 2,
"stability": {
"stable": {
"since": "0.2.0"
}
}
}
}
},
"exports": {},
"package": 2,
"stability": {
"stable": {
"since": "0.2.0"
}
}
},
{
"name": "imports",
"imports": {
"interface-2": {
"interface": {
"id": 2
}
},
"interface-1": {
"interface": {
"id": 1
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {},
"package": 3,
"stability": {
"stable": {
"since": "0.2.0"
}
}
},
{
"name": "imports",
"imports": {
"interface-3": {
"interface": {
"id": 3
}
}
},
"exports": {},
"package": 4,
"stability": {
"stable": {
"since": "0.2.0"
}
}
},
{
"name": "imports",
"imports": {
"interface-2": {
"interface": {
"id": 2,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"stable-resource": {
"type": 4
},
"unversioned-resource": {
"type": 5
},
"unstable-resource": {
"type": 6
}
},
"exports": {},
"package": 5,
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "test",
"imports": {
"interface-2": {
"interface": {
"id": 2,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-3": {
"interface": {
"id": 3
}
},
"stable-resource": {
"type": 7
},
"unversioned-resource": {
"type": 8
},
"unstable-resource": {
"type": 9
}
},
"exports": {},
"package": 6
},
{
"name": "test-ordered",
"imports": {
"interface-3": {
"interface": {
"id": 3
}
},
"interface-2": {
"interface": {
"id": 2,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"stable-resource": {
"type": 10
},
"unversioned-resource": {
"type": 11
},
"unstable-resource": {
"type": 12
}
},
"exports": {},
"package": 6
},
{
"name": "test-no-stability",
"imports": {
"interface-3": {
"interface": {
"id": 3
}
},
"interface-2": {
"interface": {
"id": 2,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-1": {
"interface": {
"id": 1,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
},
"stable-resource": {
"type": 13
},
"unversioned-resource": {
"type": 14
},
"unstable-resource": {
"type": 15
}
},
"exports": {},
"package": 6
},
{
"name": "test-only-stable",
"imports": {
"interface-2": {
"interface": {
"id": 2
}
},
"interface-1": {
"interface": {
"id": 1
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {},
"package": 6
},
{
"name": "test-only-stable-with-feature",
"imports": {
"interface-2": {
"interface": {
"id": 2
}
},
"interface-1": {
"interface": {
"id": 1
}
},
"interface-0": {
"interface": {
"id": 0,
"stability": {
"unstable": {
"feature": "active"
}
}
}
}
},
"exports": {},
"package": 6
},
{
"name": "test-only-stable-with-in-active-feature",
"imports": {},
"exports": {},
"package": 6,
"docs": {
"contents": "in test this results in world with nothing"
}
}
],
"interfaces": [
{
"name": "unstable",
"types": {
"unstable-resource": 0
},
"functions": {},
"stability": {
"unstable": {
"feature": "active"
}
},
"package": 0
},
{
"name": "unversioned",
"types": {
"unversioned-resource": 1
},
"functions": {},
"package": 1
},
{
"name": "stable",
"types": {
"stable-resource": 2
},
"functions": {},
"stability": {
"stable": {
"since": "0.2.0"
}
},
"package": 2
},
{
"name": "someother",
"types": {
"someother-resource": 3
},
"functions": {},
"stability": {
"stable": {
"since": "0.2.0"
}
},
"package": 4
}
],
"types": [
{
"name": "unstable-resource",
"kind": "resource",
"owner": {
"interface": 0
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unversioned-resource",
"kind": "resource",
"owner": {
"interface": 1
}
},
{
"name": "stable-resource",
"kind": "resource",
"owner": {
"interface": 2
}
},
{
"name": "someother-resource",
"kind": "resource",
"owner": {
"interface": 3
},
"stability": {
"stable": {
"since": "0.2.0"
}
}
},
{
"name": "stable-resource",
"kind": {
"type": 2
},
"owner": {
"world": 5
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unversioned-resource",
"kind": {
"type": 1
},
"owner": {
"world": 5
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unstable-resource",
"kind": {
"type": 0
},
"owner": {
"world": 5
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "stable-resource",
"kind": {
"type": 2
},
"owner": {
"world": 6
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unversioned-resource",
"kind": {
"type": 1
},
"owner": {
"world": 6
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unstable-resource",
"kind": {
"type": 0
},
"owner": {
"world": 6
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "stable-resource",
"kind": {
"type": 2
},
"owner": {
"world": 7
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unversioned-resource",
"kind": {
"type": 1
},
"owner": {
"world": 7
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unstable-resource",
"kind": {
"type": 0
},
"owner": {
"world": 7
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "stable-resource",
"kind": {
"type": 2
},
"owner": {
"world": 8
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unversioned-resource",
"kind": {
"type": 1
},
"owner": {
"world": 8
},
"stability": {
"unstable": {
"feature": "active"
}
}
},
{
"name": "unstable-resource",
"kind": {
"type": 0
},
"owner": {
"world": 8
},
"stability": {
"unstable": {
"feature": "active"
}
}
}
],
"packages": [
{
"name": "wasi:dep-unstable",
"interfaces": {
"unstable": 0
},
"worlds": {
"imports": 0
}
},
{
"name": "wasi:dep-unversioned",
"interfaces": {
"unversioned": 1
},
"worlds": {
"imports": 1
}
},
{
"name": "wasi:dep2@0.2.3",
"interfaces": {
"stable": 2
},
"worlds": {
"imports": 2
}
},
{
"name": "wasi:foo@0.2.3",
"interfaces": {},
"worlds": {
"imports": 3
}
},
{
"name": "wasi:someother@0.2.3",
"interfaces": {
"someother": 3
},
"worlds": {
"imports": 4
}
},
{
"name": "wasi:unstable@0.2.3",
"interfaces": {},
"worlds": {
"imports": 5
}
},
{
"name": "wasmtime:test",
"interfaces": {},
"worlds": {
"test": 6,
"test-ordered": 7,
"test-no-stability": 8,
"test-only-stable": 9,
"test-only-stable-with-feature": 10,
"test-only-stable-with-in-active-feature": 11
}
}
]
}

View File

@@ -0,0 +1,261 @@
{
"worlds": [
{
"name": "w-bar",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 2
},
{
"name": "w-qux",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 3
}
],
"interfaces": [
{
"name": "types",
"types": {
"type1": 0
},
"functions": {},
"package": 0
},
{
"name": "types",
"types": {
"type2": 1
},
"functions": {},
"package": 1
},
{
"name": "i0",
"types": {
"type1": 2,
"type2": 3,
"rec0": 4
},
"functions": {},
"package": 2
},
{
"name": "i1",
"types": {
"type1": 5,
"type2": 6,
"rec1": 7
},
"functions": {},
"package": 3
},
{
"name": "root",
"types": {
"rec0": 8,
"rec1": 9,
"rec": 10
},
"functions": {},
"package": 4
}
],
"types": [
{
"name": "type1",
"kind": {
"type": "string"
},
"owner": {
"interface": 0
}
},
{
"name": "type2",
"kind": {
"type": "string"
},
"owner": {
"interface": 1
}
},
{
"name": "type1",
"kind": {
"type": 0
},
"owner": {
"interface": 2
}
},
{
"name": "type2",
"kind": {
"type": 1
},
"owner": {
"interface": 2
}
},
{
"name": "rec0",
"kind": {
"record": {
"fields": [
{
"name": "foo",
"type": 2
},
{
"name": "bar",
"type": 3
}
]
}
},
"owner": {
"interface": 2
}
},
{
"name": "type1",
"kind": {
"type": 0
},
"owner": {
"interface": 3
}
},
{
"name": "type2",
"kind": {
"type": 1
},
"owner": {
"interface": 3
}
},
{
"name": "rec1",
"kind": {
"record": {
"fields": [
{
"name": "foo",
"type": 5
},
{
"name": "bar",
"type": 6
}
]
}
},
"owner": {
"interface": 3
}
},
{
"name": "rec0",
"kind": {
"type": 4
},
"owner": {
"interface": 4
}
},
{
"name": "rec1",
"kind": {
"type": 7
},
"owner": {
"interface": 4
}
},
{
"name": "rec",
"kind": {
"record": {
"fields": [
{
"name": "first",
"type": 8
},
{
"name": "second",
"type": 9
}
]
}
},
"owner": {
"interface": 4
}
}
],
"packages": [
{
"name": "foo:dep1",
"interfaces": {
"types": 0
},
"worlds": {}
},
{
"name": "foo:dep2",
"interfaces": {
"types": 1
},
"worlds": {}
},
{
"name": "foo:bar",
"interfaces": {
"i0": 2
},
"worlds": {
"w-bar": 0
}
},
{
"name": "foo:qux",
"interfaces": {
"i1": 3
},
"worlds": {
"w-qux": 1
}
},
{
"name": "foo:root",
"interfaces": {
"root": 4
},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,4 @@
package foo:dep1;
interface types {
type type1 = string;
}

View File

@@ -0,0 +1,4 @@
package foo:dep2;
interface types {
type type2 = string;
}

View File

@@ -0,0 +1,41 @@
package foo:root;
package foo:bar {
interface i0 {
use foo:dep1/types.{type1};
use foo:dep2/types.{type2};
record rec0 {
foo: type1,
bar: type2
}
}
world w-bar {
import foo:dep1/types;
import foo:dep2/types;
}
}
package foo:qux {
interface i1 {
use foo:dep1/types.{type1};
use foo:dep2/types.{type2};
record rec1 {
foo: type1,
bar: type2
}
}
world w-qux {
import foo:dep1/types;
import foo:dep2/types;
}
}
interface root {
use foo:bar/i0.{rec0};
use foo:qux/i1.{rec1};
record rec {
first: rec0,
second: rec1
}
}

View File

@@ -0,0 +1,174 @@
{
"worlds": [
{
"name": "w-bar",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
},
"interface-2": {
"interface": {
"id": 2
}
}
},
"exports": {},
"package": 3
},
{
"name": "w-qux",
"imports": {
"interface-0": {
"interface": {
"id": 0
}
},
"interface-1": {
"interface": {
"id": 1
}
}
},
"exports": {},
"package": 4
}
],
"interfaces": [
{
"name": "types",
"types": {
"t2": 0
},
"functions": {},
"package": 0
},
{
"name": "types",
"types": {
"t2": 1,
"a": 2
},
"functions": {},
"package": 1
},
{
"name": "types",
"types": {
"a": 3,
"b": 4
},
"functions": {},
"package": 2
}
],
"types": [
{
"name": "t2",
"kind": {
"type": "string"
},
"owner": {
"interface": 0
}
},
{
"name": "t2",
"kind": {
"type": 0
},
"owner": {
"interface": 1
}
},
{
"name": "a",
"kind": {
"record": {
"fields": [
{
"name": "foo",
"type": 1
}
]
}
},
"owner": {
"interface": 1
}
},
{
"name": "a",
"kind": {
"type": 2
},
"owner": {
"interface": 2
}
},
{
"name": "b",
"kind": {
"record": {
"fields": [
{
"name": "r",
"type": 3
}
]
}
},
"owner": {
"interface": 2
}
}
],
"packages": [
{
"name": "foo:nest",
"interfaces": {
"types": 0
},
"worlds": {}
},
{
"name": "foo:dep2",
"interfaces": {
"types": 1
},
"worlds": {}
},
{
"name": "foo:dep1",
"interfaces": {
"types": 2
},
"worlds": {}
},
{
"name": "foo:bar",
"interfaces": {},
"worlds": {
"w-bar": 0
}
},
{
"name": "foo:qux",
"interfaces": {},
"worlds": {
"w-qux": 1
}
},
{
"name": "foo:root",
"interfaces": {},
"worlds": {}
}
]
}

View File

@@ -0,0 +1,8 @@
package foo:dep1;
interface types {
use foo:dep2/types.{a};
record b {
r: a,
}
}

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