Skip to content

Commit fbddbe1

Browse files
committed
Factor out stateless stuff from startup function.
1 parent f1ba271 commit fbddbe1

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

crates/macros/src/startup_function.rs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,18 @@ struct StartupArgs {
1414
before: bool,
1515
}
1616

17-
pub fn parser(args: Option<AttributeArgs>, input: ItemFn) -> Result<TokenStream> {
18-
let args = if let Some(args) = args {
19-
StartupArgs::from_list(&args)
20-
.map_err(|e| anyhow!("Unable to parse attribute arguments: {:?}", e))?
21-
} else {
22-
StartupArgs::default()
23-
};
24-
17+
fn prepare(
18+
args: StartupArgs,
19+
input: ItemFn,
20+
classes: &HashMap<String, Class>,
21+
constants: &[Constant],
22+
) -> Result<TokenStream> {
2523
let ItemFn { sig, block, .. } = input;
2624
let Signature { ident, .. } = sig;
2725
let stmts = &block.stmts;
2826

29-
let mut state = STATE.lock();
30-
state.startup_function = Some(ident.to_string());
31-
32-
let classes = build_classes(&state.classes)?;
33-
let constants = build_constants(&state.constants);
27+
let classes = build_classes(classes)?;
28+
let constants = build_constants(constants);
3429
let (before, after) = if args.before {
3530
(Some(quote! { internal(ty, module_number); }), None)
3631
} else {
@@ -61,6 +56,21 @@ pub fn parser(args: Option<AttributeArgs>, input: ItemFn) -> Result<TokenStream>
6156
Ok(func)
6257
}
6358

59+
pub fn parser(args: Option<AttributeArgs>, input: ItemFn) -> Result<TokenStream> {
60+
let args = if let Some(args) = args {
61+
StartupArgs::from_list(&args)
62+
.map_err(|e| anyhow!("Unable to parse attribute arguments: {:?}", e))?
63+
} else {
64+
StartupArgs::default()
65+
};
66+
67+
let mut state = STATE.lock();
68+
let ident = input.sig.ident.to_string();
69+
state.startup_function = Some(ident);
70+
71+
prepare(args, input, &state.classes, &state.constants)
72+
}
73+
6474
fn class_tokenstream(name: &str, class: &Class) -> Result<TokenStream> {
6575
let class_name = &class.class_name;
6676
let ident = Ident::new(name, Span::call_site());

0 commit comments

Comments
 (0)