aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-01-22 11:53:08 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-01-22 11:53:08 +0200
commita82b39d1001fb6cb8d6e1cc824028aa08c7ed6de (patch)
treeaf3beeecf7505ec9934563c0246ab549d3808d99
parentb0608ca2c0d8f739bead99eb93adc520ce2e1df1 (diff)
downloadzkVMs-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.rs15
-rw-r--r--zkvms/nexus/wrapper_macro/src/lib.rs6
-rw-r--r--zkvms/risc0/wrapper_macro/src/lib.rs5
-rw-r--r--zkvms/sp1/wrapper_macro/src/lib.rs5
-rw-r--r--zkvms/zkm/wrapper_macro/src/lib.rs6
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