Skip to content

Commit 42c57d7

Browse files
authored
Merge branch 'main' into 131769-wasi-bebug-main
2 parents 058ae0e + ad42dc1 commit 42c57d7

189 files changed

Lines changed: 2521 additions & 1769 deletions

File tree

Some content is hidden

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

.github/workflows/build.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,13 @@ permissions:
1515
contents: read
1616

1717
concurrency:
18-
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-reusable
18+
# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
19+
# 'group' must be a key uniquely representing a PR or push event.
20+
# github.workflow is the workflow name
21+
# github.actor is the user invoking the workflow
22+
# github.head_ref is the source branch of the PR or otherwise blank
23+
# github.run_id is a unique number for the current run
24+
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.head_ref || github.run_id }}
1925
cancel-in-progress: true
2026

2127
env:

Doc/howto/annotations.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,9 @@ quirks by using :func:`annotationlib.get_annotations` on Python 3.14+ or
248248
:func:`inspect.get_annotations` on Python 3.10+. On earlier versions of
249249
Python, you can avoid these bugs by accessing the annotations from the
250250
class's :attr:`~type.__dict__`
251-
(e.g., ``cls.__dict__.get('__annotations__', None)``).
251+
(for example, ``cls.__dict__.get('__annotations__', None)``).
252+
253+
In some versions of Python, instances of classes may have an ``__annotations__``
254+
attribute. However, this is not supported functionality. If you need the
255+
annotations of an instance, you can use :func:`type` to access its class
256+
(for example, ``annotationlib.get_annotations(type(myinstance))`` on Python 3.14+).

Doc/howto/isolating-extensions.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,21 +215,36 @@ multiple interpreters correctly. If this is not yet the case for your
215215
module, you can explicitly make your module loadable only once per
216216
process. For example::
217217

218+
// A process-wide flag
218219
static int loaded = 0;
219220

221+
// Mutex to provide thread safety (only needed for free-threaded Python)
222+
static PyMutex modinit_mutex = {0};
223+
220224
static int
221225
exec_module(PyObject* module)
222226
{
227+
PyMutex_Lock(&modinit_mutex);
223228
if (loaded) {
229+
PyMutex_Unlock(&modinit_mutex);
224230
PyErr_SetString(PyExc_ImportError,
225231
"cannot load module more than once per process");
226232
return -1;
227233
}
228234
loaded = 1;
235+
PyMutex_Unlock(&modinit_mutex);
229236
// ... rest of initialization
230237
}
231238

232239

240+
If your module's :c:member:`PyModuleDef.m_clear` function is able to prepare
241+
for future re-initialization, it should clear the ``loaded`` flag.
242+
In this case, your module won't support multiple instances existing
243+
*concurrently*, but it will, for example, support being loaded after
244+
Python runtime shutdown (:c:func:`Py_FinalizeEx`) and re-initialization
245+
(:c:func:`Py_Initialize`).
246+
247+
233248
Module State Access from Functions
234249
----------------------------------
235250

Doc/tools/templates/customsourcelink.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{%- if show_source and has_source and sourcename %}
22
<div role="note" aria-label="source link">
3-
<h3>{{ _('This Page') }}</h3>
3+
<h3>{{ _('This page') }}</h3>
44
<ul class="this-page-menu">
5-
<li><a href="{{ pathto('bugs') }}">{% trans %}Report a Bug{% endtrans %}</a></li>
5+
<li><a href="{{ pathto('bugs') }}">{% trans %}Report a bug{% endtrans %}</a></li>
66
<li>
77
<a href="https://github.com/python/cpython/blob/main/Doc/{{ sourcename|replace('.rst.txt', '.rst') }}"
8-
rel="nofollow">{{ _('Show Source') }}
8+
rel="nofollow">{{ _('Show source') }}
99
</a>
1010
</li>
1111
</ul>

Doc/tools/templates/download.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{%- endblock -%}
2828

2929
{% block body %}
30-
<h1>{% trans %}Download Python {{ dl_version }} Documentation{% endtrans %}</h1>
30+
<h1>{% trans %}Download Python {{ dl_version }} documentation{% endtrans %}</h1>
3131

3232
{% if last_updated %}<p><b>{% trans %}Last updated on: {{ last_updated }}.{% endtrans %}</b></p>{% endif %}
3333

