Skip to content

Commit 6dd66e9

Browse files
authored
Merge branch 'main' into issue-116023
2 parents b3ab87b + 2cf18a4 commit 6dd66e9

File tree

593 files changed

+19122
-8283
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

593 files changed

+19122
-8283
lines changed

.devcontainer/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ FROM docker.io/library/fedora:37
22

33
ENV CC=clang
44

5-
ENV WASI_SDK_VERSION=20
5+
ENV WASI_SDK_VERSION=21
66
ENV WASI_SDK_PATH=/opt/wasi-sdk
77

88
ENV WASMTIME_HOME=/opt/wasmtime
9-
ENV WASMTIME_VERSION=14.0.4
9+
ENV WASMTIME_VERSION=18.0.3
1010
ENV WASMTIME_CPU_ARCH=x86_64
1111

1212
RUN dnf -y --nodocs --setopt=install_weak_deps=False install /usr/bin/{blurb,clang,curl,git,ln,tar,xz} 'dnf-command(builddep)' && \

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ Include/opcode_ids.h generated
8383
Include/token.h generated
8484
Lib/_opcode_metadata.py generated
8585
Lib/keyword.py generated
86+
Lib/test/certdata/*.pem generated
87+
Lib/test/certdata/*.0 generated
8688
Lib/test/levenshtein_examples.json generated
8789
Lib/test/test_stable_abi_ctypes.py generated
8890
Lib/token.py generated

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ Lib/test/test_interpreters/ @ericsnowcurrently
247247
/Tools/wasm/ @brettcannon
248248

249249
# SBOM
250+
/Misc/externals.spdx.json @sethmlarson
250251
/Misc/sbom.spdx.json @sethmlarson
251252
/Tools/build/generate_sbom.py @sethmlarson
252253

.github/workflows/build.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ jobs:
206206
uses: ./.github/workflows/reusable-macos.yml
207207
with:
208208
config_hash: ${{ needs.check_source.outputs.config_hash }}
209+
# macos-14 is M1, macos-13 is Intel
210+
os-matrix: '["macos-14", "macos-13"]'
209211

210212
build_macos_free_threading:
211213
name: 'macOS (free-threading)'
@@ -215,6 +217,8 @@ jobs:
215217
with:
216218
config_hash: ${{ needs.check_source.outputs.config_hash }}
217219
free-threading: true
220+
# macos-14 is M1
221+
os-matrix: '["macos-14"]'
218222

219223
build_ubuntu:
220224
name: 'Ubuntu'
@@ -301,6 +305,14 @@ jobs:
301305
- name: SSL tests
302306
run: ./python Lib/test/ssltests.py
303307

308+
build_wasi:
309+
name: 'WASI'
310+
needs: check_source
311+
if: needs.check_source.outputs.run_tests == 'true'
312+
uses: ./.github/workflows/reusable-wasi.yml
313+
with:
314+
config_hash: ${{ needs.check_source.outputs.config_hash }}
315+
304316
test_hypothesis:
305317
name: "Hypothesis tests on Ubuntu"
306318
runs-on: ubuntu-20.04
@@ -525,6 +537,7 @@ jobs:
525537
- build_ubuntu
526538
- build_ubuntu_free_threading
527539
- build_ubuntu_ssltests
540+
- build_wasi
528541
- build_windows
529542
- build_windows_free_threading
530543
- test_hypothesis
@@ -558,6 +571,7 @@ jobs:
558571
build_ubuntu,
559572
build_ubuntu_free_threading,
560573
build_ubuntu_ssltests,
574+
build_wasi,
561575
build_windows,
562576
build_windows_free_threading,
563577
build_asan,

.github/workflows/jit.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ jobs:
2929
target:
3030
- i686-pc-windows-msvc/msvc
3131
- x86_64-pc-windows-msvc/msvc
32+
- aarch64-pc-windows-msvc/msvc
3233
- x86_64-apple-darwin/clang
3334
- aarch64-apple-darwin/clang
3435
- x86_64-unknown-linux-gnu/gcc
@@ -49,6 +50,10 @@ jobs:
4950
architecture: x64
5051
runner: windows-latest
5152
compiler: msvc
53+
- target: aarch64-pc-windows-msvc/msvc
54+
architecture: ARM64
55+
runner: windows-latest
56+
compiler: msvc
5257
- target: x86_64-apple-darwin/clang
5358
architecture: x86_64
5459
runner: macos-13
@@ -70,13 +75,13 @@ jobs:
7075
runner: ubuntu-latest
7176
compiler: gcc
7277
# These fail because of emulation, not because of the JIT:
73-
exclude: test_unix_events test_init test_process_pool test_shutdown test_multiprocessing_fork test_cmd_line test_faulthandler test_os test_perf_profiler test_posix test_signal test_socket test_subprocess test_threading test_venv
78+
exclude: test_unix_events test_init test_process_pool test_shutdown test_multiprocessing_fork test_cmd_line test_faulthandler test_os test_perf_profiler test_posix test_signal test_socket test_subprocess test_threading test_venv test_external_inspection
7479
- target: aarch64-unknown-linux-gnu/clang
7580
architecture: aarch64
7681
runner: ubuntu-latest
7782
compiler: clang
7883
# These fail because of emulation, not because of the JIT:
79-
exclude: test_unix_events test_init test_process_pool test_shutdown test_multiprocessing_fork test_cmd_line test_faulthandler test_os test_perf_profiler test_posix test_signal test_socket test_subprocess test_threading test_venv
84+
exclude: test_unix_events test_init test_process_pool test_shutdown test_multiprocessing_fork test_cmd_line test_faulthandler test_os test_perf_profiler test_posix test_signal test_socket test_subprocess test_threading test_venv test_external_inspection
8085
env:
8186
CC: ${{ matrix.compiler }}
8287
steps:
@@ -85,14 +90,21 @@ jobs:
8590
with:
8691
python-version: '3.11'
8792

88-
- name: Windows
89-
if: runner.os == 'Windows'
93+
- name: Native Windows
94+
if: runner.os == 'Windows' && matrix.architecture != 'ARM64'
9095
run: |
9196
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}
9297
./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '--pgo' }} -p ${{ matrix.architecture }}
9398
./PCbuild/rt.bat ${{ matrix.debug && '-d' }} -p ${{ matrix.architecture }} -q --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 3600 --verbose2 --verbose3
9499
95-
- name: macOS
100+
# No PGO or tests (yet):
101+
- name: Emulated Windows
102+
if: runner.os == 'Windows' && matrix.architecture == 'ARM64'
103+
run: |
104+
choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}
105+
./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }}
106+
107+
- name: Native macOS
96108
if: runner.os == 'macOS'
97109
run: |
98110
brew install llvm@${{ matrix.llvm }}

.github/workflows/reusable-macos.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ on:
88
required: false
99
type: boolean
1010
default: false
11+
os-matrix:
12+
required: false
13+
type: string
1114

1215
jobs:
1316
build_macos:
@@ -22,10 +25,7 @@ jobs:
2225
strategy:
2326
fail-fast: false
2427
matrix:
25-
os: [
26-
"macos-14", # M1
27-
"macos-13", # Intel
28-
]
28+
os: ${{fromJson(inputs.os-matrix)}}
2929
runs-on: ${{ matrix.os }}
3030
steps:
3131
- uses: actions/checkout@v4

.github/workflows/reusable-wasi.yml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
on:
2+
workflow_call:
3+
inputs:
4+
config_hash:
5+
required: true
6+
type: string
7+
8+
jobs:
9+
build_wasi_reusable:
10+
name: 'build and test'
11+
timeout-minutes: 60
12+
runs-on: ubuntu-20.04
13+
env:
14+
WASMTIME_VERSION: 18.0.3
15+
WASI_SDK_VERSION: 21
16+
WASI_SDK_PATH: /opt/wasi-sdk
17+
CROSS_BUILD_PYTHON: cross-build/build
18+
CROSS_BUILD_WASI: cross-build/wasm32-wasi
19+
steps:
20+
- uses: actions/checkout@v4
21+
# No problem resolver registered as one doesn't currently exist for Clang.
22+
- name: "Install wasmtime"
23+
uses: jcbhmr/setup-wasmtime@v2
24+
with:
25+
wasmtime-version: ${{ env.WASMTIME_VERSION }}
26+
- name: "Restore WASI SDK"
27+
id: cache-wasi-sdk
28+
uses: actions/cache@v4
29+
with:
30+
path: ${{ env.WASI_SDK_PATH }}
31+
key: ${{ runner.os }}-wasi-sdk-${{ env.WASI_SDK_VERSION }}
32+
- name: "Install WASI SDK"
33+
if: steps.cache-wasi-sdk.outputs.cache-hit != 'true'
34+
run: |
35+
mkdir ${{ env.WASI_SDK_PATH }} && \
36+
curl -s -S --location https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ env.WASI_SDK_VERSION }}/wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-linux.tar.gz | \
37+
tar --strip-components 1 --directory ${{ env.WASI_SDK_PATH }} --extract --gunzip
38+
- name: "Configure ccache action"
39+
uses: hendrikmuhs/ccache-action@v1.2
40+
with:
41+
save: ${{ github.event_name == 'push' }}
42+
max-size: "200M"
43+
- name: "Add ccache to PATH"
44+
run: echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
45+
- name: "Install Python"
46+
uses: actions/setup-python@v5
47+
with:
48+
python-version: '3.x'
49+
- name: "Restore Python build config.cache"
50+
uses: actions/cache@v4
51+
with:
52+
path: ${{ env.CROSS_BUILD_PYTHON }}/config.cache
53+
key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ inputs.config_hash }}
54+
- name: "Configure build Python"
55+
run: python3 Tools/wasm/wasi.py configure-build-python -- --config-cache --with-pydebug
56+
- name: "Make build Python"
57+
run: python3 Tools/wasm/wasi.py make-build-python
58+
- name: "Restore host config.cache"
59+
uses: actions/cache@v4
60+
with:
61+
path: ${{ env.CROSS_BUILD_WASI }}/config.cache
62+
key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-wasi-sdk-${{ env.WASI_SDK_VERSION }}-${{ inputs.config_hash }}
63+
- name: "Configure host"
64+
# `--with-pydebug` inferred from configure-build-python
65+
run: python3 Tools/wasm/wasi.py configure-host -- --config-cache
66+
- name: "Make host"
67+
run: python3 Tools/wasm/wasi.py make-host
68+
- name: "Display build info"
69+
run: make --directory ${{ env.CROSS_BUILD_WASI }} pythoninfo
70+
- name: "Test"
71+
run: make --directory ${{ env.CROSS_BUILD_WASI }} test

.github/workflows/stale.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Mark stale pull requests
22

33
on:
44
schedule:
5-
- cron: "0 0 * * *"
5+
- cron: "0 */12 * * *"
66

