1+ use crate :: obj:: objproperty:: PropertyBuilder ;
2+ use crate :: obj:: objstr:: PyStringRef ;
13use crate :: obj:: objtype:: PyClassRef ;
24use crate :: pyobject:: { PyContext , PyRef , PyResult , PyValue } ;
35use crate :: vm:: VirtualMachine ;
@@ -15,6 +17,12 @@ impl PyValue for PyModule {
1517}
1618
1719impl 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
3240pub 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