use proc_macro2::TokenStream as TokenStream2; use quote::quote; use rtfm_syntax::{ast::App, Context}; use crate::{analyze::Analysis, codegen::util}; pub fn codegen( ctxt: Context, priority: u8, needs_lt: &mut bool, app: &App, analysis: &Analysis, ) -> (TokenStream2, TokenStream2) { let mut lt = None; let resources = match ctxt { Context::Init(core) => &app.inits[&core].args.resources, Context::Idle(core) => &app.idles[&core].args.resources, Context::HardwareTask(name) => &app.hardware_tasks[name].args.resources, Context::SoftwareTask(name) => &app.software_tasks[name].args.resources, }; let mut fields = vec![]; let mut values = vec![]; let mut has_cfgs = false; for (name, access) in resources { let (res, expr) = app.resource(name).expect("UNREACHABLE"); let cfgs = &res.cfgs; has_cfgs |= !cfgs.is_empty(); let mut_ = if access.is_exclusive() { Some(quote!(mut)) } else { None }; let ty = &res.ty; if ctxt.is_init() { if !analysis.ownerships.contains_key(name) { // owned by `init` fields.push(quote!( #(#cfgs)* pub #name: &'static #mut_ #ty )); values.push(quote!( #(#cfgs)* #name: &#mut_ #name )); } else { // owned by someone else lt = Some(quote!('a)); fields.push(quote!( #(#cfgs)* pub #name: &'a mut #ty )); values.push(quote!( #(#cfgs)* #name: &mut #name )); } } else { let ownership = &analysis.ownerships[name]; if ownership.needs_lock(priority) { if mut_.is_none() { lt = Some(quote!('a)); fields.push(quote!( #(#cfgs)* pub #name: &'a #ty )); } else { // resource proxy lt = Some(quote!('a)); fields.push(quote!( #(#cfgs)* pub #name: resources::#name<'a> )); values.push(quote!( #(#cfgs)* #name: resources::#name::new(priority) )); continue; } } else { let lt = if ctxt.runs_once() { quote!('static) } else { lt = Some(quote!('a)); quote!('a) }; if ownership.is_owned() || mut_.is_none() { fields.push(quote!( #(#cfgs)* pub #name: &#lt #mut_ #ty )); } else { fields.push(quote!( #(#cfgs)* pub #name: &#lt mut #ty )); } } let is_late = expr.is_none(); if is_late { let expr = if mut_.is_some() { quote!(&mut *#name.as_mut_ptr()) } else { quote!(&*#name.as_ptr()) }; values.push(quote!( #(#cfgs)* #name: #expr )); } else { values.push(quote!( #(#cfgs)* #name: &#mut_ #name )); } } } if lt.is_some() { *needs_lt = true; // the struct could end up empty due to `cfg`s leading to an error due to `'a` being unused if has_cfgs { fields.push(quote!( #[doc(hidden)] pub __marker__: core::marker::PhantomData<&'a ()> )); values.push(quote!(__marker__: core::marker::PhantomData)) } } let core = ctxt.core(app); let cores = app.args.cores; let cfg_core = util::cfg_core(core, cores); let doc = format!("Resources `{}` has access to", ctxt.ident(app)); let ident = util::resources_ident(ctxt, app); let item = quote!( #cfg_core #[allow(non_snake_case)] #[doc = #doc] pub struct #ident<#lt> { #(#fields,)* } ); let arg = if ctxt.is_init() { None } else { Some(quote!(priority: &#lt rtfm::export::Priority)) }; let constructor = quote!( #cfg_core impl<#lt> #ident<#lt> { #[inline(always)] unsafe fn new(#arg) -> Self { #ident { #(#values,)* } } } ); (item, constructor) } 'examples/with-tailwindcss'>examples/with-tailwindcss Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/packages/astro/test/fixtures/virtual-astro-file/astro.config.mjs (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2025-03-31feat(cloudflare): add KV session storage support (#13514)Gravatar Matt Kane 19-487/+490
2025-03-31fix(deps): update astro client runtimes (#13522)Gravatar renovate[bot] 4-6/+7
2025-03-27fix(deps): update astro dependencies (#13498)Gravatar renovate[bot] 47-412/+427
2025-03-27[ci] formatGravatar Emanuele Stoppa 3-8/+7
2025-03-27refactor(actions): use `Omit` to avoid leaking types to shared context (#13429)Gravatar Emanuele Stoppa 5-11/+41
2025-03-26[ci] release (#13504)astro@5.5.5@astrojs/vue@5.0.8@astrojs/tailwind@6.0.2@astrojs/svelte@7.0.8@astrojs/studio@0.1.5@astrojs/solid-js@5.0.6@astrojs/react@4.2.2@astrojs/preact@4.0.7@astrojs/netlify@6.2.4@astrojs/mdx@4.2.2@astrojs/markdoc@0.13.2@astrojs/db@0.14.9@astrojs/cloudflare@12.3.1@astrojs/alpinejs@0.4.4Gravatar Houston (Bot) 56-132/+197
2025-03-26[ci] formatGravatar Florian Lefebvre 2-2/+2
2025-03-26fix(astro): dynamically import actions (#13510)Gravatar Florian Lefebvre 12-51/+96
2025-03-26[ci] formatGravatar Matt Kane 2-2/+2
2025-03-26fix: cache raw cookie value and decode when getting (#13485)Gravatar Matt Kane 3-17/+37
2025-03-25fix: update vite (#13505)Gravatar Emanuele Stoppa 16-104/+123
2025-03-24[ci] formatGravatar Emanuele Stoppa 1-1/+1
2025-03-24fix(app): call renderer when routes don't match (#13483)Gravatar Emanuele Stoppa 4-1/+30
2025-03-21[ci] release (#13460)astro@5.5.4@astrojs/vercel@8.1.3@astrojs/tailwind@6.0.1@astrojs/svelte@7.0.7@astrojs/preact@4.0.6@astrojs/cloudflare@12.3.0Gravatar Houston (Bot) 45-118/+119
2025-03-21fix: better error handling on Stackblitz (#13484)Gravatar Matt Kane 2-0/+12
2025-03-21Repair server islands to work with client router (#13481)Gravatar Martin Trapp 2-6/+11
2025-03-21fix: generate correct external redirects (#13480)Gravatar Matt Kane 3-4/+21
2025-03-21fix(deps): update all non-major dependencies (#13440)Gravatar renovate[bot] 24-435/+436
2025-03-21[ci] formatGravatar Florian Lefebvre 2-2/+2
2025-03-21feat(cloudflare): global env (#13444)Gravatar Florian Lefebvre 6-47/+130
2025-03-21fix(deps): update astro client runtimes (#13474)Gravatar renovate[bot] 7-345/+348
2025-03-20Small change to linking style (#13472)Gravatar Chris Swithinbank 1-1/+1
2025-03-20Add deprecation notice to Tailwind integration README (#13471)Gravatar Chris Swithinbank 2-6/+11
2025-03-20[ci] formatGravatar Matt Kane 2-2/+1
2025-03-20fix(preact,svelte): empty target container before rendering `client:only` isl...Gravatar Matt Kane 5-5/+41
2025-03-20chore(renovate): group updates (#13466)Gravatar Emanuele Stoppa 1-11/+58
2025-03-19[ci] formatGravatar Matt Kane 1-3/+2
2025-03-19fix: don't attempt to move files after build with base (#13463)Gravatar Matt Kane 8-13/+66
2025-03-19[ci] formatGravatar Emanuele Stoppa 2-6/+18
2025-03-19fix(routing): don't add site to static redirects (#13447)Gravatar Emanuele Stoppa 7-10/+49
2025-03-18[ci] formatGravatar Matt Kane 2-2/+1
2025-03-18fix: set correct statusText for custom error pages (#13457)Gravatar Matt Kane 4-2/+19
2025-03-18chore(deps): update github-actions (#13459)Gravatar renovate[bot] 9-13/+13
2025-03-18chore(deps): update github-actions (#13458)Gravatar renovate[bot] 1-5/+5
2025-03-18[ci] formatGravatar Emanuele Stoppa 1-1/+3
2025-03-18chore: remove deprecated package (#13455)Gravatar Emanuele Stoppa 3-23/+16
2025-03-18fix(deps): update dependency miniflare to v4 (#13441)Gravatar renovate[bot] 2-31/+31