From a82b39d1001fb6cb8d6e1cc824028aa08c7ed6de Mon Sep 17 00:00:00 2001 From: Kamen Mladenov Date: Wed, 22 Jan 2025 11:53:08 +0200 Subject: feat(guests_macro): Implement args_divide_grouped Use it in multiple zkVMs, simplifying codebase --- guests_macro/src/parse_fn.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'guests_macro/src') diff --git a/guests_macro/src/parse_fn.rs b/guests_macro/src/parse_fn.rs index 506b26a..0e5712b 100644 --- a/guests_macro/src/parse_fn.rs +++ b/guests_macro/src/parse_fn.rs @@ -45,7 +45,7 @@ pub fn split_fn(item: &TokenStream) -> (TokenStream, TokenStream, TokenStream) { } /// Input: "(p1 : t1, p2: t2, ...)" -/// Output: "p1 : t1", "p2: t2", ... +/// Output: vec!["p1 : t1", "p2: t2", ...] pub fn args_split(item: &TokenStream) -> Vec { let contents; if let TokenTree::Group(group) = item.clone().into_iter().next().unwrap() { @@ -78,8 +78,8 @@ pub fn args_split(item: &TokenStream) -> Vec { args } -/// Input: (p1 : t1, p2: t2, ...) -/// Output: (p1, p2, ...), (t1, t2, ...) +/// Input: "(p1 : t1, p2: t2, ...)" +/// Output: vec![p1, p2, ...], vec![t1, t2, ...] pub fn args_divide(item: &TokenStream) -> (Vec, Vec) { let contents; if let TokenTree::Group(group) = item.clone().into_iter().next().unwrap() { @@ -129,7 +129,14 @@ pub fn args_divide(item: &TokenStream) -> (Vec, Vec) { (patterns, types) } -/// Input: "p1 p2 ..." +/// Input: "(p1 : t1, p2: t2, ...)" +/// Output: "(p1, p2, ...)", "(t1, t2, ...)" +pub fn args_divide_grouped(item: &TokenStream) -> (TokenStream, TokenStream) { + let (patterns, types) = args_divide(&item); + (group_streams(&patterns), group_streams(&types)) +} + +/// Input: vec![p1, p2, ...] /// Output: "(p1, p2, ...)" pub fn group_streams(patterns: &Vec) -> TokenStream { let mut inner_ts = TokenStream::new(); -- cgit v1.2.3