diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-01-22 11:53:08 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-01-22 11:53:08 +0200 |
| commit | a82b39d1001fb6cb8d6e1cc824028aa08c7ed6de (patch) | |
| tree | af3beeecf7505ec9934563c0246ab549d3808d99 | |
| parent | b0608ca2c0d8f739bead99eb93adc520ce2e1df1 (diff) | |
| download | zkVMs-benchmarks-a82b39d1001fb6cb8d6e1cc824028aa08c7ed6de.tar zkVMs-benchmarks-a82b39d1001fb6cb8d6e1cc824028aa08c7ed6de.tar.gz zkVMs-benchmarks-a82b39d1001fb6cb8d6e1cc824028aa08c7ed6de.zip | |
feat(guests_macro): Implement args_divide_grouped
Use it in multiple zkVMs, simplifying codebase
| -rw-r--r-- | guests_macro/src/parse_fn.rs | 15 | ||||
| -rw-r--r-- | zkvms/nexus/wrapper_macro/src/lib.rs | 6 | ||||
| -rw-r--r-- | zkvms/risc0/wrapper_macro/src/lib.rs | 5 | ||||
| -rw-r--r-- | zkvms/sp1/wrapper_macro/src/lib.rs | 5 | ||||
| -rw-r--r-- | zkvms/zkm/wrapper_macro/src/lib.rs | 6 |
5 files changed, 19 insertions, 18 deletions
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<TokenStream> { let contents; if let TokenTree::Group(group) = item.clone().into_iter().next().unwrap() { @@ -78,8 +78,8 @@ pub fn args_split(item: &TokenStream) -> Vec<TokenStream> { 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<TokenStream>, Vec<TokenStream>) { let contents; if let TokenTree::Group(group) = item.clone().into_iter().next().unwrap() { @@ -129,7 +129,14 @@ pub fn args_divide(item: &TokenStream) -> (Vec<TokenStream>, Vec<TokenStream>) { (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>) -> TokenStream { let mut inner_ts = TokenStream::new(); diff --git a/zkvms/nexus/wrapper_macro/src/lib.rs b/zkvms/nexus/wrapper_macro/src/lib.rs index 21bf1bb..54ea2e9 100644 --- a/zkvms/nexus/wrapper_macro/src/lib.rs +++ b/zkvms/nexus/wrapper_macro/src/lib.rs @@ -2,15 +2,13 @@ use proc_macro::TokenStream; #[path = "../../../../guests_macro/src/parse_fn.rs"] mod parse_fn; -use crate::parse_fn::{ split_fn, args_split, args_divide, group_streams }; +use crate::parse_fn::{ split_fn, args_split, args_divide_grouped }; #[proc_macro] pub fn make_wrapper(item: TokenStream) -> TokenStream { let (name, args, ret) = split_fn(&item); - let (patterns, types) = args_divide(&args); - let ts_patterns = group_streams(&patterns); - let ts_types = group_streams(&types); + let (ts_patterns, ts_types) = args_divide_grouped(&args); let mut out = TokenStream::new(); out.extend(format!("let {} = read_private_input::<{}>().unwrap();", ts_patterns, ts_types).parse::<TokenStream>()); diff --git a/zkvms/risc0/wrapper_macro/src/lib.rs b/zkvms/risc0/wrapper_macro/src/lib.rs index eb24c33..67aaad6 100644 --- a/zkvms/risc0/wrapper_macro/src/lib.rs +++ b/zkvms/risc0/wrapper_macro/src/lib.rs @@ -2,7 +2,7 @@ use proc_macro::TokenStream; #[path = "../../../../guests_macro/src/parse_fn.rs"] mod parse_fn; -use crate::parse_fn::{ split_fn, args_split, args_divide, group_streams }; +use crate::parse_fn::{ split_fn, args_split, args_divide_grouped }; #[proc_macro] pub fn make_wrapper(item: TokenStream) -> TokenStream { @@ -14,8 +14,7 @@ pub fn make_wrapper(item: TokenStream) -> TokenStream { out.extend(format!("let {} = read();", arg).parse::<TokenStream>()); } - let (patterns, _) = args_divide(&args); - let ts_patterns = group_streams(&patterns); + let (ts_patterns, _) = args_divide_grouped(&args); out.extend(format!("commit(&zkp::{}{});", name, ts_patterns).parse::<TokenStream>()); diff --git a/zkvms/sp1/wrapper_macro/src/lib.rs b/zkvms/sp1/wrapper_macro/src/lib.rs index eb24c33..67aaad6 100644 --- a/zkvms/sp1/wrapper_macro/src/lib.rs +++ b/zkvms/sp1/wrapper_macro/src/lib.rs @@ -2,7 +2,7 @@ use proc_macro::TokenStream; #[path = "../../../../guests_macro/src/parse_fn.rs"] mod parse_fn; -use crate::parse_fn::{ split_fn, args_split, args_divide, group_streams }; +use crate::parse_fn::{ split_fn, args_split, args_divide_grouped }; #[proc_macro] pub fn make_wrapper(item: TokenStream) -> TokenStream { @@ -14,8 +14,7 @@ pub fn make_wrapper(item: TokenStream) -> TokenStream { out.extend(format!("let {} = read();", arg).parse::<TokenStream>()); } - let (patterns, _) = args_divide(&args); - let ts_patterns = group_streams(&patterns); + let (ts_patterns, _) = args_divide_grouped(&args); out.extend(format!("commit(&zkp::{}{});", name, ts_patterns).parse::<TokenStream>()); diff --git a/zkvms/zkm/wrapper_macro/src/lib.rs b/zkvms/zkm/wrapper_macro/src/lib.rs index 86594e6..57b9d24 100644 --- a/zkvms/zkm/wrapper_macro/src/lib.rs +++ b/zkvms/zkm/wrapper_macro/src/lib.rs @@ -2,15 +2,13 @@ use proc_macro::TokenStream; #[path = "../../../../guests_macro/src/parse_fn.rs"] mod parse_fn; -use crate::parse_fn::{ split_fn, args_split, args_divide, group_streams }; +use crate::parse_fn::{ split_fn, args_split, args_divide_grouped }; #[proc_macro] pub fn make_wrapper(item: TokenStream) -> TokenStream { let (name, args, ret) = split_fn(&item); - let (patterns, types) = args_divide(&args); - let ts_patterns = group_streams(&patterns); - let ts_types = group_streams(&types); + let (ts_patterns, ts_types) = args_divide_grouped(&args); let mut out = TokenStream::new(); // NOTE: The first read returns public data, the second returns private |
