From 91eb4d42e05ce011c9738cf21c4e833b9fbe971b Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 27 Sep 2020 10:52:02 +0900 Subject: [PATCH] direct call io_open for initialization --- vm/src/stdlib/io.rs | 1 + vm/src/vm.rs | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/vm/src/stdlib/io.rs b/vm/src/stdlib/io.rs index caad996de..d9166f4f8 100644 --- a/vm/src/stdlib/io.rs +++ b/vm/src/stdlib/io.rs @@ -3,6 +3,7 @@ */ use crate::pyobject::PyObjectRef; use crate::VirtualMachine; +pub(crate) use _io::io_open as open; pub(crate) fn make_module(vm: &VirtualMachine) -> PyObjectRef { let module = _io::make_module(vm); diff --git a/vm/src/vm.rs b/vm/src/vm.rs index 8dab54d40..090205214 100644 --- a/vm/src/vm.rs +++ b/vm/src/vm.rs @@ -320,9 +320,13 @@ impl VirtualMachine { // builtins.open to io.OpenWrapper, but this is easier, since it doesn't // require the Python stdlib to be present let io = import::import_builtin(self, "_io")?; - let io_open = self.get_attribute(io, "open")?; let set_stdio = |name, fd, mode: &str| { - let stdio = self.invoke(&io_open, (fd, mode))?; + let stdio = crate::stdlib::io::open( + self.ctx.new_int(fd), + Some(mode), + Default::default(), + self, + )?; self.set_attr( &self.sys_module, format!("__{}__", name), // e.g. __stdin__ @@ -335,6 +339,7 @@ impl VirtualMachine { set_stdio("stdout", 1, "w")?; set_stdio("stderr", 2, "w")?; + let io_open = self.get_attribute(io, "open")?; self.set_attr(&self.builtins, "open", io_open)?; }