![]() # Objective Generated `from_reflect` methods use closures in a weird way, e.g.: ```rust x: (|| { <f32 as ::bevy::reflect::FromReflect>::from_reflect( ::bevy::reflect::Struct::field(__ref_struct, "x")?, ) })()?, ``` The reason for this is because when `#[reflect(Default)]` is used, you instead get stuff like this: ```rust if let ::core::option::Option::Some(__field) = (|| { <f32 as ::bevy::reflect::FromReflect>::from_reflect( ::bevy::reflect::Struct::field(__ref_struct, "x")?, ) })() { __this.x = __field; } ``` and the closure is necessary to contain the scope of the `?`. But the first case is more common. Helps with #19873. ## Solution Avoid the closure in the common case. ## Testing I used cargo expand to confirm the closures are no longer produced in the common case. `-Zmacro-stats` output tells me this reduces the size of the `Reflect` code produced for `bevy_ui` by 0.5%. |
||
---|---|---|
.. | ||
src | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT |