Skip to content

Commit fe0284a

Browse files
committed
Add new to objmodule and change __name__ to property
1 parent 6615e81 commit fe0284a

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

vm/src/obj/objmodule.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use crate::obj::objproperty::PropertyBuilder;
2+
use crate::obj::objstr::PyStringRef;
13
use crate::obj::objtype::PyClassRef;
24
use crate::pyobject::{PyContext, PyRef, PyResult, PyValue};
35
use crate::vm::VirtualMachine;
@@ -15,6 +17,12 @@ impl PyValue for PyModule {
1517
}
1618

1719
impl PyModuleRef {
20+
fn new(cls: PyClassRef, name: PyStringRef, vm: &VirtualMachine) -> PyResult<PyModuleRef> {
21+
PyModule {
22+
name: name.as_str().to_string(),
23+
}
24+
.into_ref_with_type(vm, cls)
25+
}
1826
fn dir(self: PyModuleRef, vm: &VirtualMachine) -> PyResult {
1927
if let Some(dict) = &self.into_object().dict {
2028
let keys = dict.into_iter().map(|(k, _v)| k.clone()).collect();
@@ -24,14 +32,17 @@ impl PyModuleRef {
2432
}
2533
}
2634

27-
fn name(self: PyModuleRef, _vm: &VirtualMachine) -> String {
35+
fn name(self, _vm: &VirtualMachine) -> String {
2836
self.name.clone()
2937
}
3038
}
3139

3240
pub fn init(context: &PyContext) {
3341
extend_class!(&context, &context.module_type, {
3442
"__dir__" => context.new_rustfunc(PyModuleRef::dir),
35-
"__name__" => context.new_rustfunc(PyModuleRef::name)
43+
"__name__" => PropertyBuilder::new(context)
44+
.add_getter(PyModuleRef::name)
45+
.create(),
46+
"__new__" => context.new_rustfunc(PyModuleRef::new),
3647
});
3748
}

0 commit comments

Comments
 (0)