Skip to content

Commit 2c0f199

Browse files
committed
Initialize zipimport in the vm
1 parent 3c14563 commit 2c0f199

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

vm/src/import.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use rand::Rng;
66
use crate::bytecode::CodeObject;
77
use crate::exceptions::PyBaseExceptionRef;
88
use crate::obj::objtraceback::{PyTraceback, PyTracebackRef};
9-
use crate::obj::{objcode, objtype};
10-
use crate::pyobject::{ItemProtocol, PyResult, PyValue};
9+
use crate::obj::{objcode, objlist, objtype};
10+
use crate::pyobject::{ItemProtocol, PyResult, PyValue, TryFromObject};
1111
use crate::scope::Scope;
1212
use crate::version::get_git_revision;
1313
use crate::vm::{InitParameter, VirtualMachine};
@@ -37,6 +37,17 @@ pub fn init_importlib(vm: &VirtualMachine, initialize_parameter: InitParameter)
3737
magic = rand::thread_rng().gen::<[u8; 4]>().to_vec();
3838
}
3939
vm.set_attr(&importlib_external, "MAGIC_NUMBER", vm.ctx.new_bytes(magic))?;
40+
let zipimport_res = (|| -> PyResult<()> {
41+
let zipimport = vm.import("zipimport", &[], 0)?;
42+
let zipimporter = vm.get_attribute(zipimport, "zipimporter")?;
43+
let path_hooks = vm.get_attribute(vm.sys_module.clone(), "path_hooks")?;
44+
let path_hooks = objlist::PyListRef::try_from_object(vm, path_hooks)?;
45+
path_hooks.insert(0, zipimporter);
46+
Ok(())
47+
})();
48+
if let Err(_) = zipimport_res {
49+
eprintln!("couldn't init zipimport")
50+
}
4051
}
4152
InitParameter::NoInitialize => {
4253
panic!("Import library initialize should be InitializeInternal or InitializeExternal");

vm/src/obj/objlist.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ impl PyList {
159159
}
160160

161161
#[pymethod]
162-
fn insert(&self, position: isize, element: PyObjectRef) {
162+
pub(crate) fn insert(&self, position: isize, element: PyObjectRef) {
163163
let mut elements = self.borrow_elements_mut();
164164
let vec_len = elements.len().to_isize().unwrap();
165165
// This unbounded position can be < 0 or > vec.len()

0 commit comments

Comments
 (0)