Skip to content

builtins: exception, iterator and function attribute surface parity - #950

Merged
youknowone merged 137 commits into
mainfrom
buitlins
Aug 4, 2026
Merged

youknowone merged 137 commits into
mainfrom
buitlins

Conversation

@youknowone

@youknowone youknowone commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Builtin/type surface parity work, rebased onto main after #936 merged.
53 files, +2523/-659 across 37 commits.

Themes

  • Exception surface — SyntaxError location/offset/source-range rendering, indentation-error classification, file-encoding error formatting, sys.excepthook aliases, exception descriptor validation and delete-rejection, AttributeError pickle state, mutation-safe UnicodeError formatting, ExceptionGroup sequence repr.
  • Iterator/type identities — bytes, string, memory, array and unpack iterator types exposed; exhausted list-reverse iterators preserved and released.
  • __pypy__ / memoryviewbufferable, newmemoryview, multidimensional subviews, multidimensional count rejection, PickleBuffer public type surface.
  • Function objects__name__/__qualname__/__code__/__dict__ deleters raise the setter's TypeError; method.__class__ delete rejected; method.__dir__ forwards the underlying function's instance dict; func_set_code warns DeprecationWarning when the code object changes the callable's kind.
  • Misc bindingsint.from_bytes bytes keyword, stat follow_symlinks, coroutine-origin depth keyword, frozen/builtin module APIs, unicodedata UCD type, identity_dict mapping API, float NaN list ordering, eval/AST compile contracts, wrapped builtin method qualification.

Rebase notes

Four commits were dropped as already upstream via #936's squash merge (UnionType rich-comparison and identity/iteration slots, functools reduce/cmp_to_key exports, the check.py startup median).

One commit — builtins: describe unraisable destructor errors — was dropped as a deliberate resolution. It replaced the __del__ failure report with CPython's Exception ignored while calling deallocator ... label and object=None, but main matches pypy/interpreter/executioncontext.py:690 line-for-line:

report_error(space, e, '', w_del)

The commit carried no test, so the PyPy form was kept. Say so if the CPython wording was intended and it will be restored.

Verification

cargo check --all --no-default-features --features dynasm — clean.
Full gates run here in CI.

Commits

  • builtins: add function attribute deleters and method dir forwarding
  • memoryview: reject multidimensional count
  • builtins: expose string and memory iterators
  • builtins: align bytes and unpack iterator surfaces
  • builtins: expose bytes iterator identities
  • pickle: align PickleBuffer public type surface
  • posix: bind stat follow_symlinks keyword
  • imp: align frozen and builtin module APIs
  • sys: bind coroutine origin depth keyword
  • builtins: expose array iterator type
  • builtins: preserve exhausted list reverse iterators
  • builtins: align type and exception descriptors
  • builtins: preserve float NaN list ordering semantics
  • builtins: align eval and AST compile contracts
  • builtins: align exception type descriptors
  • builtins: bind int.from_bytes bytes keyword
  • builtins: complete identity_dict mapping API
  • builtins: port unicodedata UCD type
  • builtins: port pypy bufferable
  • builtins: port pypy newmemoryview
  • builtins: qualify wrapped builtin methods
  • builtins: support multidimensional memoryview subviews
  • builtins: classify indentation syntax errors
  • builtins: expose missing frame line as None
  • builtins: format file encoding errors
  • builtins: render SyntaxError file source ranges
  • builtins: clamp SyntaxError display offsets
  • builtins: preserve compiler SyntaxError locations
  • builtins: implement sys excepthook aliases
  • builtins: validate SyntaxError details
  • builtins: make UnicodeError formatting mutation-safe
  • builtins: release exhausted list reverse iterators
  • builtins: preserve AttributeError pickle state
  • builtins: reject deletion of exception descriptors
  • builtins: restore exception state through attributes
  • builtins: preserve ExceptionGroup sequence repr
  • functools: port reduce and cmp_to_key accelerators

authored by Claude

Summary by CodeRabbit

  • New Features

    • Added Python 3.14-compatible behavior for iterators, memory views, exceptions, coroutine tracking, module detection, and file operations.
    • Improved functools.cmp_to_key and reduce, including keyword arguments and callable key wrappers.
    • Added multidimensional memory view and buffer protocol support.
    • Improved script encoding detection and error reporting.
    • Added identity_dict.keys() and .values() support.
    • Improved Unicode database version handling and sys.excepthook.
  • Bug Fixes

    • Corrected exception formatting, syntax-error positioning, Unicode handling, attribute behavior, and iterator state preservation.
    • Improved os.stat handling for keyword-only symlink behavior.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant