Skip to content

Commit 6cf5fe6

Browse files
committed
feat: add error mapping for already used arg throw
1 parent c3c3af4 commit 6cf5fe6

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

clarity/src/vm/clarity_wasm.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7651,6 +7651,8 @@ mod error_mapping {
76517651
use crate::vm::types::ResponseData;
76527652
use crate::vm::Value;
76537653

7654+
use super::read_identifier_from_wasm;
7655+
76547656
const LOG2_ERROR_MESSAGE: &str = "log2 must be passed a positive integer";
76557657
const SQRTI_ERROR_MESSAGE: &str = "sqrti must be passed a positive integer";
76567658
const POW_ERROR_MESSAGE: &str = "Power argument to (pow ...) must be a u32 integer";
@@ -7666,6 +7668,7 @@ mod error_mapping {
76667668
Panic = 6,
76677669
ShortReturnAssertionFailure = 7,
76687670
ArithmeticPowError = 8,
7671+
NameAlreadyUsed = 9,
76697672
NotMapped = 99,
76707673
}
76717674

@@ -7682,6 +7685,7 @@ mod error_mapping {
76827685
6 => ErrorMap::Panic,
76837686
7 => ErrorMap::ShortReturnAssertionFailure,
76847687
8 => ErrorMap::ArithmeticPowError,
7688+
9 => ErrorMap::NameAlreadyUsed,
76857689
_ => ErrorMap::NotMapped,
76867690
}
76877691
}
@@ -7804,6 +7808,34 @@ mod error_mapping {
78047808
RuntimeErrorType::Arithmetic(POW_ERROR_MESSAGE.into()),
78057809
Some(Vec::new()),
78067810
),
7811+
ErrorMap::NameAlreadyUsed => {
7812+
let runtime_error_arg_offset = instance
7813+
.get_global(&mut store, "runtime-error-arg-offset")
7814+
.and_then(|glob| glob.get(&mut store).i32())
7815+
.unwrap_or_else(|| {
7816+
panic!("Could not find $runtime-error-arg-offset global with i32 value")
7817+
});
7818+
7819+
let runtime_error_arg_len = instance
7820+
.get_global(&mut store, "runtime-error-arg-len")
7821+
.and_then(|glob| glob.get(&mut store).i32())
7822+
.unwrap_or_else(|| {
7823+
panic!("Could not find $runtime-error-arg-len global with i32 value")
7824+
});
7825+
7826+
let memory = instance
7827+
.get_memory(&mut store, "memory")
7828+
.unwrap_or_else(|| panic!("Could not find wasm instance memory"));
7829+
let arg_name = read_identifier_from_wasm(
7830+
memory,
7831+
&mut store,
7832+
runtime_error_arg_offset,
7833+
runtime_error_arg_len,
7834+
)
7835+
.unwrap_or_else(|e| panic!("Could not recover arg_name: {e}"));
7836+
7837+
Error::Unchecked(CheckErrors::NameAlreadyUsed(arg_name))
7838+
}
78077839
_ => panic!("Runtime error code {} not supported", runtime_error_code),
78087840
}
78097841
}

0 commit comments

Comments
 (0)