77
permissions:
88
pull-requests: write

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,17 @@ Lib/test/data/*
6969
/_bootstrap_python
7070
/Makefile
7171
/Makefile.pre
72+
iOSTestbed.*
73+
iOS/Frameworks/
7274
iOS/Resources/Info.plist
75+
iOS/testbed/build
76+
iOS/testbed/Python.xcframework/ios-*/bin
77+
iOS/testbed/Python.xcframework/ios-*/include
78+
iOS/testbed/Python.xcframework/ios-*/lib
79+
iOS/testbed/Python.xcframework/ios-*/Python.framework
80+
iOS/testbed/iOSTestbed.xcodeproj/project.xcworkspace
81+
iOS/testbed/iOSTestbed.xcodeproj/xcuserdata
82+
iOS/testbed/iOSTestbed.xcodeproj/xcshareddata
7383
Mac/Makefile
7484
Mac/PythonLauncher/Info.plist
7585
Mac/PythonLauncher/Makefile

Doc/c-api/contextvars.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Context Variables Objects
66
-------------------------
77

88
.. _contextvarsobjects_pointertype_change:
9+
.. versionadded:: 3.7
10+
911
.. versionchanged:: 3.7.1
1012

1113
.. note::
@@ -24,8 +26,6 @@ Context Variables Objects
2426
See :issue:`34762` for more details.
2527

