monty 0.0.19-beta.2

A sandboxed, snapshotable Python interpreter written in Rust.
Documentation
//! Implementation of the reversed() builtin function.

use crate::{
    args::ArgValues,
    bytecode::VM,
    exception_private::RunResult,
    heap::HeapData,
    resource::ResourceTracker,
    types::{List, MontyIter},
    value::Value,
};

/// Implementation of the reversed() builtin function.
///
/// Returns a list with elements in reverse order.
/// Note: In Python this returns an iterator, but we return a list for simplicity.
pub fn builtin_reversed(vm: &mut VM<'_, impl ResourceTracker>, args: ArgValues) -> RunResult<Value> {
    let value = args.get_one_arg("reversed", vm.heap)?;

    // Collect all items
    let mut items: Vec<_> = MontyIter::new(value, vm)?.collect(vm)?;

    // Reverse in place
    items.reverse();

    let heap_id = vm.heap.allocate(HeapData::List(List::new(items)))?;
    Ok(Value::Ref(heap_id))
}