@@ -74,13 +74,23 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
7474    let  user_generics = ast. generics . clone ( ) ; 
7575    let  ( user_impl_generics,  user_ty_generics,  user_where_clauses)  = user_generics. split_for_impl ( ) ; 
7676    let  user_generics_with_world = { 
77-         let  mut  generics = ast. generics ; 
77+         let  mut  generics = ast. generics . clone ( ) ; 
7878        generics. params . insert ( 0 ,  parse_quote ! ( ' __w) ) ; 
79-         generics. params . insert ( 0 ,  parse_quote ! ( ' __s) ) ; 
8079        generics
8180    } ; 
8281    let  ( user_impl_generics_with_world,  user_ty_generics_with_world,  user_where_clauses_with_world)  =
8382        user_generics_with_world. split_for_impl ( ) ; 
83+     let  user_generics_with_world_and_state = { 
84+         let  mut  generics = ast. generics ; 
85+         generics. params . insert ( 0 ,  parse_quote ! ( ' __w) ) ; 
86+         generics. params . insert ( 0 ,  parse_quote ! ( ' __s) ) ; 
87+         generics
88+     } ; 
89+     let  ( 
90+         user_impl_generics_with_world_and_state, 
91+         user_ty_generics_with_world_and_state, 
92+         user_where_clauses_with_world_and_state, 
93+     )  = user_generics_with_world_and_state. split_for_impl ( ) ; 
8494
8595    let  struct_name = ast. ident ; 
8696    let  read_only_struct_name = if  attributes. is_mutable  { 
@@ -165,13 +175,13 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
165175        & visibility, 
166176        & item_struct_name, 
167177        & field_types, 
168-         & user_impl_generics_with_world , 
178+         & user_impl_generics_with_world_and_state , 
169179        & field_attrs, 
170180        & field_visibilities, 
171181        & field_idents, 
172182        & user_ty_generics, 
173-         & user_ty_generics_with_world , 
174-         user_where_clauses_with_world , 
183+         & user_ty_generics_with_world_and_state , 
184+         user_where_clauses_with_world_and_state , 
175185    ) ; 
176186    let  mutable_world_query_impl = world_query_impl ( 
177187        & path, 
@@ -200,13 +210,13 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
200210            & visibility, 
201211            & read_only_item_struct_name, 
202212            & read_only_field_types, 
203-             & user_impl_generics_with_world , 
213+             & user_impl_generics_with_world_and_state , 
204214            & field_attrs, 
205215            & field_visibilities, 
206216            & field_idents, 
207217            & user_ty_generics, 
208-             & user_ty_generics_with_world , 
209-             user_where_clauses_with_world , 
218+             & user_ty_generics_with_world_and_state , 
219+             user_where_clauses_with_world_and_state , 
210220        ) ; 
211221        let  readonly_world_query_impl = world_query_impl ( 
212222            & path, 
@@ -257,7 +267,7 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
257267                for  #read_only_struct_name #user_ty_generics #user_where_clauses { 
258268                    const  IS_READ_ONLY :  bool  = true ; 
259269                    type  ReadOnly  = #read_only_struct_name #user_ty_generics; 
260-                     type  Item <' __w,  ' __s> = #read_only_item_struct_name #user_ty_generics_with_world ; 
270+                     type  Item <' __w,  ' __s> = #read_only_item_struct_name #user_ty_generics_with_world_and_state ; 
261271
262272                    fn  shrink<' __wlong:  ' __wshort,  ' __wshort,  ' __s>( 
263273                        item:  Self :: Item <' __wlong,  ' __s>
@@ -280,12 +290,13 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
280290                    /// SAFETY: we call `fetch` for each member that implements `Fetch`. 
281291                     #[ inline( always) ] 
282292                    unsafe  fn  fetch<' __w,  ' __s>( 
283-                         _fetch:  & mut  <Self  as  #path:: query:: WorldQuery >:: Fetch <' __w,  ' __s>, 
293+                         _state:  & ' __s Self :: State , 
294+                         _fetch:  & mut  <Self  as  #path:: query:: WorldQuery >:: Fetch <' __w>, 
284295                        _entity:  #path:: entity:: Entity , 
285296                        _table_row:  #path:: storage:: TableRow , 
286297                    )  -> Self :: Item <' __w,  ' __s> { 
287298                        Self :: Item  { 
288-                             #( #field_idents:  <#read_only_field_types>:: fetch( & mut  _fetch. #named_field_idents,  _entity,  _table_row) , ) * 
299+                             #( #field_idents:  <#read_only_field_types>:: fetch( & _state . #named_field_idents ,   & mut  _fetch. #named_field_idents,  _entity,  _table_row) , ) * 
289300                        } 
290301                    } 
291302                } 
@@ -314,7 +325,7 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
314325            for  #struct_name #user_ty_generics #user_where_clauses { 
315326                const  IS_READ_ONLY :  bool  = #is_read_only; 
316327                type  ReadOnly  = #read_only_struct_name #user_ty_generics; 
317-                 type  Item <' __w,  ' __s> = #item_struct_name #user_ty_generics_with_world ; 
328+                 type  Item <' __w,  ' __s> = #item_struct_name #user_ty_generics_with_world_and_state ; 
318329
319330                fn  shrink<' __wlong:  ' __wshort,  ' __wshort,  ' __s>( 
320331                    item:  Self :: Item <' __wlong,  ' __s>
@@ -337,12 +348,13 @@ pub fn derive_query_data_impl(input: TokenStream) -> TokenStream {
337348                /// SAFETY: we call `fetch` for each member that implements `Fetch`. 
338349                 #[ inline( always) ] 
339350                unsafe  fn  fetch<' __w,  ' __s>( 
340-                     _fetch:  & mut  <Self  as  #path:: query:: WorldQuery >:: Fetch <' __w,  ' __s>, 
351+                     _state:  & ' __s Self :: State , 
352+                     _fetch:  & mut  <Self  as  #path:: query:: WorldQuery >:: Fetch <' __w>, 
341353                    _entity:  #path:: entity:: Entity , 
342354                    _table_row:  #path:: storage:: TableRow , 
343355                )  -> Self :: Item <' __w,  ' __s> { 
344356                    Self :: Item  { 
345-                         #( #field_idents:  <#field_types>:: fetch( & mut  _fetch. #named_field_idents,  _entity,  _table_row) , ) * 
357+                         #( #field_idents:  <#field_types>:: fetch( & _state . #named_field_idents ,   & mut  _fetch. #named_field_idents,  _entity,  _table_row) , ) * 
346358                    } 
347359                } 
348360            } 
0 commit comments