diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-02-03 15:49:27 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-02-03 16:21:54 +0200 |
| commit | 434248bf0ac990ac5cf8e4dfc6b923e6f1cf060c (patch) | |
| tree | 97aa8a4b5bc8039f2c22ac906cedfc68904bdcd5 /guests_macro | |
| parent | 0e2db3d20ccae2090f4a01d172e451c596da0c30 (diff) | |
| download | zkVMs-benchmarks-434248bf0ac990ac5cf8e4dfc6b923e6f1cf060c.tar zkVMs-benchmarks-434248bf0ac990ac5cf8e4dfc6b923e6f1cf060c.tar.gz zkVMs-benchmarks-434248bf0ac990ac5cf8e4dfc6b923e6f1cf060c.zip | |
feat(guests_macro/parse_fn): Make _public functions also return private values
Diffstat (limited to 'guests_macro')
| -rw-r--r-- | guests_macro/src/parse_fn.rs | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/guests_macro/src/parse_fn.rs b/guests_macro/src/parse_fn.rs index e5558ad..535d27f 100644 --- a/guests_macro/src/parse_fn.rs +++ b/guests_macro/src/parse_fn.rs @@ -79,12 +79,19 @@ pub fn args_split(item: &TokenStream) -> Vec<TokenStream> { } /// Input: "(p1 : t1, p2: t2, ...)" -/// Output: vec!["p1 : t1", "p2: t2", ...] -pub fn args_split_public(item: &TokenStream, public: &Vec<&String>) -> Vec<TokenStream> { - args_split(item) +/// Output: vec!["p1 : t1", "p2: t2", ...], vec!["p1 : t1", "p2: t2", ...] +pub fn args_split_public(item: &TokenStream, public: &Vec<&String>) -> (Vec<TokenStream>, Vec<TokenStream>) { + let all_args = args_split(item); + let public_args: Vec<TokenStream> = all_args + .clone() .into_iter() .filter(|a| public.iter().any(|x| a.to_string().starts_with(*x))) - .collect() + .collect(); + let private_args: Vec<TokenStream> = all_args + .into_iter() + .filter(|t| !public_args.iter().any(|pt| *t.to_string() == pt.to_string())) + .collect(); + (public_args, private_args) } /// Input: "(p1 : t1, p2: t2, ...)" @@ -139,14 +146,23 @@ pub fn args_divide(item: &TokenStream) -> (Vec<TokenStream>, Vec<TokenStream>) { } /// Input: "(p1 : t1, p2: t2, ...)" -/// Output: vec![p1, p2, ...], vec![t1, t2, ...] -pub fn args_divide_public(item: &TokenStream, public: &Vec<&String>) -> (Vec<TokenStream>, Vec<TokenStream>) { +/// Output: (vec![p1, p2, ...], vec![t1, t2, ...]), (vec![p1, p2, ...], vec![t1, t2, ...]) +pub fn args_divide_public(item: &TokenStream, public: &Vec<&String>) -> ((Vec<TokenStream>, Vec<TokenStream>), (Vec<TokenStream>, Vec<TokenStream>)) { let (patterns, types) = args_divide(item); - patterns + + let (public_patterns, public_types): (Vec<TokenStream>, Vec<TokenStream>) = patterns + .clone() .into_iter() - .zip(types.into_iter()) + .zip(types.clone().into_iter()) .filter(|(p, _)| public.iter().any(|x| p.to_string() == **x)) - .unzip() + .unzip(); + + let (private_patterns, private_types): (Vec<TokenStream>, Vec<TokenStream>) = patterns + .into_iter() + .zip(types.into_iter()) + .filter(|(p, _)| !public_patterns.iter().any(|x| p.to_string() == x.to_string())) + .unzip(); + ((public_patterns, public_types), (private_patterns, private_types)) } /// Input: "(p1 : t1, p2: t2, ...)" |
