diff --git a/CHANGELOG.md b/CHANGELOG.md index cb435f8dd9e..3185009da14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,11 @@ It was also automatically changed for `IdbFileHandle`, which is deprecated. [#3537](https://github.com/rustwasm/wasm-bindgen/pull/3537) +* Changed behavior when compiling to `wasm32-wasi` to match `wasm32-emscripten` and + non-WASM targets, generating a stub that panics when called rather than a wasm- + bindgen placeholder. + [#3233](https://github.com/rustwasm/wasm-bindgen/pull/3233) + ### Fixed * Fixed bindings and comments for `Atomics.wait`. diff --git a/crates/backend/src/codegen.rs b/crates/backend/src/codegen.rs index a43fbf9405e..08e6c31869c 100644 --- a/crates/backend/src/codegen.rs +++ b/crates/backend/src/codegen.rs @@ -221,12 +221,12 @@ impl ToTokens for ast::Struct { let ptr = #wasm_bindgen::convert::IntoWasmAbi::into_abi(value); #[link(wasm_import_module = "__wbindgen_placeholder__")] - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] extern "C" { fn #new_fn(ptr: u32) -> u32; } - #[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))] + #[cfg(not(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))))] unsafe fn #new_fn(_: u32) -> u32 { panic!("cannot convert to JsValue outside of the wasm target") } @@ -238,7 +238,7 @@ impl ToTokens for ast::Struct { } } - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] #[automatically_derived] const _: () = { #[no_mangle] @@ -327,7 +327,7 @@ impl ToTokens for ast::StructField { (quote! { #[automatically_derived] const _: () = { - #[cfg_attr(all(target_arch = "wasm32", not(target_os = "emscripten")), no_mangle)] + #[cfg_attr(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))), no_mangle)] #[doc(hidden)] pub unsafe extern "C" fn #getter(js: u32) -> <#ty as #wasm_bindgen::convert::IntoWasmAbi>::Abi @@ -362,7 +362,7 @@ impl ToTokens for ast::StructField { } (quote! { - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] #[automatically_derived] const _: () = { #[no_mangle] @@ -590,7 +590,7 @@ impl TryToTokens for ast::Export { const _: () = { #(#attrs)* #[cfg_attr( - all(target_arch = "wasm32", not(target_os = "emscripten")), + all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))), export_name = #export_name, )] pub unsafe extern "C" fn #generated_name(#(#args),*) -> #projection::Abi { @@ -840,11 +840,11 @@ impl ToTokens for ast::ImportType { impl JsCast for #rust_name { fn instanceof(val: &JsValue) -> bool { #[link(wasm_import_module = "__wbindgen_placeholder__")] - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] extern "C" { fn #instanceof_shim(val: u32) -> u32; } - #[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))] + #[cfg(not(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))))] unsafe fn #instanceof_shim(_: u32) -> u32 { panic!("cannot check instanceof on non-wasm targets"); } @@ -1355,12 +1355,13 @@ impl ToTokens for ast::ImportStatic { #vis static #name: #wasm_bindgen::JsStatic<#ty> = { fn init() -> #ty { #[link(wasm_import_module = "__wbindgen_placeholder__")] - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] extern "C" { fn #shim_name() -> <#ty as #wasm_bindgen::convert::FromWasmAbi>::Abi; } - #[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))] - unsafe fn #shim_name() -> <#ty as #wasm_bindgen::convert::FromWasmAbi>::Abi { + + #[cfg(not(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))))] + unsafe fn #shim_name() -> <#ty as wasm_bindgen::convert::FromWasmAbi>::Abi { panic!("cannot access imported statics on non-wasm targets") } @@ -1424,7 +1425,7 @@ impl<'a, T: ToTokens> ToTokens for Descriptor<'a, T> { let attrs = &self.attrs; let wasm_bindgen = &self.wasm_bindgen; (quote! { - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] #[automatically_derived] const _: () = { #(#attrs)* @@ -1450,14 +1451,14 @@ fn extern_fn( abi_ret: TokenStream, ) -> TokenStream { quote! { - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] #(#attrs)* #[link(wasm_import_module = "__wbindgen_placeholder__")] extern "C" { fn #import_name(#(#abi_arguments),*) -> #abi_ret; } - #[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))] + #[cfg(not(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))))] unsafe fn #import_name(#(#abi_arguments),*) -> #abi_ret { #( drop(#abi_argument_names); diff --git a/src/lib.rs b/src/lib.rs index fd2feae6f29..1df9cd92b0d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -28,14 +28,14 @@ macro_rules! if_std { macro_rules! externs { ($(#[$attr:meta])* extern "C" { $(fn $name:ident($($args:tt)*) -> $ret:ty;)* }) => ( - #[cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))] + #[cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))] $(#[$attr])* extern "C" { $(fn $name($($args)*) -> $ret;)* } $( - #[cfg(not(all(target_arch = "wasm32", not(target_os = "emscripten"))))] + #[cfg(not(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))))] #[allow(unused_variables)] unsafe extern fn $name($($args)*) -> $ret { panic!("function not implemented on non-wasm32 targets") @@ -1324,7 +1324,10 @@ pub trait UnwrapThrowExt: Sized { impl UnwrapThrowExt for Option { #[cfg_attr(debug_assertions, track_caller)] fn expect_throw(self, message: &str) -> T { - if cfg!(all(target_arch = "wasm32", not(target_os = "emscripten"))) { + if cfg!(all( + target_arch = "wasm32", + not(any(target_os = "emscripten", target_os = "wasi")) + )) { match self { Some(val) => val, None => throw_str(message), @@ -1341,7 +1344,10 @@ where { #[cfg_attr(debug_assertions, track_caller)] fn expect_throw(self, message: &str) -> T { - if cfg!(all(target_arch = "wasm32", not(target_os = "emscripten"))) { + if cfg!(all( + target_arch = "wasm32", + not(any(target_os = "emscripten", target_os = "wasi")) + )) { match self { Ok(val) => val, Err(_) => throw_str(message),