mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-02 19:39:49 +09:00
* Create rustpython-host-env crate; move host abstractions out of common
Move os, crt_fd, fileutils, windows, macros modules from
rustpython-common into the new rustpython-host-env crate.
This isolates host OS API wrappers behind a crate boundary
with zero Python runtime dependency.
- Add crates/host_env to workspace
- Drop nix, windows-sys, widestring deps from common
- Wire vm and stdlib to depend on rustpython-host-env
- Migrate all imports from common::{os,crt_fd,fileutils,windows}
to rustpython_host_env::
* refactor: extract host helpers
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/48d1e64d-37ce-409f-b511-8e61a349665c
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* lint: enforce direct host API boundaries
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/97225fb7-7b3d-4197-a77c-eb44aead5b13
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* refactor: extract remaining host env helpers
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/d96f57e1-b196-4460-9983-97d5ff118835
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* fix: clean extracted host env follow-up
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/d96f57e1-b196-4460-9983-97d5ff118835
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* fix: document env mutation safety
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/d96f57e1-b196-4460-9983-97d5ff118835
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* refactor: split host fs helpers from fileutils
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/c57424c5-0e1d-490a-82b3-2d2f6c8cf2cd
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* fix: resolve latest host env ci regressions
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/899eb717-ebc6-4a4a-870c-2a15c5f33e02
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* fix: resolve remaining windows clippy host fs calls
Agent-Logs-Url: https://github.com/RustPython/RustPython/sessions/12f32740-8173-4b10-a1d6-00b29e90a8ec
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
* host_env
---------
Co-authored-by: Jeong, YunWon <jeong@youknowone.org>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: youknowone <69878+youknowone@users.noreply.github.com>
51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
use rustpython_vm as vm;
|
|
use std::process::ExitCode;
|
|
use vm::{
|
|
Interpreter, PyResult,
|
|
builtins::PyIntRef,
|
|
protocol::{PyIter, PyIterReturn},
|
|
};
|
|
|
|
fn py_main(interp: &Interpreter) -> vm::PyResult<()> {
|
|
let generator = interp.enter(|vm| {
|
|
let scope = vm.new_scope_with_builtins();
|
|
let generator = vm.run_block_expr(
|
|
scope,
|
|
r#"
|
|
def gen():
|
|
for i in range(10):
|
|
yield i
|
|
|
|
gen()
|
|
"#,
|
|
)?;
|
|
Ok(generator)
|
|
})?;
|
|
|
|
loop {
|
|
let r = interp.enter(|vm| {
|
|
let v = match PyIter::new(generator.clone()).next(vm)? {
|
|
PyIterReturn::Return(obj) => {
|
|
PyIterReturn::Return(obj.try_into_value::<PyIntRef>(vm)?)
|
|
}
|
|
PyIterReturn::StopIteration(x) => PyIterReturn::StopIteration(x),
|
|
};
|
|
PyResult::Ok(v)
|
|
})?;
|
|
match r {
|
|
PyIterReturn::Return(value) => println!("{value}"),
|
|
PyIterReturn::StopIteration(_) => break,
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn main() -> ExitCode {
|
|
let builder = vm::Interpreter::builder(Default::default());
|
|
let defs = rustpython_stdlib::stdlib_module_defs(&builder.ctx);
|
|
let interp = builder.add_native_modules(&defs).build();
|
|
let result = py_main(&interp);
|
|
vm::host_env::os::exit_code(interp.run(|_vm| result))
|
|
}
|