use proc_macro2::TokenStream as TokenStream2; use quote::quote; use rtic_syntax::{ ast::{App, TaskLocal}, Context, }; use crate::codegen::util; /// Generates local resources structs pub fn codegen(ctxt: Context, needs_lt: &mut bool, app: &App) -> (TokenStream2, TokenStream2) { let mut lt = None; let resources = match ctxt { Context::Init => &app.init.args.local_resources, Context::Idle => &app.idle.as_ref().unwrap().args.local_resources, Context::HardwareTask(name) => &app.hardware_tasks[name].args.local_resources, Context::SoftwareTask(name) => &app.software_tasks[name].args.local_resources, }; let task_name = util::get_task_name(ctxt, app); let mut fields = vec![]; let mut values = vec![]; let mut has_cfgs = false; for (name, task_local) in resources { let (cfgs, ty, is_declared) = match task_local { TaskLocal::External => { let r = app.local_resources.get(name).expect("UNREACHABLE"); (&r.cfgs, &r.ty, false) } TaskLocal::Declared(r) => (&r.cfgs, &r.ty, true), _ => unreachable!(), }; has_cfgs |= !cfgs.is_empty(); let lt = if ctxt.runs_once() { quote!('static) } else { lt = Some(quote!('a)); quote!('a) }; let mangled_name = if matches!(task_local, TaskLocal::External) { util::mark_internal_ident(&util::static_local_resource_ident(name)) } else { util::mark_internal_ident(&util::declared_static_local_resource_ident( name, &task_name, )) }; fields.push(quote!( #(#cfgs)* pub #name: &#lt mut #ty )); let expr = if is_declared { // If the local resources is already initialized, we only need to access its value and // not go through an `MaybeUninit` quote!(#mangled_name.get_mut_unchecked()) } else { quote!(&mut *#mangled_name.get_mut_unchecked().as_mut_ptr()) }; values.push(quote!( #(#cfgs)* #name: #expr )); } 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 doc = format!("Local resources `{}` has access to", ctxt.ident(app)); let ident = util::local_resources_ident(ctxt, app); let ident = util::mark_internal_ident(&ident); let item = quote!( #[allow(non_snake_case)] #[doc = #doc] pub struct #ident<#lt> { #(#fields,)* } ); let constructor = quote!( impl<#lt> #ident<#lt> { #[inline(always)] pub unsafe fn new() -> Self { #ident { #(#values,)* } } } ); (item, constructor) } ='derrick/fix/node-tests'>derrick/fix/node-tests Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/src/napi (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-10-18Adds macOS Keychain certs to default CA storeGravatar Anshul Gupta 2-2/+175
2023-10-18fix(node:buffer): fix the behavior of `totalLength` in `Buffer.concat` (#6574)Gravatar Ai Hoshino 2-3/+23
2023-10-18fix: change `--no-scripts` to `--ignore-scripts` (#6587)Gravatar Dawid Sowa 1-2/+2
2023-10-18fix: online docs moved (#6579)Gravatar Mountain/\Ash 1-1/+1
2023-10-18Fix minimum kernel version in docs (#6153)Gravatar Kevin Latka 1-1/+1
2023-10-18build-id++Gravatar Dylan Conway 1-1/+1
2023-10-18fix(web): stub `performance.getEntriesByName` (#6542)Gravatar Liz 1-0/+18
2023-10-17update root package variableGravatar Dylan Conway 1-8/+3
2023-10-17Fix missing `{port: 0}` causing flaky testGravatar Ashcon Partovi 1-0/+2
2023-10-17test changes in usockets in ciGravatar Dylan Conway 5-0/+9
2023-10-17fix #4766 (#6563)Gravatar Pierre CM 1-4/+4
2023-10-17Update ZigGeneratedClasses.cppGravatar Dylan Conway 1-2/+0
2023-10-17use npm alias in dependencies (#6545)Gravatar Dylan Conway 7-29/+271
2023-10-17fix(node:http): fix `server.address()` (#6442)Gravatar Ai Hoshino 12-12/+453
2023-10-17docs: fix ws.publish (#6558)Gravatar Aral Roca Gomez 1-1/+1
2023-10-17perf(bun-types): remove needless some call (#6550)Gravatar Mikhail 1-1/+1
2023-10-16fix(runtime): make some things more stable (partial jsc debug build) (#5881)Gravatar dave caruso 116-1446/+1830
2023-10-16fix(runtime): improve IPC reliability + organization pass on that code (#6475)Gravatar dave caruso 15-98/+266
2023-10-16Simplify getting Set of extentions (#4975)Gravatar Mikhail 1-3/+3
2023-10-16Fix formattingGravatar Ashcon Partovi 1-3/+1
2023-10-16fix(test): when tests run with --only the nested describe blocks `.on… (#5616)Gravatar Igor Shapiro 2-13/+45
2023-10-16perf(node:events): optimize `emit(...)` function (#5485)Gravatar Yannik Schröder 3-11/+132
2023-10-16fix: don't remove content-encoding header from header table (#5743)Gravatar Liz 2-2/+25
2023-10-16fix(sqlite) Insert .all() does not return an array #5872 (#5946)Gravatar Hugo Galan 2-7/+11
2023-10-16Fix formattingGravatar Ashcon Partovi 2-5/+4
2023-10-16Fix `Response.statusText` (#6151)Gravatar Chris Toshok 10-238/+269
2023-10-16fix-subprocess-argument-missing (#6407)Gravatar Nicolae-Rares Ailincai 4-2/+40
2023-10-16Add type parameter to `expect` (#6128)Gravatar Voldemat 1-3/+3
2023-10-16fix(node:worker_threads): ensure threadId property is exposed on worker_threa...Gravatar Jérôme Benoit 6-15/+75
2023-10-16Fix use before define bug in sqliteGravatar Ashcon Partovi 2-5/+5
2023-10-16fix(jest): fix toStrictEqual on same URLs (#6528)Gravatar João Alisson 2-13/+16
2023-10-16Fix `toHaveBeenCalled` having wrong error signatureGravatar Ashcon Partovi 1-2/+2
2023-10-16Fix formattingGravatar Ashcon Partovi 1-2/+1
2023-10-16Add `reusePort` to `Bun.serve` typesGravatar Ashcon Partovi 1-0/+9
2023-10-16Fix `request.url` having incorrect portGravatar Ashcon Partovi 4-1/+92
2023-10-16Remove uWebSockets header from Bun.serve responsesGravatar Ashcon Partovi 1-6/+6
2023-10-16Rename some testsGravatar Ashcon Partovi 3-0/+0
2023-10-16Fix #6467Gravatar Ashcon Partovi 2-3/+10
2023-10-16Update InternalModuleRegistryConstants.hGravatar Dylan Conway 1-3/+3
2023-10-16Development -> Contributing (#6538)Gravatar Colin McDonnell 2-1/+1
2023-10-14fix(net/tls) fix pg hang on end + hanging on query (#6487)Gravatar Ciro Spaciari 3-8/+36
2023-10-13fix installing dependencies that match workspace versions (#6494)Gravatar Dylan Conway 4-2/+64
2023-10-13fix lockfile struct padding (#6495)Gravatar Dylan Conway 3-3/+18