2424#include " executable/bytecode/BytecodeProgram.hpp"
2525#include " utilities.hpp"
2626
27+ #include < cstdio>
2728#include < filesystem>
29+ #include < unistd.h>
2830
2931namespace fs = std::filesystem;
3032using namespace py ;
@@ -186,10 +188,23 @@ void Interpreter::internal_setup(const std::string &name,
186188 std::get<PyObject *>(io_module->symbol_table ()->map ().at (String{ " FileIO" }));
187189 auto *buffered_writer =
188190 std::get<PyObject *>(io_module->symbol_table ()->map ().at (String{ " BufferedWriter" }));
191+ auto *buffered_reader =
192+ std::get<PyObject *>(io_module->symbol_table ()->map ().at (String{ " BufferedReader" }));
189193 auto *text_io_wrapper =
190194 std::get<PyObject *>(io_module->symbol_table ()->map ().at (String{ " TextIOWrapper" }));
195+ auto py_stdin =
196+ file_io->call (PyTuple::create (Number{ STDIN_FILENO }, String{ " rb" }).unwrap (), nullptr )
197+ .and_then ([buffered_reader](PyObject *stdin) {
198+ return buffered_reader->call (PyTuple::create (stdin).unwrap (), nullptr );
199+ })
200+ .and_then ([text_io_wrapper](PyObject *stdin_buffer_writer) {
201+ return text_io_wrapper->call (
202+ PyTuple::create (stdin_buffer_writer).unwrap (), nullptr );
203+ });
204+ ASSERT (py_stdin.is_ok ());
191205 auto py_stdout =
192- file_io->call (PyTuple::create (Number{ 1 }, String{ " wb" }).unwrap (), nullptr )
206+ file_io->call (
207+ PyTuple::create (Number{ STDOUT_FILENO }, String{ " wb" }).unwrap (), nullptr )
193208 .and_then ([buffered_writer](PyObject *stdout) {
194209 return buffered_writer->call (PyTuple::create (stdout).unwrap (), nullptr );
195210 })
@@ -199,7 +214,8 @@ void Interpreter::internal_setup(const std::string &name,
199214 });
200215 ASSERT (py_stdout.is_ok ());
201216 auto py_stderr =
202- file_io->call (PyTuple::create (Number{ 2 }, String{ " wb" }).unwrap (), nullptr )
217+ file_io->call (
218+ PyTuple::create (Number{ STDERR_FILENO }, String{ " wb" }).unwrap (), nullptr )
203219 .and_then ([buffered_writer](PyObject *stderr) {
204220 return buffered_writer->call (PyTuple::create (stderr).unwrap (), nullptr );
205221 })
@@ -208,6 +224,7 @@ void Interpreter::internal_setup(const std::string &name,
208224 PyTuple::create (stderr_buffer_writer).unwrap (), nullptr );
209225 });
210226 ASSERT (py_stderr.is_ok ());
227+ sys->add_symbol (PyString::create (" stdin" ).unwrap (), py_stdin.unwrap ());
211228 sys->add_symbol (PyString::create (" stdout" ).unwrap (), py_stdout.unwrap ());
212229 sys->add_symbol (PyString::create (" stderr" ).unwrap (), py_stderr.unwrap ());
213230 }
0 commit comments