2628

27-
.. versionadded:: 3.7
28-
2929
This section details the public C API for the :mod:`contextvars` module.
3030

3131
.. c:type:: PyContext

Doc/c-api/hash.rst

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
PyHash API
44
----------
55

6-
See also the :c:member:`PyTypeObject.tp_hash` member.
6+
See also the :c:member:`PyTypeObject.tp_hash` member and :ref:`numeric-hash`.
77

88
.. c:type:: Py_hash_t
99
@@ -17,6 +17,29 @@ See also the :c:member:`PyTypeObject.tp_hash` member.
1717

1818
.. versionadded:: 3.2
1919

20+
.. c:macro:: PyHASH_MODULUS
21+
22+
The `Mersenne prime <https://en.wikipedia.org/wiki/Mersenne_prime>`_ ``P = 2**n -1``, used for numeric hash scheme.
23+
24+
.. versionadded:: 3.13
25+
26+
.. c:macro:: PyHASH_BITS
27+
28+
The exponent ``n`` of ``P`` in :c:macro:`PyHASH_MODULUS`.
29+
30+
.. versionadded:: 3.13
31+
32+
.. c:macro:: PyHASH_INF
33+
34+
The hash value returned for a positive infinity.
35+
36+
.. versionadded:: 3.13
37+
38+
.. c:macro:: PyHASH_IMAG
39+
40+
The multiplier used for the imaginary part of a complex number.
41+
42+
.. versionadded:: 3.13
2043

