diff --git a/crates/wasmparser/src/validator/component.rs b/crates/wasmparser/src/validator/component.rs index 62b855c0fb..161541f3c6 100644 --- a/crates/wasmparser/src/validator/component.rs +++ b/crates/wasmparser/src/validator/component.rs @@ -1437,7 +1437,7 @@ impl ComponentState { }; self.core_funcs - .push(types.intern_func_type(FuncType::new([ValType::I32], []), offset)); + .push(types.intern_func_type(FuncType::new([ValType::I32; 2], []), offset)); Ok(()) } @@ -1621,7 +1621,7 @@ impl ComponentState { }; self.core_funcs - .push(types.intern_func_type(FuncType::new([ValType::I32], []), offset)); + .push(types.intern_func_type(FuncType::new([ValType::I32; 2], []), offset)); Ok(()) } diff --git a/crates/wit-component/src/validation.rs b/crates/wit-component/src/validation.rs index aeb626141e..c78ff8c52c 100644 --- a/crates/wit-component/src/validation.rs +++ b/crates/wit-component/src/validation.rs @@ -888,7 +888,7 @@ impl ImportMap { if async_ { bail!("async `future.close-readable` calls not supported"); } - validate_func_sig(name, &FuncType::new([ValType::I32], []), ty)?; + validate_func_sig(name, &FuncType::new([ValType::I32; 2], []), ty)?; Import::FutureCloseReadable(info) } else if let Some(info) = prefixed_payload("[stream-new-") { if async_ { @@ -918,7 +918,7 @@ impl ImportMap { if async_ { bail!("async `stream.close-readable` calls not supported"); } - validate_func_sig(name, &FuncType::new([ValType::I32], []), ty)?; + validate_func_sig(name, &FuncType::new([ValType::I32; 2], []), ty)?; Import::StreamCloseReadable(info) } else { return Ok(None); diff --git a/crates/wit-component/tests/components/async-streams-and-futures/component.wat b/crates/wit-component/tests/components/async-streams-and-futures/component.wat index 4e0883c60c..0f3af2f04c 100644 --- a/crates/wit-component/tests/components/async-streams-and-futures/component.wat +++ b/crates/wit-component/tests/components/async-streams-and-futures/component.wat @@ -19,9 +19,8 @@ (type (;1;) (func (result i32))) (type (;2;) (func (param i32 i32 i32) (result i32))) (type (;3;) (func (param i32) (result i32))) - (type (;4;) (func (param i32))) - (type (;5;) (func (param i32 i32))) - (type (;6;) (func (param i32 i32 i32 i32) (result i32))) + (type (;4;) (func (param i32 i32))) + (type (;5;) (func (param i32 i32 i32 i32) (result i32))) (import "$root" "[async]foo" (func (;0;) (type 0))) (import "foo:foo/bar" "[async]foo" (func (;1;) (type 0))) (import "$root" "[stream-new-2]foo" (func (;2;) (type 1))) @@ -30,96 +29,96 @@ (import "$root" "[stream-cancel-read-2]foo" (func (;5;) (type 3))) (import "$root" "[stream-cancel-write-2]foo" (func (;6;) (type 3))) (import "$root" "[stream-close-readable-2]foo" (func (;7;) (type 4))) - (import "$root" "[stream-close-writable-2]foo" (func (;8;) (type 5))) + (import "$root" "[stream-close-writable-2]foo" (func (;8;) (type 4))) (import "foo:foo/bar" "[stream-new-2]foo" (func (;9;) (type 1))) (import "foo:foo/bar" "[stream-read-2]foo" (func (;10;) (type 2))) (import "foo:foo/bar" "[stream-write-2]foo" (func (;11;) (type 2))) (import "foo:foo/bar" "[stream-cancel-read-2]foo" (func (;12;) (type 3))) (import "foo:foo/bar" "[stream-cancel-write-2]foo" (func (;13;) (type 3))) (import "foo:foo/bar" "[stream-close-readable-2]foo" (func (;14;) (type 4))) - (import "foo:foo/bar" "[stream-close-writable-2]foo" (func (;15;) (type 5))) + (import "foo:foo/bar" "[stream-close-writable-2]foo" (func (;15;) (type 4))) (import "$root" "[future-new-0]foo" (func (;16;) (type 1))) (import "$root" "[future-read-0]foo" (func (;17;) (type 0))) (import "$root" "[future-write-0]foo" (func (;18;) (type 0))) (import "$root" "[future-cancel-read-0]foo" (func (;19;) (type 3))) (import "$root" "[future-cancel-write-0]foo" (func (;20;) (type 3))) (import "$root" "[future-close-readable-0]foo" (func (;21;) (type 4))) - (import "$root" "[future-close-writable-0]foo" (func (;22;) (type 5))) + (import "$root" "[future-close-writable-0]foo" (func (;22;) (type 4))) (import "foo:foo/bar" "[future-new-0]foo" (func (;23;) (type 1))) (import "foo:foo/bar" "[future-read-0]foo" (func (;24;) (type 0))) (import "foo:foo/bar" "[future-write-0]foo" (func (;25;) (type 0))) (import "foo:foo/bar" "[future-cancel-read-0]foo" (func (;26;) (type 3))) (import "foo:foo/bar" "[future-cancel-write-0]foo" (func (;27;) (type 3))) (import "foo:foo/bar" "[future-close-readable-0]foo" (func (;28;) (type 4))) - (import "foo:foo/bar" "[future-close-writable-0]foo" (func (;29;) (type 5))) + (import "foo:foo/bar" "[future-close-writable-0]foo" (func (;29;) (type 4))) (import "$root" "[future-new-1]foo" (func (;30;) (type 1))) (import "$root" "[future-read-1]foo" (func (;31;) (type 0))) (import "$root" "[future-write-1]foo" (func (;32;) (type 0))) (import "$root" "[future-cancel-read-1]foo" (func (;33;) (type 3))) (import "$root" "[future-cancel-write-1]foo" (func (;34;) (type 3))) (import "$root" "[future-close-readable-1]foo" (func (;35;) (type 4))) - (import "$root" "[future-close-writable-1]foo" (func (;36;) (type 5))) + (import "$root" "[future-close-writable-1]foo" (func (;36;) (type 4))) (import "foo:foo/bar" "[future-new-1]foo" (func (;37;) (type 1))) (import "foo:foo/bar" "[future-read-1]foo" (func (;38;) (type 0))) (import "foo:foo/bar" "[future-write-1]foo" (func (;39;) (type 0))) (import "foo:foo/bar" "[future-cancel-read-1]foo" (func (;40;) (type 3))) (import "foo:foo/bar" "[future-cancel-write-1]foo" (func (;41;) (type 3))) (import "foo:foo/bar" "[future-close-readable-1]foo" (func (;42;) (type 4))) - (import "foo:foo/bar" "[future-close-writable-1]foo" (func (;43;) (type 5))) + (import "foo:foo/bar" "[future-close-writable-1]foo" (func (;43;) (type 4))) (import "[export]$root" "[stream-new-2]foo" (func (;44;) (type 1))) (import "[export]$root" "[stream-read-2]foo" (func (;45;) (type 2))) (import "[export]$root" "[stream-write-2]foo" (func (;46;) (type 2))) (import "[export]$root" "[stream-cancel-read-2]foo" (func (;47;) (type 3))) (import "[export]$root" "[stream-cancel-write-2]foo" (func (;48;) (type 3))) (import "[export]$root" "[stream-close-readable-2]foo" (func (;49;) (type 4))) - (import "[export]$root" "[stream-close-writable-2]foo" (func (;50;) (type 5))) + (import "[export]$root" "[stream-close-writable-2]foo" (func (;50;) (type 4))) (import "[export]foo:foo/bar" "[stream-new-2]foo" (func (;51;) (type 1))) (import "[export]foo:foo/bar" "[stream-read-2]foo" (func (;52;) (type 2))) (import "[export]foo:foo/bar" "[stream-write-2]foo" (func (;53;) (type 2))) (import "[export]foo:foo/bar" "[stream-cancel-read-2]foo" (func (;54;) (type 3))) (import "[export]foo:foo/bar" "[stream-cancel-write-2]foo" (func (;55;) (type 3))) (import "[export]foo:foo/bar" "[stream-close-readable-2]foo" (func (;56;) (type 4))) - (import "[export]foo:foo/bar" "[stream-close-writable-2]foo" (func (;57;) (type 5))) + (import "[export]foo:foo/bar" "[stream-close-writable-2]foo" (func (;57;) (type 4))) (import "[export]$root" "[future-new-0]foo" (func (;58;) (type 1))) (import "[export]$root" "[future-read-0]foo" (func (;59;) (type 0))) (import "[export]$root" "[future-write-0]foo" (func (;60;) (type 0))) (import "[export]$root" "[future-cancel-read-0]foo" (func (;61;) (type 3))) (import "[export]$root" "[future-cancel-write-0]foo" (func (;62;) (type 3))) (import "[export]$root" "[future-close-readable-0]foo" (func (;63;) (type 4))) - (import "[export]$root" "[future-close-writable-0]foo" (func (;64;) (type 5))) + (import "[export]$root" "[future-close-writable-0]foo" (func (;64;) (type 4))) (import "[export]foo:foo/bar" "[future-new-0]foo" (func (;65;) (type 1))) (import "[export]foo:foo/bar" "[future-read-0]foo" (func (;66;) (type 0))) (import "[export]foo:foo/bar" "[future-write-0]foo" (func (;67;) (type 0))) (import "[export]foo:foo/bar" "[future-cancel-read-0]foo" (func (;68;) (type 3))) (import "[export]foo:foo/bar" "[future-cancel-write-0]foo" (func (;69;) (type 3))) (import "[export]foo:foo/bar" "[future-close-readable-0]foo" (func (;70;) (type 4))) - (import "[export]foo:foo/bar" "[future-close-writable-0]foo" (func (;71;) (type 5))) + (import "[export]foo:foo/bar" "[future-close-writable-0]foo" (func (;71;) (type 4))) (import "[export]$root" "[future-new-1]foo" (func (;72;) (type 1))) (import "[export]$root" "[future-read-1]foo" (func (;73;) (type 0))) (import "[export]$root" "[future-write-1]foo" (func (;74;) (type 0))) (import "[export]$root" "[future-cancel-read-1]foo" (func (;75;) (type 3))) (import "[export]$root" "[future-cancel-write-1]foo" (func (;76;) (type 3))) (import "[export]$root" "[future-close-readable-1]foo" (func (;77;) (type 4))) - (import "[export]$root" "[future-close-writable-1]foo" (func (;78;) (type 5))) + (import "[export]$root" "[future-close-writable-1]foo" (func (;78;) (type 4))) (import "[export]foo:foo/bar" "[future-new-1]foo" (func (;79;) (type 1))) (import "[export]foo:foo/bar" "[future-read-1]foo" (func (;80;) (type 0))) (import "[export]foo:foo/bar" "[future-write-1]foo" (func (;81;) (type 0))) (import "[export]foo:foo/bar" "[future-cancel-read-1]foo" (func (;82;) (type 3))) (import "[export]foo:foo/bar" "[future-cancel-write-1]foo" (func (;83;) (type 3))) (import "[export]foo:foo/bar" "[future-close-readable-1]foo" (func (;84;) (type 4))) - (import "[export]foo:foo/bar" "[future-close-writable-1]foo" (func (;85;) (type 5))) + (import "[export]foo:foo/bar" "[future-close-writable-1]foo" (func (;85;) (type 4))) (memory (;0;) 1) (export "[async-stackful]foo" (func 86)) (export "[async-stackful]foo:foo/bar#foo" (func 87)) (export "memory" (memory 0)) (export "cabi_realloc" (func 88)) - (func (;86;) (type 5) (param i32 i32) + (func (;86;) (type 4) (param i32 i32) unreachable ) - (func (;87;) (type 5) (param i32 i32) + (func (;87;) (type 4) (param i32 i32) unreachable ) - (func (;88;) (type 6) (param i32 i32 i32 i32) (result i32) + (func (;88;) (type 5) (param i32 i32 i32 i32) (result i32) unreachable ) (@producers diff --git a/crates/wit-component/tests/components/async-streams-and-futures/module.wat b/crates/wit-component/tests/components/async-streams-and-futures/module.wat index 934fa4bb48..952d769912 100644 --- a/crates/wit-component/tests/components/async-streams-and-futures/module.wat +++ b/crates/wit-component/tests/components/async-streams-and-futures/module.wat @@ -6,84 +6,84 @@ (func (import "$root" "[stream-write-2]foo") (param i32 i32 i32) (result i32)) (func (import "$root" "[stream-cancel-read-2]foo") (param i32) (result i32)) (func (import "$root" "[stream-cancel-write-2]foo") (param i32) (result i32)) - (func (import "$root" "[stream-close-readable-2]foo") (param i32)) + (func (import "$root" "[stream-close-readable-2]foo") (param i32 i32)) (func (import "$root" "[stream-close-writable-2]foo") (param i32 i32)) (func (import "foo:foo/bar" "[stream-new-2]foo") (result i32)) (func (import "foo:foo/bar" "[stream-read-2]foo") (param i32 i32 i32) (result i32)) (func (import "foo:foo/bar" "[stream-write-2]foo") (param i32 i32 i32) (result i32)) (func (import "foo:foo/bar" "[stream-cancel-read-2]foo") (param i32) (result i32)) (func (import "foo:foo/bar" "[stream-cancel-write-2]foo") (param i32) (result i32)) - (func (import "foo:foo/bar" "[stream-close-readable-2]foo") (param i32)) + (func (import "foo:foo/bar" "[stream-close-readable-2]foo") (param i32 i32)) (func (import "foo:foo/bar" "[stream-close-writable-2]foo") (param i32 i32)) (func (import "$root" "[future-new-0]foo") (result i32)) (func (import "$root" "[future-read-0]foo") (param i32 i32) (result i32)) (func (import "$root" "[future-write-0]foo") (param i32 i32) (result i32)) (func (import "$root" "[future-cancel-read-0]foo") (param i32) (result i32)) (func (import "$root" "[future-cancel-write-0]foo") (param i32) (result i32)) - (func (import "$root" "[future-close-readable-0]foo") (param i32)) + (func (import "$root" "[future-close-readable-0]foo") (param i32 i32)) (func (import "$root" "[future-close-writable-0]foo") (param i32 i32)) (func (import "foo:foo/bar" "[future-new-0]foo") (result i32)) (func (import "foo:foo/bar" "[future-read-0]foo") (param i32 i32) (result i32)) (func (import "foo:foo/bar" "[future-write-0]foo") (param i32 i32) (result i32)) (func (import "foo:foo/bar" "[future-cancel-read-0]foo") (param i32) (result i32)) (func (import "foo:foo/bar" "[future-cancel-write-0]foo") (param i32) (result i32)) - (func (import "foo:foo/bar" "[future-close-readable-0]foo") (param i32)) + (func (import "foo:foo/bar" "[future-close-readable-0]foo") (param i32 i32)) (func (import "foo:foo/bar" "[future-close-writable-0]foo") (param i32 i32)) (func (import "$root" "[future-new-1]foo") (result i32)) (func (import "$root" "[future-read-1]foo") (param i32 i32) (result i32)) (func (import "$root" "[future-write-1]foo") (param i32 i32) (result i32)) (func (import "$root" "[future-cancel-read-1]foo") (param i32) (result i32)) (func (import "$root" "[future-cancel-write-1]foo") (param i32) (result i32)) - (func (import "$root" "[future-close-readable-1]foo") (param i32)) + (func (import "$root" "[future-close-readable-1]foo") (param i32 i32)) (func (import "$root" "[future-close-writable-1]foo") (param i32 i32)) (func (import "foo:foo/bar" "[future-new-1]foo") (result i32)) (func (import "foo:foo/bar" "[future-read-1]foo") (param i32 i32) (result i32)) (func (import "foo:foo/bar" "[future-write-1]foo") (param i32 i32) (result i32)) (func (import "foo:foo/bar" "[future-cancel-read-1]foo") (param i32) (result i32)) (func (import "foo:foo/bar" "[future-cancel-write-1]foo") (param i32) (result i32)) - (func (import "foo:foo/bar" "[future-close-readable-1]foo") (param i32)) + (func (import "foo:foo/bar" "[future-close-readable-1]foo") (param i32 i32)) (func (import "foo:foo/bar" "[future-close-writable-1]foo") (param i32 i32)) (func (import "[export]$root" "[stream-new-2]foo") (result i32)) (func (import "[export]$root" "[stream-read-2]foo") (param i32 i32 i32) (result i32)) (func (import "[export]$root" "[stream-write-2]foo") (param i32 i32 i32) (result i32)) (func (import "[export]$root" "[stream-cancel-read-2]foo") (param i32) (result i32)) (func (import "[export]$root" "[stream-cancel-write-2]foo") (param i32) (result i32)) - (func (import "[export]$root" "[stream-close-readable-2]foo") (param i32)) + (func (import "[export]$root" "[stream-close-readable-2]foo") (param i32 i32)) (func (import "[export]$root" "[stream-close-writable-2]foo") (param i32 i32)) (func (import "[export]foo:foo/bar" "[stream-new-2]foo") (result i32)) (func (import "[export]foo:foo/bar" "[stream-read-2]foo") (param i32 i32 i32) (result i32)) (func (import "[export]foo:foo/bar" "[stream-write-2]foo") (param i32 i32 i32) (result i32)) (func (import "[export]foo:foo/bar" "[stream-cancel-read-2]foo") (param i32) (result i32)) (func (import "[export]foo:foo/bar" "[stream-cancel-write-2]foo") (param i32) (result i32)) - (func (import "[export]foo:foo/bar" "[stream-close-readable-2]foo") (param i32)) + (func (import "[export]foo:foo/bar" "[stream-close-readable-2]foo") (param i32 i32)) (func (import "[export]foo:foo/bar" "[stream-close-writable-2]foo") (param i32 i32)) (func (import "[export]$root" "[future-new-0]foo") (result i32)) (func (import "[export]$root" "[future-read-0]foo") (param i32 i32) (result i32)) (func (import "[export]$root" "[future-write-0]foo") (param i32 i32) (result i32)) (func (import "[export]$root" "[future-cancel-read-0]foo") (param i32) (result i32)) (func (import "[export]$root" "[future-cancel-write-0]foo") (param i32) (result i32)) - (func (import "[export]$root" "[future-close-readable-0]foo") (param i32)) + (func (import "[export]$root" "[future-close-readable-0]foo") (param i32 i32)) (func (import "[export]$root" "[future-close-writable-0]foo") (param i32 i32)) (func (import "[export]foo:foo/bar" "[future-new-0]foo") (result i32)) (func (import "[export]foo:foo/bar" "[future-read-0]foo") (param i32 i32) (result i32)) (func (import "[export]foo:foo/bar" "[future-write-0]foo") (param i32 i32) (result i32)) (func (import "[export]foo:foo/bar" "[future-cancel-read-0]foo") (param i32) (result i32)) (func (import "[export]foo:foo/bar" "[future-cancel-write-0]foo") (param i32) (result i32)) - (func (import "[export]foo:foo/bar" "[future-close-readable-0]foo") (param i32)) + (func (import "[export]foo:foo/bar" "[future-close-readable-0]foo") (param i32 i32)) (func (import "[export]foo:foo/bar" "[future-close-writable-0]foo") (param i32 i32)) (func (import "[export]$root" "[future-new-1]foo") (result i32)) (func (import "[export]$root" "[future-read-1]foo") (param i32 i32) (result i32)) (func (import "[export]$root" "[future-write-1]foo") (param i32 i32) (result i32)) (func (import "[export]$root" "[future-cancel-read-1]foo") (param i32) (result i32)) (func (import "[export]$root" "[future-cancel-write-1]foo") (param i32) (result i32)) - (func (import "[export]$root" "[future-close-readable-1]foo") (param i32)) + (func (import "[export]$root" "[future-close-readable-1]foo") (param i32 i32)) (func (import "[export]$root" "[future-close-writable-1]foo") (param i32 i32)) (func (import "[export]foo:foo/bar" "[future-new-1]foo") (result i32)) (func (import "[export]foo:foo/bar" "[future-read-1]foo") (param i32 i32) (result i32)) (func (import "[export]foo:foo/bar" "[future-write-1]foo") (param i32 i32) (result i32)) (func (import "[export]foo:foo/bar" "[future-cancel-read-1]foo") (param i32) (result i32)) (func (import "[export]foo:foo/bar" "[future-cancel-write-1]foo") (param i32) (result i32)) - (func (import "[export]foo:foo/bar" "[future-close-readable-1]foo") (param i32)) + (func (import "[export]foo:foo/bar" "[future-close-readable-1]foo") (param i32 i32)) (func (import "[export]foo:foo/bar" "[future-close-writable-1]foo") (param i32 i32)) (func (export "[async-stackful]foo") (param i32 i32) unreachable) (func (export "[async-stackful]foo:foo/bar#foo") (param i32 i32) unreachable) diff --git a/tests/local/component-model-async/futures.wast b/tests/local/component-model-async/futures.wast index 89678f253f..a003b5863d 100644 --- a/tests/local/component-model-async/futures.wast +++ b/tests/local/component-model-async/futures.wast @@ -169,7 +169,7 @@ ;; future.close-readable (component (core module $m - (import "" "future.close-readable" (func $future-close-readable (param i32))) + (import "" "future.close-readable" (func $future-close-readable (param i32 i32))) ) (type $future-type (future u8)) (core func $future-close-readable (canon future.close-readable $future-type)) @@ -180,7 +180,7 @@ (assert_invalid (component (core module $m - (import "" "future.close-readable" (func $future-close-readable (param i32 i32) (result i32))) + (import "" "future.close-readable" (func $future-close-readable (param i32) (result i32))) ) (type $future-type (future u8)) (core func $future-close-readable (canon future.close-readable $future-type)) diff --git a/tests/local/component-model-async/streams.wast b/tests/local/component-model-async/streams.wast index 0606c1c93a..b71991ad02 100644 --- a/tests/local/component-model-async/streams.wast +++ b/tests/local/component-model-async/streams.wast @@ -169,7 +169,7 @@ ;; stream.close-readable (component (core module $m - (import "" "stream.close-readable" (func $stream-close-readable (param i32))) + (import "" "stream.close-readable" (func $stream-close-readable (param i32 i32))) ) (type $stream-type (stream u8)) (core func $stream-close-readable (canon stream.close-readable $stream-type)) @@ -180,7 +180,7 @@ (assert_invalid (component (core module $m - (import "" "stream.close-readable" (func $stream-close-readable (param i32 i32) (result i32))) + (import "" "stream.close-readable" (func $stream-close-readable (param i32) (result i32))) ) (type $stream-type (stream u8)) (core func $stream-close-readable (canon stream.close-readable $stream-type)) diff --git a/tests/snapshots/local/component-model-async/futures.wast/13.print b/tests/snapshots/local/component-model-async/futures.wast/13.print index 7754683368..9ba2e6013a 100644 --- a/tests/snapshots/local/component-model-async/futures.wast/13.print +++ b/tests/snapshots/local/component-model-async/futures.wast/13.print @@ -1,6 +1,6 @@ (component (core module $m (;0;) - (type (;0;) (func (param i32))) + (type (;0;) (func (param i32 i32))) (import "" "future.close-readable" (func $future-close-readable (;0;) (type 0))) ) (type $future-type (;0;) (future u8)) diff --git a/tests/snapshots/local/component-model-async/streams.wast/13.print b/tests/snapshots/local/component-model-async/streams.wast/13.print index 55c45e4b9d..d50386ff54 100644 --- a/tests/snapshots/local/component-model-async/streams.wast/13.print +++ b/tests/snapshots/local/component-model-async/streams.wast/13.print @@ -1,6 +1,6 @@ (component (core module $m (;0;) - (type (;0;) (func (param i32))) + (type (;0;) (func (param i32 i32))) (import "" "stream.close-readable" (func $stream-close-readable (;0;) (type 0))) ) (type $stream-type (;0;) (stream u8))