1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use crate::obj::objstr::PyStringRef; use crate::obj::objtype::PyClassRef; use crate::pyobject::{PyContext, PyRef, PyResult, PyValue}; use crate::vm::VirtualMachine; #[derive(Debug)] pub struct PyModule { pub name: String, } pub type PyModuleRef = PyRef<PyModule>; impl PyValue for PyModule { const HAVE_DICT: bool = true; fn class(vm: &VirtualMachine) -> PyClassRef { vm.ctx.module_type() } } impl PyModuleRef { fn init(self, name: PyStringRef, vm: &VirtualMachine) -> PyResult { vm.set_attr(&self.into_object(), "__name__", name)?; Ok(vm.get_none()) } } pub fn init(context: &PyContext) { extend_class!(&context, &context.module_type, { "__init__" => context.new_rustfunc(PyModuleRef::init), }); }