diff --git a/src/runner.rs b/src/runner.rs index c1ee0e1..7ffafd3 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -668,8 +668,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = if f(left, right) { RuntimeValue::I32(1) } else { @@ -753,8 +752,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: ArithmeticOps + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.add(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -764,8 +762,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: ArithmeticOps + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.sub(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -775,8 +772,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: ArithmeticOps + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.mul(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -786,8 +782,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: TransmuteInto + FromRuntimeValue, U: ArithmeticOps + TransmuteInto { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let (left, right) = (left.transmute_into(), right.transmute_into()); let v = left.div(right)?; let v = v.transmute_into(); @@ -799,8 +794,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: TransmuteInto + FromRuntimeValue, U: Integer + TransmuteInto { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let (left, right) = (left.transmute_into(), right.transmute_into()); let v = left.rem(right)?; let v = v.transmute_into(); @@ -812,8 +806,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From<::Output>, T: ops::BitAnd + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.bitand(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -823,8 +816,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From<::Output>, T: ops::BitOr + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.bitor(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -834,8 +826,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From<::Output>, T: ops::BitXor + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.bitxor(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -845,8 +836,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From<>::Output>, T: ops::Shl + ops::BitAnd + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.shl(right & mask); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -856,8 +846,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: TransmuteInto + FromRuntimeValue, U: ops::Shr + ops::BitAnd, >::Output: TransmuteInto { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let (left, right) = (left.transmute_into(), right.transmute_into()); let v = left.shr(right & mask); let v = v.transmute_into(); @@ -869,8 +858,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: Integer + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.rotl(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -881,8 +869,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.rotr(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -937,8 +924,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.min(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -948,8 +934,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: Float + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.max(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -959,8 +944,7 @@ impl<'a, E: Externals> Interpreter<'a, E> { where RuntimeValue: From, T: Float + FromRuntimeValue { let (left, right) = self .value_stack - .pop_pair_as::() - .expect("Due to validation stack should contain pair of values"); + .pop_pair_as::(); let v = left.copysign(right); self.value_stack.push(v.into())?; Ok(InstructionOutcome::RunNextInstruction) @@ -1158,9 +1142,10 @@ impl ValueStack { } let cur_stack_len = self.len(); - self.resize(cur_stack_len - drop as usize); + self.sp = cur_stack_len - drop as usize; } + #[inline] fn pop_as(&mut self) -> T where T: FromRuntimeValue, @@ -1169,15 +1154,17 @@ impl ValueStack { value.try_into().expect("Due to validation stack top's type should match") } - fn pop_pair_as(&mut self) -> Result<(T, T), Error> + #[inline] + fn pop_pair_as(&mut self) -> (T, T) where T: FromRuntimeValue, { let right = self.pop_as(); let left = self.pop_as(); - Ok((left, right)) + (left, right) } + #[inline] fn pop_triple(&mut self) -> (RuntimeValue, RuntimeValue, RuntimeValue) { let right = self.pop(); let mid = self.pop(); @@ -1213,11 +1200,6 @@ impl ValueStack { Ok(()) } - #[inline] - fn resize(&mut self, new_len: usize) { - self.sp = new_len; - } - #[inline] fn len(&self) -> usize { self.sp