DivisionByZero and InvalidConversionToInt
This commit is contained in:
parent
4765aecf78
commit
9bce81b7a1
|
@ -113,6 +113,8 @@ pub enum Trap {
|
||||||
TableAccessOutOfBounds,
|
TableAccessOutOfBounds,
|
||||||
ElemUninitialized,
|
ElemUninitialized,
|
||||||
ElemSignatureMismatch,
|
ElemSignatureMismatch,
|
||||||
|
DivisionByZero,
|
||||||
|
InvalidConversionToInt,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Internal interpreter error.
|
/// Internal interpreter error.
|
||||||
|
|
|
@ -791,7 +791,7 @@ impl<'a, E: Externals> Interpreter<'a, E> {
|
||||||
.value_stack_mut()
|
.value_stack_mut()
|
||||||
.pop_pair_as::<T>()
|
.pop_pair_as::<T>()
|
||||||
.map(|(left, right)| (left.transmute_into(), right.transmute_into()))
|
.map(|(left, right)| (left.transmute_into(), right.transmute_into()))
|
||||||
.map(|(left, right)| left.div(right))?
|
.map(|(left, right)| left.div(right).map_err(|_| Error::Trap(Trap::DivisionByZero)))?
|
||||||
.map(|v| v.transmute_into())
|
.map(|v| v.transmute_into())
|
||||||
.map(|v| context.value_stack_mut().push(v.into()))
|
.map(|v| context.value_stack_mut().push(v.into()))
|
||||||
.map(|_| InstructionOutcome::RunNextInstruction)
|
.map(|_| InstructionOutcome::RunNextInstruction)
|
||||||
|
@ -803,7 +803,7 @@ impl<'a, E: Externals> Interpreter<'a, E> {
|
||||||
.value_stack_mut()
|
.value_stack_mut()
|
||||||
.pop_pair_as::<T>()
|
.pop_pair_as::<T>()
|
||||||
.map(|(left, right)| (left.transmute_into(), right.transmute_into()))
|
.map(|(left, right)| (left.transmute_into(), right.transmute_into()))
|
||||||
.map(|(left, right)| left.rem(right))?
|
.map(|(left, right)| left.rem(right).map_err(|_| Error::Trap(Trap::DivisionByZero)))?
|
||||||
.map(|v| v.transmute_into())
|
.map(|v| v.transmute_into())
|
||||||
.map(|v| context.value_stack_mut().push(v.into()))
|
.map(|v| context.value_stack_mut().push(v.into()))
|
||||||
.map(|_| InstructionOutcome::RunNextInstruction)
|
.map(|_| InstructionOutcome::RunNextInstruction)
|
||||||
|
@ -996,7 +996,7 @@ impl<'a, E: Externals> Interpreter<'a, E> {
|
||||||
context
|
context
|
||||||
.value_stack_mut()
|
.value_stack_mut()
|
||||||
.pop_as::<T>()
|
.pop_as::<T>()
|
||||||
.and_then(|v| v.try_truncate_into())
|
.and_then(|v| v.try_truncate_into().map_err(|_| Error::Trap(Trap::InvalidConversionToInt)))
|
||||||
.map(|v| v.transmute_into())
|
.map(|v| v.transmute_into())
|
||||||
.map(|v| context.value_stack_mut().push(v.into()))
|
.map(|v| context.value_stack_mut().push(v.into()))
|
||||||
.map(|_| InstructionOutcome::RunNextInstruction)
|
.map(|_| InstructionOutcome::RunNextInstruction)
|
||||||
|
|
Loading…
Reference in New Issue