Fix compilation on WASM

Fixes #9214.
Fixes #9210.
This commit is contained in:
Florian Diebold 2021-06-22 21:51:57 +02:00
parent 9b29573a4b
commit c61fee6d55
3 changed files with 28 additions and 3 deletions

View file

@ -66,6 +66,9 @@ jobs:
env: env:
targets: "powerpc-unknown-linux-gnu x86_64-unknown-linux-musl" targets: "powerpc-unknown-linux-gnu x86_64-unknown-linux-musl"
# The rust-analyzer binary is not expected to compile on WASM, but the IDE
# crate should
targets_ide: "wasm32-unknown-unknown"
steps: steps:
- name: Checkout repository - name: Checkout repository
@ -79,7 +82,7 @@ jobs:
override: true override: true
- name: Install Rust targets - name: Install Rust targets
run: rustup target add ${{ env.targets }} run: rustup target add ${{ env.targets }} ${{ env.targets_ide }}
- name: Cache Dependencies - name: Cache Dependencies
uses: Swatinem/rust-cache@ce325b60658c1b38465c06cc965b79baf32c1e72 uses: Swatinem/rust-cache@ce325b60658c1b38465c06cc965b79baf32c1e72
@ -89,6 +92,9 @@ jobs:
for target in ${{ env.targets }}; do for target in ${{ env.targets }}; do
cargo check --target=$target --all-targets cargo check --target=$target --all-targets
done done
for target in ${{ env.targets_ide }}; do
cargo check -p ide --target=$target --all-targets
done
typescript: typescript:
name: TypeScript name: TypeScript

View file

@ -110,7 +110,7 @@ pub fn defer<F: FnOnce()>(f: F) -> impl Drop {
D(Some(f)) D(Some(f))
} }
#[repr(transparent)] #[cfg_attr(not(target_arch = "wasm32"), repr(transparent))]
pub struct JodChild(pub std::process::Child); pub struct JodChild(pub std::process::Child);
impl ops::Deref for JodChild { impl ops::Deref for JodChild {
@ -135,7 +135,10 @@ impl Drop for JodChild {
impl JodChild { impl JodChild {
pub fn into_inner(self) -> std::process::Child { pub fn into_inner(self) -> std::process::Child {
// SAFETY: repr transparent if cfg!(target_arch = "wasm32") {
panic!("no processes on wasm");
}
// SAFETY: repr transparent, except on WASM
unsafe { std::mem::transmute::<JodChild, std::process::Child>(self) } unsafe { std::mem::transmute::<JodChild, std::process::Child>(self) }
} }
} }

View file

@ -236,3 +236,19 @@ mod imp {
slice::from_raw_parts_mut(v.as_mut_ptr().add(v.len()), v.capacity() - v.len()) slice::from_raw_parts_mut(v.as_mut_ptr().add(v.len()), v.capacity() - v.len())
} }
} }
#[cfg(target_arch = "wasm32")]
mod imp {
use std::{
io,
process::{ChildStderr, ChildStdout},
};
pub(crate) fn read2(
_out_pipe: ChildStdout,
_err_pipe: ChildStderr,
_data: &mut dyn FnMut(bool, &mut Vec<u8>, bool),
) -> io::Result<()> {
panic!("no processes on wasm")
}
}