* Add ExceptionGroup fields and OSError use-init
BaseExceptionGroup stores msg, excs, and excs_str; args keep
the original sequence. OSError defers parse when a subclass
overrides only __init__. characters_written can be deleted.
Exception args/traceback/cause/context reject invalid
setattr/delattr. UnicodeError.object is a deletable field.
except* remainder projection copies traceback/context/cause.
SyntaxError.__init__ clears omitted location attributes.
Assisted-by: Grok:grok-4.6
* Fix OSError payload init and UnicodeError construction
new_payload_exception now runs slot_new so BlockingIOError
parses characters_written. new_exception falls back to
invoke_exception for extra-payload types. Mixed tab/space
UnexpectedIndentation is TabError. AttributeError pickle
omits obj.
Assisted-by: Grok:grok-4.6
* address review: classify TabError from error line
Assisted-by: Grok:grok-4.6
* Add new_simple_exception; fill SyntaxError and f_lineno
new_exception constructs extra-payload types; BaseException-sized
types use new_simple_exception. Non-UTF-8 SyntaxError sets location
and text. Codegen errors load text via ProgramText. Keep Missing
parentheses capitalization. f-string adjacent atoms report a missing
comma. f_lineno may be None; lasti is not restored on unwind.
Assisted-by: Grok:grok-4.6
* address review: skip f-string continuation keywords
Assisted-by: Grok:grok-4.6
* Fix clippy map_unwrap_or in Non-UTF-8 offset
Assisted-by: Grok:grok-4.6
* Rename encode error ctor and exception setters
new_unicode_encode_error_real is new_unicode_encode_error.
set___traceback__/__cause__/__context__ are pygetset setters;
Rust uses set_traceback/set_cause/set_context.
Assisted-by: Grok:grok-4.6
* Use set_context in native pickle
Assisted-by: Grok:grok-4.6
* Collapse nested if in asyncio traceback restore
Assisted-by: Grok:grok-4.6
* Use current instruction for f_lineno addr2line
lasti is stored as the next instruction index. addr2line of
that byte offset is past RETURN_VALUE, so f_lineno was None
and stdlib_threading_current_frames hung on leftover workers.
Assisted-by: Grok:grok-4.6
* Look up format args, dir class, and frame builtins
Consume printf args before rejecting unknown conversions.
object.__dir__ uses getattr of __class__/__dict__.
_PyEval_GetBuiltin looks up iter/__import__ on the frame.
Assisted-by: Grok:grok-4.6
* Fix builtin lookups after rebase and unxfail passing tests
Assisted-by: Grok:grok-4.6
* Restore RERAISE lasti and SyntaxError locations
RERAISE with oparg restores lasti from the exception table
before unwind, so leftover f_lineno matches the original raise.
Handler lookup still uses the raising instruction.
Indentation errors outrank print/exec missing-parentheses.
BOM-with-non-utf8, bytes literals, and global+nonlocal now
report the same offsets as the parser/symtable.
object.__dir__ keeps string keys; type.__type_params__ skips
the getset wrapper stored on builtin types.
Assisted-by: Grok:grok-4.6
* Unxfail syntax/import tests and bind jump locals
IMPORT_NAME passes fromlist None instead of an empty tuple.
Jumping f_lineno binds None into unbound localsplus slots.
str lstrip/rstrip copy subclasses to exact str when unchanged.
Assisted-by: Grok:grok-4.6
* Fix import_from callers and rename frame lineno
sqlite3.iterdump now passes fromlist as a PyObject.
FrameObject::lineno is the i32 helper; f_lineno is the getset.
Assisted-by: Grok:grok-4.6
* Pass sqlite fromlist without Into conversion
from_list.into() could not infer Into<PyObjectRef> at the
import_from call. The typed tuple already converts.
Assisted-by: Grok:grok-4.6