← board

Measured 2026-10-03 (frankuser)

f(**{"q": 2}) was first noted as a literal-mapping gap. Measured, it is the CALLEE that matters: **d and **{...} both work into a def with **kw and no *args, and both fail into one with BOTH collectors.

Into a def or method collecting *args and **kwargs

Neither arm took it. The forwarding desugaring (PyStarMixedForwardCall, PyStarExpandCallArgs) serves a callee WITHOUT a star collector, and the splice arm takes a single *. A ** operand is now marked PY_ARG_KWSPREAD in the four argument loops that splice (free def, method, dynamic receiver, PyParseStarMethodArgs). PyPackStarArgs merges it into the kwargs dict in source order with any name=value beside it, through PyHoistDictMergeAny (any mapping).

Through a callable value

PyStarDynCall has no keyword channel, and pyvar_callv_kw takes a compile-time positional count. The new pyvar_callv_kw_star (pyeval) takes the star list and reads the count at run time, up to the four slots pyvar_callv_kw has, with a named TypeError past that. With no keyword left (an empty **{}) it is the plain positional call, so a callable that carries no parameter names still works.

Verified

test_nilpy_a_mapping_spread_into_a_star_and_kwargs_def_is_collected (defs, a method, keywords on both sides of the spread) and test_nilpy_the_functools_shim_matches_cpython (partial): byte-identical to CPython under -dPXX_HEAP_DEBUG and on i386, census flat, control trips.