diff --git a/vm/src/builtins.rs b/vm/src/builtins.rs index b17add5d1..e33ed2475 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -777,6 +777,14 @@ fn builtin_import(vm: &VirtualMachine, args: PyFuncArgs) -> PyResult { vm.invoke(vm.import_func.borrow().clone(), args) } +fn builtin_vars(obj: OptionalArg, vm: &VirtualMachine) -> PyResult { + if let OptionalArg::Present(obj) = obj { + vm.get_attribute(obj, "__dict__") + } else { + Ok(vm.get_locals().into_object()) + } +} + // builtin_vars pub fn make_module(vm: &VirtualMachine, module: PyObjectRef) { @@ -862,6 +870,7 @@ pub fn make_module(vm: &VirtualMachine, module: PyObjectRef) { "super" => ctx.super_type(), "tuple" => ctx.tuple_type(), "type" => ctx.type_type(), + "vars" => ctx.new_rustfunc(builtin_vars), "zip" => ctx.zip_type(), "exit" => ctx.new_rustfunc(builtin_exit), "quit" => ctx.new_rustfunc(builtin_exit),