use std::ops::Range; use rand::Rng; use crate::vm::Thread; pub fn random_int(data: &mut Thread, destination: usize, argument_range: Range) { let mut argument_range_iter = argument_range.into_iter(); let (min, max) = { let mut min = None; loop { let register_index = argument_range_iter .next() .unwrap_or_else(|| panic!("No argument was passed to \"random_int\"")); let integer = data.get_integer_register(register_index); if min.is_none() { min = Some(integer); } else { break (min, integer); } } }; let random_integer = rand::thread_rng().gen_range(min.unwrap()..max); data.set_integer_register(destination, random_integer); }