@@ -13,13 +13,7 @@ use super::compile;
13
13
use super :: pyobject:: { DictProtocol , PyObjectKind , PyResult } ;
14
14
use super :: vm:: VirtualMachine ;
15
15
16
- fn import_module ( vm : & mut VirtualMachine , module : & String ) -> PyResult {
17
- // First, see if we already loaded the module:
18
- let sys_modules = vm. sys_module . get_item ( "modules" ) . unwrap ( ) ;
19
- if let Some ( module) = sys_modules. get_item ( module) {
20
- return Ok ( module) ;
21
- }
22
-
16
+ fn import_uncached_module ( vm : & mut VirtualMachine , module : & String ) -> PyResult {
23
17
// Check for Rust-native modules
24
18
if let Some ( module) = vm. stdlib_inits . get ( module) {
25
19
return Ok ( module ( & vm. ctx ) . clone ( ) ) ;
@@ -56,8 +50,18 @@ fn import_module(vm: &mut VirtualMachine, module: &String) -> PyResult {
56
50
Ok ( _) => { }
57
51
Err ( value) => return Err ( value) ,
58
52
}
59
- let py_module = vm. ctx . new_module ( module, scope) ;
60
- Ok ( py_module)
53
+ Ok ( vm. ctx . new_module ( module, scope) )
54
+ }
55
+
56
+ fn import_module ( vm : & mut VirtualMachine , module_name : & String ) -> PyResult {
57
+ // First, see if we already loaded the module:
58
+ let sys_modules = vm. sys_module . get_item ( "modules" ) . unwrap ( ) ;
59
+ if let Some ( module) = sys_modules. get_item ( module_name) {
60
+ return Ok ( module) ;
61
+ }
62
+ let module = import_uncached_module ( vm, module_name) ?;
63
+ sys_modules. set_item ( module_name, module. clone ( ) ) ;
64
+ Ok ( module)
61
65
}
62
66
63
67
pub fn import ( vm : & mut VirtualMachine , module_name : & String , symbol : & Option < String > ) -> PyResult {
0 commit comments