* Honor close unraisable and deallocator messages
A failed close lookup on a yield-from target is unraisable.
Ignored GeneratorExit from finalize gets a traceback and the
closing-generator err_msg. __del__ uses the deallocator message.
Assisted-by: Grok:grok-4.6
* address review: claim, ag_running, frame steal
Keep the running claim through close() cleanup. ag_running
reads running_async. aclose ignore-yield does not mark the
generator closed. Steal the frame slot before uniqueness
and expose it with try_to_owned.
Assisted-by: Grok:grok-4.6
* Honor wrapper docs, yield assign, throw context
method-wrapper exposes the slot __doc__. Parenthesized yield
assignment uses the invalid-target messages. throw() restores
without overwriting __context__, then chains only from the
generator's own exc_info slot.
Assisted-by: Grok:grok-4.6
* Remove passing expectedFailure markers
method-wrapper docs, deallocator messages, and help pager
output now match, so drop the leftover markers.
Assisted-by: Grok:grok-4.6
* Honor wrapper signatures and assignment diagnostics
Slot docs include text signatures. method-wrapper compares and
hashes by identity. Keyword genexp and if/while assignment use
the invalid-target messages.
Assisted-by: Grok:grok-4.6
* address review: aclose, unraisable, frame publish
aclose ignore-yield does not close the generator. Format
unraisable object is None. close() leaves traceback to the
caller; finalize attaches the generator frame. Publish the
iframe before the lock-free slot.
Assisted-by: Grok:grok-4.6
* Honor member descriptors and wrapper annotations
Assisted-by: Grok:grok-4.6
* address review: getitem, bool doc, if assign
Assisted-by: Grok:grok-4.6
* Honor eval-mode assignment invalid syntax
Assisted-by: Grok:grok-4.6
* Supply getset and member docs from rustpython-doc
Assisted-by: Grok:grok-4.6
* Enable rustls SSL on WASI targets
Compile the rustls _ssl module for WASI and stub
socket waits plus the native certificate store.
Assisted-by: Grok:grok-4.6
* Add browser TLS _ssl in rustpython-wasm
Register rustls _ssl and a MemoryBIO-oriented _socket
from rustpython-wasm. Use rustls-rustcrypto because
ring cannot compile for wasm32-unknown-unknown.
Assisted-by: Grok:grok-4.6
* Define SSL protocol and cert constants as enums
Keep OpenSSL bitmask defines as integer constants.
Assisted-by: Grok:grok-4.6
* Ignore rustls deps cargo-shear cannot see
The rustpython-wasm _ssl sources are compiled through
a symlink, so shear does not count their crate uses.
Assisted-by: Grok:grok-4.6
* Replace wasm ssl symlink with a BIO module
Drop the stdlib ssl.rs link and keep a rustpython-wasm
_ssl that only covers MemoryBIO wrap_bio TLS.
Assisted-by: Grok:grok-4.6
PEP 479 wraps a StopIteration raised from a generator/coroutine into a
RuntimeError. CPython sets both __cause__ and __context__ of the new
RuntimeError to the original StopIteration (the same object). RustPython's
wrapping sites set __cause__ only, leaving __context__ as None.
set___cause__ already toggles __suppress_context__ to true, so the
user-facing traceback is unchanged — only assertions that inspect
__context__ directly observe the gap.
Three sites all wrap StopIteration / StopAsyncIteration into RuntimeError
for PEP 479. Set __context__ to the same exception instance before
setting __cause__ at each:
- frame.rs::StopIterationError intrinsic (generator yield-expression path)
- coroutine.rs generator __next__ StopIteration branch
- coroutine.rs async-generator __anext__ StopAsyncIteration branch
PyBaseExceptionRef is Arc-backed, so e.clone() is a refcount bump;
'cause is context' holds, matching CPython.
Unmasks:
- test_generator_stop.TestPEP479.test_stopiteration_wrapping_context
- test_yield_from.TestInterestingEdgeCases.test_close_and_throw_work
- test_yield_from.TestInterestingEdgeCases.test_close_and_throw_raise_stop_iteration
- test_yield_from.TestInterestingEdgeCases.test_close_and_throw_yield
- Use POP_TOP instead of POP_ITER for for-loop break/return cleanup
- Expand duplicate_end_returns to clone final return for jump predecessors
- Restrict late jump threading pass to unconditional jumps only
- Skip exception blocks in inline/reorder passes
- Simplify threaded_jump_instr NoInterrupt handling
* Update `test_call.py` from 3.13.7
* Update `test_yield_from.py` from 3.13.7
* Update more tests to 3.13.7
* More tests to 3.13.7
* Remove patch from passing test