mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 10:44:36 +08:00
* Align compiler and AST behavior with CPython
Update the compiler pipeline, AST module support, and related VM compile/eval paths toward CPython 3.14 behavior.
Use upstream Ruff parser crates directly and keep RustPython-specific syntax preflight handling in the compile path.
Refresh opcode metadata, snapshots, and targeted tests for the aligned bytecode and AST behavior.
* fix
* Fix PR 8138 CI failures
* Fix match mapping wildcard scan complexity
* fixes
* Use Ruff runtime AST fields
* Minimize residual patch diff
* refactor error handling
* Remove _ast conversion context wrappers
* Clean up _ast conversion glue and compiler warning escalation
Rename the Node conversion parameter `ctx` to `vm` throughout the _ast
module.
Remove the unused compile_program, compile_program_single,
compile_block_expression, and compile_expression forwarders; compile_top
stays as the entry point.
Stash an escalated compiler SyntaxWarning so a non-SyntaxWarning category
propagates unchanged instead of being rewritten to SyntaxError, matching
PyErr_ExceptionMatches(SyntaxWarning) in compiler_warn. Drop the now-unused
CompileWarningError::into_codegen_error.
Replace the PositionalArguments two-variant enum with a struct holding a
shared range and a PositionalArgumentsKind enum.
Assisted-by: Claude
* Represent compiler flags as a CompilerFlags bitflags
Replace the loose PY_CF_*/CO_* i32 constants in compile_mode with a
CompilerFlags bitflags covering the PyCF_* flags and __future__
CO_FUTURE_* bits. The Python-visible ast.PyCF_* attribute values are
derived from it via bits(); parser input modes stay plain consts.
builtins::compile and the compile_string flag handling test flags
through CompilerFlags::contains instead of raw bit math.
Assisted-by: Claude
* Fix PR 8138 test regressions
* Fix PR 8138 CI failures
* Avoid shell interpolation in Linux deps action
* Fix review findings in compiler/AST changes
- frame.rs: compute the MATCH_CLASS class name lazily so a successful
match no longer takes the type name lock or allocates; the
__match_args__-not-a-tuple branch reuses it instead of recomputing.
- _ast/constant.rs: add the missing leading space to the with_recursion
label ("maximum recursion depth exceeded during compilation").
- sys.set_int_max_str_digits: restore the "maxdigits must be 0 or larger
than {n}" error text.
- codegen: set CO_MAXBLOCKS to 20 in both ir.rs and compile.rs.
- _ast/exception.rs: extract the duplicated excepthandler node guard
into ensure_excepthandler_node.
- codegen: correct the validate_keywords doc comment.
- Drop redundant "CPython" qualifiers from comments added in this branch.
Assisted-by: Claude
107 lines
3.2 KiB
TOML
107 lines
3.2 KiB
TOML
[package]
|
|
name = "rustpython-vm"
|
|
description = "RustPython virtual machine."
|
|
include = ["src/**/*.rs", "Cargo.toml", "build.rs", "Lib/**/*.py"]
|
|
version.workspace = true
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
repository.workspace = true
|
|
license.workspace = true
|
|
|
|
[features]
|
|
default = ["compiler", "wasmbind", "gc", "host_env", "stdio"]
|
|
host_env = []
|
|
stdio = []
|
|
importlib = []
|
|
encodings = ["importlib"]
|
|
vm-tracing-logging = []
|
|
flame-it = ["flame", "flamer"]
|
|
freeze-stdlib = ["encodings"]
|
|
jit = ["rustpython-jit"]
|
|
threading = ["rustpython-common/threading"]
|
|
gc = []
|
|
compiler = ["parser", "codegen", "rustpython-compiler"]
|
|
ast = ["ruff_python_ast", "ruff_text_size"]
|
|
codegen = ["rustpython-codegen", "ast"]
|
|
parser = ["ast"]
|
|
serde = ["dep:serde"]
|
|
wasmbind = ["rustpython-common/wasm_js", "chrono/wasmbind", "wasm-bindgen"]
|
|
|
|
[dependencies]
|
|
rustpython-compiler = { workspace = true, optional = true }
|
|
rustpython-codegen = { workspace = true, optional = true }
|
|
rustpython-common = { workspace = true }
|
|
rustpython-derive = { workspace = true }
|
|
rustpython-host_env = { workspace = true }
|
|
rustpython-jit = { workspace = true, optional = true }
|
|
|
|
ruff_python_ast = { workspace = true, optional = true }
|
|
ruff_python_parser = { workspace = true }
|
|
ruff_text_size = { workspace = true, optional = true }
|
|
rustpython-compiler-core = { workspace = true }
|
|
rustpython-literal = { workspace = true }
|
|
rustpython-sre_engine = { workspace = true }
|
|
|
|
ascii = { workspace = true }
|
|
bitflags = { workspace = true }
|
|
bstr = { workspace = true }
|
|
crossbeam-utils = { workspace = true }
|
|
chrono = { workspace = true }
|
|
constant_time_eq = { workspace = true }
|
|
flame = { workspace = true, optional = true }
|
|
hex = { workspace = true }
|
|
indexmap = { workspace = true }
|
|
itertools = { workspace = true }
|
|
is-macro = { workspace = true }
|
|
libc = { workspace = true }
|
|
log = { workspace = true }
|
|
malachite-bigint = { workspace = true }
|
|
num-complex = { workspace = true }
|
|
num-integer = { workspace = true }
|
|
num-traits = { workspace = true }
|
|
num_enum = { workspace = true }
|
|
parking_lot = { workspace = true }
|
|
paste = { workspace = true }
|
|
rapidhash = { workspace = true }
|
|
scopeguard = { workspace = true }
|
|
serde = { workspace = true, optional = true }
|
|
static_assertions = { workspace = true }
|
|
strum = { workspace = true }
|
|
strum_macros = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
thin-vec = { workspace = true }
|
|
memchr = { workspace = true }
|
|
|
|
flamer = { workspace = true, optional = true }
|
|
half = { workspace = true }
|
|
psm = { workspace = true }
|
|
optional = { workspace = true }
|
|
result-like = { workspace = true }
|
|
timsort = { workspace = true }
|
|
|
|
## unicode stuff
|
|
icu_casemap = { workspace = true }
|
|
icu_locale = { workspace = true }
|
|
icu_properties = { workspace = true }
|
|
writeable = { workspace = true }
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
exitcode = { workspace = true }
|
|
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
|
rustyline = { workspace = true }
|
|
which = { workspace = true }
|
|
widestring = { workspace = true }
|
|
|
|
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
|
|
wasm-bindgen = { workspace = true, optional = true }
|
|
|
|
[build-dependencies]
|
|
chrono = { workspace = true }
|
|
glob = { workspace = true }
|
|
itertools = { workspace = true }
|
|
|
|
[lints]
|
|
workspace = true
|