13 Commits
Author SHA1 Message Date
youknowdot 0384ddcd70 Align mmap operations and capability reporting with Python 3.15 (#9141)
Separate raw descriptor inspection from owned tracking, update flush and naming behavior, and expose resize only on implemented backends. Migrate canonical mmap tests using update_lib while preserving existing RustPython guards.

Assisted-by: OpenAI Codex:model version unavailable
2026-10-15 19:53:53 +09:00
youknowdotandJeong, YunWon 4dc50cc472 Validate mmap assignments against current storage (#9071)
* Preserve ParamSpec bounds as in Python 3.14.8

Extract the backported bound-validation removal and align the CPython reference pin to 3.14.8 so both snippet interpreters exercise the same contract.

Assisted-by: OpenAI Codex:model identifier unavailable

* Align TextIOWrapper chunk-size deletion with Python 3.14.8

The 3.14.8 reference pin exposes the Argument Clinic deletion guard moved before initialization and attachment checks by CPython 90a1f02b7da0c356d10a23f1faee7dc063f887ed. Preserve assignment checks and align the exact deletion error, including subclass type names.

Assisted-by: OpenAI Codex:model identifier unavailable

* Validate mmap assignments against current storage

Use the existing mapping guard for bounds and writes after argument conversion, including empty assignments. Match the Python 3.14.8 ordering while preserving export guards and ownership APIs.

Assisted-by: OpenAI Codex:model identifier unavailable

* Align mmap boundary regression with Python 3.14.8

Include the matching upstream GH-158027 test-data correction: use an integer RHS so the unchanged IndexError assertion checks index bounds after conversion. Preserve the runtime assignment and storage guards.

Assisted-by: OpenAI Codex:model identifier unavailable

---------

Co-authored-by: Jeong, YunWon <69878+youknowone@users.noreply.github.com>
2026-10-11 12:35:15 +09:00
Jeong, YunWonandJames David Clarke 1dcdec4dd5 Port the remaining runtime fixes from #7993 (#8995)
* Take re pos/endpos as signed integers

Negative values clamp to 0, and values beyond Py_ssize_t raise
OverflowError.

Assisted-by: Claude Code:claude-opus-5-5

* Port the remaining runtime fixes from #7993

- bytearray: keep the buffer exported while converting the needle of
  find/count/index/rfind/rindex/__contains__/split/rsplit and the hex
  separator, so resizing from there raises BufferError
- str(): report non-str encoding/errors as "str() argument 'X' must be
  str, not T", and check argument counts and name/position duplicates
  for keyword calls
- _json.scanstring: take end as a signed integer and raise ValueError
  when it is out of bounds
- lzma: reject filter specs with keys the filter does not take
- mmap: raise ValueError when growing a shared anonymous mapping on
  Linux/NetBSD
- _sqlite3: check that the backup progress argument is callable
- Remove the expectedFailure markers of the tests these fix

Assisted-by: Claude Code:claude-opus-5-5

* Reject arguments given by name and position in FuncArgs::bind_for

bind_for reports a keyword that fills a parameter already given by
position before other binding errors, using the parameter list of the
FromArgs type. getargs shares the message, str() drops its own check,
and blake2b/blake2s name themselves in binding errors.

Assisted-by: Claude Code:claude-opus-5-5

---------

Co-authored-by: James David Clarke <james@jamesdavidclarke.com>
2026-10-08 08:11:26 +09:00
Jeongseop Lim 95686c08e4 Accept __index__ for the remaining int-bound arguments (#8999)
#8828 made bin(), chr() and several other arguments that were bound
as PyIntRef go through __index__, but these still downcast to int and
reject an object that only defines __index__: the start and end of the
str/bytes/bytearray find family, enumerate(start=),
itertools.combinations/combinations_with_replacement/batched,
_thread.stack_size, resource.getrlimit/setrlimit, pwd.getpwuid,
grp.getgrgid, fcntl.fcntl/lockf and mmap.move/madvise. CPython converts
all of them with _PyNumber_Index or _PyEval_SliceIndex.

Bind them as ArgIndex, as #8828 did for the others.

test_mmap.test_madvise and test_mmap_closed_by_int_scenarios now pass,
so drop their expectedFailure markers.

Assisted-by: Claude Code:claude-opus-5-5
2026-10-07 23:32:59 +09:00
Jeong, YunWon 7c4017b3d8 Retry select/poll/fcntl on EINTR and add kqueue (#8721)
* Retry select/poll/fcntl on EINTR

select() no longer shares one empty list for r/w/x and now
calls select(2) even with empty sets so the timeout elapses.
poll() rejects type instantiation, treats float timeout as
milliseconds, and raises RuntimeError on concurrent poll().
fcntl, ioctl, flock, and lockf retry after EINTR.

Assisted-by: Grok:grok-4.6

* Add select.kqueue and select.kevent

Expose kqueue(2)/kevent(2) on BSD and macOS, including
control() EINTR retry and marking open kqueue objects
closed after fork.

Assisted-by: Grok:grok-4.6

* Add login_tty and fix termios/syslog/mmap

termios.error is Exception, not OSError.
os.login_tty prepares a tty for a new session.
syslog.openlog encodes ident as UTF-8.
mmap.seek returns the new position.

Assisted-by: Grok:grok-4.6

* Honor mmap trackfd on Unix

When trackfd is false, do not keep a duplicated file
descriptor. size() then fails with EBADF and resize()
raises ValueError.

Assisted-by: Grok:grok-4.6

* address review: portable kevent and kqueue close

Build kevent values by field assignment so FreeBSD's
ext array compiles. Normalize timespec nanoseconds,
keep the kqueue fd live across control(), reinit the
open list lock after fork, make trackfd keyword-only,
and skip login_tty on Solaris/illumos.

Assisted-by: Grok:grok-4.6

(cherry picked from commit 0ba7048ac9)
Assisted-by: Codex:gpt-6
2026-09-17 01:33:13 +09:00
Shahar Naveh 16869e1ce8 Update some tests to 3.14.6 (#8204)
* Apply skip at the correct place

* Update `test_msvcrt.yp` to 3.14.6

* Add `test_external_inspection.py`
2026-07-02 16:32:33 +09:00
Shahar Naveh 6eae1dde6c Update some tests to 3.14.5 (#7991) 2026-06-02 18:00:54 +09:00
Jeong, YunWon 364a7d5ad5 A few windows fix (#7458)
* Disallow instantiation of sys.getwindowsversion type

Add slot_new to PyWindowsVersion that raises TypeError,
matching sys.flags behavior.

* Remove incorrect WSAHOS errno constant

WSAHOS was hardcoded as an alias for WSAHOST_NOT_FOUND, but
CPython guards it with #ifdef WSAHOS which doesn't exist in
modern Windows SDK headers.

* Fix mmap resize to raise OSError instead of SystemError

* Fix CreateProcess with empty environment on Windows

Empty env dict produced a single null terminator, but
CreateProcessW requires a double null for a valid empty
environment block.

* Revert mmap resize error to SystemError and fix errno.rs formatting

mmap resize raises SystemError (not OSError) when mremap is unavailable,
matching CPython behavior. test_mmap catches SystemError to skip unsupported
resize operations.

* Fix named mmap resize to raise OSError and unmark test_sleep expectedFailure

Named mmap resize on Windows should raise OSError (not SystemError).
Remove expectedFailure mark from TimeEINTRTest.test_sleep as it now passes.

* Use expectedFailureIf for TimeEINTRTest.test_sleep on Linux

test_sleep passes on macOS but fails on Linux due to timing.

* Remove expectedFailure for TimeEINTRTest.test_sleep

test_sleep now passes on all platforms.
2026-03-21 22:49:09 +09:00
Jeong, YunWon cb7f19c316 Implement Windows named mmap via CreateFileMappingW (#7207)
Use Win32 CreateFileMappingW + MapViewOfFile when tagname is
provided, enabling inter-process shared memory for
multiprocessing.heap.Arena. Anonymous mmaps without tagname
still use memmap2.

Remove expectedFailure from test_tagname in test_mmap.py.
2026-02-23 23:32:52 +09:00
Jeong, YunWon b3141d1231 mmap for windows (#6329) 2025-12-06 09:26:33 +09:00
Andrey Maltsev ffea61b540 Update test_mmap.py from Cpython v3.11.2 2023-04-06 00:39:38 +09:00
Dennis Zhuang 1ff3e0a551 Skip test_flush_return_value on linux platform 2022-06-15 01:59:26 +09:00
Dennis Zhuang 3217de7af2 Adds test_mmap.py from CPython 3.10.4 2022-06-15 01:59:26 +09:00