Skip to content

Commit

Permalink
Cleanup generated code with a shim
Browse files Browse the repository at this point in the history
  • Loading branch information
james7132 committed Mar 9, 2024
1 parent 4558439 commit 5aa2fa9
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 21 deletions.
22 changes: 2 additions & 20 deletions crates/bevy_ecs/macros/src/component.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,7 @@ pub fn derive_resource(input: TokenStream) -> TokenStream {
register_type = Some(quote! {
#[doc(hidden)]
fn __register_type(registry: &#bevy_ecs_path::private::bevy_reflect::TypeRegistryArc) {
if let Ok(mut registry) = registry.internal.try_write() {
registry.register::<Self>();
return;
}
if let Ok(registry) = registry.internal.try_read() {
if registry.contains(::core::any::TypeId::of::<Self>()) {
return;
}
}
panic!("Deadlock while registering <{}>.", ::std::any::type_name::<Self>());
#bevy_ecs_path::private::bevy_reflect::register_type_shim::<Self>(registry);
}
});
}
Expand Down Expand Up @@ -85,16 +76,7 @@ pub fn derive_component(input: TokenStream) -> TokenStream {
register_type = Some(quote! {
#[doc(hidden)]
fn __register_type(registry: &#bevy_ecs_path::private::bevy_reflect::TypeRegistryArc) {
if let Ok(mut registry) = registry.internal.try_write() {
registry.register::<Self>();
return;
}
if let Ok(registry) = registry.internal.try_read() {
if registry.contains(::core::any::TypeId::of::<Self>()) {
return;
}
}
panic!("Deadlock while registering <{}>.", ::std::any::type_name::<Self>());
#bevy_ecs_path::private::bevy_reflect::register_type_shim::<Self>(registry);
}
});
}
Expand Down
1 change: 1 addition & 0 deletions crates/bevy_ecs/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ pub mod prelude {
#[doc(hidden)]
pub mod private {
pub mod bevy_reflect {
pub use crate::reflect::register_type_shim;
pub use bevy_reflect::TypeRegistryArc;
}
}
Expand Down
19 changes: 18 additions & 1 deletion crates/bevy_ecs/src/reflect/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::{
system::Resource,
world::{FromWorld, World},
};
use bevy_reflect::{FromReflect, Reflect, TypeRegistry, TypeRegistryArc};
use bevy_reflect::{FromReflect, GetTypeRegistration, Reflect, TypeRegistry, TypeRegistryArc};

mod bundle;
mod component;
Expand All @@ -24,6 +24,23 @@ pub use from_world::{ReflectFromWorld, ReflectFromWorldFns};
pub use map_entities::ReflectMapEntities;
pub use resource::{ReflectResource, ReflectResourceFns};

#[doc(hidden)]
pub fn register_type_shim<T: GetTypeRegistration>(registry: &TypeRegistryArc) {
if let Ok(mut registry) = registry.internal.try_write() {
registry.register::<T>();
return;
}
if let Ok(registry) = registry.internal.try_read() {
if registry.contains(::core::any::TypeId::of::<T>()) {
return;
}
}
panic!(
"Deadlock while registering <{}>.",
::std::any::type_name::<T>()
);
}

/// A [`Resource`] storing [`TypeRegistry`] for
/// type registrations relevant to a whole app.
#[derive(Resource, Clone)]
Expand Down

0 comments on commit 5aa2fa9

Please sign in to comment.