diff --git a/lib/interface-types/src/decoders/binary.rs b/lib/interface-types/src/decoders/binary.rs index 2fd6a7b4b..a4fc146e3 100644 --- a/lib/interface-types/src/decoders/binary.rs +++ b/lib/interface-types/src/decoders/binary.rs @@ -52,7 +52,7 @@ fn leb<'input, E: ParseError<&'input [u8]>>(input: &'input [u8]) -> IResult<&'in } let (output, bytes) = match input.iter().position(|&byte| byte & 0x80 == 0) { - Some(position) => (&input[position + 1..], &input[..position + 1]), + Some(position) => (&input[position + 1..], &input[..=position]), None => (&[] as &[u8], input), }; @@ -61,7 +61,7 @@ fn leb<'input, E: ParseError<&'input [u8]>>(input: &'input [u8]) -> IResult<&'in bytes .iter() .rev() - .fold(0, |acc, byte| (acc << 7) | (byte & 0x7f) as u64), + .fold(0, |acc, byte| (acc << 7) | u64::from(byte & 0x7f)), )) } @@ -84,6 +84,7 @@ fn string<'input, E: ParseError<&'input [u8]>>( })) } +#[allow(clippy::type_complexity)] fn list<'input, I, E: ParseError<&'input [u8]>>( input: &'input [u8], item_parser: fn(&'input [u8]) -> IResult<&'input [u8], I, E>, diff --git a/lib/interface-types/src/encoders/wat.rs b/lib/interface-types/src/encoders/wat.rs index b11b65dc2..f04712a5c 100644 --- a/lib/interface-types/src/encoders/wat.rs +++ b/lib/interface-types/src/encoders/wat.rs @@ -67,7 +67,7 @@ impl<'input> From<&Instruction<'input>> for String { } } -fn input_types_to_param(input_types: &Vec<InterfaceType>) -> String { +fn input_types_to_param(input_types: &[InterfaceType]) -> String { if input_types.is_empty() { "".into() } else { @@ -84,7 +84,7 @@ fn input_types_to_param(input_types: &Vec<InterfaceType>) -> String { } } -fn output_types_to_result(output_types: &Vec<InterfaceType>) -> String { +fn output_types_to_result(output_types: &[InterfaceType]) -> String { if output_types.is_empty() { "".into() } else { diff --git a/lib/interface-types/src/instructions/interpreter.rs b/lib/interface-types/src/instructions/interpreter.rs index 7da3800f4..5e95cbae6 100644 --- a/lib/interface-types/src/instructions/interpreter.rs +++ b/lib/interface-types/src/instructions/interpreter.rs @@ -7,12 +7,15 @@ use std::{ marker::PhantomData, }; +type ExecutableInstruction<Instance, Export> = + Box<dyn Fn(&mut Runtime<Instance, Export>) -> Result<(), String>>; + struct Runtime<'invocation, 'instance, Instance, Export> where Export: wasm::Export + 'instance, Instance: wasm::Instance<Export> + 'instance, { - invocation_inputs: &'invocation Vec<u64>, + invocation_inputs: &'invocation [u64], stack: Stack<u64>, wasm_instance: &'instance Instance, wasm_exports: PhantomData<Export>, @@ -23,7 +26,7 @@ where Export: wasm::Export, Instance: wasm::Instance<Export>, { - executable_instructions: Vec<Box<dyn Fn(&mut Runtime<Instance, Export>) -> Result<(), String>>>, + executable_instructions: Vec<ExecutableInstruction<Instance, Export>>, } impl<Instance, Export> Interpreter<Instance, Export> @@ -31,16 +34,13 @@ where Export: wasm::Export, Instance: wasm::Instance<Export>, { - fn iter( - &self, - ) -> impl Iterator<Item = &Box<dyn Fn(&mut Runtime<Instance, Export>) -> Result<(), String>>> + '_ - { + fn iter(&self) -> impl Iterator<Item = &ExecutableInstruction<Instance, Export>> + '_ { self.executable_instructions.iter() } pub fn run( &self, - invocation_inputs: &Vec<u64>, + invocation_inputs: &[u64], wasm_instance: &Instance, ) -> Result<Stack<u64>, String> { let mut runtime = Runtime { @@ -73,7 +73,7 @@ where let executable_instructions = instructions .iter() .map( - |instruction| -> Box<dyn Fn(&mut Runtime<Instance, Export>) -> Result<(), String>> { + |instruction| -> ExecutableInstruction<Instance, Export> { match instruction { Instruction::ArgumentGet(index) => { let index = index.to_owned();