use crate::{
args::ArgValues,
bytecode::VM,
defer_drop, defer_drop_mut,
exception_private::RunResult,
resource::ResourceTracker,
types::{MontyIter, PyTrait},
value::Value,
};
pub fn builtin_all(vm: &mut VM<'_, impl ResourceTracker>, args: ArgValues) -> RunResult<Value> {
let iterable = args.get_one_arg("all", vm.heap)?;
let iter = MontyIter::new(iterable, vm)?;
defer_drop_mut!(iter, vm);
while let Some(item) = iter.for_next(vm)? {
defer_drop!(item, vm);
if !item.py_bool(vm) {
return Ok(Value::Bool(false));
}
}
Ok(Value::Bool(true))
}