Skip to content

Commit 8ad0d2a

Browse files
authored
Merge pull request #5192 from stacks-network/fix/throw-already-used-arg-error
Clarity-Wasm: add error mapping for already used arg error
2 parents c3c3af4 + 0a282a9 commit 8ad0d2a

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

clarity/src/vm/clarity_wasm.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7647,6 +7647,7 @@ mod tests {
76477647
mod error_mapping {
76487648
use wasmtime::{AsContextMut, Instance, Trap};
76497649

7650+
use super::read_identifier_from_wasm;
76507651
use crate::vm::errors::{CheckErrors, Error, RuntimeErrorType, ShortReturnType, WasmError};
76517652
use crate::vm::types::ResponseData;
76527653
use crate::vm::Value;
@@ -7666,6 +7667,7 @@ mod error_mapping {
76667667
Panic = 6,
76677668
ShortReturnAssertionFailure = 7,
76687669
ArithmeticPowError = 8,
7670+
NameAlreadyUsed = 9,
76697671
NotMapped = 99,
76707672
}
76717673

@@ -7682,6 +7684,7 @@ mod error_mapping {
76827684
6 => ErrorMap::Panic,
76837685
7 => ErrorMap::ShortReturnAssertionFailure,
76847686
8 => ErrorMap::ArithmeticPowError,
7687+
9 => ErrorMap::NameAlreadyUsed,
76857688
_ => ErrorMap::NotMapped,
76867689
}
76877690
}
@@ -7804,6 +7807,34 @@ mod error_mapping {
78047807
RuntimeErrorType::Arithmetic(POW_ERROR_MESSAGE.into()),
78057808
Some(Vec::new()),
78067809
),
7810+
ErrorMap::NameAlreadyUsed => {
7811+
let runtime_error_arg_offset = instance
7812+
.get_global(&mut store, "runtime-error-arg-offset")
7813+
.and_then(|glob| glob.get(&mut store).i32())
7814+
.unwrap_or_else(|| {
7815+
panic!("Could not find $runtime-error-arg-offset global with i32 value")
7816+
});
7817+
7818+
let runtime_error_arg_len = instance
7819+
.get_global(&mut store, "runtime-error-arg-len")
7820+
.and_then(|glob| glob.get(&mut store).i32())
7821+
.unwrap_or_else(|| {
7822+
panic!("Could not find $runtime-error-arg-len global with i32 value")
7823+
});
7824+
7825+
let memory = instance
7826+
.get_memory(&mut store, "memory")
7827+
.unwrap_or_else(|| panic!("Could not find wasm instance memory"));
7828+
let arg_name = read_identifier_from_wasm(
7829+
memory,
7830+
&mut store,
7831+
runtime_error_arg_offset,
7832+
runtime_error_arg_len,
7833+
)
7834+
.unwrap_or_else(|e| panic!("Could not recover arg_name: {e}"));
7835+
7836+
Error::Unchecked(CheckErrors::NameAlreadyUsed(arg_name))
7837+
}
78077838
_ => panic!("Runtime error code {} not supported", runtime_error_code),
78087839
}
78097840
}

0 commit comments

Comments
 (0)