2144
.. c:type:: PyHash_FuncDef
2245

Doc/c-api/import.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ Importing Modules
308308
309309
The module name, as an ASCII encoded string.
310310
311-
.. c: member:: PyObject* (*initfunc)(void)
311+
.. c:member:: PyObject* (*initfunc)(void)
312312
313313
Initialization function for a module built into the interpreter.
314314

Doc/c-api/init.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,14 +1575,14 @@ pointer and a void pointer argument.
15751575
function is generally **not** suitable for calling Python code from
15761576
arbitrary C threads. Instead, use the :ref:`PyGILState API<gilstate>`.
15771577
1578+
.. versionadded:: 3.1
1579+
15781580
.. versionchanged:: 3.9
15791581
If this function is called in a subinterpreter, the function *func* is
15801582
now scheduled to be called from the subinterpreter, rather than being
15811583
called from the main interpreter. Each subinterpreter now has its own
15821584
list of scheduled calls.
15831585
1584-
.. versionadded:: 3.1
1585-
15861586
.. _profiling:
15871587
15881588
Profiling and Tracing

Doc/c-api/long.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate.
450450
a “fast path” for small integers. For compact values use
451451
:c:func:`PyUnstable_Long_CompactValue`; for others fall back to a
452452
:c:func:`PyLong_As* <PyLong_AsSize_t>` function or
453-
:c:func:`calling <PyObject_CallMethod>` :meth:`int.to_bytes`.
453+
:c:func:`PyLong_AsNativeBytes`.
454454
455455
The speedup is expected to be negligible for most users.
456456

Doc/c-api/refcounting.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ of Python objects.
2323
2424
Use the :c:func:`Py_SET_REFCNT()` function to set an object reference count.
2525
26-
.. versionchanged:: 3.11
27-
The parameter type is no longer :c:expr:`const PyObject*`.
28-
2926
.. versionchanged:: 3.10
3027
:c:func:`Py_REFCNT()` is changed to the inline static function.
3128
29+
.. versionchanged:: 3.11
30+
The parameter type is no longer :c:expr:`const PyObject*`.
31+
3232
3333
.. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
3434

Doc/c-api/structures.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -702,20 +702,20 @@ Defining Getters and Setters
702702
703703
.. c:member:: void* closure
704704
705-
Optional function pointer, providing additional data for getter and setter.
705+
Optional user data pointer, providing additional data for getter and setter.
706706
707707
.. c:type:: PyObject *(*getter)(PyObject *, void *)
708708
709709
The ``get`` function takes one :c:expr:`PyObject*` parameter (the
710-
instance) and a function pointer (the associated ``closure``):
710+
instance) and a user data pointer (the associated ``closure``):
711711
712712
It should return a new reference on success or ``NULL`` with a set exception
713713
on failure.
714714
715715
.. c:type:: int (*setter)(PyObject *, PyObject *, void *)
716716
717717
``set`` functions take two :c:expr:`PyObject*` parameters (the instance and
718-
the value to be set) and a function pointer (the associated ``closure``):
718+
the value to be set) and a user data pointer (the associated ``closure``):
719719
720720
In case the attribute should be deleted the second parameter is ``NULL``.
721721
Should return ``0`` on success or ``-1`` with a set exception on failure.

0 commit comments

Comments
 (0)