wasm-bindgen icon indicating copy to clipboard operation
wasm-bindgen copied to clipboard

Library doesn't compile with `default-features=false`

Open survived opened this issue 1 year ago • 2 comments

Describe the Bug

Library doesn't compile without default features.

Steps to Reproduce

Either add wasm-bindgen as dependency to a project:

wasm-bindgen = { version = "0.2", default-features = false }

Or git clone the repo and then do

cargo check --no-default-features

Expected Behavior

Crate is expected to compile with any set of chosen features, including when all features are off.

Actual Behavior

It fails to compile because the code uses std when std feature is disabled.

Compilation error message

error[E0432]: unresolved imports `crate::convert::VectorFromWasmAbi`, `crate::convert::VectorIntoWasmAbi`
  --> src/convert/slices.rs:13:22
   |
13 | use crate::convert::{VectorFromWasmAbi, VectorIntoWasmAbi};
   |                      ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^ no `VectorIntoWasmAbi` in `convert`
   |                      |
   |                      no `VectorFromWasmAbi` in `convert`
   |
help: a similar name exists in the module
   |
13 | use crate::convert::{RefFromWasmAbi, VectorIntoWasmAbi};
   |                      ~~~~~~~~~~~~~~
help: a similar name exists in the module
   |
13 | use crate::convert::{VectorFromWasmAbi, OptionIntoWasmAbi};
   |                                         ~~~~~~~~~~~~~~~~~

error[E0433]: failed to resolve: use of undeclared crate or module `std`
    --> src/lib.rs:1349:23
     |
1349 |             let msg = std::format!(
     |                       ^^^ use of undeclared crate or module `std`

error[E0433]: failed to resolve: use of undeclared crate or module `std`
    --> src/lib.rs:1818:35
     |
1818 |                 crate::throw_str(&std::format!("{:?}", e));
     |                                   ^^^ use of undeclared crate or module `std`

error[E0433]: failed to resolve: use of undeclared crate or module `std`
    --> src/lib.rs:1705:5
     |
1705 |     std::thread_local! {
     |     ^^^ use of undeclared crate or module `std`

error[E0433]: failed to resolve: could not find `externref` in the crate root
    --> src/lib.rs:1702:16
     |
1702 |         crate::externref::link_intrinsics();
     |                ^^^^^^^^^ could not find `externref` in the crate root

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:190:27
    |
190 |               type Anchor = Box<[$t]>;
    |                             ^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:193:54
    |
193 |               unsafe fn ref_from_abi(js: WasmSlice) -> Box<[$t]> {
    |                                                        ^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:194:18
    |
194 |                   <Box<[$t]>>::from_abi(js)
    |                    ^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `WasmMutSlice` in this scope
   --> src/convert/slices.rs:199:24
    |
199 |               type Abi = WasmMutSlice;
    |                          ^^^^^^^^^^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `MutSlice` in this scope
   --> src/convert/slices.rs:200:27
    |
200 |               type Anchor = MutSlice<$t>;
    |                             ^^^^^^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `WasmMutSlice` in this scope
   --> src/convert/slices.rs:203:44
    |
203 |               unsafe fn ref_mut_from_abi(js: WasmMutSlice) -> MutSlice<$t> {
    |                                              ^^^^^^^^^^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `MutSlice` in this scope
   --> src/convert/slices.rs:203:61
    |
203 |               unsafe fn ref_mut_from_abi(js: WasmMutSlice) -> MutSlice<$t> {
    |                                                               ^^^^^^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:204:33
    |
204 |                   let contents = <Box<[$t]>>::from_abi(js.slice);
    |                                   ^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0433]: failed to resolve: use of undeclared type `JsValue`
   --> src/convert/slices.rs:205:26
    |
205 |                   let js = JsValue::from_abi(js.idx);
    |                            ^^^^^^^ use of undeclared type `JsValue`
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider importing this struct
    |
4   + use crate::JsValue;
    |

error[E0422]: cannot find struct, variant or union type `MutSlice` in this scope
   --> src/convert/slices.rs:206:17
    |
206 |                   MutSlice { contents, js }
    |                   ^^^^^^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:212:27
    |
212 |               type Anchor = Box<[$t]>;
    |                             ^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:215:59
    |
215 |               unsafe fn long_ref_from_abi(js: WasmSlice) -> Box<[$t]> {
    |                                                             ^^^ not found in this scope
...
222 | / vectors! {
223 | |     u8 i8 u16 i16 u32 i32 u64 i64 usize isize f32 f64
224 | | }
    | |_- in this macro invocation
    |
    = note: this error originates in the macro `vectors` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:355:19
    |
355 |     type Anchor = Box<str>;
    |                   ^^^ not found in this scope

error[E0433]: failed to resolve: use of undeclared crate or module `mem`
   --> src/convert/slices.rs:359:9
    |
359 |         mem::transmute::<Box<[u8]>, Box<str>>(<Box<[u8]>>::from_abi(js))
    |         ^^^ use of undeclared crate or module `mem`
    |
help: consider importing one of these items
    |
4   + use core::mem;
    |
4   + use crate::mem;
    |

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:359:26
    |
359 |         mem::transmute::<Box<[u8]>, Box<str>>(<Box<[u8]>>::from_abi(js))
    |                          ^^^ not found in this scope

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:359:37
    |
359 |         mem::transmute::<Box<[u8]>, Box<str>>(<Box<[u8]>>::from_abi(js))
    |                                     ^^^ not found in this scope

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:359:48
    |
359 |         mem::transmute::<Box<[u8]>, Box<str>>(<Box<[u8]>>::from_abi(js))
    |                                                ^^^ not found in this scope

error[E0412]: cannot find type `Box` in this scope
   --> src/convert/slices.rs:365:19
    |
365 |     type Anchor = Box<str>;
    |                   ^^^ not found in this scope

error[E0425]: cannot find value `GLOBAL_EXNDATA` in this scope
    --> src/lib.rs:1711:9
     |
1711 |         GLOBAL_EXNDATA.with(|data| {
     |         ^^^^^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `GLOBAL_EXNDATA` in this scope
    --> src/lib.rs:1718:9
     |
1718 |         GLOBAL_EXNDATA.with(|data| {
     |         ^^^^^^^^^^^^^^ not found in this scope

error[E0433]: failed to resolve: use of undeclared crate or module `std`
    --> src/lib.rs:1814:13
     |
1814 |     impl<E: std::fmt::Debug> Main for &mut MainWrapper<Result<(), E>> {
     |             ^^^ use of undeclared crate or module `std`
     |
help: consider importing one of these items
     |
1430 +     use core::fmt;
     |
1430 +     use crate::fmt;
     |
help: if you import `fmt`, refer to it directly
     |
1814 -     impl<E: std::fmt::Debug> Main for &mut MainWrapper<Result<(), E>> {
1814 +     impl<E: fmt::Debug> Main for &mut MainWrapper<Result<(), E>> {
     |

survived avatar May 14 '24 14:05 survived

Yeah, wasm-bindgen's no_std support has been broken for a while: see https://github.com/rustwasm/wasm-bindgen/issues/2689#issuecomment-933526660.

Liamolucko avatar May 16 '24 06:05 Liamolucko

I'm happy to review a PR making the std feature no-op.

daxpedda avatar May 26 '24 16:05 daxpedda

This was fixed in https://github.com/rustwasm/wasm-bindgen/pull/4005.

daxpedda avatar Aug 20 '24 15:08 daxpedda