@@ -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+
6474fn 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