aboutsummaryrefslogtreecommitdiff
path: root/zkvms/zkwasm/wrapper_macro
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-02-05 14:22:44 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-02-05 14:22:44 +0200
commit99eb257d286d0cdd10912783c3de1393ac9bfe2f (patch)
treeda5b77a8425f870e254e6b0067b1abd70243b067 /zkvms/zkwasm/wrapper_macro
parentea504096df8e92eb224408b65ed0d7031fc3f402 (diff)
downloadzkVMs-benchmarks-99eb257d286d0cdd10912783c3de1393ac9bfe2f.tar
zkVMs-benchmarks-99eb257d286d0cdd10912783c3de1393ac9bfe2f.tar.gz
zkVMs-benchmarks-99eb257d286d0cdd10912783c3de1393ac9bfe2f.zip
feat(zkvms/zkwasm): Properly read string and char values
Diffstat (limited to 'zkvms/zkwasm/wrapper_macro')
-rw-r--r--zkvms/zkwasm/wrapper_macro/src/lib.rs27
1 files changed, 25 insertions, 2 deletions
diff --git a/zkvms/zkwasm/wrapper_macro/src/lib.rs b/zkvms/zkwasm/wrapper_macro/src/lib.rs
index 3e9e1d3..acf56d1 100644
--- a/zkvms/zkwasm/wrapper_macro/src/lib.rs
+++ b/zkvms/zkwasm/wrapper_macro/src/lib.rs
@@ -76,6 +76,26 @@ fn return_bool(readfn: &TokenTree) -> TokenStream {
").parse().unwrap()
}
+fn return_char(readfn: &TokenTree) -> TokenStream {
+ format!("
+ (({readfn}() as u8) as char)
+ ").parse().unwrap()
+}
+
+fn return_string(readfn: &TokenTree) -> TokenStream {
+ format!("
+ {{
+ let mut ret = Vec::new();
+ let mut current_char = read!({readfn} char);
+ while current_char != '\\0' {{
+ ret.push(current_char);
+ current_char = read!({readfn} char);
+ }}
+ ret.into_iter().collect()
+ }}
+ ").parse().unwrap()
+}
+
fn return_array(readfn: &TokenTree, size: &TokenTree, inner: &TokenStream) -> TokenStream {
format!("
{{
@@ -118,11 +138,14 @@ pub fn read(item: TokenStream) -> TokenStream {
match ident.to_string().as_str() {
"u8" | "u16" | "u32" | "u64" | "u128" | "usize" |
"i8" | "i16" | "i32" | "i64" | "i128" | "isize" |
- "f32" | "f64" |
- "char" =>
+ "f32" | "f64" =>
return return_primitive(&readfn, &ident),
+ "char" =>
+ return return_char(&readfn),
"bool" =>
return return_bool(&readfn),
+ "String" =>
+ return return_string(&readfn),
_ => {},
}