Merge branch 'master' into spawn_experiment

This commit is contained in:
Emil Fresk 2020-10-08 17:33:42 +02:00
commit c83b15b643
51 changed files with 649 additions and 467 deletions

View file

@ -36,47 +36,38 @@ pub fn codegen(
let mut root_init = vec![];
let mut user_init_imports = vec![];
let late_fields = analysis
.late_resources
.iter()
.flat_map(|resources| {
resources.iter().map(|name| {
let ty = &app.late_resources[name].ty;
let cfgs = &app.late_resources[name].cfgs;
let ret = {
let late_fields = analysis
.late_resources
.iter()
.flat_map(|resources| {
resources.iter().map(|name| {
let ty = &app.late_resources[name].ty;
let cfgs = &app.late_resources[name].cfgs;
quote!(
quote!(
#(#cfgs)*
pub #name: #ty
)
})
)
})
.collect::<Vec<_>>();
})
.collect::<Vec<_>>();
if !late_fields.is_empty() {
let late_resources = util::late_resources_ident(&name);
let mut user_init_imports = vec![];
let late_resources = util::late_resources_ident(&name);
root_init.push(quote!(
/// Resources initialized at runtime
#[allow(non_snake_case)]
pub struct #late_resources {
#(#late_fields),*
}
));
let name_late = format_ident!("{}LateResources", name);
user_init_imports.push(quote!(
#[allow(non_snake_case)]
use super::#name_late;
));
Some(quote!(-> #name::LateResources))
} else {
None
root_init.push(quote!(
/// Resources initialized at runtime
#[allow(non_snake_case)]
pub struct #late_resources {
#(#late_fields),*
}
};
));
let name_late = format_ident!("{}LateResources", name);
user_init_imports.push(quote!(
#[allow(non_snake_case)]
use super::#name_late;
));
let mut locals_pat = None;
let mut locals_new = None;
@ -95,7 +86,7 @@ pub fn codegen(
let user_init = Some(quote!(
#(#attrs)*
#[allow(non_snake_case)]
fn #name(#(#locals_pat,)* #context: #name::Context) #ret {
fn #name(#(#locals_pat,)* #context: #name::Context) -> #name::LateResources {
#(#stmts)*
}
));

View file

@ -267,14 +267,12 @@ pub fn codegen(
if let Context::Init = ctxt {
let init = &app.inits.first().unwrap();
if init.returns_late_resources {
let late_resources = util::late_resources_ident(&init.name);
let late_resources = util::late_resources_ident(&init.name);
items.push(quote!(
#[doc(inline)]
pub use super::#late_resources as LateResources;
));
}
items.push(quote!(
#[doc(inline)]
pub use super::#late_resources as LateResources;
));
}
let doc = match ctxt {

View file

@ -35,8 +35,7 @@ mod tests;
///
/// The items allowed in the module block are specified below:
///
/// # 1. `#[resources]
/// struct <resource-name>`
/// # 1. `#[resources] struct <resource-name>`
///
/// This structure contains the declaration of all the resources used by the application. Each field
/// in this structure corresponds to a different resource. Each resource may optionally be given an