diff options
| author | Kamen Mladenov <kamen@syndamia.com> | 2025-02-05 14:22:44 +0200 |
|---|---|---|
| committer | Kamen Mladenov <kamen@syndamia.com> | 2025-02-05 14:22:44 +0200 |
| commit | 99eb257d286d0cdd10912783c3de1393ac9bfe2f (patch) | |
| tree | da5b77a8425f870e254e6b0067b1abd70243b067 /zkvms/zkwasm/wrapper_macro | |
| parent | ea504096df8e92eb224408b65ed0d7031fc3f402 (diff) | |
| download | zkVMs-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.rs | 27 |
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), _ => {}, } |
