Replace UnsafeCell<World> usage with UnsafeWorldCell in CombinatorSystem (#14706)

# Objective

Replace usage of `UnsafeCell<World>` with our standard `UnsafeWorldCell`
that seemed to have been missed.

## Solution

Do just that.
This commit is contained in:
Christian Hughes 2024-08-11 08:58:10 -05:00 committed by GitHub
parent 91fa4bb649
commit 7f658cabf7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,6 +1,4 @@
use std::{borrow::Cow, cell::UnsafeCell, marker::PhantomData};
use bevy_ptr::UnsafeCellDeref;
use std::{borrow::Cow, marker::PhantomData};
use crate::{
archetype::ArchetypeComponentId,
@ -182,18 +180,16 @@ where
)
}
fn run<'w>(&mut self, input: Self::In, world: &'w mut World) -> Self::Out {
// SAFETY: Converting `&mut T` -> `&UnsafeCell<T>`
// is explicitly allowed in the docs for `UnsafeCell`.
let world: &'w UnsafeCell<World> = unsafe { std::mem::transmute(world) };
fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out {
let world = world.as_unsafe_world_cell();
Func::combine(
input,
// SAFETY: Since these closures are `!Send + !Sync + !'static`, they can never
// be called in parallel. Since mutable access to `world` only exists within
// the scope of either closure, we can be sure they will never alias one another.
|input| self.a.run(input, unsafe { world.deref_mut() }),
|input| self.a.run(input, unsafe { world.world_mut() }),
#[allow(clippy::undocumented_unsafe_blocks)]
|input| self.b.run(input, unsafe { world.deref_mut() }),
|input| self.b.run(input, unsafe { world.world_mut() }),
)
}