Skip to content

Commit

Permalink
Use new bulk memory ops for tuples (#730)
Browse files Browse the repository at this point in the history
  • Loading branch information
graydon committed Mar 16, 2023
1 parent a0e9771 commit 8910210
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 18 deletions.
20 changes: 7 additions & 13 deletions soroban-env-common/src/tuple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,9 @@ macro_rules! impl_for_tuple {

fn try_from_val(env: &E, val: &RawVal) -> Result<Self, Self::Error> {
let vec: VecObject = val.try_into()?;
let len: u32 = env.vec_len(vec).map_err(|_| ConversionError)?.into();
if len != $count {
return Err(ConversionError);
}
Ok((
$({
let idx: u32 = $idx;
let val = env.vec_get(vec, idx.into()).map_err(|_| ConversionError)?;
$typ::try_from_val(&env, &val).map_err(|_| ConversionError)?
},)*
))
let mut tmp: [RawVal; $count as usize] = [RawVal::VOID.to_raw(); $count as usize];
env.vec_unpack_to_slice(vec, &mut tmp).map_err(|_| ConversionError)?;
Ok(($($typ::try_from_val(env, &tmp[$idx]).map_err(|_| ConversionError)?,)*))
}
}

Expand All @@ -33,8 +25,10 @@ macro_rules! impl_for_tuple {
{
type Error = ConversionError;
fn try_from_val(env: &E, v: &($($typ,)*)) -> Result<Self, Self::Error> {
let vec = env.vec_new($count.into()).map_err(|_| ConversionError)?;
$(let vec = env.vec_push_back(vec, v.$idx.try_into_val(&env).map_err(|_| ConversionError)?).map_err(|_| ConversionError)?;)*
let tmp: [RawVal; $count as usize] = [
$(v.$idx.try_into_val(&env).map_err(|_| ConversionError)?,)*
];
let vec = env.vec_new_from_slice(&tmp).map_err(|_| ConversionError)?;
Ok(vec.to_raw())
}
}
Expand Down
21 changes: 16 additions & 5 deletions soroban-test-wasms/wasm-workspace/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified soroban-test-wasms/wasm-workspace/opt/example_add_i32.wasm
Binary file not shown.
Binary file modified soroban-test-wasms/wasm-workspace/opt/example_invoke_contract.wasm
Binary file not shown.
Binary file not shown.

0 comments on commit 8910210

Please sign in to comment.