Commit Graph
4769 Commits
Author SHA1 Message Date
Shahar Naveh e4814d4893 Update ensurepip to 26.1.2 (cpython 3.14.6) (#8163) 2026-06-25 22:25:32 +09:00
Shahar Naveh 7350a5b709 Implement collections.defaultdict in rust (#8132) 2026-06-23 22:47:10 +09:00
Shahar Naveh 221d95cbbe Run windows tests with -u all (#8134)
* Enable all test resources on windows

* Mark tests

* mark wmi test
2026-06-22 16:46:53 +09:00
Shahar Naveh 866f7ca812 Fix symtable type_param_block name (#8137) 2026-06-22 16:44:08 +09:00
Shahar Naveh 432df16bdd Align patches at test_types.py (#8126)
* Align patches at `test_types.py`

* Add missing methods for `_io.TextIOBase`
2026-06-22 16:30:23 +09:00
Shahar Naveh 80d392ddc3 Skip flaky test at test_thread.py (#8125) 2026-06-22 16:28:35 +09:00
Shahar Naveh 5893c688c9 Fix builtin class names not being interned (#8116) 2026-06-16 17:15:01 +09:00
Rory Yorke e65b1fc488 Dedent -c command-line parameter value (#8056) 2026-06-16 15:58:12 +09:00
Shahar Naveh a1eeee28e4 Update idlelib to 3.14.6 (#8105)
* Update `idlelib/` to 3.14.6

* Update `test_idle.py` to 3.14.6
2026-06-15 11:21:28 +09:00
Shahar Naveh 7da696661b Reduce number of string clones when compiling python source code (#8103) 2026-06-15 11:20:48 +09:00
Shahar Naveh a1355939d2 Update some libs to 3.14.6 (#8102) 2026-06-15 11:20:13 +09:00
Shahar Naveh 4da8a1f1d3 Update xml to 3.14.6 (#8101)
* Update `xml` to 3.14.6

* Update tests

* mark failing tests

* Align patches
2026-06-15 11:19:40 +09:00
Shahar Naveh 79c3575961 Update libregtest to 3.14.6 (#8100)
* Update `test_regrtest.py` to 3.14.6

* Update `libregrtest`

* Update unittest

* Unmark passing test

* Remove `test_set` from env polluters

* Revert "Unmark passing test"

This reverts commit 82b8c1c228.

* Revert "Remove `test_set` from env polluters"

This reverts commit 5a4040da32.

* Mark failing test
2026-06-15 11:19:01 +09:00
Shahar Naveh d758d60eb1 Newtype SigalNum (#8096)
* Newtype SigalNum

* impl Index<SigalNum> for SignalHandlersInner
2026-06-15 11:12:39 +09:00
Joshua Megnauth 5c1803e019 Fix most of unicodedata; unmask multiple tests (#7947) 2026-06-14 17:47:42 +09:00
Shahar Naveh 5d375e3c21 Update some of changed libs and tests from 3.14.5 -> 3.14.6 (part 3) (#8086) 2026-06-12 23:50:07 +09:00
Shahar Naveh b8776bd8d0 Update some of changed libs and tests from 3.14.5 -> 3.14.6 (part 2) (#8085) 2026-06-12 23:49:47 +09:00
Shahar Naveh a2fabfa064 Update some of changed libs and tests from 3.14.5 -> 3.14.6 (part 1) (#8084) 2026-06-12 23:49:15 +09:00
Shahar Naveh 3ff976180a Update pyrepl to 3.14.5 (#7823)
* Add a dummy `posix._is_inputhook_installed` function

* Add a dummy `nt._is_inputhook_installed` function

* Update `_pyrepl` to 3.14.5

* Update `test_pyrepl` to 3.14.5

* Add a dummy `posix._is_inputhook_installed` function
2026-06-12 11:10:50 +09:00
Shahar Naveh beb8d6070e TODO: Flaky test -> TODO: RUSTPYTHON; Flaky test (#8078) 2026-06-12 11:09:44 +09:00
Shahar Naveh 3a4e82973d Skip flaky asyncio tests (#8075)
* Skip flaky test on windows

* Skip another flaky test
2026-06-11 18:45:34 +09:00
Shahar Naveh 832f782906 Don't skip test in test_tempfile.py on all platforms (#8067) 2026-06-11 18:11:30 +09:00
Shahar Naveh 8585981dda Update some tests to 3.14.5 (#8072)
* Update `test_poll.py` to 3.14.5

* Update `test_utf8_mode.py` to 3.14.5

* Align patches for `test_unpack.py`
2026-06-11 13:36:51 +09:00
Shahar Naveh 4632174257 Don't skip test in test_typing.py (#8073) 2026-06-11 13:36:40 +09:00
Shahar Naveh f1dd42e066 Update pdb.py to 3.14.5 (#8070)
* Update `pdb.py` to 3.14.5

* Add `test_pdb.py` from 3.14.5

* Update `_pyrepl/types.py`

* Update `_pyrepl/utils.py`

* Mark failing tests

* Mark failing tests
2026-06-11 13:36:30 +09:00
Shahar Naveh c5dcfa239d Remove stale patches from test_traceback.py (#8068) 2026-06-11 12:49:08 +09:00
Shahar Naveh c27df40225 Conditionally skip test_pty tests (#8066) 2026-06-11 12:15:41 +09:00
Shahar Naveh 984d936ed6 Fix test_tty.py tests (#8065)
* Align patches of `test_tty`

* Fix failing tests at `test_tty.py`

* Align patches of `test_termios.py`

* Unmark passing tests under `test_termios.py`

* Unmark another passing test
2026-06-11 12:15:21 +09:00
Shahar Naveh 697bde31c9 Skip flakey windows test (#8063) 2026-06-11 12:12:33 +09:00
Shahar Naveh c6a55356b5 Update test_code.py to 3.14.5 (#8054)
* Update `test_code.py` to 3.14.5

* skip flakey ci test
2026-06-10 11:14:47 +09:00
Shahar Naveh 7060fe3b5b Add _blake2 consts (#8053)
* Add `_blake2` consts

* Update `test_hashlib.py` to 3.14.5
2026-06-10 11:14:05 +09:00
Shahar Naveh da99e72771 Update test_sys{log,_settrace}.py to 3.14.5 (#8030)
* Update `test_syslog.py` to 3.14.5

* Update `test_sys_settrace.py` to 3.14.5
2026-06-03 22:51:41 +09:00
Shahar Naveh fe6b9e8403 Update thread related tests to 3.14.5 (#8018) 2026-06-03 09:52:32 +00:00
Shahar Naveh 42256aab5f Update turtle.py to 3.14.5 (#8017) 2026-06-03 18:36:37 +09:00
Shahar Naveh 840f8c0322 Update asyncio to 3.14.5 (#8012) 2026-06-02 09:48:45 +00:00
Shahar Naveh 5395ed1f26 Update test_super.py to 3.14.5 (#8015) 2026-06-02 09:25:40 +00:00
Shahar Naveh 6b1cf06bd4 Update importlib to 3.14.5 (#8013) 2026-06-02 18:06:36 +09:00
Shahar Naveh 6eae1dde6c Update some tests to 3.14.5 (#7991) 2026-06-02 18:00:54 +09:00
Shahar Naveh d58fc9e42e CI: Don't skip windows tests (#8004) 2026-06-02 15:42:33 +09:00
Shahar Naveh 3809ab5422 impl _queue module + Update multiprocessing to 3.14.5 (#7994) 2026-06-02 00:35:17 +09:00
Shahar Naveh 1b85e0b261 Update test_file_eintr.py to 3.14.5 (#7999) 2026-06-01 00:08:40 +09:00
James ClarkeandCPython Developers a0d89e5ddd Tests: update test_codecmaps_{cn,hk,jp,kr,tw}, test_pstats, test_profile, test_cprofile, test_tracemalloc, test_multibytecodec from v3.14.5 (#7978)
* Update pstats from v3.14.5

* Update profile from v3.14.5

* Update tracemalloc from v3.14.5

* Update test_multibytecodec from v3.14.5

* Mark failing tests in test_pstats

* Mark failing test in test_profile

* Mark failing tests in test_cprofile

* Mark failing tests in test_tracemalloc

* Mark failing tests in test_multibytecodec

* Added comment marker to test_pstats.py

---------

Co-authored-by: CPython Developers <>
2026-05-31 21:47:03 +09:00
Shahar Naveh 620faab734 Update some tests to 3.14.5 (#7990)
* Update `test_embed.py` to 3.14.5

* Update `test_cmd_line*` to 3.14.5

* Update unicode related tests

* Update `test_script_helper.py`

* Update `test_gc.py`
2026-05-30 20:16:10 +09:00
Shahar Naveh fbdf7c1052 Align more error messages with CPython 3.14.5 (#7988)
* Cannot assign to True/False/None

* cannot use assignment expressions with ...

* cannot assign to function call/expression
2026-05-28 11:19:03 +09:00
Jeong, YunWon 5add3d6a69 Align codegen passes and opcode metadata with CPython (#7987)
* Share marshal ref table between code object and its internals

read_marshal_bytes, _str, _str_vec, _name_tuple, and _const_tuple now
take a shared ref table and resolve TYPE_REF / register FLAG_REF
entries. deserialize_code is split into a public wrapper and an inner
function that receives the ref table; deserialize_value_depth opens a
fresh inner ref space when it hits Type::Code, mirroring CPython's
behaviour of putting the code object itself at ref slot 0. Nested code
objects inside const tuples reuse the surrounding code's ref space via
the new read_const_value helper.

* Align PYC magic number, FORMAT_VERSION, and header check with CPython 3.14

PYC_MAGIC_NUMBER changes from 2994 to 3627, matching CPython 3.14's
pyc_magic_number_token (0x0a0d0e2b). marshal FORMAT_VERSION drops from
5 to 4 (the encoder/marshal.version value; the decoder already accepts
both). check_pyc_magic_number_bytes now compares all four magic bytes
instead of the first two.

* Accept CPython-tagged .pyc as read-only bytecode source

SourceFileLoader.get_code now also looks for .pyc files using
_RP_FALLBACK_CACHE_TAGS (currently ('cpython-314',)) in addition to
sys.implementation.cache_tag. The matched .pyc is only used for
reading; recompilation still writes to the RustPython-tagged path, so
CPython's .pyc is never overwritten. Source-stat / hash / timestamp
validation logic is unchanged.

* Apply rustfmt to marshal helpers

* Marshal PySlice from format version 4 instead of 5

CPython's marshal supports TYPE_SLICE from format version 4 onwards
and that is the default version. Rejecting slice dumps below version
5 made marshal.dumps(slice(...)) fail with the default version and
broke test.test_marshal.SliceTestCase.test_slice.

* Revert "Accept CPython-tagged .pyc as read-only bytecode source"

Lib/importlib/_bootstrap_external.py is CPython's own code copied
verbatim; local patches here defeat compatibility tracking. The
cpython-XX cache_tag fallback needs to live on the RustPython side
(Rust code or sys.implementation.cache_tag policy), not as edits to
the imported standard library.

This reverts commit 1fc426d0fb5fcdb50d35cad13bbb43e8f6ce1c7f.

* Set marshal FORMAT_VERSION to 5 to match CPython 3.14.5

Py_MARSHAL_VERSION is 5 in CPython 3.14.5 (Include/marshal.h:16) and
TYPE_SLICE serialization rejects version < 5 (Python/marshal.c:720).
Restore the same threshold and constant so marshal.version and the
slice-marshal gate match CPython.

* Thread marshal recursion depth through nested code objects

Code objects embedded in const-tuples reset the depth budget on each
recursion, so a hostile or pathological marshal stream of code-in-tuple-
in-code can blow the stack despite MAX_MARSHAL_STACK_DEPTH. Pass the
current depth through deserialize_code_inner and read_marshal_const_tuple
and decrement at each code-object/tuple boundary.

Also route dict keys through deserialize_value_after_header so TYPE_CODE
keys decode instead of failing with BadType.

* align compiler to CPython

* Align codegen with CPython compile.c

Rename CFG helpers and accessors to the names used in CPython's
compile.c (basicblock_next_instr, basicblock_last_instr,
basicblock_append_instructions, bb_has_fallthrough, is_jump,
make_cfg_traversal_stack, mark_warm/mark_cold, etc.). Drop the unused
boolop-folding gate, mark_cpython_cfg_label_block helper, and
ComprehensionLoopControl::iter_range field.

Track an is_coroutine flag on SymbolTable, set in async def, await, and
async comprehensions, and propagate it through non-generator
comprehensions per symtable_handle_comprehension().

Mark SetupCleanup/SetupFinally/SetupWith as has_arg pseudo-ops, mark
ForIter as a terminator, and add has_arg/has_const on AnyInstruction.
Fix Instruction::stack_effect_jump to delegate to the opcode's
stack_effect_jump rather than stack_effect.

* Align codegen IR with CPython CFG structures

* Match CPython CFG annotation offset arithmetic

* Propagate CPython CFG label translation errors

* Align CPython exception target labeling flow

* Propagate CPython CFG traversal stack allocation errors

* Match CPython optimize_load_fast allocation flow

* Propagate CPython basicblock allocation errors

* Propagate CPython redundant NOP cleanup errors

* Propagate CPython unused const cleanup errors

* Propagate CPython const folding errors

* Propagate CPython swaptimize allocation errors

* Match CPython list-to-tuple fold allocation

* Skip const folding on CPython allocation failures

* Skip subscript folding on CPython allocation failures

* Propagate CPython assembler allocation errors

* Propagate CPython localsplus allocation errors

* Propagate CPython localsplus setup allocation errors

* Propagate CPython jump label map allocation errors

* Propagate CPython instruction sequence allocation errors

* Propagate CPython instruction label allocation errors

* Guard CPython codegen block allocation

* Guard CPython label shadow allocation

* Propagate CPython label shadow allocation errors

* Align CPython c-array allocation updates

* Align CPython ref stack growth

* Match CPython CFG builder debug check

* Avoid Rust-only CFG append clone

* Reuse CPython cleared block slots

* Use CPython block append in copy_basicblock

* Match CPython cfg builder creation order

* Clear label map after CPython apply pass

* Match CPython cfg builder allocation check

* Propagate CPython c-array size errors

* Drop Rust-only label uniqueness check

* Drop Rust-only label shadow debug checks

* Propagate CFG block index overflow

* Propagate CFG label oparg overflow

* Model CPython basicblock instruction storage

* Drop Rust-only recorded CFG precheck

* Model CPython instruction sequence storage

* Propagate instruction sequence offset overflow

* Model CPython instruction sequence labels

* Match CPython jump offset arithmetic

* Match CPython exception table arithmetic

* Match CPython label index arithmetic

* Match CPython instruction offset casts

* Match CPython jump offset indexing

* Match CPython oparg locals casts

* Match CPython localsplus offset arithmetic

* Match CPython cell prefix indexing

* Match CPython C array growth arithmetic

* Match CPython label map allocation arithmetic

* Match CPython label map size tracking

* Use CPython label map size in sequence passes

* Assert CPython label map clearing invariants

* Match CPython label oparg assignment

* Match CPython compiler direct arithmetic

* Match CPython load fast local casts

* Match CPython load fast depth assert

* Match CPython resume depth flagging

* Match CPython stack depth arithmetic

* Drop Rust-only stack overflow error

* Return CPython stack depth directly

* Match CPython C array growth errors

* Match CPython instruction insert asserts

* Match CPython unreachable pseudo jump

* Match CPython CFG size guard

* Match CPython superinstruction assert

* Match CPython redundant jump assert

* Match CPython stackdepth errors

* Match CPython jump offset flow

* Match CPython assembler buffer defaults

* Match CPython bytecode emit growth

* Match CPython assembler entry growth

* Match CPython assembler growth overflow check

* Match CPython remove_unreachable structure

* Match CPython static swap flow

* Inline CPython code unit preprocessing

* Match CPython C array growth checks

* Match CPython label map size guard

* Match CPython load-fast flow

* Simplify CPython CFG condition flow

* Align exception fallthrough propagation

* Match CPython pseudo target table

* Match CPython annotations CFG assert

* Match CPython inverted op assert

* Match CPython many-locals guard

* Reject deopt opcodes in CFG stack effects

* Match CPython invalid stack effect error

* Test CPython deopt stack effect guard

* Match CPython load-fast extended-arg assert

* Match CPython instruction allocation asserts

* Match CPython basicblock last-instr asserts

* Match CPython opcode range asserts

* Assert CPython fallthrough line propagation invariant

* Assert CPython CFG target offset sign

* Assert CPython exception fallthrough invariant

* Assert CPython exception stack bounds

* Assert CPython traversal stack allocation

* Match CPython label-map allocation in shadow

* Mirror CPython label-map sentinel fill

* Match CPython CFG builder allocation asserts

* Match CPython exception stack structure

* Match CPython ref stack structure

* Match CPython CFG traversal stack structure

* Mirror CPython CFG traversal stack pointer

* Use CPython fixed exception handler stack

* Mirror CPython ref stack capacity field

* Match CPython swap optimizer scratch stack

* Align static swap helpers with CPython blocks

* Align swaptimize signature with CPython

* Match CPython redundant pair pass result

* Match CPython inline pass result

* Match CPython redundant NOP pass results

* Fix bytecode metadata after upstream rebase

* Match CPython opcode stack metadata

* Add CPython identifiers to cspell dictionary

Add CNOTAB, LNOTAB, ialloc, ioffset, iused, nblocks, ncellsused,
ncellvars, nextop, noffsets, nvars, swaptimize, untargeted to
.cspell.dict/cpython.txt for the new CFG/assembler code in
crates/codegen/src/ir.rs.

* Fix CI failures from bytecode-parity work

- clippy: drop redundant `test_` prefix on three test functions and
  remove an unnecessary `u32` cast in basicblock_clear_reuses_cpython_spare_slots_in_offset_order
- insta: regenerate nested_double_async_with snapshot to match the new
  CFG output that drops unreferenced labels after the redundant-NOP pass
- regrtest: drop `@expectedFailure` markers from test_func_args,
  test_meth_args (test_compile), test_disassemble_with,
  test_disassemble_try_finally (test_dis), and test_except_star
  (test_monitoring) which now pass

* Resync generated opcode metadata

Empty conf.toml since WithExceptStart and Setup{Cleanup,Finally,With}
stack effects already match CPython, so the TODO override entries are
stale and only cause CI hook diffs.

Regenerate opcode_metadata.rs and drop the matching SetupCleanup/
SetupFinally/SetupWith assertions on PseudoOpcode::has_arg(); their
`HAS_ARG` flag comes from pseudo definitions in bytecodes.c that the
upstream analyzer does not propagate through PseudoInstruction.properties,
so the generated has_arg() excludes them. has_target() still covers
these block-push pseudos via is_block_push().

* Drop is_block_push has_arg invariant

The CPython invariant `assert(OPCODE_HAS_ARG(op) || !IS_BLOCK_PUSH(op))`
relies on SETUP_{FINALLY,CLEANUP,WITH} carrying `HAS_ARG_FLAG` in
CPython's metadata. The autogen tool reads pseudo-opcode properties from
target instructions and does not propagate the pseudo's own
HAS_ARG flag, so PseudoOpcode::has_arg() omits these three opcodes.
Drop the debug_assert that fired inside py_freeze proc-macro expansion.

* Auto-generate has_eval_break and route AnyInstruction has_arg/has_const via macro

Add fn_has_eval_break to generate_rs_opcode_metadata.py using CPython's
Properties.eval_breaker, removing the hand-written matches! body for
Opcode::has_eval_break and PseudoOpcode::has_eval_break.

Forward has_arg/has_const from Instruction and PseudoInstruction to
their opcode, so AnyInstruction can use either_real_pseudo! like the
other has_* accessors instead of an open-coded match.
2026-05-28 09:19:11 +09:00
Shahar Naveh 26dfeae512 Autogen opcodes metadata (#7983) 2026-05-27 16:44:58 +09:00
Chanho Lee 7733b6f3e2 Reject non-ASCII digits in JSON numbers (#7982) 2026-05-27 16:40:52 +09:00
Jiseok CHOIandJeong, YunWon 913f8c86f7 sqlite3: fix Blob.__setitem__ value range validation (#7981)
* sqlite3: fix Blob.__setitem__ value range validation

Previously, assigning an out-of-range integer (negative or > 255) or an
integer too large for i64 (e.g. 2**65) to a Blob index raised OverflowError
instead of ValueError.

Mirror CPython's ass_subscript_index logic:
- Convert the value via to_i64(), treating any overflow as -1
- Validate the result is in [0, 255], raising ValueError("byte must be in range(0, 256)") otherwise
- Separate deletion error messages: "item deletion" for index, "slice deletion" for slice

* sqlite3: fix Blob.__setitem__ negative-step slice write

In the step != 1 branch of Blob.ass_subscript, the loop used
  i_in_temp += step as usize
where step is isize. For negative steps (e.g. step = -2),
  (-2isize) as usize = 18446744073709551614
causing an out-of-bounds panic whenever slice_len >= 2.

Fix: use SaturatedSliceIter (already used by the read path) to iterate
over the correct absolute blob indices, then map each index back to a
temp buffer offset via abs_idx - range_start.

Also fix a Clippy lint: replace
  val < 0 || val > 255
with the idiomatic
  !(0..=255).contains(&val)

Add a regression test in extra_tests/snippets/stdlib_sqlite.py that
exercises blob[9:0:-2] (negative step, slice_len=5).

* fix: guard blob negative-step snippet from CPython 3.11 bug

* style: add blank line after import sys in stdlib_sqlite snippet (ruff)

* Update extra_tests/snippets/stdlib_sqlite.py

---------

Co-authored-by: Jeong, YunWon <69878+youknowone@users.noreply.github.com>
2026-05-27 16:40:05 +09:00
Shahar Naveh bf001a833c Update ensurepip to 3.14.5 (#7860) 2026-05-26 23:11:43 +09:00
Shahar Naveh 28c6d6767d Skip flaky test (#7967) 2026-05-24 20:00:32 +09:00