Doc/tools/templates/indexcontent.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ <h1>{{ docstitle|e }}</h1>
7272
<table class="contentstable" align="center"><tr>
7373
<td width="50%">
7474
<p class="biglink"><a class="biglink" href="{{ pathto("bugs") }}">{% trans %}Reporting issues{% endtrans %}</a></p>
75-
<p class="biglink"><a class="biglink" href="https://devguide.python.org/documentation/help-documenting/">{% trans %}Contributing to Docs{% endtrans %}</a></p>
75+
<p class="biglink"><a class="biglink" href="https://devguide.python.org/documentation/help-documenting/">{% trans %}Contributing to docs{% endtrans %}</a></p>
7676
<p class="biglink"><a class="biglink" href="{{ pathto("download") }}">{% trans %}Download the documentation{% endtrans %}</a></p>
7777
</td><td width="50%">
7878
<p class="biglink"><a class="biglink" href="{{ pathto("license") }}">{% trans %}History and license of Python{% endtrans %}</a></p>

Doc/tools/templates/indexsidebar.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ <h3>{% trans %}Docs by version{% endtrans %}</h3>
99
<h3>{% trans %}Other resources{% endtrans %}</h3>
1010
<ul>
1111
{# XXX: many of these should probably be merged in the main docs #}
12-
<li><a href="https://peps.python.org/">{% trans %}PEP Index{% endtrans %}</a></li>
13-
<li><a href="https://wiki.python.org/moin/BeginnersGuide">{% trans %}Beginner's Guide{% endtrans %}</a></li>
14-
<li><a href="https://wiki.python.org/moin/PythonBooks">{% trans %}Book List{% endtrans %}</a></li>
15-
<li><a href="https://www.python.org/doc/av/">{% trans %}Audio/Visual Talks{% endtrans %}</a></li>
16-
<li><a href="https://devguide.python.org/">{% trans %}Python Developer’s Guide{% endtrans %}</a></li>
12+
<li><a href="https://peps.python.org/">{% trans %}PEP index{% endtrans %}</a></li>
13+
<li><a href="https://wiki.python.org/moin/BeginnersGuide">{% trans %}Beginner's guide{% endtrans %}</a></li>
14+
<li><a href="https://wiki.python.org/moin/PythonBooks">{% trans %}Book list{% endtrans %}</a></li>
15+
<li><a href="https://www.python.org/doc/av/">{% trans %}Audio/visual talks{% endtrans %}</a></li>
16+
<li><a href="https://devguide.python.org/">{% trans %}Python developer’s guide{% endtrans %}</a></li>
1717
</ul>

Doc/tutorial/index.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
The Python Tutorial
55
######################
66

7+
.. Tip:: This tutorial is designed for
8+
*programmers* that are new to the Python language,
9+
**not** *beginners* who are new to programming.
10+
711
Python is an easy to learn, powerful programming language. It has efficient
812
high-level data structures and a simple but effective approach to
913
object-oriented programming. Python's elegant syntax and dynamic typing,
@@ -21,7 +25,8 @@ implemented in C or C++ (or other languages callable from C). Python is also
2125
suitable as an extension language for customizable applications.
2226

2327
This tutorial introduces the reader informally to the basic concepts and
24-
features of the Python language and system. It helps to have a Python
28+
features of the Python language and system. Be aware that it expects you to
29+
have a basic understanding of programming in general. It helps to have a Python
2530
interpreter handy for hands-on experience, but all examples are self-contained,
2631
so the tutorial can be read off-line as well.
2732

Include/internal/pycore_backoff.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,10 @@ backoff_counter_triggers(_Py_BackoffCounter counter)
9595
return counter.value_and_backoff < UNREACHABLE_BACKOFF;
9696
}
9797

98-
/* Initial JUMP_BACKWARD counter.
99-
* This determines when we create a trace for a loop. */
98+
// Initial JUMP_BACKWARD counter.
99+
// Must be larger than ADAPTIVE_COOLDOWN_VALUE, otherwise when JIT code is
100+
// invalidated we may construct a new trace before the bytecode has properly
101+
// re-specialized:
100102
#define JUMP_BACKWARD_INITIAL_VALUE 4095
101103
#define JUMP_BACKWARD_INITIAL_BACKOFF 12
102104
static inline _Py_BackoffCounter

Include/internal/pycore_code.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,9 @@ write_location_entry_start(uint8_t *ptr, int code, int length)
451451
#define ADAPTIVE_COOLDOWN_BACKOFF 0
452452

453453
// Can't assert this in pycore_backoff.h because of header order dependencies
454+
#if JUMP_BACKWARD_INITIAL_VALUE <= ADAPTIVE_COOLDOWN_VALUE
455+
# error "JIT threshold value should be larger than adaptive cooldown value"
456+
#endif
454457
#if SIDE_EXIT_INITIAL_VALUE <= ADAPTIVE_COOLDOWN_VALUE
455458
# error "Cold exit value should be larger than adaptive cooldown value"
456459
#endif

0 commit comments

Comments
 (0)