aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/local_resources.rs
blob: 50621c32c0d7981f7b37158e5fa8994864238d98 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use proc_macro2::TokenStream as TokenStream2;
use quote::quote;
use rtic_syntax::ast::App;

use crate::{analyze::Analysis, check::Extra, codegen::util};

/// Generates `local` variables and local resource proxies
///
/// I.e. the `static` variables and theirs proxies.
pub fn codegen(
    app: &App,
    _analysis: &Analysis,
    _extra: &Extra,
) -> (
    // mod_app -- the `static` variables behind the proxies
    Vec<TokenStream2>,
    // mod_resources -- the `resources` module
    TokenStream2,
) {
    let mut mod_app = vec![];
    // let mut mod_resources: _ = vec![];

    // All local resources declared in the `#[local]' struct
    for (name, res) in &app.local_resources {
        let cfgs = &res.cfgs;
        let ty = &res.ty;
        let mangled_name = util::static_local_resource_ident(name);

        let attrs = &res.attrs;
        // late resources in `util::link_section_uninit`
        let section = util::link_section_uninit();

        // For future use
        // let doc = format!(" RTIC internal: {}:{}", file!(), line!());
        mod_app.push(quote!(
            #[allow(non_camel_case_types)]
            #[allow(non_upper_case_globals)]
            // #[doc = #doc]
            #[doc(hidden)]
            #(#attrs)*
            #(#cfgs)*
            #section
            static #mangled_name: rtic::RacyCell<core::mem::MaybeUninit<#ty>> = rtic::RacyCell::new(core::mem::MaybeUninit::uninit());
        ));
    }

    // All declared `local = [NAME: TY = EXPR]` local resources
    for (task_name, resource_name, task_local) in app.declared_local_resources() {
        let cfgs = &task_local.cfgs;
        let ty = &task_local.ty;
        let expr = &task_local.expr;
        let attrs = &task_local.attrs;

        let mangled_name = util::declared_static_local_resource_ident(resource_name, task_name);

        // For future use
        // let doc = format!(" RTIC internal: {}:{}", file!(), line!());
        mod_app.push(quote!(
            #[allow(non_camel_case_types)]
            #[allow(non_upper_case_globals)]
            // #[doc = #doc]
            #[doc(hidden)]
            #(#attrs)*
            #(#cfgs)*
            static #mangled_name: rtic::RacyCell<#ty> = rtic::RacyCell::new(#expr);
        ));
    }

    (mod_app, TokenStream2::new())
}
g/src/api/demo?h=jarred/add-git&showmsg=1'>unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2021-10-16Update js_ast.zigGravatar Jarred Sumner 1-0/+17
2021-10-16Support GitHub repositories, transform package.json to better fit Bun's usageGravatar Jarred Sumner 3-404/+1180
2021-10-16more stringsGravatar Jarred Sumner 2-3/+28
2021-10-16Ensure `self` is always definedGravatar Jarred Sumner 1-0/+1
2021-10-16Fix edgecase in Transfer-Encoding chunkedGravatar Jarred Sumner 1-3/+2
2021-10-15CleanupGravatar Jarred Sumner 5-7/+9
2021-10-15Bump the versionbun-v0.0.35Gravatar Jarred Sumner 2-2/+2
2021-10-15LatestGravatar Jarred Sumner 5-14/+1360
2021-10-15:camera:Gravatar Jarred Sumner 2-2/+4
2021-10-15Fix static libarchive buildGravatar Jarred Sumner 1-2/+5
2021-10-15Bump s2n-tlsGravatar Jarred Sumner 1-0/+0
2021-10-15Linux build fixesGravatar Jarred SUmner 11-1377/+154
2021-10-15Update MakefileGravatar Jarred Sumner 1-1/+2
2021-10-15Cleanup makefile to get libiconv setup for linuxGravatar Jarred Sumner 4-2416/+9
2021-10-15Update MakefileGravatar Jarred Sumner 1-5/+5
2021-10-15Update MakefileGravatar Jarred Sumner 1-1/+1
2021-10-15update makefilejarred/genGravatar Jarred Sumner 3-16/+23
2021-10-15PolishGravatar Jarred Sumner 13-208/+2907
2021-10-14:sparkle:Gravatar Jarred Sumner 11-18245/+296
2021-10-14Update README.mdGravatar Jarred Sumner 1-2/+2
2021-10-14Update README.mdGravatar Jarred Sumner 1-2/+9
2021-10-14Update README.mdGravatar Jarred Sumner 1-9/+8
2021-10-14Update README.mdGravatar Jarred Sumner 1-0/+3
2021-10-14Update README.mdGravatar Jarred Sumner 1-1/+2
2021-10-14Update README.mdGravatar Jarred Sumner 1-107/+107
2021-10-14Support local templatesGravatar Jarred Sumner 8-145/+558
2021-10-14Update router.zigGravatar Jarred Sumner 1-0/+212
2021-10-14Support passing an absolute pathGravatar Jarred Sumner 4-171/+313
2021-10-14Update bun-create.mdGravatar Jarred Sumner 1-2/+6
2021-10-14Update bun-create.mdGravatar Jarred Sumner 1-1/+1
2021-10-14Add doc explaining bun-createGravatar Jarred Sumner 3-3/+60
2021-10-14`bun create react app` is almost doneGravatar Jarred Sumner 27-57/+1561
2021-10-13v0.0.0v0.0.0Gravatar Jarred Sumner 1-1/+2
2021-10-13[fetch] Slight perf improvementGravatar Jarred Sumner 1-0/+4
2021-10-13`--turbo` mode for fetch cli, which disables sending TLS shutdownGravatar Jarred Sumner 2-2/+5
2021-10-13[fetch] Support Transfer-Encoding: chunkedGravatar Jarred Sumner 5-39/+135
2021-10-13Update build.zigGravatar Jarred Sumner 1-2/+3
2021-10-13Clean up examples a littleGravatar Jarred Sumner 42-102/+7
2021-10-13Add TLS 1.3 support, improve fetch() HTTPS performanceGravatar Jarred Sumner 16-287/+751