Skip to content
This repository has been archived by the owner on Apr 18, 2022. It is now read-only.

Commit

Permalink
Fixed tuple index in EventReader proc macro generation.
Browse files Browse the repository at this point in the history
  • Loading branch information
azriel91 committed Apr 4, 2019
1 parent ba8ab48 commit 8ecf8d0
Showing 1 changed file with 18 additions and 8 deletions.
26 changes: 18 additions & 8 deletions amethyst_derive/src/event_reader.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use proc_macro2::TokenStream;
use proc_macro2::{Literal, TokenStream};
use quote::quote;
use syn::{Data, DeriveInput, Ident, Meta, NestedMeta, Type};

Expand Down Expand Up @@ -52,17 +52,27 @@ pub enum SomeEvent {{
let names = collect_variant_names(&ast.data);
let names = &names;

let reads : Vec<_> = (0..tys.len()).map(|n| {
let variant = &names[n];
quote! {
events.extend(data.#n.read(self.#n.as_mut().expect("ReaderId undefined, has setup been run?")).cloned().map(#event_name::#variant));
}
}).collect();
let reads: Vec<_> = (0..tys.len())
.map(|n| {
let variant = &names[n];
let tuple_index = Literal::usize_unsuffixed(n);
quote! {
events.extend(
data.#tuple_index.read(
self.#tuple_index
.as_mut()
.expect("ReaderId undefined, has setup been run?"))
.cloned()
.map(#event_name::#variant));
}
})
.collect();
let setups: Vec<_> = (0..tys.len())
.map(|n| {
let ty = &tys[n];
let tuple_index = Literal::usize_unsuffixed(n);
quote! {
self.#n = Some(res.fetch_mut::<EventChannel<#ty>>().register_reader());
self.#tuple_index = Some(res.fetch_mut::<EventChannel<#ty>>().register_reader());
}
})
.collect();
Expand Down

0 comments on commit 8ecf8d0

Please sign in to comment.