Python-checkins
Threads by month
- ----- 2024 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
June 2023
- 1 participants
- 674 discussions
https://github.com/python/cpython/commit/80b3d8f337bef52d7c360b4ee86be87368…
commit: 80b3d8f337bef52d7c360b4ee86be873681f747a
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T12:28:59+02:00
summary:
gh-106023: Remove _PyObject_FastCallTstate() function (#106273)
files:
M Doc/c-api/call.rst
M Include/internal/pycore_call.h
M Python/sysmodule.c
diff --git a/Doc/c-api/call.rst b/Doc/c-api/call.rst
index 4dc66e318cd12..ac6242701c504 100644
--- a/Doc/c-api/call.rst
+++ b/Doc/c-api/call.rst
@@ -113,19 +113,6 @@ function as with any other callable.
:c:func:`PyObject_Vectorcall` will usually be most efficient.
-.. note::
-
- In CPython 3.8, the vectorcall API and related functions were available
- provisionally under names with a leading underscore:
- ``_PyObject_Vectorcall``, ``_Py_TPFLAGS_HAVE_VECTORCALL``,
- ``_PyObject_VectorcallMethod``, ``_PyVectorcall_Function``,
- ``_PyObject_CallOneArg``, ``_PyObject_CallMethodNoArgs``,
- ``_PyObject_CallMethodOneArg``.
- Additionally, ``PyObject_VectorcallDict`` was available as
- ``_PyObject_FastCallDict``.
- The old names are still defined as aliases of the new, non-underscored names.
-
-
Recursion Control
.................
diff --git a/Include/internal/pycore_call.h b/Include/internal/pycore_call.h
index 6058335cd4051..9c32035d474b3 100644
--- a/Include/internal/pycore_call.h
+++ b/Include/internal/pycore_call.h
@@ -117,8 +117,7 @@ _PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg
/* === Vectorcall protocol (PEP 590) ============================= */
-// Call callable using tp_call. Arguments are like PyObject_Vectorcall()
-// or PyObject_FastCallDict() (both forms are supported),
+// Call callable using tp_call. Arguments are like PyObject_Vectorcall(),
// except that nargs is plainly the number of arguments without flags.
//
// Export for shared stdlib extensions like the math extension,
@@ -204,14 +203,6 @@ _PyObject_CallNoArgs(PyObject *func) {
}
-static inline PyObject *
-_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func,
- PyObject *const *args, Py_ssize_t nargs)
-{
- EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
- return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL);
-}
-
extern PyObject *const *
_PyStack_UnpackDict(PyThreadState *tstate,
PyObject *const *args, Py_ssize_t nargs,
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 8e3fbe3314a95..56d771f70ef53 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -979,12 +979,6 @@ static PyObject *
call_trampoline(PyThreadState *tstate, PyObject* callback,
PyFrameObject *frame, int what, PyObject *arg)
{
-
- PyObject *stack[3];
- stack[0] = (PyObject *)frame;
- stack[1] = whatstrings[what];
- stack[2] = (arg != NULL) ? arg : Py_None;
-
/* Discard any previous modifications the frame's fast locals */
if (frame->f_fast_as_locals) {
if (PyFrame_FastToLocalsWithError(frame) < 0) {
@@ -993,7 +987,11 @@ call_trampoline(PyThreadState *tstate, PyObject* callback,
}
/* call the Python-level function */
- PyObject *result = _PyObject_FastCallTstate(tstate, callback, stack, 3);
+ if (arg == NULL) {
+ arg = Py_None;
+ }
+ PyObject *args[3] = {(PyObject *)frame, whatstrings[what], arg};
+ PyObject *result = _PyObject_VectorcallTstate(tstate, callback, args, 3, NULL);
PyFrame_LocalsToFast(frame, 1);
return result;
1
0
[3.12] gh-77782: Deprecate Py_HasFileSystemDefaultEncoding (GH-106272) (#106274)
by vstinner 30 Jun '23
by vstinner 30 Jun '23
30 Jun '23
https://github.com/python/cpython/commit/7a1b946a8d9ec6ffd5946a946158d844df…
commit: 7a1b946a8d9ec6ffd5946a946158d844dfd4ee69
branch: 3.12
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T10:21:36Z
summary:
[3.12] gh-77782: Deprecate Py_HasFileSystemDefaultEncoding (GH-106272) (#106274)
gh-77782: Deprecate Py_HasFileSystemDefaultEncoding (GH-106272)
Deprecate Py_HasFileSystemDefaultEncoding variable.
(cherry picked from commit f3cf2ddd8ddc7dfa6b06e6da640391a1bcd62b8a)
Co-authored-by: Victor Stinner <vstinner(a)python.org>
files:
M Doc/whatsnew/3.12.rst
M Include/fileobject.h
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 782a5013e869c..ec13ed57a5c45 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -1857,6 +1857,7 @@ Deprecated
* :c:var:`Py_LegacyWindowsFSEncodingFlag`: use :c:member:`PyPreConfig.legacy_windows_fs_encoding`
* :c:var:`Py_LegacyWindowsStdioFlag`: use :c:member:`PyConfig.legacy_windows_stdio`
* :c:var:`!Py_FileSystemDefaultEncoding`: use :c:member:`PyConfig.filesystem_encoding`
+ * :c:var:`!Py_HasFileSystemDefaultEncoding`: use :c:member:`PyConfig.filesystem_encoding`
* :c:var:`!Py_FileSystemDefaultEncodeErrors`: use :c:member:`PyConfig.filesystem_errors`
* :c:var:`!Py_UTF8Mode`: use :c:member:`PyPreConfig.utf8_mode` (see :c:func:`Py_PreInitialize`)
diff --git a/Include/fileobject.h b/Include/fileobject.h
index 02bd7c915a23f..2deef544d667a 100644
--- a/Include/fileobject.h
+++ b/Include/fileobject.h
@@ -23,7 +23,7 @@ Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
#endif
-PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UTF8Mode;
1
0
https://github.com/python/cpython/commit/f3cf2ddd8ddc7dfa6b06e6da640391a1bc…
commit: f3cf2ddd8ddc7dfa6b06e6da640391a1bcd62b8a
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T11:57:06+02:00
summary:
gh-77782: Deprecate Py_HasFileSystemDefaultEncoding (#106272)
Deprecate Py_HasFileSystemDefaultEncoding variable.
files:
M Doc/whatsnew/3.12.rst
M Include/fileobject.h
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index b6382e7e98449..1af80ea62b392 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -1858,6 +1858,7 @@ Deprecated
* :c:var:`Py_LegacyWindowsFSEncodingFlag`: use :c:member:`PyPreConfig.legacy_windows_fs_encoding`
* :c:var:`Py_LegacyWindowsStdioFlag`: use :c:member:`PyConfig.legacy_windows_stdio`
* :c:var:`!Py_FileSystemDefaultEncoding`: use :c:member:`PyConfig.filesystem_encoding`
+ * :c:var:`!Py_HasFileSystemDefaultEncoding`: use :c:member:`PyConfig.filesystem_encoding`
* :c:var:`!Py_FileSystemDefaultEncodeErrors`: use :c:member:`PyConfig.filesystem_errors`
* :c:var:`!Py_UTF8Mode`: use :c:member:`PyPreConfig.utf8_mode` (see :c:func:`Py_PreInitialize`)
diff --git a/Include/fileobject.h b/Include/fileobject.h
index 02bd7c915a23f..2deef544d667a 100644
--- a/Include/fileobject.h
+++ b/Include/fileobject.h
@@ -23,7 +23,7 @@ Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
Py_DEPRECATED(3.12) PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
#endif
-PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
+Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UTF8Mode;
1
0
https://github.com/python/cpython/commit/2efdd2a14e5036ba88f95f68e1f006d2ef…
commit: 2efdd2a14e5036ba88f95f68e1f006d2ef08249e
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T11:46:43+02:00
summary:
gh-106023: Remove _PyObject_FastCall() function (#106265)
files:
A Misc/NEWS.d/next/C API/2023-06-30-09-33-25.gh-issue-106023.YvYiE4.rst
M Doc/whatsnew/3.13.rst
M Include/cpython/abstract.h
M Lib/test/test_call.py
M Lib/test/test_gdb.py
M Modules/_testcapi/vectorcall.c
M Objects/call.c
diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index c0e9e924c8e82..9696dd4ff0b70 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -597,3 +597,8 @@ Removed
Just remove the underscore prefix to update your code.
(Contributed by Victor Stinner in :gh:`106084`.)
+
+* Remove private ``_PyObject_FastCall()`` function:
+ use ``PyObject_Vectorcall()`` which is available since Python 3.8
+ (:pep:`590`).
+ (Contributed by Victor Stinner in :gh:`106023`.)
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index d563d1b29ac3b..dd924dfd3d8fc 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -24,12 +24,6 @@ PyAPI_FUNC(PyObject *) PyObject_VectorcallDict(
size_t nargsf,
PyObject *kwargs);
-// Same as PyObject_Vectorcall(), except without keyword arguments
-PyAPI_FUNC(PyObject *) _PyObject_FastCall(
- PyObject *func,
- PyObject *const *args,
- Py_ssize_t nargs);
-
PyAPI_FUNC(PyObject *) PyObject_CallOneArg(PyObject *func, PyObject *arg);
static inline PyObject *
diff --git a/Lib/test/test_call.py b/Lib/test/test_call.py
index 5410131a7dfd8..09a531f8cc627 100644
--- a/Lib/test/test_call.py
+++ b/Lib/test/test_call.py
@@ -519,19 +519,6 @@ def check_result(self, result, expected):
expected = (*expected[:-1], result[-1])
self.assertEqual(result, expected)
- def test_fastcall(self):
- # Test _PyObject_FastCall()
-
- for func, args, expected in self.CALLS_POSARGS:
- with self.subTest(func=func, args=args):
- result = _testcapi.pyobject_fastcall(func, args)
- self.check_result(result, expected)
-
- if not args:
- # args=NULL, nargs=0
- result = _testcapi.pyobject_fastcall(func, None)
- self.check_result(result, expected)
-
def test_vectorcall_dict(self):
# Test PyObject_VectorcallDict()
@@ -945,11 +932,11 @@ def py_recurse(n, m):
def c_recurse(n):
if n:
- _testcapi.pyobject_fastcall(c_recurse, (n-1,))
+ _testcapi.pyobject_vectorcall(c_recurse, (n-1,), ())
def c_py_recurse(m):
if m:
- _testcapi.pyobject_fastcall(py_recurse, (1000, m))
+ _testcapi.pyobject_vectorcall(py_recurse, (1000, m), ())
depth = sys.getrecursionlimit()
sys.setrecursionlimit(100_000)
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index 311a864a52387..85009089f21d2 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -729,13 +729,13 @@ def test_two_abs_args(self):
SAMPLE_WITH_C_CALL = """
-from _testcapi import pyobject_fastcall
+from _testcapi import pyobject_vectorcall
def foo(a, b, c):
bar(a, b, c)
def bar(a, b, c):
- pyobject_fastcall(baz, (a, b, c))
+ pyobject_vectorcall(baz, (a, b, c), None)
def baz(*args):
id(42)
@@ -756,7 +756,7 @@ def test_pyup_command(self):
self.assertMultilineMatches(bt,
r'''^.*
#[0-9]+ Frame 0x-?[0-9a-f]+, for file <string>, line 12, in baz \(args=\(1, 2, 3\)\)
-#[0-9]+ <built-in method pyobject_fastcall of module object at remote 0x[0-9a-f]+>
+#[0-9]+ <built-in method pyobject_vectorcall of module object at remote 0x[0-9a-f]+>
$''')
@unittest.skipUnless(HAS_PYUP_PYDOWN, "test requires py-up/py-down commands")
@@ -785,7 +785,7 @@ def test_up_then_down(self):
self.assertMultilineMatches(bt,
r'''^.*
#[0-9]+ Frame 0x-?[0-9a-f]+, for file <string>, line 12, in baz \(args=\(1, 2, 3\)\)
-#[0-9]+ <built-in method pyobject_fastcall of module object at remote 0x[0-9a-f]+>
+#[0-9]+ <built-in method pyobject_vectorcall of module object at remote 0x[0-9a-f]+>
#[0-9]+ Frame 0x-?[0-9a-f]+, for file <string>, line 12, in baz \(args=\(1, 2, 3\)\)
$''')
diff --git a/Misc/NEWS.d/next/C API/2023-06-30-09-33-25.gh-issue-106023.YvYiE4.rst b/Misc/NEWS.d/next/C API/2023-06-30-09-33-25.gh-issue-106023.YvYiE4.rst
new file mode 100644
index 0000000000000..3130febf61120
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2023-06-30-09-33-25.gh-issue-106023.YvYiE4.rst
@@ -0,0 +1,2 @@
+Remove private ``_PyObject_FastCall()`` function: use ``PyObject_Vectorcall()``
+which is available since Python 3.8 (:pep:`590`). Patch by Victor Stinner.
diff --git a/Modules/_testcapi/vectorcall.c b/Modules/_testcapi/vectorcall.c
index dcbc973c9fb99..4935fd1b6a7ba 100644
--- a/Modules/_testcapi/vectorcall.c
+++ b/Modules/_testcapi/vectorcall.c
@@ -26,23 +26,6 @@ fastcall_args(PyObject *args, PyObject ***stack, Py_ssize_t *nargs)
}
-static PyObject *
-test_pyobject_fastcall(PyObject *self, PyObject *args)
-{
- PyObject *func, *func_args;
- PyObject **stack;
- Py_ssize_t nargs;
-
- if (!PyArg_ParseTuple(args, "OO", &func, &func_args)) {
- return NULL;
- }
-
- if (fastcall_args(func_args, &stack, &nargs) < 0) {
- return NULL;
- }
- return _PyObject_FastCall(func, stack, nargs);
-}
-
static PyObject *
test_pyobject_fastcalldict(PyObject *self, PyObject *args)
{
@@ -259,7 +242,6 @@ _testcapi_has_vectorcall_flag_impl(PyObject *module, PyTypeObject *type)
}
static PyMethodDef TestMethods[] = {
- {"pyobject_fastcall", test_pyobject_fastcall, METH_VARARGS},
{"pyobject_fastcalldict", test_pyobject_fastcalldict, METH_VARARGS},
{"pyobject_vectorcall", test_pyobject_vectorcall, METH_VARARGS},
{"function_setvectorcall", function_setvectorcall, METH_O},
diff --git a/Objects/call.c b/Objects/call.c
index e745fc41feaac..16c41ffe1d09b 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -327,14 +327,6 @@ PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
}
-PyObject *
-_PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
-{
- PyThreadState *tstate = _PyThreadState_GET();
- return _PyObject_FastCallTstate(tstate, func, args, nargs);
-}
-
-
PyObject *
_PyObject_Call(PyThreadState *tstate, PyObject *callable,
PyObject *args, PyObject *kwargs)
1
0
https://github.com/python/cpython/commit/0b51463862798d3124f542a076e02ea375…
commit: 0b51463862798d3124f542a076e02ea3759551a4
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T09:34:01Z
summary:
Remove private _PyCodec_Lookup() function (#106269)
Remove the following private functions of the C API:
* _PyCodecInfo_GetIncrementalDecoder()
* _PyCodecInfo_GetIncrementalEncoder()
* _PyCodec_DecodeText()
* _PyCodec_EncodeText()
* _PyCodec_Forget()
* _PyCodec_Lookup()
* _PyCodec_LookupTextEncoding()
Move these functions to a new pycore_codecs.h internal header file.
These functions are no longer exported.
files:
A Include/internal/pycore_codecs.h
M Include/codecs.h
M Makefile.pre.in
M Modules/_codecsmodule.c
M Modules/_io/textio.c
M Objects/unicodeobject.c
M PCbuild/pythoncore.vcxproj
M PCbuild/pythoncore.vcxproj.filters
M Python/pylifecycle.c
diff --git a/Include/codecs.h b/Include/codecs.h
index 37ecfb4ab757b..512a3c723eca1 100644
--- a/Include/codecs.h
+++ b/Include/codecs.h
@@ -35,34 +35,6 @@ PyAPI_FUNC(int) PyCodec_Unregister(
PyObject *search_function
);
-/* Codec registry lookup API.
-
- Looks up the given encoding and returns a CodecInfo object with
- function attributes which implement the different aspects of
- processing the encoding.
-
- The encoding string is looked up converted to all lower-case
- characters. This makes encodings looked up through this mechanism
- effectively case-insensitive.
-
- If no codec is found, a KeyError is set and NULL returned.
-
- As side effect, this tries to load the encodings package, if not
- yet done. This is part of the lazy load strategy for the encodings
- package.
-
- */
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
- const char *encoding
- );
-
-PyAPI_FUNC(int) _PyCodec_Forget(
- const char *encoding
- );
-#endif
-
/* Codec registry encoding check API.
Returns 1/0 depending on whether there is a registered codec for
@@ -106,102 +78,58 @@ PyAPI_FUNC(PyObject *) PyCodec_Decode(
const char *errors
);
-#ifndef Py_LIMITED_API
-/* Text codec specific encoding and decoding API.
-
- Checks the encoding against a list of codecs which do not
- implement a str<->bytes encoding before attempting the
- operation.
+// --- Codec Lookup APIs --------------------------------------------------
- Please note that these APIs are internal and should not
- be used in Python C extensions.
-
- XXX (ncoghlan): should we make these, or something like them, public
- in Python 3.5+?
+/* Codec registry lookup API.
- */
-PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding(
- const char *encoding,
- const char *alternate_command
- );
+ Looks up the given encoding and returns a CodecInfo object with
+ function attributes which implement the different aspects of
+ processing the encoding.
-PyAPI_FUNC(PyObject *) _PyCodec_EncodeText(
- PyObject *object,
- const char *encoding,
- const char *errors
- );
+ The encoding string is looked up converted to all lower-case
+ characters. This makes encodings looked up through this mechanism
+ effectively case-insensitive.
-PyAPI_FUNC(PyObject *) _PyCodec_DecodeText(
- PyObject *object,
- const char *encoding,
- const char *errors
- );
+ If no codec is found, a KeyError is set and NULL returned.
-/* These two aren't actually text encoding specific, but _io.TextIOWrapper
- * is the only current API consumer.
+ As side effect, this tries to load the encodings package, if not
+ yet done. This is part of the lazy load strategy for the encodings
+ package.
*/
-PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder(
- PyObject *codec_info,
- const char *errors
- );
-
-PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder(
- PyObject *codec_info,
- const char *errors
- );
-#endif
-
-
-
-/* --- Codec Lookup APIs --------------------------------------------------
-
- All APIs return a codec object with incremented refcount and are
- based on _PyCodec_Lookup(). The same comments w/r to the encoding
- name also apply to these APIs.
-
-*/
/* Get an encoder function for the given encoding. */
-PyAPI_FUNC(PyObject *) PyCodec_Encoder(
- const char *encoding
- );
+PyAPI_FUNC(PyObject *) PyCodec_Encoder(const char *encoding);
/* Get a decoder function for the given encoding. */
-PyAPI_FUNC(PyObject *) PyCodec_Decoder(
- const char *encoding
- );
+PyAPI_FUNC(PyObject *) PyCodec_Decoder(const char *encoding);
/* Get an IncrementalEncoder object for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder(
- const char *encoding,
- const char *errors
- );
+ const char *encoding,
+ const char *errors);
/* Get an IncrementalDecoder object function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder(
- const char *encoding,
- const char *errors
- );
+ const char *encoding,
+ const char *errors);
/* Get a StreamReader factory function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_StreamReader(
- const char *encoding,
- PyObject *stream,
- const char *errors
- );
+ const char *encoding,
+ PyObject *stream,
+ const char *errors);
/* Get a StreamWriter factory function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_StreamWriter(
- const char *encoding,
- PyObject *stream,
- const char *errors
- );
+ const char *encoding,
+ PyObject *stream,
+ const char *errors);
/* Unicode encoding error handling callback registry API */
diff --git a/Include/internal/pycore_codecs.h b/Include/internal/pycore_codecs.h
new file mode 100644
index 0000000000000..2f8d9d510019b
--- /dev/null
+++ b/Include/internal/pycore_codecs.h
@@ -0,0 +1,53 @@
+#ifndef Py_INTERNAL_CODECS_H
+#define Py_INTERNAL_CODECS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyObject* _PyCodec_Lookup(const char *encoding);
+
+extern int _PyCodec_Forget(const char *encoding);
+
+/* Text codec specific encoding and decoding API.
+
+ Checks the encoding against a list of codecs which do not
+ implement a str<->bytes encoding before attempting the
+ operation.
+
+ Please note that these APIs are internal and should not
+ be used in Python C extensions.
+
+ XXX (ncoghlan): should we make these, or something like them, public
+ in Python 3.5+?
+
+ */
+extern PyObject* _PyCodec_LookupTextEncoding(
+ const char *encoding,
+ const char *alternate_command);
+
+extern PyObject* _PyCodec_EncodeText(
+ PyObject *object,
+ const char *encoding,
+ const char *errors);
+
+extern PyObject* _PyCodec_DecodeText(
+ PyObject *object,
+ const char *encoding,
+ const char *errors);
+
+/* These two aren't actually text encoding specific, but _io.TextIOWrapper
+ * is the only current API consumer.
+ */
+extern PyObject* _PyCodecInfo_GetIncrementalDecoder(
+ PyObject *codec_info,
+ const char *errors);
+
+extern PyObject* _PyCodecInfo_GetIncrementalEncoder(
+ PyObject *codec_info,
+ const char *errors);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_CODECS_H */
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 98b58cf1299f1..cd66c475665b2 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -1732,6 +1732,7 @@ PYTHON_HEADERS= \
$(srcdir)/Include/internal/pycore_ceval.h \
$(srcdir)/Include/internal/pycore_ceval_state.h \
$(srcdir)/Include/internal/pycore_code.h \
+ $(srcdir)/Include/internal/pycore_codecs.h \
$(srcdir)/Include/internal/pycore_compile.h \
$(srcdir)/Include/internal/pycore_condvar.h \
$(srcdir)/Include/internal/pycore_context.h \
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index 777c753bd7c2a..4dfd134f1cb11 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -32,6 +32,7 @@ Copyright (c) Corporation for National Research Initiatives.
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#include "pycore_codecs.h" // _PyCodec_Lookup()
#ifdef MS_WINDOWS
#include <windows.h>
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index e6b1306c2f3f0..c8e6792657cd5 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -9,6 +9,7 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include "pycore_call.h" // _PyObject_CallMethod()
+#include "pycore_codecs.h" // _PyCodecInfo_GetIncrementalDecoder()
#include "pycore_interp.h" // PyInterpreterState.fs_codec
#include "pycore_long.h" // _PyLong_GetZero()
#include "pycore_fileutils.h" // _Py_GetLocaleEncoding()
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 38b72de88f3c0..4434bf19d43b7 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -42,8 +42,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "Python.h"
#include "pycore_abstract.h" // _PyIndex_Check()
#include "pycore_atomic_funcs.h" // _Py_atomic_size_get()
-#include "pycore_bytesobject.h" // _PyBytes_Repeat()
#include "pycore_bytes_methods.h" // _Py_bytes_lower()
+#include "pycore_bytesobject.h" // _PyBytes_Repeat()
+#include "pycore_codecs.h" // _PyCodec_Lookup()
#include "pycore_format.h" // F_LJUST
#include "pycore_initconfig.h" // _PyStatus_OK()
#include "pycore_interp.h" // PyInterpreterState.fs_codec
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index a68452a916aa3..4ccd2b5edd3f6 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -209,6 +209,7 @@
<ClInclude Include="..\Include\internal\pycore_ceval_state.h" />
<ClInclude Include="..\Include\internal\pycore_cfg.h" />
<ClInclude Include="..\Include\internal\pycore_code.h" />
+ <ClInclude Include="..\Include\internal\pycore_codecs.h" />
<ClInclude Include="..\Include\internal\pycore_compile.h" />
<ClInclude Include="..\Include\internal\pycore_condvar.h" />
<ClInclude Include="..\Include\internal\pycore_context.h" />
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index bf9b42f4d790e..99f924856a354 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -537,6 +537,9 @@
<ClInclude Include="..\Include\internal\pycore_code.h">
<Filter>Include\internal</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\internal\pycore_codecs.h">
+ <Filter>Include\internal</Filter>
+ </ClInclude>
<ClInclude Include="..\Include\internal\pycore_compile.h">
<Filter>Include\internal</Filter>
</ClInclude>
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 1df35ef427867..cf8b4379c1467 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -4,6 +4,7 @@
#include "pycore_call.h" // _PyObject_CallMethod()
#include "pycore_ceval.h" // _PyEval_FiniGIL()
+#include "pycore_codecs.h" // _PyCodec_Lookup()
#include "pycore_context.h" // _PyContext_Init()
#include "pycore_dict.h" // _PyDict_Fini()
#include "pycore_exceptions.h" // _PyExc_InitTypes()
1
0
https://github.com/python/cpython/commit/e17420db5d0452a9c56c8cb324d37fc2c0…
commit: e17420db5d0452a9c56c8cb324d37fc2c04309c0
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T07:53:42Z
summary:
gh-106023: Rename _PyObject_FastCallDictTstate() (#106264)
Rename _PyObject_FastCallDictTstate() to
_PyObject_VectorcallDictTstate().
files:
M Include/internal/pycore_call.h
M Objects/call.c
diff --git a/Include/internal/pycore_call.h b/Include/internal/pycore_call.h
index 66434cc048cc9..6058335cd4051 100644
--- a/Include/internal/pycore_call.h
+++ b/Include/internal/pycore_call.h
@@ -49,7 +49,7 @@ extern PyObject* _PyObject_Call_Prepend(
PyObject *args,
PyObject *kwargs);
-extern PyObject* _PyObject_FastCallDictTstate(
+extern PyObject* _PyObject_VectorcallDictTstate(
PyThreadState *tstate,
PyObject *callable,
PyObject *const *args,
diff --git a/Objects/call.c b/Objects/call.c
index fc8a6f9e0a022..e745fc41feaac 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -106,9 +106,9 @@ PyObject_CallNoArgs(PyObject *func)
PyObject *
-_PyObject_FastCallDictTstate(PyThreadState *tstate, PyObject *callable,
- PyObject *const *args, size_t nargsf,
- PyObject *kwargs)
+_PyObject_VectorcallDictTstate(PyThreadState *tstate, PyObject *callable,
+ PyObject *const *args, size_t nargsf,
+ PyObject *kwargs)
{
assert(callable != NULL);
@@ -154,7 +154,7 @@ PyObject_VectorcallDict(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwargs)
{
PyThreadState *tstate = _PyThreadState_GET();
- return _PyObject_FastCallDictTstate(tstate, callable, args, nargsf, kwargs);
+ return _PyObject_VectorcallDictTstate(tstate, callable, args, nargsf, kwargs);
}
static void
@@ -453,7 +453,8 @@ PyEval_CallObjectWithKeywords(PyObject *callable,
}
if (args == NULL) {
- return _PyObject_FastCallDictTstate(tstate, callable, NULL, 0, kwargs);
+ return _PyObject_VectorcallDictTstate(tstate, callable,
+ NULL, 0, kwargs);
}
else {
return _PyObject_Call(tstate, callable, args, kwargs);
@@ -506,9 +507,9 @@ _PyObject_Call_Prepend(PyThreadState *tstate, PyObject *callable,
_PyTuple_ITEMS(args),
argcount * sizeof(PyObject *));
- PyObject *result = _PyObject_FastCallDictTstate(tstate, callable,
- stack, argcount + 1,
- kwargs);
+ PyObject *result = _PyObject_VectorcallDictTstate(tstate, callable,
+ stack, argcount + 1,
+ kwargs);
if (stack != small_stack) {
PyMem_Free(stack);
}
1
0
gh-106182: sys: Intern getfilesystemencoding() and getfilesystemencodeerrors() (#106183)
by methane 29 Jun '23
by methane 29 Jun '23
29 Jun '23
https://github.com/python/cpython/commit/f1034ba7f67400e7ed7e299dc8b22521c4…
commit: f1034ba7f67400e7ed7e299dc8b22521c4e43246
branch: main
author: Inada Naoki <songofacandy(a)gmail.com>
committer: methane <songofacandy(a)gmail.com>
date: 2023-06-30T13:02:03+09:00
summary:
gh-106182: sys: Intern getfilesystemencoding() and getfilesystemencodeerrors() (#106183)
sys: Intern getfilesystemencoding() and getfilesystemencodeerrors()
files:
A Misc/NEWS.d/next/Core and Builtins/2023-06-28-15-19-59.gh-issue-106182.cDSFi0.rst
M Python/sysmodule.c
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-06-28-15-19-59.gh-issue-106182.cDSFi0.rst b/Misc/NEWS.d/next/Core and Builtins/2023-06-28-15-19-59.gh-issue-106182.cDSFi0.rst
new file mode 100644
index 0000000000000..ca2116b00a665
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-06-28-15-19-59.gh-issue-106182.cDSFi0.rst
@@ -0,0 +1,2 @@
+:func:`sys.getfilesystemencoding` and :mod:`sys.getfilesystemencodeerrors`
+now return interned Unicode object.
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 681024064ad40..8e3fbe3314a95 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -863,6 +863,13 @@ sys_exit_impl(PyObject *module, PyObject *status)
}
+static PyObject *
+get_utf8_unicode(void)
+{
+ _Py_DECLARE_STR(utf_8, "utf-8");
+ PyObject *ret = &_Py_STR(utf_8);
+ return Py_NewRef(ret);
+}
/*[clinic input]
sys.getdefaultencoding
@@ -874,9 +881,7 @@ static PyObject *
sys_getdefaultencoding_impl(PyObject *module)
/*[clinic end generated code: output=256d19dfcc0711e6 input=d416856ddbef6909]*/
{
- _Py_DECLARE_STR(utf_8, "utf-8");
- PyObject *ret = &_Py_STR(utf_8);
- return Py_NewRef(ret);
+ return get_utf8_unicode();
}
/*[clinic input]
@@ -891,7 +896,17 @@ sys_getfilesystemencoding_impl(PyObject *module)
{
PyInterpreterState *interp = _PyInterpreterState_GET();
const PyConfig *config = _PyInterpreterState_GetConfig(interp);
- return PyUnicode_FromWideChar(config->filesystem_encoding, -1);
+
+ if (wcscmp(config->filesystem_encoding, L"utf-8") == 0) {
+ return get_utf8_unicode();
+ }
+
+ PyObject *u = PyUnicode_FromWideChar(config->filesystem_encoding, -1);
+ if (u == NULL) {
+ return NULL;
+ }
+ _PyUnicode_InternInPlace(interp, &u);
+ return u;
}
/*[clinic input]
@@ -906,7 +921,12 @@ sys_getfilesystemencodeerrors_impl(PyObject *module)
{
PyInterpreterState *interp = _PyInterpreterState_GET();
const PyConfig *config = _PyInterpreterState_GetConfig(interp);
- return PyUnicode_FromWideChar(config->filesystem_errors, -1);
+ PyObject *u = PyUnicode_FromWideChar(config->filesystem_errors, -1);
+ if (u == NULL) {
+ return NULL;
+ }
+ _PyUnicode_InternInPlace(interp, &u);
+ return u;
}
/*[clinic input]
1
0
https://github.com/python/cpython/commit/77ddc9a7b1b28c8b8aee6cc97e483185a5…
commit: 77ddc9a7b1b28c8b8aee6cc97e483185a56819a6
branch: main
author: Inada Naoki <songofacandy(a)gmail.com>
committer: methane <songofacandy(a)gmail.com>
date: 2023-06-30T13:00:22+09:00
summary:
fix typos (#106247)
Most typos are in comments, but two typos are in docstring.
files:
M Objects/bytearrayobject.c
M Objects/bytesobject.c
M Objects/clinic/bytearrayobject.c.h
M Objects/clinic/bytesobject.c.h
M Objects/exceptions.c
M Objects/object_layout.md
M Python/pytime.c
M Python/sysmodule.c
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index c36db59baaa10..944ec65b64f6a 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -1377,7 +1377,7 @@ bytearray.maketrans
to: Py_buffer
/
-Return a translation table useable for the bytes or bytearray translate method.
+Return a translation table usable for the bytes or bytearray translate method.
The returned table will be one where each byte in frm is mapped to the byte at
the same position in to.
@@ -1387,7 +1387,7 @@ The bytes objects frm and to must be of the same length.
static PyObject *
bytearray_maketrans_impl(Py_buffer *frm, Py_buffer *to)
-/*[clinic end generated code: output=1df267d99f56b15e input=5925a81d2fbbf151]*/
+/*[clinic end generated code: output=1df267d99f56b15e input=b10de38c85950a63]*/
{
return _Py_bytes_maketrans(frm, to);
}
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 1b67e02025c42..bf54ec1d51d20 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -2154,7 +2154,7 @@ bytes.maketrans
to: Py_buffer
/
-Return a translation table useable for the bytes or bytearray translate method.
+Return a translation table usable for the bytes or bytearray translate method.
The returned table will be one where each byte in frm is mapped to the byte at
the same position in to.
@@ -2164,7 +2164,7 @@ The bytes objects frm and to must be of the same length.
static PyObject *
bytes_maketrans_impl(Py_buffer *frm, Py_buffer *to)
-/*[clinic end generated code: output=a36f6399d4b77f6f input=de7a8fc5632bb8f1]*/
+/*[clinic end generated code: output=a36f6399d4b77f6f input=a3bd00d430a0979f]*/
{
return _Py_bytes_maketrans(frm, to);
}
diff --git a/Objects/clinic/bytearrayobject.c.h b/Objects/clinic/bytearrayobject.c.h
index b847597c64b3f..33caca2822456 100644
--- a/Objects/clinic/bytearrayobject.c.h
+++ b/Objects/clinic/bytearrayobject.c.h
@@ -289,7 +289,7 @@ PyDoc_STRVAR(bytearray_maketrans__doc__,
"maketrans(frm, to, /)\n"
"--\n"
"\n"
-"Return a translation table useable for the bytes or bytearray translate method.\n"
+"Return a translation table usable for the bytes or bytearray translate method.\n"
"\n"
"The returned table will be one where each byte in frm is mapped to the byte at\n"
"the same position in to.\n"
@@ -1284,4 +1284,4 @@ bytearray_sizeof(PyByteArrayObject *self, PyObject *Py_UNUSED(ignored))
{
return bytearray_sizeof_impl(self);
}
-/*[clinic end generated code: output=99fb3e3b9c1f4b15 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=0817195f176cd8e3 input=a9049054013a1b77]*/
diff --git a/Objects/clinic/bytesobject.c.h b/Objects/clinic/bytesobject.c.h
index 4b4a4b39a1fa9..1ec0c95485a20 100644
--- a/Objects/clinic/bytesobject.c.h
+++ b/Objects/clinic/bytesobject.c.h
@@ -476,7 +476,7 @@ PyDoc_STRVAR(bytes_maketrans__doc__,
"maketrans(frm, to, /)\n"
"--\n"
"\n"
-"Return a translation table useable for the bytes or bytearray translate method.\n"
+"Return a translation table usable for the bytes or bytearray translate method.\n"
"\n"
"The returned table will be one where each byte in frm is mapped to the byte at\n"
"the same position in to.\n"
@@ -1060,4 +1060,4 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=7b6e4e8b5bc4eb57 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=bc4801bf1fa628f4 input=a9049054013a1b77]*/
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index 015dd27ec3330..2bfa07ea3121f 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -1464,7 +1464,7 @@ PyUnstable_Exc_PrepReraiseStar(PyObject *orig, PyObject *excs)
}
/* Make sure that orig has something as traceback, in the interpreter
- * it always does becuase it's a raised exception.
+ * it always does because it's a raised exception.
*/
PyObject *tb = PyException_GetTraceback(orig);
diff --git a/Objects/object_layout.md b/Objects/object_layout.md
index 9380b57938c8e..4430790f4f0f3 100644
--- a/Objects/object_layout.md
+++ b/Objects/object_layout.md
@@ -45,7 +45,7 @@ pointers are combined into a single tagged pointer:
If the object has no physical dictionary, then the ``dict_or_values``
has its low bit set to one, and points to the values array.
-If the object has a physical dictioanry, then the ``dict_or_values``
+If the object has a physical dictionary, then the ``dict_or_values``
has its low bit set to zero, and points to the dictionary.
The untagged form is chosen for the dictionary pointer, rather than
diff --git a/Python/pytime.c b/Python/pytime.c
index acd1842056af4..d36d4417dabb2 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -969,7 +969,7 @@ py_get_system_clock(_PyTime_t *tp, _Py_clock_info_t *info, int raise_exc)
}
#if defined(HAVE_CLOCK_GETTIME_RUNTIME) && defined(HAVE_CLOCK_GETTIME)
- } /* end of availibity block */
+ } /* end of availability block */
#endif
#endif /* !HAVE_CLOCK_GETTIME */
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 723fcdb174ab3..681024064ad40 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -425,7 +425,7 @@ PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
e->userData = userData;
if (runtime->audit_hooks.mutex == NULL) {
- /* The runtime must not be initailized yet. */
+ /* The runtime must not be initialized yet. */
add_audit_hook_entry_unlocked(runtime, e);
}
else {
1
0
https://github.com/python/cpython/commit/cd580910e10dcfffa364d08ee5a6f0257d…
commit: cd580910e10dcfffa364d08ee5a6f0257d031baf
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T01:07:59Z
summary:
gh-106023: Remove _PY_FASTCALL_SMALL_STACK constant (#106258)
Remove _PY_FASTCALL_SMALL_STACK constant from the C API: move it to
the internal C API (pycore_call.h).
files:
M Include/cpython/abstract.h
M Include/internal/pycore_call.h
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 2e76ff49a81dd..d563d1b29ac3b 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -2,19 +2,6 @@
# error "this header file must not be included directly"
#endif
-/* === Object Protocol ================================================== */
-
-/* Suggested size (number of positional arguments) for arrays of PyObject*
- allocated on a C stack to avoid allocating memory on the heap memory. Such
- array is used to pass positional arguments to call functions of the
- PyObject_Vectorcall() family.
-
- The size is chosen to not abuse the C stack and so limit the risk of stack
- overflow. The size is also chosen to allow using the small stack for most
- function calls of the Python standard library. On 64-bit CPU, it allocates
- 40 bytes on the stack. */
-#define _PY_FASTCALL_SMALL_STACK 5
-
/* === Vectorcall protocol (PEP 590) ============================= */
// PyVectorcall_NARGS() is exported as a function for the stable ABI.
diff --git a/Include/internal/pycore_call.h b/Include/internal/pycore_call.h
index 3caf504a96aa3..66434cc048cc9 100644
--- a/Include/internal/pycore_call.h
+++ b/Include/internal/pycore_call.h
@@ -10,6 +10,18 @@ extern "C" {
#include "pycore_pystate.h" // _PyThreadState_GET()
+/* Suggested size (number of positional arguments) for arrays of PyObject*
+ allocated on a C stack to avoid allocating memory on the heap memory. Such
+ array is used to pass positional arguments to call functions of the
+ PyObject_Vectorcall() family.
+
+ The size is chosen to not abuse the C stack and so limit the risk of stack
+ overflow. The size is also chosen to allow using the small stack for most
+ function calls of the Python standard library. On 64-bit CPU, it allocates
+ 40 bytes on the stack. */
+#define _PY_FASTCALL_SMALL_STACK 5
+
+
// Export for shared stdlib extensions like the math extension,
// function used via inlined _PyObject_VectorcallTstate() function.
PyAPI_FUNC(PyObject*) _Py_CheckFunctionResult(
1
0
https://github.com/python/cpython/commit/8c5f74fc89e35827c52753fe620b32207d…
commit: 8c5f74fc89e35827c52753fe620b32207d537319
branch: main
author: Victor Stinner <vstinner(a)python.org>
committer: vstinner <vstinner(a)python.org>
date: 2023-06-30T01:05:01Z
summary:
gh-106023: Update code using _PyObject_FastCall() (#106257)
Replace _PyObject_FastCall() calls with PyObject_Vectorcall().
files:
M Modules/_elementtree.c
M Modules/_functoolsmodule.c
M Objects/typeobject.c
M Parser/pegen.c
M Python/bytecodes.c
M Python/ceval.c
M Python/executor_cases.c.h
M Python/generated_cases.c.h
M Python/pythonrun.c
M Python/sysmodule.c
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 21a6e4e5b2026..2a0eac4d2f808 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -882,7 +882,6 @@ LOCAL(PyObject *)
deepcopy(elementtreestate *st, PyObject *object, PyObject *memo)
{
/* do a deep copy of the given object */
- PyObject *stack[2];
/* Fast paths */
if (object == Py_None || PyUnicode_CheckExact(object)) {
@@ -917,9 +916,8 @@ deepcopy(elementtreestate *st, PyObject *object, PyObject *memo)
return NULL;
}
- stack[0] = object;
- stack[1] = memo;
- return _PyObject_FastCall(st->deepcopy_obj, stack, 2);
+ PyObject *args[2] = {object, memo};
+ return PyObject_Vectorcall(st->deepcopy_obj, args, 2, NULL);
}
@@ -2852,14 +2850,14 @@ treebuilder_handle_pi(TreeBuilderObject* self, PyObject* target, PyObject* text)
{
PyObject* pi;
PyObject* this;
- PyObject* stack[2] = {target, text};
if (treebuilder_flush_data(self) < 0) {
return NULL;
}
if (self->pi_factory) {
- pi = _PyObject_FastCall(self->pi_factory, stack, 2);
+ PyObject* args[2] = {target, text};
+ pi = PyObject_Vectorcall(self->pi_factory, args, 2, NULL);
if (!pi) {
return NULL;
}
@@ -3372,7 +3370,6 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix_in,
PyObject* res = NULL;
PyObject* uri;
PyObject* prefix;
- PyObject* stack[2];
if (PyErr_Occurred())
return;
@@ -3411,9 +3408,8 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix_in,
return;
}
- stack[0] = prefix;
- stack[1] = uri;
- res = _PyObject_FastCall(self->handle_start_ns, stack, 2);
+ PyObject* args[2] = {prefix, uri};
+ res = PyObject_Vectorcall(self->handle_start_ns, args, 2, NULL);
Py_DECREF(uri);
Py_DECREF(prefix);
}
@@ -3551,7 +3547,6 @@ expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
PyObject* pi_target;
PyObject* data;
PyObject* res;
- PyObject* stack[2];
if (PyErr_Occurred())
return;
@@ -3581,9 +3576,8 @@ expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
if (!data)
goto error;
- stack[0] = pi_target;
- stack[1] = data;
- res = _PyObject_FastCall(self->handle_pi, stack, 2);
+ PyObject* args[2] = {pi_target, data};
+ res = PyObject_Vectorcall(self->handle_pi, args, 2, NULL);
Py_XDECREF(res);
Py_DECREF(data);
Py_DECREF(pi_target);
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index aa566c31cc1ea..c987485e66a48 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -594,21 +594,15 @@ keyobject_call(keyobject *ko, PyObject *args, PyObject *kwds)
static PyObject *
keyobject_richcompare(PyObject *ko, PyObject *other, int op)
{
- PyObject *res;
- PyObject *x;
- PyObject *y;
- PyObject *compare;
- PyObject *answer;
- PyObject* stack[2];
-
if (!Py_IS_TYPE(other, Py_TYPE(ko))) {
PyErr_Format(PyExc_TypeError, "other argument must be K instance");
return NULL;
}
- compare = ((keyobject *) ko)->cmp;
+
+ PyObject *compare = ((keyobject *) ko)->cmp;
assert(compare != NULL);
- x = ((keyobject *) ko)->object;
- y = ((keyobject *) other)->object;
+ PyObject *x = ((keyobject *) ko)->object;
+ PyObject *y = ((keyobject *) other)->object;
if (!x || !y){
PyErr_Format(PyExc_AttributeError, "object");
return NULL;
@@ -617,14 +611,13 @@ keyobject_richcompare(PyObject *ko, PyObject *other, int op)
/* Call the user's comparison function and translate the 3-way
* result into true or false (or error).
*/
- stack[0] = x;
- stack[1] = y;
- res = _PyObject_FastCall(compare, stack, 2);
+ PyObject* args[2] = {x, y};
+ PyObject *res = PyObject_Vectorcall(compare, args, 2, NULL);
if (res == NULL) {
return NULL;
}
- answer = PyObject_RichCompare(res, _PyLong_GetZero(), op);
+ PyObject *answer = PyObject_RichCompare(res, _PyLong_GetZero(), op);
Py_DECREF(res);
return answer;
}
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index e3769cee2c397..cc389bc3d6fa1 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -10013,7 +10013,8 @@ static int
type_new_init_subclass(PyTypeObject *type, PyObject *kwds)
{
PyObject *args[2] = {(PyObject *)type, (PyObject *)type};
- PyObject *super = _PyObject_FastCall((PyObject *)&PySuper_Type, args, 2);
+ PyObject *super = PyObject_Vectorcall((PyObject *)&PySuper_Type,
+ args, 2, NULL);
if (super == NULL) {
return -1;
}
diff --git a/Parser/pegen.c b/Parser/pegen.c
index b9894dd0acc54..885d423fca66a 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -465,7 +465,6 @@ _PyPegen_new_identifier(Parser *p, const char *n)
identifier; if so, normalize to NFKC. */
if (!PyUnicode_IS_ASCII(id))
{
- PyObject *id2;
if (!init_normalization(p))
{
Py_DECREF(id);
@@ -478,12 +477,13 @@ _PyPegen_new_identifier(Parser *p, const char *n)
goto error;
}
PyObject *args[2] = {form, id};
- id2 = _PyObject_FastCall(p->normalize, args, 2);
+ PyObject *id2 = PyObject_Vectorcall(p->normalize, args, 2, NULL);
Py_DECREF(id);
Py_DECREF(form);
if (!id2) {
goto error;
}
+
if (!PyUnicode_Check(id2))
{
PyErr_Format(PyExc_TypeError,
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index cd23e6624706f..8aab7ebc5cf0c 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -8,7 +8,6 @@
#include "Python.h"
#include "pycore_abstract.h" // _PyIndex_Check()
-#include "pycore_call.h" // _PyObject_FastCallDictTstate()
#include "pycore_ceval.h" // _PyEval_SignalAsyncExc()
#include "pycore_code.h"
#include "pycore_function.h"
diff --git a/Python/ceval.c b/Python/ceval.c
index 65b6f2481665d..2010e9e6e7a1c 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -4,7 +4,7 @@
#include "Python.h"
#include "pycore_abstract.h" // _PyIndex_Check()
-#include "pycore_call.h" // _PyObject_FastCallDictTstate()
+#include "pycore_call.h" // _PyObject_CallNoArgs()
#include "pycore_ceval.h" // _PyEval_SignalAsyncExc()
#include "pycore_code.h"
#include "pycore_function.h"
@@ -2431,40 +2431,37 @@ static PyObject *
import_name(PyThreadState *tstate, _PyInterpreterFrame *frame,
PyObject *name, PyObject *fromlist, PyObject *level)
{
- PyObject *import_func, *res;
- PyObject* stack[5];
-
- import_func = _PyDict_GetItemWithError(frame->f_builtins, &_Py_ID(__import__));
+ PyObject *import_func = _PyDict_GetItemWithError(frame->f_builtins,
+ &_Py_ID(__import__));
if (import_func == NULL) {
if (!_PyErr_Occurred(tstate)) {
_PyErr_SetString(tstate, PyExc_ImportError, "__import__ not found");
}
return NULL;
}
+
PyObject *locals = frame->f_locals;
+ if (locals == NULL) {
+ locals = Py_None;
+ }
+
/* Fast path for not overloaded __import__. */
if (_PyImport_IsDefaultImportFunc(tstate->interp, import_func)) {
int ilevel = _PyLong_AsInt(level);
if (ilevel == -1 && _PyErr_Occurred(tstate)) {
return NULL;
}
- res = PyImport_ImportModuleLevelObject(
+ return PyImport_ImportModuleLevelObject(
name,
frame->f_globals,
- locals == NULL ? Py_None :locals,
+ locals,
fromlist,
ilevel);
- return res;
}
+ PyObject* args[5] = {name, frame->f_globals, locals, fromlist, level};
Py_INCREF(import_func);
-
- stack[0] = name;
- stack[1] = frame->f_globals;
- stack[2] = locals == NULL ? Py_None : locals;
- stack[3] = fromlist;
- stack[4] = level;
- res = _PyObject_FastCall(import_func, stack, 5);
+ PyObject *res = PyObject_Vectorcall(import_func, args, 5, NULL);
Py_DECREF(import_func);
return res;
}
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index ea932232d7522..ccef2736b7120 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -9,7 +9,7 @@
case LOAD_FAST: {
PyObject *value;
- #line 189 "Python/bytecodes.c"
+ #line 188 "Python/bytecodes.c"
value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
@@ -21,7 +21,7 @@
case LOAD_FAST_AND_CLEAR: {
PyObject *value;
- #line 195 "Python/bytecodes.c"
+ #line 194 "Python/bytecodes.c"
value = GETLOCAL(oparg);
// do not use SETLOCAL here, it decrefs the old value
GETLOCAL(oparg) = NULL;
@@ -33,7 +33,7 @@
case LOAD_CONST: {
PyObject *value;
- #line 210 "Python/bytecodes.c"
+ #line 209 "Python/bytecodes.c"
value = GETITEM(FRAME_CO_CONSTS, oparg);
Py_INCREF(value);
#line 40 "Python/executor_cases.c.h"
@@ -44,7 +44,7 @@
case STORE_FAST: {
PyObject *value = stack_pointer[-1];
- #line 215 "Python/bytecodes.c"
+ #line 214 "Python/bytecodes.c"
SETLOCAL(oparg, value);
#line 50 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -53,7 +53,7 @@
case POP_TOP: {
PyObject *value = stack_pointer[-1];
- #line 238 "Python/bytecodes.c"
+ #line 237 "Python/bytecodes.c"
#line 58 "Python/executor_cases.c.h"
Py_DECREF(value);
STACK_SHRINK(1);
@@ -62,7 +62,7 @@
case PUSH_NULL: {
PyObject *res;
- #line 242 "Python/bytecodes.c"
+ #line 241 "Python/bytecodes.c"
res = NULL;
#line 68 "Python/executor_cases.c.h"
STACK_GROW(1);
@@ -73,7 +73,7 @@
case END_SEND: {
PyObject *value = stack_pointer[-1];
PyObject *receiver = stack_pointer[-2];
- #line 261 "Python/bytecodes.c"
+ #line 260 "Python/bytecodes.c"
Py_DECREF(receiver);
#line 79 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -84,11 +84,11 @@
case UNARY_NEGATIVE: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 276 "Python/bytecodes.c"
+ #line 275 "Python/bytecodes.c"
res = PyNumber_Negative(value);
#line 90 "Python/executor_cases.c.h"
Py_DECREF(value);
- #line 278 "Python/bytecodes.c"
+ #line 277 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
#line 94 "Python/executor_cases.c.h"
stack_pointer[-1] = res;
@@ -98,7 +98,7 @@
case UNARY_NOT: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 282 "Python/bytecodes.c"
+ #line 281 "Python/bytecodes.c"
assert(PyBool_Check(value));
res = Py_IsFalse(value) ? Py_True : Py_False;
#line 105 "Python/executor_cases.c.h"
@@ -108,7 +108,7 @@
case TO_BOOL_BOOL: {
PyObject *value = stack_pointer[-1];
- #line 314 "Python/bytecodes.c"
+ #line 313 "Python/bytecodes.c"
DEOPT_IF(!PyBool_Check(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
#line 115 "Python/executor_cases.c.h"
@@ -118,7 +118,7 @@
case TO_BOOL_INT: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 319 "Python/bytecodes.c"
+ #line 318 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
if (_PyLong_IsZero((PyLongObject *)value)) {
@@ -128,7 +128,7 @@
else {
#line 130 "Python/executor_cases.c.h"
Py_DECREF(value);
- #line 327 "Python/bytecodes.c"
+ #line 326 "Python/bytecodes.c"
res = Py_True;
}
#line 135 "Python/executor_cases.c.h"
@@ -139,7 +139,7 @@
case TO_BOOL_LIST: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 332 "Python/bytecodes.c"
+ #line 331 "Python/bytecodes.c"
DEOPT_IF(!PyList_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
res = Py_SIZE(value) ? Py_True : Py_False;
@@ -152,7 +152,7 @@
case TO_BOOL_NONE: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 339 "Python/bytecodes.c"
+ #line 338 "Python/bytecodes.c"
// This one is a bit weird, because we expect *some* failures:
DEOPT_IF(!Py_IsNone(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
@@ -165,7 +165,7 @@
case TO_BOOL_STR: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 346 "Python/bytecodes.c"
+ #line 345 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
if (value == &_Py_STR(empty)) {
@@ -176,7 +176,7 @@
assert(Py_SIZE(value));
#line 178 "Python/executor_cases.c.h"
Py_DECREF(value);
- #line 355 "Python/bytecodes.c"
+ #line 354 "Python/bytecodes.c"
res = Py_True;
}
#line 183 "Python/executor_cases.c.h"
@@ -188,14 +188,14 @@
PyObject *value = stack_pointer[-1];
PyObject *res;
uint32_t version = operand;
- #line 360 "Python/bytecodes.c"
+ #line 359 "Python/bytecodes.c"
// This one is a bit weird, because we expect *some* failures:
assert(version);
DEOPT_IF(Py_TYPE(value)->tp_version_tag != version, TO_BOOL);
STAT_INC(TO_BOOL, hit);
#line 197 "Python/executor_cases.c.h"
Py_DECREF(value);
- #line 365 "Python/bytecodes.c"
+ #line 364 "Python/bytecodes.c"
res = Py_True;
#line 201 "Python/executor_cases.c.h"
stack_pointer[-1] = res;
@@ -205,11 +205,11 @@
case UNARY_INVERT: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 369 "Python/bytecodes.c"
+ #line 368 "Python/bytecodes.c"
res = PyNumber_Invert(value);
#line 211 "Python/executor_cases.c.h"
Py_DECREF(value);
- #line 371 "Python/bytecodes.c"
+ #line 370 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
#line 215 "Python/executor_cases.c.h"
stack_pointer[-1] = res;
@@ -219,7 +219,7 @@
case _GUARD_BOTH_INT: {
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
- #line 387 "Python/bytecodes.c"
+ #line 386 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyLong_CheckExact(right), BINARY_OP);
#line 226 "Python/executor_cases.c.h"
@@ -230,7 +230,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 392 "Python/bytecodes.c"
+ #line 391 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = _PyLong_Multiply((PyLongObject *)left, (PyLongObject *)right);
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
@@ -246,7 +246,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 400 "Python/bytecodes.c"
+ #line 399 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = _PyLong_Add((PyLongObject *)left, (PyLongObject *)right);
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
@@ -262,7 +262,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 408 "Python/bytecodes.c"
+ #line 407 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = _PyLong_Subtract((PyLongObject *)left, (PyLongObject *)right);
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
@@ -277,7 +277,7 @@
case _GUARD_BOTH_FLOAT: {
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
- #line 423 "Python/bytecodes.c"
+ #line 422 "Python/bytecodes.c"
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
#line 284 "Python/executor_cases.c.h"
@@ -288,7 +288,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 428 "Python/bytecodes.c"
+ #line 427 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
double dres =
((PyFloatObject *)left)->ob_fval *
@@ -304,7 +304,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 436 "Python/bytecodes.c"
+ #line 435 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
double dres =
((PyFloatObject *)left)->ob_fval +
@@ -320,7 +320,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 444 "Python/bytecodes.c"
+ #line 443 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
double dres =
((PyFloatObject *)left)->ob_fval -
@@ -335,7 +335,7 @@
case _GUARD_BOTH_UNICODE: {
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
- #line 459 "Python/bytecodes.c"
+ #line 458 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyUnicode_CheckExact(right), BINARY_OP);
#line 342 "Python/executor_cases.c.h"
@@ -346,7 +346,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 464 "Python/bytecodes.c"
+ #line 463 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = PyUnicode_Concat(left, right);
_Py_DECREF_SPECIALIZED(left, _PyUnicode_ExactDealloc);
@@ -363,7 +363,7 @@
PyObject *start = stack_pointer[-2];
PyObject *container = stack_pointer[-3];
PyObject *res;
- #line 534 "Python/bytecodes.c"
+ #line 533 "Python/bytecodes.c"
PyObject *slice = _PyBuildSlice_ConsumeRefs(start, stop);
// Can't use ERROR_IF() here, because we haven't
// DECREF'ed container yet, and we still own slice.
@@ -387,7 +387,7 @@
PyObject *start = stack_pointer[-2];
PyObject *container = stack_pointer[-3];
PyObject *v = stack_pointer[-4];
- #line 549 "Python/bytecodes.c"
+ #line 548 "Python/bytecodes.c"
PyObject *slice = _PyBuildSlice_ConsumeRefs(start, stop);
int err;
if (slice == NULL) {
@@ -409,7 +409,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *list = stack_pointer[-2];
PyObject *res;
- #line 564 "Python/bytecodes.c"
+ #line 563 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
DEOPT_IF(!PyList_CheckExact(list), BINARY_SUBSCR);
@@ -433,7 +433,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *tuple = stack_pointer[-2];
PyObject *res;
- #line 580 "Python/bytecodes.c"
+ #line 579 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
DEOPT_IF(!PyTuple_CheckExact(tuple), BINARY_SUBSCR);
@@ -457,7 +457,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *dict = stack_pointer[-2];
PyObject *res;
- #line 596 "Python/bytecodes.c"
+ #line 595 "Python/bytecodes.c"
DEOPT_IF(!PyDict_CheckExact(dict), BINARY_SUBSCR);
STAT_INC(BINARY_SUBSCR, hit);
res = PyDict_GetItemWithError(dict, sub);
@@ -468,7 +468,7 @@
#line 469 "Python/executor_cases.c.h"
Py_DECREF(dict);
Py_DECREF(sub);
- #line 604 "Python/bytecodes.c"
+ #line 603 "Python/bytecodes.c"
if (true) goto pop_2_error;
}
Py_INCREF(res); // Do this before DECREF'ing dict, sub
@@ -483,7 +483,7 @@
case LIST_APPEND: {
PyObject *v = stack_pointer[-1];
PyObject *list = stack_pointer[-(2 + (oparg-1))];
- #line 636 "Python/bytecodes.c"
+ #line 635 "Python/bytecodes.c"
if (_PyList_AppendTakeRef((PyListObject *)list, v) < 0) goto pop_1_error;
#line 489 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -493,11 +493,11 @@
case SET_ADD: {
PyObject *v = stack_pointer[-1];
PyObject *set = stack_pointer[-(2 + (oparg-1))];
- #line 640 "Python/bytecodes.c"
+ #line 639 "Python/bytecodes.c"
int err = PySet_Add(set, v);
#line 499 "Python/executor_cases.c.h"
Py_DECREF(v);
- #line 642 "Python/bytecodes.c"
+ #line 641 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 503 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -508,7 +508,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *list = stack_pointer[-2];
PyObject *value = stack_pointer[-3];
- #line 671 "Python/bytecodes.c"
+ #line 670 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(sub), STORE_SUBSCR);
DEOPT_IF(!PyList_CheckExact(list), STORE_SUBSCR);
@@ -534,7 +534,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *dict = stack_pointer[-2];
PyObject *value = stack_pointer[-3];
- #line 690 "Python/bytecodes.c"
+ #line 689 "Python/bytecodes.c"
DEOPT_IF(!PyDict_CheckExact(dict), STORE_SUBSCR);
STAT_INC(STORE_SUBSCR, hit);
int err = _PyDict_SetItem_Take2((PyDictObject *)dict, sub, value);
@@ -548,13 +548,13 @@
case DELETE_SUBSCR: {
PyObject *sub = stack_pointer[-1];
PyObject *container = stack_pointer[-2];
- #line 698 "Python/bytecodes.c"
+ #line 697 "Python/bytecodes.c"
/* del container[sub] */
int err = PyObject_DelItem(container, sub);
#line 555 "Python/executor_cases.c.h"
Py_DECREF(container);
Py_DECREF(sub);
- #line 701 "Python/bytecodes.c"
+ #line 700 "Python/bytecodes.c"
if (err) goto pop_2_error;
#line 560 "Python/executor_cases.c.h"
STACK_SHRINK(2);
@@ -564,12 +564,12 @@
case CALL_INTRINSIC_1: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 705 "Python/bytecodes.c"
+ #line 704 "Python/bytecodes.c"
assert(oparg <= MAX_INTRINSIC_1);
res = _PyIntrinsics_UnaryFunctions[oparg](tstate, value);
#line 571 "Python/executor_cases.c.h"
Py_DECREF(value);
- #line 708 "Python/bytecodes.c"
+ #line 707 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
#line 575 "Python/executor_cases.c.h"
stack_pointer[-1] = res;
@@ -580,13 +580,13 @@
PyObject *value1 = stack_pointer[-1];
PyObject *value2 = stack_pointer[-2];
PyObject *res;
- #line 712 "Python/bytecodes.c"
+ #line 711 "Python/bytecodes.c"
assert(oparg <= MAX_INTRINSIC_2);
res = _PyIntrinsics_BinaryFunctions[oparg](tstate, value2, value1);
#line 587 "Python/executor_cases.c.h"
Py_DECREF(value2);
Py_DECREF(value1);
- #line 715 "Python/bytecodes.c"
+ #line 714 "Python/bytecodes.c"
if (res == NULL) goto pop_2_error;
#line 592 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -597,7 +597,7 @@
case GET_AITER: {
PyObject *obj = stack_pointer[-1];
PyObject *iter;
- #line 820 "Python/bytecodes.c"
+ #line 819 "Python/bytecodes.c"
unaryfunc getter = NULL;
PyTypeObject *type = Py_TYPE(obj);
@@ -612,14 +612,14 @@
type->tp_name);
#line 614 "Python/executor_cases.c.h"
Py_DECREF(obj);
- #line 833 "Python/bytecodes.c"
+ #line 832 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
iter = (*getter)(obj);
#line 621 "Python/executor_cases.c.h"
Py_DECREF(obj);
- #line 838 "Python/bytecodes.c"
+ #line 837 "Python/bytecodes.c"
if (iter == NULL) goto pop_1_error;
if (Py_TYPE(iter)->tp_as_async == NULL ||
@@ -640,7 +640,7 @@
case GET_ANEXT: {
PyObject *aiter = stack_pointer[-1];
PyObject *awaitable;
- #line 853 "Python/bytecodes.c"
+ #line 852 "Python/bytecodes.c"
unaryfunc getter = NULL;
PyObject *next_iter = NULL;
PyTypeObject *type = Py_TYPE(aiter);
@@ -692,7 +692,7 @@
case GET_AWAITABLE: {
PyObject *iterable = stack_pointer[-1];
PyObject *iter;
- #line 898 "Python/bytecodes.c"
+ #line 897 "Python/bytecodes.c"
iter = _PyCoro_GetAwaitableIter(iterable);
if (iter == NULL) {
@@ -701,7 +701,7 @@
#line 703 "Python/executor_cases.c.h"
Py_DECREF(iterable);
- #line 905 "Python/bytecodes.c"
+ #line 904 "Python/bytecodes.c"
if (iter != NULL && PyCoro_CheckExact(iter)) {
PyObject *yf = _PyGen_yf((PyGenObject*)iter);
@@ -725,7 +725,7 @@
case POP_EXCEPT: {
PyObject *exc_value = stack_pointer[-1];
- #line 1035 "Python/bytecodes.c"
+ #line 1034 "Python/bytecodes.c"
_PyErr_StackItem *exc_info = tstate->exc_info;
Py_XSETREF(exc_info->exc_value, exc_value);
#line 732 "Python/executor_cases.c.h"
@@ -735,7 +735,7 @@
case LOAD_ASSERTION_ERROR: {
PyObject *value;
- #line 1086 "Python/bytecodes.c"
+ #line 1085 "Python/bytecodes.c"
value = Py_NewRef(PyExc_AssertionError);
#line 741 "Python/executor_cases.c.h"
STACK_GROW(1);
@@ -745,7 +745,7 @@
case LOAD_BUILD_CLASS: {
PyObject *bc;
- #line 1090 "Python/bytecodes.c"
+ #line 1089 "Python/bytecodes.c"
if (PyDict_CheckExact(BUILTINS())) {
bc = _PyDict_GetItemWithError(BUILTINS(),
&_Py_ID(__build_class__));
@@ -775,7 +775,7 @@
case STORE_NAME: {
PyObject *v = stack_pointer[-1];
- #line 1115 "Python/bytecodes.c"
+ #line 1114 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
PyObject *ns = LOCALS();
int err;
@@ -784,7 +784,7 @@
"no locals found when storing %R", name);
#line 786 "Python/executor_cases.c.h"
Py_DECREF(v);
- #line 1122 "Python/bytecodes.c"
+ #line 1121 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
if (PyDict_CheckExact(ns))
@@ -793,7 +793,7 @@
err = PyObject_SetItem(ns, name, v);
#line 795 "Python/executor_cases.c.h"
Py_DECREF(v);
- #line 1129 "Python/bytecodes.c"
+ #line 1128 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 799 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -801,7 +801,7 @@
}
case DELETE_NAME: {
- #line 1133 "Python/bytecodes.c"
+ #line 1132 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
PyObject *ns = LOCALS();
int err;
@@ -825,7 +825,7 @@
case UNPACK_SEQUENCE_TWO_TUPLE: {
PyObject *seq = stack_pointer[-1];
PyObject **values = stack_pointer - (1);
- #line 1176 "Python/bytecodes.c"
+ #line 1175 "Python/bytecodes.c"
DEOPT_IF(!PyTuple_CheckExact(seq), UNPACK_SEQUENCE);
DEOPT_IF(PyTuple_GET_SIZE(seq) != 2, UNPACK_SEQUENCE);
assert(oparg == 2);
@@ -842,7 +842,7 @@
case UNPACK_SEQUENCE_TUPLE: {
PyObject *seq = stack_pointer[-1];
PyObject **values = stack_pointer - (1);
- #line 1186 "Python/bytecodes.c"
+ #line 1185 "Python/bytecodes.c"
DEOPT_IF(!PyTuple_CheckExact(seq), UNPACK_SEQUENCE);
DEOPT_IF(PyTuple_GET_SIZE(seq) != oparg, UNPACK_SEQUENCE);
STAT_INC(UNPACK_SEQUENCE, hit);
@@ -860,7 +860,7 @@
case UNPACK_SEQUENCE_LIST: {
PyObject *seq = stack_pointer[-1];
PyObject **values = stack_pointer - (1);
- #line 1197 "Python/bytecodes.c"
+ #line 1196 "Python/bytecodes.c"
DEOPT_IF(!PyList_CheckExact(seq), UNPACK_SEQUENCE);
DEOPT_IF(PyList_GET_SIZE(seq) != oparg, UNPACK_SEQUENCE);
STAT_INC(UNPACK_SEQUENCE, hit);
@@ -877,13 +877,13 @@
case UNPACK_EX: {
PyObject *seq = stack_pointer[-1];
- #line 1208 "Python/bytecodes.c"
+ #line 1207 "Python/bytecodes.c"
int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
PyObject **top = stack_pointer + totalargs - 1;
int res = unpack_iterable(tstate, seq, oparg & 0xFF, oparg >> 8, top);
#line 885 "Python/executor_cases.c.h"
Py_DECREF(seq);
- #line 1212 "Python/bytecodes.c"
+ #line 1211 "Python/bytecodes.c"
if (res == 0) goto pop_1_error;
#line 889 "Python/executor_cases.c.h"
STACK_GROW((oparg & 0xFF) + (oparg >> 8));
@@ -892,12 +892,12 @@
case DELETE_ATTR: {
PyObject *owner = stack_pointer[-1];
- #line 1243 "Python/bytecodes.c"
+ #line 1242 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
int err = PyObject_SetAttr(owner, name, (PyObject *)NULL);
#line 899 "Python/executor_cases.c.h"
Py_DECREF(owner);
- #line 1246 "Python/bytecodes.c"
+ #line 1245 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 903 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -906,12 +906,12 @@
case STORE_GLOBAL: {
PyObject *v = stack_pointer[-1];
- #line 1250 "Python/bytecodes.c"
+ #line 1249 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
int err = PyDict_SetItem(GLOBALS(), name, v);
#line 913 "Python/executor_cases.c.h"
Py_DECREF(v);
- #line 1253 "Python/bytecodes.c"
+ #line 1252 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 917 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -919,7 +919,7 @@
}
case DELETE_GLOBAL: {
- #line 1257 "Python/bytecodes.c"
+ #line 1256 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
int err;
err = PyDict_DelItem(GLOBALS(), name);
@@ -937,7 +937,7 @@
case _LOAD_LOCALS: {
PyObject *locals;
- #line 1271 "Python/bytecodes.c"
+ #line 1270 "Python/bytecodes.c"
locals = LOCALS();
if (locals == NULL) {
_PyErr_SetString(tstate, PyExc_SystemError,
@@ -954,7 +954,7 @@
case _LOAD_FROM_DICT_OR_GLOBALS: {
PyObject *mod_or_class_dict = stack_pointer[-1];
PyObject *v;
- #line 1283 "Python/bytecodes.c"
+ #line 1282 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
if (PyDict_CheckExact(mod_or_class_dict)) {
v = PyDict_GetItemWithError(mod_or_class_dict, name);
@@ -1017,7 +1017,7 @@
}
case DELETE_DEREF: {
- #line 1453 "Python/bytecodes.c"
+ #line 1452 "Python/bytecodes.c"
PyObject *cell = GETLOCAL(oparg);
PyObject *oldobj = PyCell_GET(cell);
// Can't use ERROR_IF here.
@@ -1035,7 +1035,7 @@
case LOAD_FROM_DICT_OR_DEREF: {
PyObject *class_dict = stack_pointer[-1];
PyObject *value;
- #line 1466 "Python/bytecodes.c"
+ #line 1465 "Python/bytecodes.c"
PyObject *name;
assert(class_dict);
assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus);
@@ -1077,7 +1077,7 @@
case LOAD_DEREF: {
PyObject *value;
- #line 1503 "Python/bytecodes.c"
+ #line 1502 "Python/bytecodes.c"
PyObject *cell = GETLOCAL(oparg);
value = PyCell_GET(cell);
if (value == NULL) {
@@ -1093,7 +1093,7 @@
case STORE_DEREF: {
PyObject *v = stack_pointer[-1];
- #line 1513 "Python/bytecodes.c"
+ #line 1512 "Python/bytecodes.c"
PyObject *cell = GETLOCAL(oparg);
PyObject *oldobj = PyCell_GET(cell);
PyCell_SET(cell, v);
@@ -1104,7 +1104,7 @@
}
case COPY_FREE_VARS: {
- #line 1520 "Python/bytecodes.c"
+ #line 1519 "Python/bytecodes.c"
/* Copy closure variables to free variables */
PyCodeObject *co = _PyFrame_GetCode(frame);
assert(PyFunction_Check(frame->f_funcobj));
@@ -1122,13 +1122,13 @@
case BUILD_STRING: {
PyObject **pieces = (stack_pointer - oparg);
PyObject *str;
- #line 1533 "Python/bytecodes.c"
+ #line 1532 "Python/bytecodes.c"
str = _PyUnicode_JoinArray(&_Py_STR(empty), pieces, oparg);
#line 1128 "Python/executor_cases.c.h"
for (int _i = oparg; --_i >= 0;) {
Py_DECREF(pieces[_i]);
}
- #line 1535 "Python/bytecodes.c"
+ #line 1534 "Python/bytecodes.c"
if (str == NULL) { STACK_SHRINK(oparg); goto error; }
#line 1134 "Python/executor_cases.c.h"
STACK_SHRINK(oparg);
@@ -1140,7 +1140,7 @@
case BUILD_TUPLE: {
PyObject **values = (stack_pointer - oparg);
PyObject *tup;
- #line 1539 "Python/bytecodes.c"
+ #line 1538 "Python/bytecodes.c"
tup = _PyTuple_FromArraySteal(values, oparg);
if (tup == NULL) { STACK_SHRINK(oparg); goto error; }
#line 1147 "Python/executor_cases.c.h"
@@ -1153,7 +1153,7 @@
case BUILD_LIST: {
PyObject **values = (stack_pointer - oparg);
PyObject *list;
- #line 1544 "Python/bytecodes.c"
+ #line 1543 "Python/bytecodes.c"
list = _PyList_FromArraySteal(values, oparg);
if (list == NULL) { STACK_SHRINK(oparg); goto error; }
#line 1160 "Python/executor_cases.c.h"
@@ -1166,7 +1166,7 @@
case LIST_EXTEND: {
PyObject *iterable = stack_pointer[-1];
PyObject *list = stack_pointer[-(2 + (oparg-1))];
- #line 1549 "Python/bytecodes.c"
+ #line 1548 "Python/bytecodes.c"
PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable);
if (none_val == NULL) {
if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
@@ -1179,7 +1179,7 @@
}
#line 1181 "Python/executor_cases.c.h"
Py_DECREF(iterable);
- #line 1560 "Python/bytecodes.c"
+ #line 1559 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
assert(Py_IsNone(none_val));
@@ -1192,11 +1192,11 @@
case SET_UPDATE: {
PyObject *iterable = stack_pointer[-1];
PyObject *set = stack_pointer[-(2 + (oparg-1))];
- #line 1567 "Python/bytecodes.c"
+ #line 1566 "Python/bytecodes.c"
int err = _PySet_Update(set, iterable);
#line 1198 "Python/executor_cases.c.h"
Py_DECREF(iterable);
- #line 1569 "Python/bytecodes.c"
+ #line 1568 "Python/bytecodes.c"
if (err < 0) goto pop_1_error;
#line 1202 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -1206,7 +1206,7 @@
case BUILD_SET: {
PyObject **values = (stack_pointer - oparg);
PyObject *set;
- #line 1573 "Python/bytecodes.c"
+ #line 1572 "Python/bytecodes.c"
set = PySet_New(NULL);
if (set == NULL)
goto error;
@@ -1231,7 +1231,7 @@
case BUILD_MAP: {
PyObject **values = (stack_pointer - oparg*2);
PyObject *map;
- #line 1590 "Python/bytecodes.c"
+ #line 1589 "Python/bytecodes.c"
map = _PyDict_FromItems(
values, 2,
values+1, 2,
@@ -1243,7 +1243,7 @@
for (int _i = oparg*2; --_i >= 0;) {
Py_DECREF(values[_i]);
}
- #line 1598 "Python/bytecodes.c"
+ #line 1597 "Python/bytecodes.c"
if (map == NULL) { STACK_SHRINK(oparg*2); goto error; }
#line 1249 "Python/executor_cases.c.h"
STACK_SHRINK(oparg*2);
@@ -1253,7 +1253,7 @@
}
case SETUP_ANNOTATIONS: {
- #line 1602 "Python/bytecodes.c"
+ #line 1601 "Python/bytecodes.c"
int err;
PyObject *ann_dict;
if (LOCALS() == NULL) {
@@ -1301,7 +1301,7 @@
PyObject *keys = stack_pointer[-1];
PyObject **values = (stack_pointer - (1 + oparg));
PyObject *map;
- #line 1644 "Python/bytecodes.c"
+ #line 1643 "Python/bytecodes.c"
if (!PyTuple_CheckExact(keys) ||
PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) {
_PyErr_SetString(tstate, PyExc_SystemError,
@@ -1316,7 +1316,7 @@
Py_DECREF(values[_i]);
}
Py_DECREF(keys);
- #line 1654 "Python/bytecodes.c"
+ #line 1653 "Python/bytecodes.c"
if (map == NULL) { STACK_SHRINK(oparg); goto pop_1_error; }
#line 1322 "Python/executor_cases.c.h"
STACK_SHRINK(oparg);
@@ -1326,7 +1326,7 @@
case DICT_UPDATE: {
PyObject *update = stack_pointer[-1];
- #line 1658 "Python/bytecodes.c"
+ #line 1657 "Python/bytecodes.c"
PyObject *dict = PEEK(oparg + 1); // update is still on the stack
if (PyDict_Update(dict, update) < 0) {
if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
@@ -1336,7 +1336,7 @@
}
#line 1338 "Python/executor_cases.c.h"
Py_DECREF(update);
- #line 1666 "Python/bytecodes.c"
+ #line 1665 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
#line 1343 "Python/executor_cases.c.h"
@@ -1347,14 +1347,14 @@
case DICT_MERGE: {
PyObject *update = stack_pointer[-1];
- #line 1672 "Python/bytecodes.c"
+ #line 1671 "Python/bytecodes.c"
PyObject *dict = PEEK(oparg + 1); // update is still on the stack
if (_PyDict_MergeEx(dict, update, 2) < 0) {
format_kwargs_error(tstate, PEEK(3 + oparg), update);
#line 1356 "Python/executor_cases.c.h"
Py_DECREF(update);
- #line 1677 "Python/bytecodes.c"
+ #line 1676 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
#line 1361 "Python/executor_cases.c.h"
@@ -1366,7 +1366,7 @@
case MAP_ADD: {
PyObject *value = stack_pointer[-1];
PyObject *key = stack_pointer[-2];
- #line 1683 "Python/bytecodes.c"
+ #line 1682 "Python/bytecodes.c"
PyObject *dict = PEEK(oparg + 2); // key, value are still on the stack
assert(PyDict_CheckExact(dict));
/* dict[key] = value */
@@ -1383,7 +1383,7 @@
PyObject *global_super = stack_pointer[-3];
PyObject *res2 = NULL;
PyObject *res;
- #line 1766 "Python/bytecodes.c"
+ #line 1765 "Python/bytecodes.c"
assert(!(oparg & 1));
DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR);
DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR);
@@ -1394,7 +1394,7 @@
Py_DECREF(global_super);
Py_DECREF(class);
Py_DECREF(self);
- #line 1773 "Python/bytecodes.c"
+ #line 1772 "Python/bytecodes.c"
if (res == NULL) goto pop_3_error;
#line 1400 "Python/executor_cases.c.h"
STACK_SHRINK(2);
@@ -1410,7 +1410,7 @@
PyObject *global_super = stack_pointer[-3];
PyObject *res2;
PyObject *res;
- #line 1777 "Python/bytecodes.c"
+ #line 1776 "Python/bytecodes.c"
assert(oparg & 1);
DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR);
DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR);
@@ -1444,7 +1444,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2115 "Python/bytecodes.c"
+ #line 2114 "Python/bytecodes.c"
DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP);
DEOPT_IF(!PyFloat_CheckExact(right), COMPARE_OP);
STAT_INC(COMPARE_OP, hit);
@@ -1466,7 +1466,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2130 "Python/bytecodes.c"
+ #line 2129 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP);
DEOPT_IF(!PyLong_CheckExact(right), COMPARE_OP);
DEOPT_IF(!_PyLong_IsCompact((PyLongObject *)left), COMPARE_OP);
@@ -1492,7 +1492,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2149 "Python/bytecodes.c"
+ #line 2148 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP);
DEOPT_IF(!PyUnicode_CheckExact(right), COMPARE_OP);
STAT_INC(COMPARE_OP, hit);
@@ -1515,12 +1515,12 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *b;
- #line 2164 "Python/bytecodes.c"
+ #line 2163 "Python/bytecodes.c"
int res = Py_Is(left, right) ^ oparg;
#line 1521 "Python/executor_cases.c.h"
Py_DECREF(left);
Py_DECREF(right);
- #line 2166 "Python/bytecodes.c"
+ #line 2165 "Python/bytecodes.c"
b = res ? Py_True : Py_False;
#line 1526 "Python/executor_cases.c.h"
STACK_SHRINK(1);
@@ -1532,12 +1532,12 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *b;
- #line 2170 "Python/bytecodes.c"
+ #line 2169 "Python/bytecodes.c"
int res = PySequence_Contains(right, left);
#line 1538 "Python/executor_cases.c.h"
Py_DECREF(left);
Py_DECREF(right);
- #line 2172 "Python/bytecodes.c"
+ #line 2171 "Python/bytecodes.c"
if (res < 0) goto pop_2_error;
b = (res ^ oparg) ? Py_True : Py_False;
#line 1544 "Python/executor_cases.c.h"
@@ -1551,12 +1551,12 @@
PyObject *exc_value = stack_pointer[-2];
PyObject *rest;
PyObject *match;
- #line 2177 "Python/bytecodes.c"
+ #line 2176 "Python/bytecodes.c"
if (check_except_star_type_valid(tstate, match_type) < 0) {
#line 1557 "Python/executor_cases.c.h"
Py_DECREF(exc_value);
Py_DECREF(match_type);
- #line 2179 "Python/bytecodes.c"
+ #line 2178 "Python/bytecodes.c"
if (true) goto pop_2_error;
}
@@ -1567,7 +1567,7 @@
#line 1568 "Python/executor_cases.c.h"
Py_DECREF(exc_value);
Py_DECREF(match_type);
- #line 2187 "Python/bytecodes.c"
+ #line 2186 "Python/bytecodes.c"
if (res < 0) goto pop_2_error;
assert((match == NULL) == (rest == NULL));
@@ -1586,19 +1586,19 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *b;
- #line 2198 "Python/bytecodes.c"
+ #line 2197 "Python/bytecodes.c"
assert(PyExceptionInstance_Check(left));
if (check_except_type_valid(tstate, right) < 0) {
#line 1593 "Python/executor_cases.c.h"
Py_DECREF(right);
- #line 2201 "Python/bytecodes.c"
+ #line 2200 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
int res = PyErr_GivenExceptionMatches(left, right);
#line 1600 "Python/executor_cases.c.h"
Py_DECREF(right);
- #line 2206 "Python/bytecodes.c"
+ #line 2205 "Python/bytecodes.c"
b = res ? Py_True : Py_False;
#line 1604 "Python/executor_cases.c.h"
stack_pointer[-1] = b;
@@ -1608,7 +1608,7 @@
case GET_LEN: {
PyObject *obj = stack_pointer[-1];
PyObject *len_o;
- #line 2305 "Python/bytecodes.c"
+ #line 2304 "Python/bytecodes.c"
// PUSH(len(TOS))
Py_ssize_t len_i = PyObject_Length(obj);
if (len_i < 0) goto error;
@@ -1625,7 +1625,7 @@
PyObject *type = stack_pointer[-2];
PyObject *subject = stack_pointer[-3];
PyObject *attrs;
- #line 2313 "Python/bytecodes.c"
+ #line 2312 "Python/bytecodes.c"
// Pop TOS and TOS1. Set TOS to a tuple of attributes on success, or
// None on failure.
assert(PyTuple_CheckExact(names));
@@ -1634,7 +1634,7 @@
Py_DECREF(subject);
Py_DECREF(type);
Py_DECREF(names);
- #line 2318 "Python/bytecodes.c"
+ #line 2317 "Python/bytecodes.c"
if (attrs) {
assert(PyTuple_CheckExact(attrs)); // Success!
}
@@ -1651,7 +1651,7 @@
case MATCH_MAPPING: {
PyObject *subject = stack_pointer[-1];
PyObject *res;
- #line 2328 "Python/bytecodes.c"
+ #line 2327 "Python/bytecodes.c"
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING;
res = match ? Py_True : Py_False;
#line 1658 "Python/executor_cases.c.h"
@@ -1663,7 +1663,7 @@
case MATCH_SEQUENCE: {
PyObject *subject = stack_pointer[-1];
PyObject *res;
- #line 2333 "Python/bytecodes.c"
+ #line 2332 "Python/bytecodes.c"
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE;
res = match ? Py_True : Py_False;
#line 1670 "Python/executor_cases.c.h"
@@ -1676,7 +1676,7 @@
PyObject *keys = stack_pointer[-1];
PyObject *subject = stack_pointer[-2];
PyObject *values_or_none;
- #line 2338 "Python/bytecodes.c"
+ #line 2337 "Python/bytecodes.c"
// On successful match, PUSH(values). Otherwise, PUSH(None).
values_or_none = match_keys(tstate, subject, keys);
if (values_or_none == NULL) goto error;
@@ -1689,12 +1689,12 @@
case GET_ITER: {
PyObject *iterable = stack_pointer[-1];
PyObject *iter;
- #line 2344 "Python/bytecodes.c"
+ #line 2343 "Python/bytecodes.c"
/* before: [obj]; after [getiter(obj)] */
iter = PyObject_GetIter(iterable);
#line 1696 "Python/executor_cases.c.h"
Py_DECREF(iterable);
- #line 2347 "Python/bytecodes.c"
+ #line 2346 "Python/bytecodes.c"
if (iter == NULL) goto pop_1_error;
#line 1700 "Python/executor_cases.c.h"
stack_pointer[-1] = iter;
@@ -1704,7 +1704,7 @@
case GET_YIELD_FROM_ITER: {
PyObject *iterable = stack_pointer[-1];
PyObject *iter;
- #line 2351 "Python/bytecodes.c"
+ #line 2350 "Python/bytecodes.c"
/* before: [obj]; after [getiter(obj)] */
if (PyCoro_CheckExact(iterable)) {
/* `iterable` is a coroutine */
@@ -1729,7 +1729,7 @@
}
#line 1731 "Python/executor_cases.c.h"
Py_DECREF(iterable);
- #line 2374 "Python/bytecodes.c"
+ #line 2373 "Python/bytecodes.c"
}
#line 1735 "Python/executor_cases.c.h"
stack_pointer[-1] = iter;
@@ -1741,7 +1741,7 @@
PyObject *lasti = stack_pointer[-3];
PyObject *exit_func = stack_pointer[-4];
PyObject *res;
- #line 2606 "Python/bytecodes.c"
+ #line 2605 "Python/bytecodes.c"
/* At the top of the stack are 4 values:
- val: TOP = exc_info()
- unused: SECOND = previous exception
@@ -1771,7 +1771,7 @@
case PUSH_EXC_INFO: {
PyObject *new_exc = stack_pointer[-1];
PyObject *prev_exc;
- #line 2645 "Python/bytecodes.c"
+ #line 2644 "Python/bytecodes.c"
_PyErr_StackItem *exc_info = tstate->exc_info;
if (exc_info->exc_value != NULL) {
prev_exc = exc_info->exc_value;
@@ -1790,7 +1790,7 @@
case EXIT_INIT_CHECK: {
PyObject *should_be_none = stack_pointer[-1];
- #line 3014 "Python/bytecodes.c"
+ #line 3013 "Python/bytecodes.c"
assert(STACK_LEVEL() == 2);
if (should_be_none != Py_None) {
PyErr_Format(PyExc_TypeError,
@@ -1806,7 +1806,7 @@
case MAKE_FUNCTION: {
PyObject *codeobj = stack_pointer[-1];
PyObject *func;
- #line 3428 "Python/bytecodes.c"
+ #line 3427 "Python/bytecodes.c"
PyFunctionObject *func_obj = (PyFunctionObject *)
PyFunction_New(codeobj, GLOBALS());
@@ -1826,7 +1826,7 @@
case SET_FUNCTION_ATTRIBUTE: {
PyObject *func = stack_pointer[-1];
PyObject *attr = stack_pointer[-2];
- #line 3442 "Python/bytecodes.c"
+ #line 3441 "Python/bytecodes.c"
assert(PyFunction_Check(func));
PyFunctionObject *func_obj = (PyFunctionObject *)func;
switch(oparg) {
@@ -1862,13 +1862,13 @@
PyObject *stop = stack_pointer[-(1 + ((oparg == 3) ? 1 : 0))];
PyObject *start = stack_pointer[-(2 + ((oparg == 3) ? 1 : 0))];
PyObject *slice;
- #line 3492 "Python/bytecodes.c"
+ #line 3491 "Python/bytecodes.c"
slice = PySlice_New(start, stop, step);
#line 1868 "Python/executor_cases.c.h"
Py_DECREF(start);
Py_DECREF(stop);
Py_XDECREF(step);
- #line 3494 "Python/bytecodes.c"
+ #line 3493 "Python/bytecodes.c"
if (slice == NULL) { STACK_SHRINK(((oparg == 3) ? 1 : 0)); goto pop_2_error; }
#line 1874 "Python/executor_cases.c.h"
STACK_SHRINK(((oparg == 3) ? 1 : 0));
@@ -1880,7 +1880,7 @@
case CONVERT_VALUE: {
PyObject *value = stack_pointer[-1];
PyObject *result;
- #line 3498 "Python/bytecodes.c"
+ #line 3497 "Python/bytecodes.c"
convertion_func_ptr conv_fn;
assert(oparg >= FVC_STR && oparg <= FVC_ASCII);
conv_fn = CONVERSION_FUNCTIONS[oparg];
@@ -1895,7 +1895,7 @@
case FORMAT_SIMPLE: {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 3507 "Python/bytecodes.c"
+ #line 3506 "Python/bytecodes.c"
/* If value is a unicode object, then we know the result
* of format(value) is value itself. */
if (!PyUnicode_CheckExact(value)) {
@@ -1915,7 +1915,7 @@
PyObject *fmt_spec = stack_pointer[-1];
PyObject *value = stack_pointer[-2];
PyObject *res;
- #line 3520 "Python/bytecodes.c"
+ #line 3519 "Python/bytecodes.c"
res = PyObject_Format(value, fmt_spec);
Py_DECREF(value);
Py_DECREF(fmt_spec);
@@ -1929,7 +1929,7 @@
case COPY: {
PyObject *bottom = stack_pointer[-(1 + (oparg-1))];
PyObject *top;
- #line 3527 "Python/bytecodes.c"
+ #line 3526 "Python/bytecodes.c"
assert(oparg > 0);
top = Py_NewRef(bottom);
#line 1936 "Python/executor_cases.c.h"
@@ -1941,7 +1941,7 @@
case SWAP: {
PyObject *top = stack_pointer[-1];
PyObject *bottom = stack_pointer[-(2 + (oparg-2))];
- #line 3552 "Python/bytecodes.c"
+ #line 3551 "Python/bytecodes.c"
assert(oparg >= 2);
#line 1947 "Python/executor_cases.c.h"
stack_pointer[-1] = bottom;
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 568d15ee7edf2..21cd2d0126ab3 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -8,7 +8,7 @@
}
TARGET(RESUME) {
- #line 137 "Python/bytecodes.c"
+ #line 136 "Python/bytecodes.c"
assert(tstate->cframe == &cframe);
assert(frame == cframe.current_frame);
/* Possibly combine this with eval breaker */
@@ -25,7 +25,7 @@
}
TARGET(INSTRUMENTED_RESUME) {
- #line 151 "Python/bytecodes.c"
+ #line 150 "Python/bytecodes.c"
/* Possible performance enhancement:
* We need to check the eval breaker anyway, can we
* combine the instrument verison check and the eval breaker test?
@@ -57,7 +57,7 @@
TARGET(LOAD_FAST_CHECK) {
PyObject *value;
- #line 183 "Python/bytecodes.c"
+ #line 182 "Python/bytecodes.c"
value = GETLOCAL(oparg);
if (value == NULL) goto unbound_local_error;
Py_INCREF(value);
@@ -69,7 +69,7 @@
TARGET(LOAD_FAST) {
PyObject *value;
- #line 189 "Python/bytecodes.c"
+ #line 188 "Python/bytecodes.c"
value = GETLOCAL(oparg);
assert(value != NULL);
Py_INCREF(value);
@@ -81,7 +81,7 @@
TARGET(LOAD_FAST_AND_CLEAR) {
PyObject *value;
- #line 195 "Python/bytecodes.c"
+ #line 194 "Python/bytecodes.c"
value = GETLOCAL(oparg);
// do not use SETLOCAL here, it decrefs the old value
GETLOCAL(oparg) = NULL;
@@ -94,7 +94,7 @@
TARGET(LOAD_FAST_LOAD_FAST) {
PyObject *value1;
PyObject *value2;
- #line 201 "Python/bytecodes.c"
+ #line 200 "Python/bytecodes.c"
uint32_t oparg1 = oparg >> 4;
uint32_t oparg2 = oparg & 15;
value1 = GETLOCAL(oparg1);
@@ -110,7 +110,7 @@
TARGET(LOAD_CONST) {
PyObject *value;
- #line 210 "Python/bytecodes.c"
+ #line 209 "Python/bytecodes.c"
value = GETITEM(FRAME_CO_CONSTS, oparg);
Py_INCREF(value);
#line 117 "Python/generated_cases.c.h"
@@ -121,7 +121,7 @@
TARGET(STORE_FAST) {
PyObject *value = stack_pointer[-1];
- #line 215 "Python/bytecodes.c"
+ #line 214 "Python/bytecodes.c"
SETLOCAL(oparg, value);
#line 127 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -131,7 +131,7 @@
TARGET(STORE_FAST_LOAD_FAST) {
PyObject *value1 = stack_pointer[-1];
PyObject *value2;
- #line 223 "Python/bytecodes.c"
+ #line 222 "Python/bytecodes.c"
uint32_t oparg1 = oparg >> 4;
uint32_t oparg2 = oparg & 15;
SETLOCAL(oparg1, value1);
@@ -145,7 +145,7 @@
TARGET(STORE_FAST_STORE_FAST) {
PyObject *value1 = stack_pointer[-1];
PyObject *value2 = stack_pointer[-2];
- #line 231 "Python/bytecodes.c"
+ #line 230 "Python/bytecodes.c"
uint32_t oparg1 = oparg >> 4;
uint32_t oparg2 = oparg & 15;
SETLOCAL(oparg1, value1);
@@ -157,7 +157,7 @@
TARGET(POP_TOP) {
PyObject *value = stack_pointer[-1];
- #line 238 "Python/bytecodes.c"
+ #line 237 "Python/bytecodes.c"
#line 162 "Python/generated_cases.c.h"
Py_DECREF(value);
STACK_SHRINK(1);
@@ -166,7 +166,7 @@
TARGET(PUSH_NULL) {
PyObject *res;
- #line 242 "Python/bytecodes.c"
+ #line 241 "Python/bytecodes.c"
res = NULL;
#line 172 "Python/generated_cases.c.h"
STACK_GROW(1);
@@ -179,13 +179,13 @@
PyObject *_tmp_2 = stack_pointer[-2];
{
PyObject *value = _tmp_1;
- #line 238 "Python/bytecodes.c"
+ #line 237 "Python/bytecodes.c"
#line 184 "Python/generated_cases.c.h"
Py_DECREF(value);
}
{
PyObject *value = _tmp_2;
- #line 238 "Python/bytecodes.c"
+ #line 237 "Python/bytecodes.c"
#line 190 "Python/generated_cases.c.h"
Py_DECREF(value);
}
@@ -196,7 +196,7 @@
TARGET(INSTRUMENTED_END_FOR) {
PyObject *value = stack_pointer[-1];
PyObject *receiver = stack_pointer[-2];
- #line 248 "Python/bytecodes.c"
+ #line 247 "Python/bytecodes.c"
/* Need to create a fake StopIteration error here,
* to conform to PEP 380 */
if (PyGen_Check(receiver)) {
@@ -216,7 +216,7 @@
TARGET(END_SEND) {
PyObject *value = stack_pointer[-1];
PyObject *receiver = stack_pointer[-2];
- #line 261 "Python/bytecodes.c"
+ #line 260 "Python/bytecodes.c"
Py_DECREF(receiver);
#line 222 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -227,7 +227,7 @@
TARGET(INSTRUMENTED_END_SEND) {
PyObject *value = stack_pointer[-1];
PyObject *receiver = stack_pointer[-2];
- #line 265 "Python/bytecodes.c"
+ #line 264 "Python/bytecodes.c"
if (PyGen_Check(receiver) || PyCoro_CheckExact(receiver)) {
PyErr_SetObject(PyExc_StopIteration, value);
if (monitor_stop_iteration(tstate, frame, next_instr-1)) {
@@ -245,11 +245,11 @@
TARGET(UNARY_NEGATIVE) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 276 "Python/bytecodes.c"
+ #line 275 "Python/bytecodes.c"
res = PyNumber_Negative(value);
#line 251 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 278 "Python/bytecodes.c"
+ #line 277 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
#line 255 "Python/generated_cases.c.h"
stack_pointer[-1] = res;
@@ -259,7 +259,7 @@
TARGET(UNARY_NOT) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 282 "Python/bytecodes.c"
+ #line 281 "Python/bytecodes.c"
assert(PyBool_Check(value));
res = Py_IsFalse(value) ? Py_True : Py_False;
#line 266 "Python/generated_cases.c.h"
@@ -272,7 +272,7 @@
static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 297 "Python/bytecodes.c"
+ #line 296 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyToBoolCache *cache = (_PyToBoolCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -286,7 +286,7 @@
int err = PyObject_IsTrue(value);
#line 288 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 309 "Python/bytecodes.c"
+ #line 308 "Python/bytecodes.c"
if (err < 0) goto pop_1_error;
res = err ? Py_True : Py_False;
#line 293 "Python/generated_cases.c.h"
@@ -297,7 +297,7 @@
TARGET(TO_BOOL_BOOL) {
PyObject *value = stack_pointer[-1];
- #line 314 "Python/bytecodes.c"
+ #line 313 "Python/bytecodes.c"
DEOPT_IF(!PyBool_Check(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
#line 304 "Python/generated_cases.c.h"
@@ -308,7 +308,7 @@
TARGET(TO_BOOL_INT) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 319 "Python/bytecodes.c"
+ #line 318 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
if (_PyLong_IsZero((PyLongObject *)value)) {
@@ -318,7 +318,7 @@
else {
#line 320 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 327 "Python/bytecodes.c"
+ #line 326 "Python/bytecodes.c"
res = Py_True;
}
#line 325 "Python/generated_cases.c.h"
@@ -330,7 +330,7 @@
TARGET(TO_BOOL_LIST) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 332 "Python/bytecodes.c"
+ #line 331 "Python/bytecodes.c"
DEOPT_IF(!PyList_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
res = Py_SIZE(value) ? Py_True : Py_False;
@@ -344,7 +344,7 @@
TARGET(TO_BOOL_NONE) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 339 "Python/bytecodes.c"
+ #line 338 "Python/bytecodes.c"
// This one is a bit weird, because we expect *some* failures:
DEOPT_IF(!Py_IsNone(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
@@ -358,7 +358,7 @@
TARGET(TO_BOOL_STR) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 346 "Python/bytecodes.c"
+ #line 345 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(value), TO_BOOL);
STAT_INC(TO_BOOL, hit);
if (value == &_Py_STR(empty)) {
@@ -369,7 +369,7 @@
assert(Py_SIZE(value));
#line 371 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 355 "Python/bytecodes.c"
+ #line 354 "Python/bytecodes.c"
res = Py_True;
}
#line 376 "Python/generated_cases.c.h"
@@ -382,14 +382,14 @@
PyObject *value = stack_pointer[-1];
PyObject *res;
uint32_t version = read_u32(&next_instr[1].cache);
- #line 360 "Python/bytecodes.c"
+ #line 359 "Python/bytecodes.c"
// This one is a bit weird, because we expect *some* failures:
assert(version);
DEOPT_IF(Py_TYPE(value)->tp_version_tag != version, TO_BOOL);
STAT_INC(TO_BOOL, hit);
#line 391 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 365 "Python/bytecodes.c"
+ #line 364 "Python/bytecodes.c"
res = Py_True;
#line 395 "Python/generated_cases.c.h"
stack_pointer[-1] = res;
@@ -400,11 +400,11 @@
TARGET(UNARY_INVERT) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 369 "Python/bytecodes.c"
+ #line 368 "Python/bytecodes.c"
res = PyNumber_Invert(value);
#line 406 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 371 "Python/bytecodes.c"
+ #line 370 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
#line 410 "Python/generated_cases.c.h"
stack_pointer[-1] = res;
@@ -417,7 +417,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 387 "Python/bytecodes.c"
+ #line 386 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyLong_CheckExact(right), BINARY_OP);
#line 424 "Python/generated_cases.c.h"
@@ -428,7 +428,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 392 "Python/bytecodes.c"
+ #line 391 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = _PyLong_Multiply((PyLongObject *)left, (PyLongObject *)right);
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
@@ -449,7 +449,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 387 "Python/bytecodes.c"
+ #line 386 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyLong_CheckExact(right), BINARY_OP);
#line 456 "Python/generated_cases.c.h"
@@ -460,7 +460,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 400 "Python/bytecodes.c"
+ #line 399 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = _PyLong_Add((PyLongObject *)left, (PyLongObject *)right);
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
@@ -481,7 +481,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 387 "Python/bytecodes.c"
+ #line 386 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyLong_CheckExact(right), BINARY_OP);
#line 488 "Python/generated_cases.c.h"
@@ -492,7 +492,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 408 "Python/bytecodes.c"
+ #line 407 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = _PyLong_Subtract((PyLongObject *)left, (PyLongObject *)right);
_Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free);
@@ -513,7 +513,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 423 "Python/bytecodes.c"
+ #line 422 "Python/bytecodes.c"
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
#line 520 "Python/generated_cases.c.h"
@@ -524,7 +524,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 428 "Python/bytecodes.c"
+ #line 427 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
double dres =
((PyFloatObject *)left)->ob_fval *
@@ -545,7 +545,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 423 "Python/bytecodes.c"
+ #line 422 "Python/bytecodes.c"
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
#line 552 "Python/generated_cases.c.h"
@@ -556,7 +556,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 436 "Python/bytecodes.c"
+ #line 435 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
double dres =
((PyFloatObject *)left)->ob_fval +
@@ -577,7 +577,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 423 "Python/bytecodes.c"
+ #line 422 "Python/bytecodes.c"
DEOPT_IF(!PyFloat_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyFloat_CheckExact(right), BINARY_OP);
#line 584 "Python/generated_cases.c.h"
@@ -588,7 +588,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 444 "Python/bytecodes.c"
+ #line 443 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
double dres =
((PyFloatObject *)left)->ob_fval -
@@ -609,7 +609,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 459 "Python/bytecodes.c"
+ #line 458 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyUnicode_CheckExact(right), BINARY_OP);
#line 616 "Python/generated_cases.c.h"
@@ -620,7 +620,7 @@
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
PyObject *res;
- #line 464 "Python/bytecodes.c"
+ #line 463 "Python/bytecodes.c"
STAT_INC(BINARY_OP, hit);
res = PyUnicode_Concat(left, right);
_Py_DECREF_SPECIALIZED(left, _PyUnicode_ExactDealloc);
@@ -641,7 +641,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 459 "Python/bytecodes.c"
+ #line 458 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(left), BINARY_OP);
DEOPT_IF(!PyUnicode_CheckExact(right), BINARY_OP);
#line 648 "Python/generated_cases.c.h"
@@ -651,7 +651,7 @@
{
PyObject *right = _tmp_1;
PyObject *left = _tmp_2;
- #line 481 "Python/bytecodes.c"
+ #line 480 "Python/bytecodes.c"
_Py_CODEUNIT true_next = next_instr[INLINE_CACHE_ENTRIES_BINARY_OP];
assert(true_next.op.code == STORE_FAST);
PyObject **target_local = &GETLOCAL(true_next.op.arg);
@@ -687,7 +687,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *container = stack_pointer[-2];
PyObject *res;
- #line 518 "Python/bytecodes.c"
+ #line 517 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyBinarySubscrCache *cache = (_PyBinarySubscrCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -702,7 +702,7 @@
#line 703 "Python/generated_cases.c.h"
Py_DECREF(container);
Py_DECREF(sub);
- #line 530 "Python/bytecodes.c"
+ #line 529 "Python/bytecodes.c"
if (res == NULL) goto pop_2_error;
#line 708 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -716,7 +716,7 @@
PyObject *start = stack_pointer[-2];
PyObject *container = stack_pointer[-3];
PyObject *res;
- #line 534 "Python/bytecodes.c"
+ #line 533 "Python/bytecodes.c"
PyObject *slice = _PyBuildSlice_ConsumeRefs(start, stop);
// Can't use ERROR_IF() here, because we haven't
// DECREF'ed container yet, and we still own slice.
@@ -740,7 +740,7 @@
PyObject *start = stack_pointer[-2];
PyObject *container = stack_pointer[-3];
PyObject *v = stack_pointer[-4];
- #line 549 "Python/bytecodes.c"
+ #line 548 "Python/bytecodes.c"
PyObject *slice = _PyBuildSlice_ConsumeRefs(start, stop);
int err;
if (slice == NULL) {
@@ -762,7 +762,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *list = stack_pointer[-2];
PyObject *res;
- #line 564 "Python/bytecodes.c"
+ #line 563 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
DEOPT_IF(!PyList_CheckExact(list), BINARY_SUBSCR);
@@ -787,7 +787,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *tuple = stack_pointer[-2];
PyObject *res;
- #line 580 "Python/bytecodes.c"
+ #line 579 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR);
DEOPT_IF(!PyTuple_CheckExact(tuple), BINARY_SUBSCR);
@@ -812,7 +812,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *dict = stack_pointer[-2];
PyObject *res;
- #line 596 "Python/bytecodes.c"
+ #line 595 "Python/bytecodes.c"
DEOPT_IF(!PyDict_CheckExact(dict), BINARY_SUBSCR);
STAT_INC(BINARY_SUBSCR, hit);
res = PyDict_GetItemWithError(dict, sub);
@@ -823,7 +823,7 @@
#line 824 "Python/generated_cases.c.h"
Py_DECREF(dict);
Py_DECREF(sub);
- #line 604 "Python/bytecodes.c"
+ #line 603 "Python/bytecodes.c"
if (true) goto pop_2_error;
}
Py_INCREF(res); // Do this before DECREF'ing dict, sub
@@ -839,7 +839,7 @@
TARGET(BINARY_SUBSCR_GETITEM) {
PyObject *sub = stack_pointer[-1];
PyObject *container = stack_pointer[-2];
- #line 611 "Python/bytecodes.c"
+ #line 610 "Python/bytecodes.c"
DEOPT_IF(tstate->interp->eval_frame, BINARY_SUBSCR);
PyTypeObject *tp = Py_TYPE(container);
DEOPT_IF(!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE), BINARY_SUBSCR);
@@ -868,7 +868,7 @@
TARGET(LIST_APPEND) {
PyObject *v = stack_pointer[-1];
PyObject *list = stack_pointer[-(2 + (oparg-1))];
- #line 636 "Python/bytecodes.c"
+ #line 635 "Python/bytecodes.c"
if (_PyList_AppendTakeRef((PyListObject *)list, v) < 0) goto pop_1_error;
#line 874 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -878,11 +878,11 @@
TARGET(SET_ADD) {
PyObject *v = stack_pointer[-1];
PyObject *set = stack_pointer[-(2 + (oparg-1))];
- #line 640 "Python/bytecodes.c"
+ #line 639 "Python/bytecodes.c"
int err = PySet_Add(set, v);
#line 884 "Python/generated_cases.c.h"
Py_DECREF(v);
- #line 642 "Python/bytecodes.c"
+ #line 641 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 888 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -896,7 +896,7 @@
PyObject *container = stack_pointer[-2];
PyObject *v = stack_pointer[-3];
uint16_t counter = read_u16(&next_instr[0].cache);
- #line 652 "Python/bytecodes.c"
+ #line 651 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
if (ADAPTIVE_COUNTER_IS_ZERO(counter)) {
next_instr--;
@@ -915,7 +915,7 @@
Py_DECREF(v);
Py_DECREF(container);
Py_DECREF(sub);
- #line 667 "Python/bytecodes.c"
+ #line 666 "Python/bytecodes.c"
if (err) goto pop_3_error;
#line 921 "Python/generated_cases.c.h"
STACK_SHRINK(3);
@@ -927,7 +927,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *list = stack_pointer[-2];
PyObject *value = stack_pointer[-3];
- #line 671 "Python/bytecodes.c"
+ #line 670 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(sub), STORE_SUBSCR);
DEOPT_IF(!PyList_CheckExact(list), STORE_SUBSCR);
@@ -954,7 +954,7 @@
PyObject *sub = stack_pointer[-1];
PyObject *dict = stack_pointer[-2];
PyObject *value = stack_pointer[-3];
- #line 690 "Python/bytecodes.c"
+ #line 689 "Python/bytecodes.c"
DEOPT_IF(!PyDict_CheckExact(dict), STORE_SUBSCR);
STAT_INC(STORE_SUBSCR, hit);
int err = _PyDict_SetItem_Take2((PyDictObject *)dict, sub, value);
@@ -969,13 +969,13 @@
TARGET(DELETE_SUBSCR) {
PyObject *sub = stack_pointer[-1];
PyObject *container = stack_pointer[-2];
- #line 698 "Python/bytecodes.c"
+ #line 697 "Python/bytecodes.c"
/* del container[sub] */
int err = PyObject_DelItem(container, sub);
#line 976 "Python/generated_cases.c.h"
Py_DECREF(container);
Py_DECREF(sub);
- #line 701 "Python/bytecodes.c"
+ #line 700 "Python/bytecodes.c"
if (err) goto pop_2_error;
#line 981 "Python/generated_cases.c.h"
STACK_SHRINK(2);
@@ -985,12 +985,12 @@
TARGET(CALL_INTRINSIC_1) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 705 "Python/bytecodes.c"
+ #line 704 "Python/bytecodes.c"
assert(oparg <= MAX_INTRINSIC_1);
res = _PyIntrinsics_UnaryFunctions[oparg](tstate, value);
#line 992 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 708 "Python/bytecodes.c"
+ #line 707 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
#line 996 "Python/generated_cases.c.h"
stack_pointer[-1] = res;
@@ -1001,13 +1001,13 @@
PyObject *value1 = stack_pointer[-1];
PyObject *value2 = stack_pointer[-2];
PyObject *res;
- #line 712 "Python/bytecodes.c"
+ #line 711 "Python/bytecodes.c"
assert(oparg <= MAX_INTRINSIC_2);
res = _PyIntrinsics_BinaryFunctions[oparg](tstate, value2, value1);
#line 1008 "Python/generated_cases.c.h"
Py_DECREF(value2);
Py_DECREF(value1);
- #line 715 "Python/bytecodes.c"
+ #line 714 "Python/bytecodes.c"
if (res == NULL) goto pop_2_error;
#line 1013 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -1017,7 +1017,7 @@
TARGET(RAISE_VARARGS) {
PyObject **args = (stack_pointer - oparg);
- #line 719 "Python/bytecodes.c"
+ #line 718 "Python/bytecodes.c"
PyObject *cause = NULL, *exc = NULL;
switch (oparg) {
case 2:
@@ -1040,7 +1040,7 @@
TARGET(INTERPRETER_EXIT) {
PyObject *retval = stack_pointer[-1];
- #line 739 "Python/bytecodes.c"
+ #line 738 "Python/bytecodes.c"
assert(frame == &entry_frame);
assert(_PyFrame_IsIncomplete(frame));
/* Restore previous cframe and return. */
@@ -1054,7 +1054,7 @@
TARGET(RETURN_VALUE) {
PyObject *retval = stack_pointer[-1];
- #line 750 "Python/bytecodes.c"
+ #line 749 "Python/bytecodes.c"
STACK_SHRINK(1);
assert(EMPTY());
_PyFrame_SetStackPointer(frame, stack_pointer);
@@ -1072,7 +1072,7 @@
TARGET(INSTRUMENTED_RETURN_VALUE) {
PyObject *retval = stack_pointer[-1];
- #line 765 "Python/bytecodes.c"
+ #line 764 "Python/bytecodes.c"
int err = _Py_call_instrumentation_arg(
tstate, PY_MONITORING_EVENT_PY_RETURN,
frame, next_instr-1, retval);
@@ -1093,7 +1093,7 @@
}
TARGET(RETURN_CONST) {
- #line 784 "Python/bytecodes.c"
+ #line 783 "Python/bytecodes.c"
PyObject *retval = GETITEM(FRAME_CO_CONSTS, oparg);
Py_INCREF(retval);
assert(EMPTY());
@@ -1111,7 +1111,7 @@
}
TARGET(INSTRUMENTED_RETURN_CONST) {
- #line 800 "Python/bytecodes.c"
+ #line 799 "Python/bytecodes.c"
PyObject *retval = GETITEM(FRAME_CO_CONSTS, oparg);
int err = _Py_call_instrumentation_arg(
tstate, PY_MONITORING_EVENT_PY_RETURN,
@@ -1135,7 +1135,7 @@
TARGET(GET_AITER) {
PyObject *obj = stack_pointer[-1];
PyObject *iter;
- #line 820 "Python/bytecodes.c"
+ #line 819 "Python/bytecodes.c"
unaryfunc getter = NULL;
PyTypeObject *type = Py_TYPE(obj);
@@ -1150,14 +1150,14 @@
type->tp_name);
#line 1152 "Python/generated_cases.c.h"
Py_DECREF(obj);
- #line 833 "Python/bytecodes.c"
+ #line 832 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
iter = (*getter)(obj);
#line 1159 "Python/generated_cases.c.h"
Py_DECREF(obj);
- #line 838 "Python/bytecodes.c"
+ #line 837 "Python/bytecodes.c"
if (iter == NULL) goto pop_1_error;
if (Py_TYPE(iter)->tp_as_async == NULL ||
@@ -1178,7 +1178,7 @@
TARGET(GET_ANEXT) {
PyObject *aiter = stack_pointer[-1];
PyObject *awaitable;
- #line 853 "Python/bytecodes.c"
+ #line 852 "Python/bytecodes.c"
unaryfunc getter = NULL;
PyObject *next_iter = NULL;
PyTypeObject *type = Py_TYPE(aiter);
@@ -1230,7 +1230,7 @@
TARGET(GET_AWAITABLE) {
PyObject *iterable = stack_pointer[-1];
PyObject *iter;
- #line 898 "Python/bytecodes.c"
+ #line 897 "Python/bytecodes.c"
iter = _PyCoro_GetAwaitableIter(iterable);
if (iter == NULL) {
@@ -1239,7 +1239,7 @@
#line 1241 "Python/generated_cases.c.h"
Py_DECREF(iterable);
- #line 905 "Python/bytecodes.c"
+ #line 904 "Python/bytecodes.c"
if (iter != NULL && PyCoro_CheckExact(iter)) {
PyObject *yf = _PyGen_yf((PyGenObject*)iter);
@@ -1267,7 +1267,7 @@
PyObject *v = stack_pointer[-1];
PyObject *receiver = stack_pointer[-2];
PyObject *retval;
- #line 929 "Python/bytecodes.c"
+ #line 928 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PySendCache *cache = (_PySendCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -1323,7 +1323,7 @@
TARGET(SEND_GEN) {
PyObject *v = stack_pointer[-1];
PyObject *receiver = stack_pointer[-2];
- #line 978 "Python/bytecodes.c"
+ #line 977 "Python/bytecodes.c"
DEOPT_IF(tstate->interp->eval_frame, SEND);
PyGenObject *gen = (PyGenObject *)receiver;
DEOPT_IF(Py_TYPE(gen) != &PyGen_Type &&
@@ -1344,7 +1344,7 @@
TARGET(INSTRUMENTED_YIELD_VALUE) {
PyObject *retval = stack_pointer[-1];
- #line 996 "Python/bytecodes.c"
+ #line 995 "Python/bytecodes.c"
assert(frame != &entry_frame);
assert(oparg >= 0); /* make the generator identify this as HAS_ARG */
PyGenObject *gen = _PyFrame_GetGenerator(frame);
@@ -1367,7 +1367,7 @@
TARGET(YIELD_VALUE) {
PyObject *retval = stack_pointer[-1];
- #line 1016 "Python/bytecodes.c"
+ #line 1015 "Python/bytecodes.c"
// NOTE: It's important that YIELD_VALUE never raises an exception!
// The compiler treats any exception raised here as a failed close()
// or throw() call.
@@ -1389,7 +1389,7 @@
TARGET(POP_EXCEPT) {
PyObject *exc_value = stack_pointer[-1];
- #line 1035 "Python/bytecodes.c"
+ #line 1034 "Python/bytecodes.c"
_PyErr_StackItem *exc_info = tstate->exc_info;
Py_XSETREF(exc_info->exc_value, exc_value);
#line 1396 "Python/generated_cases.c.h"
@@ -1400,7 +1400,7 @@
TARGET(RERAISE) {
PyObject *exc = stack_pointer[-1];
PyObject **values = (stack_pointer - (1 + oparg));
- #line 1040 "Python/bytecodes.c"
+ #line 1039 "Python/bytecodes.c"
assert(oparg >= 0 && oparg <= 2);
if (oparg) {
PyObject *lasti = values[0];
@@ -1424,13 +1424,13 @@
TARGET(END_ASYNC_FOR) {
PyObject *exc = stack_pointer[-1];
PyObject *awaitable = stack_pointer[-2];
- #line 1060 "Python/bytecodes.c"
+ #line 1059 "Python/bytecodes.c"
assert(exc && PyExceptionInstance_Check(exc));
if (PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration)) {
#line 1431 "Python/generated_cases.c.h"
Py_DECREF(awaitable);
Py_DECREF(exc);
- #line 1063 "Python/bytecodes.c"
+ #line 1062 "Python/bytecodes.c"
}
else {
Py_INCREF(exc);
@@ -1448,7 +1448,7 @@
PyObject *sub_iter = stack_pointer[-3];
PyObject *none;
PyObject *value;
- #line 1072 "Python/bytecodes.c"
+ #line 1071 "Python/bytecodes.c"
assert(throwflag);
assert(exc_value && PyExceptionInstance_Check(exc_value));
if (PyErr_GivenExceptionMatches(exc_value, PyExc_StopIteration)) {
@@ -1457,7 +1457,7 @@
Py_DECREF(sub_iter);
Py_DECREF(last_sent_val);
Py_DECREF(exc_value);
- #line 1077 "Python/bytecodes.c"
+ #line 1076 "Python/bytecodes.c"
none = Py_None;
}
else {
@@ -1473,7 +1473,7 @@
TARGET(LOAD_ASSERTION_ERROR) {
PyObject *value;
- #line 1086 "Python/bytecodes.c"
+ #line 1085 "Python/bytecodes.c"
value = Py_NewRef(PyExc_AssertionError);
#line 1479 "Python/generated_cases.c.h"
STACK_GROW(1);
@@ -1483,7 +1483,7 @@
TARGET(LOAD_BUILD_CLASS) {
PyObject *bc;
- #line 1090 "Python/bytecodes.c"
+ #line 1089 "Python/bytecodes.c"
if (PyDict_CheckExact(BUILTINS())) {
bc = _PyDict_GetItemWithError(BUILTINS(),
&_Py_ID(__build_class__));
@@ -1513,7 +1513,7 @@
TARGET(STORE_NAME) {
PyObject *v = stack_pointer[-1];
- #line 1115 "Python/bytecodes.c"
+ #line 1114 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
PyObject *ns = LOCALS();
int err;
@@ -1522,7 +1522,7 @@
"no locals found when storing %R", name);
#line 1524 "Python/generated_cases.c.h"
Py_DECREF(v);
- #line 1122 "Python/bytecodes.c"
+ #line 1121 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
if (PyDict_CheckExact(ns))
@@ -1531,7 +1531,7 @@
err = PyObject_SetItem(ns, name, v);
#line 1533 "Python/generated_cases.c.h"
Py_DECREF(v);
- #line 1129 "Python/bytecodes.c"
+ #line 1128 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 1537 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -1539,7 +1539,7 @@
}
TARGET(DELETE_NAME) {
- #line 1133 "Python/bytecodes.c"
+ #line 1132 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
PyObject *ns = LOCALS();
int err;
@@ -1564,7 +1564,7 @@
PREDICTED(UNPACK_SEQUENCE);
static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
PyObject *seq = stack_pointer[-1];
- #line 1159 "Python/bytecodes.c"
+ #line 1158 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyUnpackSequenceCache *cache = (_PyUnpackSequenceCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -1579,7 +1579,7 @@
int res = unpack_iterable(tstate, seq, oparg, -1, top);
#line 1581 "Python/generated_cases.c.h"
Py_DECREF(seq);
- #line 1172 "Python/bytecodes.c"
+ #line 1171 "Python/bytecodes.c"
if (res == 0) goto pop_1_error;
#line 1585 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -1591,7 +1591,7 @@
TARGET(UNPACK_SEQUENCE_TWO_TUPLE) {
PyObject *seq = stack_pointer[-1];
PyObject **values = stack_pointer - (1);
- #line 1176 "Python/bytecodes.c"
+ #line 1175 "Python/bytecodes.c"
DEOPT_IF(!PyTuple_CheckExact(seq), UNPACK_SEQUENCE);
DEOPT_IF(PyTuple_GET_SIZE(seq) != 2, UNPACK_SEQUENCE);
assert(oparg == 2);
@@ -1609,7 +1609,7 @@
TARGET(UNPACK_SEQUENCE_TUPLE) {
PyObject *seq = stack_pointer[-1];
PyObject **values = stack_pointer - (1);
- #line 1186 "Python/bytecodes.c"
+ #line 1185 "Python/bytecodes.c"
DEOPT_IF(!PyTuple_CheckExact(seq), UNPACK_SEQUENCE);
DEOPT_IF(PyTuple_GET_SIZE(seq) != oparg, UNPACK_SEQUENCE);
STAT_INC(UNPACK_SEQUENCE, hit);
@@ -1628,7 +1628,7 @@
TARGET(UNPACK_SEQUENCE_LIST) {
PyObject *seq = stack_pointer[-1];
PyObject **values = stack_pointer - (1);
- #line 1197 "Python/bytecodes.c"
+ #line 1196 "Python/bytecodes.c"
DEOPT_IF(!PyList_CheckExact(seq), UNPACK_SEQUENCE);
DEOPT_IF(PyList_GET_SIZE(seq) != oparg, UNPACK_SEQUENCE);
STAT_INC(UNPACK_SEQUENCE, hit);
@@ -1646,13 +1646,13 @@
TARGET(UNPACK_EX) {
PyObject *seq = stack_pointer[-1];
- #line 1208 "Python/bytecodes.c"
+ #line 1207 "Python/bytecodes.c"
int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
PyObject **top = stack_pointer + totalargs - 1;
int res = unpack_iterable(tstate, seq, oparg & 0xFF, oparg >> 8, top);
#line 1654 "Python/generated_cases.c.h"
Py_DECREF(seq);
- #line 1212 "Python/bytecodes.c"
+ #line 1211 "Python/bytecodes.c"
if (res == 0) goto pop_1_error;
#line 1658 "Python/generated_cases.c.h"
STACK_GROW((oparg & 0xFF) + (oparg >> 8));
@@ -1665,7 +1665,7 @@
PyObject *owner = stack_pointer[-1];
PyObject *v = stack_pointer[-2];
uint16_t counter = read_u16(&next_instr[0].cache);
- #line 1223 "Python/bytecodes.c"
+ #line 1222 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
if (ADAPTIVE_COUNTER_IS_ZERO(counter)) {
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
@@ -1684,7 +1684,7 @@
#line 1685 "Python/generated_cases.c.h"
Py_DECREF(v);
Py_DECREF(owner);
- #line 1239 "Python/bytecodes.c"
+ #line 1238 "Python/bytecodes.c"
if (err) goto pop_2_error;
#line 1690 "Python/generated_cases.c.h"
STACK_SHRINK(2);
@@ -1694,12 +1694,12 @@
TARGET(DELETE_ATTR) {
PyObject *owner = stack_pointer[-1];
- #line 1243 "Python/bytecodes.c"
+ #line 1242 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
int err = PyObject_SetAttr(owner, name, (PyObject *)NULL);
#line 1701 "Python/generated_cases.c.h"
Py_DECREF(owner);
- #line 1246 "Python/bytecodes.c"
+ #line 1245 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 1705 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -1708,12 +1708,12 @@
TARGET(STORE_GLOBAL) {
PyObject *v = stack_pointer[-1];
- #line 1250 "Python/bytecodes.c"
+ #line 1249 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
int err = PyDict_SetItem(GLOBALS(), name, v);
#line 1715 "Python/generated_cases.c.h"
Py_DECREF(v);
- #line 1253 "Python/bytecodes.c"
+ #line 1252 "Python/bytecodes.c"
if (err) goto pop_1_error;
#line 1719 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -1721,7 +1721,7 @@
}
TARGET(DELETE_GLOBAL) {
- #line 1257 "Python/bytecodes.c"
+ #line 1256 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
int err;
err = PyDict_DelItem(GLOBALS(), name);
@@ -1741,7 +1741,7 @@
PyObject *_tmp_1;
{
PyObject *locals;
- #line 1271 "Python/bytecodes.c"
+ #line 1270 "Python/bytecodes.c"
locals = LOCALS();
if (locals == NULL) {
_PyErr_SetString(tstate, PyExc_SystemError,
@@ -1761,7 +1761,7 @@
PyObject *_tmp_1;
{
PyObject *locals;
- #line 1271 "Python/bytecodes.c"
+ #line 1270 "Python/bytecodes.c"
locals = LOCALS();
if (locals == NULL) {
_PyErr_SetString(tstate, PyExc_SystemError,
@@ -1775,7 +1775,7 @@
{
PyObject *mod_or_class_dict = _tmp_1;
PyObject *v;
- #line 1283 "Python/bytecodes.c"
+ #line 1282 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
if (PyDict_CheckExact(mod_or_class_dict)) {
v = PyDict_GetItemWithError(mod_or_class_dict, name);
@@ -1845,7 +1845,7 @@
{
PyObject *mod_or_class_dict = _tmp_1;
PyObject *v;
- #line 1283 "Python/bytecodes.c"
+ #line 1282 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
if (PyDict_CheckExact(mod_or_class_dict)) {
v = PyDict_GetItemWithError(mod_or_class_dict, name);
@@ -1914,7 +1914,7 @@
static_assert(INLINE_CACHE_ENTRIES_LOAD_GLOBAL == 4, "incorrect cache size");
PyObject *null = NULL;
PyObject *v;
- #line 1352 "Python/bytecodes.c"
+ #line 1351 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyLoadGlobalCache *cache = (_PyLoadGlobalCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -1980,7 +1980,7 @@
PyObject *res;
uint16_t index = read_u16(&next_instr[1].cache);
uint16_t version = read_u16(&next_instr[2].cache);
- #line 1406 "Python/bytecodes.c"
+ #line 1405 "Python/bytecodes.c"
DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL);
PyDictObject *dict = (PyDictObject *)GLOBALS();
DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL);
@@ -2006,7 +2006,7 @@
uint16_t index = read_u16(&next_instr[1].cache);
uint16_t mod_version = read_u16(&next_instr[2].cache);
uint16_t bltn_version = read_u16(&next_instr[3].cache);
- #line 1419 "Python/bytecodes.c"
+ #line 1418 "Python/bytecodes.c"
DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL);
DEOPT_IF(!PyDict_CheckExact(BUILTINS()), LOAD_GLOBAL);
PyDictObject *mdict = (PyDictObject *)GLOBALS();
@@ -2031,7 +2031,7 @@
}
TARGET(DELETE_FAST) {
- #line 1436 "Python/bytecodes.c"
+ #line 1435 "Python/bytecodes.c"
PyObject *v = GETLOCAL(oparg);
if (v == NULL) goto unbound_local_error;
SETLOCAL(oparg, NULL);
@@ -2040,7 +2040,7 @@
}
TARGET(MAKE_CELL) {
- #line 1442 "Python/bytecodes.c"
+ #line 1441 "Python/bytecodes.c"
// "initial" is probably NULL but not if it's an arg (or set
// via PyFrame_LocalsToFast() before MAKE_CELL has run).
PyObject *initial = GETLOCAL(oparg);
@@ -2054,7 +2054,7 @@
}
TARGET(DELETE_DEREF) {
- #line 1453 "Python/bytecodes.c"
+ #line 1452 "Python/bytecodes.c"
PyObject *cell = GETLOCAL(oparg);
PyObject *oldobj = PyCell_GET(cell);
// Can't use ERROR_IF here.
@@ -2072,7 +2072,7 @@
TARGET(LOAD_FROM_DICT_OR_DEREF) {
PyObject *class_dict = stack_pointer[-1];
PyObject *value;
- #line 1466 "Python/bytecodes.c"
+ #line 1465 "Python/bytecodes.c"
PyObject *name;
assert(class_dict);
assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus);
@@ -2114,7 +2114,7 @@
TARGET(LOAD_DEREF) {
PyObject *value;
- #line 1503 "Python/bytecodes.c"
+ #line 1502 "Python/bytecodes.c"
PyObject *cell = GETLOCAL(oparg);
value = PyCell_GET(cell);
if (value == NULL) {
@@ -2130,7 +2130,7 @@
TARGET(STORE_DEREF) {
PyObject *v = stack_pointer[-1];
- #line 1513 "Python/bytecodes.c"
+ #line 1512 "Python/bytecodes.c"
PyObject *cell = GETLOCAL(oparg);
PyObject *oldobj = PyCell_GET(cell);
PyCell_SET(cell, v);
@@ -2141,7 +2141,7 @@
}
TARGET(COPY_FREE_VARS) {
- #line 1520 "Python/bytecodes.c"
+ #line 1519 "Python/bytecodes.c"
/* Copy closure variables to free variables */
PyCodeObject *co = _PyFrame_GetCode(frame);
assert(PyFunction_Check(frame->f_funcobj));
@@ -2159,13 +2159,13 @@
TARGET(BUILD_STRING) {
PyObject **pieces = (stack_pointer - oparg);
PyObject *str;
- #line 1533 "Python/bytecodes.c"
+ #line 1532 "Python/bytecodes.c"
str = _PyUnicode_JoinArray(&_Py_STR(empty), pieces, oparg);
#line 2165 "Python/generated_cases.c.h"
for (int _i = oparg; --_i >= 0;) {
Py_DECREF(pieces[_i]);
}
- #line 1535 "Python/bytecodes.c"
+ #line 1534 "Python/bytecodes.c"
if (str == NULL) { STACK_SHRINK(oparg); goto error; }
#line 2171 "Python/generated_cases.c.h"
STACK_SHRINK(oparg);
@@ -2177,7 +2177,7 @@
TARGET(BUILD_TUPLE) {
PyObject **values = (stack_pointer - oparg);
PyObject *tup;
- #line 1539 "Python/bytecodes.c"
+ #line 1538 "Python/bytecodes.c"
tup = _PyTuple_FromArraySteal(values, oparg);
if (tup == NULL) { STACK_SHRINK(oparg); goto error; }
#line 2184 "Python/generated_cases.c.h"
@@ -2190,7 +2190,7 @@
TARGET(BUILD_LIST) {
PyObject **values = (stack_pointer - oparg);
PyObject *list;
- #line 1544 "Python/bytecodes.c"
+ #line 1543 "Python/bytecodes.c"
list = _PyList_FromArraySteal(values, oparg);
if (list == NULL) { STACK_SHRINK(oparg); goto error; }
#line 2197 "Python/generated_cases.c.h"
@@ -2203,7 +2203,7 @@
TARGET(LIST_EXTEND) {
PyObject *iterable = stack_pointer[-1];
PyObject *list = stack_pointer[-(2 + (oparg-1))];
- #line 1549 "Python/bytecodes.c"
+ #line 1548 "Python/bytecodes.c"
PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable);
if (none_val == NULL) {
if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
@@ -2216,7 +2216,7 @@
}
#line 2218 "Python/generated_cases.c.h"
Py_DECREF(iterable);
- #line 1560 "Python/bytecodes.c"
+ #line 1559 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
assert(Py_IsNone(none_val));
@@ -2229,11 +2229,11 @@
TARGET(SET_UPDATE) {
PyObject *iterable = stack_pointer[-1];
PyObject *set = stack_pointer[-(2 + (oparg-1))];
- #line 1567 "Python/bytecodes.c"
+ #line 1566 "Python/bytecodes.c"
int err = _PySet_Update(set, iterable);
#line 2235 "Python/generated_cases.c.h"
Py_DECREF(iterable);
- #line 1569 "Python/bytecodes.c"
+ #line 1568 "Python/bytecodes.c"
if (err < 0) goto pop_1_error;
#line 2239 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -2243,7 +2243,7 @@
TARGET(BUILD_SET) {
PyObject **values = (stack_pointer - oparg);
PyObject *set;
- #line 1573 "Python/bytecodes.c"
+ #line 1572 "Python/bytecodes.c"
set = PySet_New(NULL);
if (set == NULL)
goto error;
@@ -2268,7 +2268,7 @@
TARGET(BUILD_MAP) {
PyObject **values = (stack_pointer - oparg*2);
PyObject *map;
- #line 1590 "Python/bytecodes.c"
+ #line 1589 "Python/bytecodes.c"
map = _PyDict_FromItems(
values, 2,
values+1, 2,
@@ -2280,7 +2280,7 @@
for (int _i = oparg*2; --_i >= 0;) {
Py_DECREF(values[_i]);
}
- #line 1598 "Python/bytecodes.c"
+ #line 1597 "Python/bytecodes.c"
if (map == NULL) { STACK_SHRINK(oparg*2); goto error; }
#line 2286 "Python/generated_cases.c.h"
STACK_SHRINK(oparg*2);
@@ -2290,7 +2290,7 @@
}
TARGET(SETUP_ANNOTATIONS) {
- #line 1602 "Python/bytecodes.c"
+ #line 1601 "Python/bytecodes.c"
int err;
PyObject *ann_dict;
if (LOCALS() == NULL) {
@@ -2338,7 +2338,7 @@
PyObject *keys = stack_pointer[-1];
PyObject **values = (stack_pointer - (1 + oparg));
PyObject *map;
- #line 1644 "Python/bytecodes.c"
+ #line 1643 "Python/bytecodes.c"
if (!PyTuple_CheckExact(keys) ||
PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) {
_PyErr_SetString(tstate, PyExc_SystemError,
@@ -2353,7 +2353,7 @@
Py_DECREF(values[_i]);
}
Py_DECREF(keys);
- #line 1654 "Python/bytecodes.c"
+ #line 1653 "Python/bytecodes.c"
if (map == NULL) { STACK_SHRINK(oparg); goto pop_1_error; }
#line 2359 "Python/generated_cases.c.h"
STACK_SHRINK(oparg);
@@ -2363,7 +2363,7 @@
TARGET(DICT_UPDATE) {
PyObject *update = stack_pointer[-1];
- #line 1658 "Python/bytecodes.c"
+ #line 1657 "Python/bytecodes.c"
PyObject *dict = PEEK(oparg + 1); // update is still on the stack
if (PyDict_Update(dict, update) < 0) {
if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
@@ -2373,7 +2373,7 @@
}
#line 2375 "Python/generated_cases.c.h"
Py_DECREF(update);
- #line 1666 "Python/bytecodes.c"
+ #line 1665 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
#line 2380 "Python/generated_cases.c.h"
@@ -2384,14 +2384,14 @@
TARGET(DICT_MERGE) {
PyObject *update = stack_pointer[-1];
- #line 1672 "Python/bytecodes.c"
+ #line 1671 "Python/bytecodes.c"
PyObject *dict = PEEK(oparg + 1); // update is still on the stack
if (_PyDict_MergeEx(dict, update, 2) < 0) {
format_kwargs_error(tstate, PEEK(3 + oparg), update);
#line 2393 "Python/generated_cases.c.h"
Py_DECREF(update);
- #line 1677 "Python/bytecodes.c"
+ #line 1676 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
#line 2398 "Python/generated_cases.c.h"
@@ -2403,7 +2403,7 @@
TARGET(MAP_ADD) {
PyObject *value = stack_pointer[-1];
PyObject *key = stack_pointer[-2];
- #line 1683 "Python/bytecodes.c"
+ #line 1682 "Python/bytecodes.c"
PyObject *dict = PEEK(oparg + 2); // key, value are still on the stack
assert(PyDict_CheckExact(dict));
/* dict[key] = value */
@@ -2415,7 +2415,7 @@
}
TARGET(INSTRUMENTED_LOAD_SUPER_ATTR) {
- #line 1691 "Python/bytecodes.c"
+ #line 1690 "Python/bytecodes.c"
_PySuperAttrCache *cache = (_PySuperAttrCache *)next_instr;
// cancel out the decrement that will happen in LOAD_SUPER_ATTR; we
// don't want to specialize instrumented instructions
@@ -2432,7 +2432,7 @@
PyObject *global_super = stack_pointer[-3];
PyObject *res2 = NULL;
PyObject *res;
- #line 1705 "Python/bytecodes.c"
+ #line 1704 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
int load_method = oparg & 1;
#if ENABLE_SPECIALIZATION
@@ -2478,7 +2478,7 @@
Py_DECREF(global_super);
Py_DECREF(class);
Py_DECREF(self);
- #line 1747 "Python/bytecodes.c"
+ #line 1746 "Python/bytecodes.c"
if (super == NULL) goto pop_3_error;
res = PyObject_GetAttr(super, name);
Py_DECREF(super);
@@ -2498,7 +2498,7 @@
PyObject *global_super = stack_pointer[-3];
PyObject *res2 = NULL;
PyObject *res;
- #line 1766 "Python/bytecodes.c"
+ #line 1765 "Python/bytecodes.c"
assert(!(oparg & 1));
DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR);
DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR);
@@ -2509,7 +2509,7 @@
Py_DECREF(global_super);
Py_DECREF(class);
Py_DECREF(self);
- #line 1773 "Python/bytecodes.c"
+ #line 1772 "Python/bytecodes.c"
if (res == NULL) goto pop_3_error;
#line 2515 "Python/generated_cases.c.h"
STACK_SHRINK(2);
@@ -2526,7 +2526,7 @@
PyObject *global_super = stack_pointer[-3];
PyObject *res2;
PyObject *res;
- #line 1777 "Python/bytecodes.c"
+ #line 1776 "Python/bytecodes.c"
assert(oparg & 1);
DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR);
DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR);
@@ -2563,7 +2563,7 @@
PyObject *owner = stack_pointer[-1];
PyObject *res2 = NULL;
PyObject *res;
- #line 1816 "Python/bytecodes.c"
+ #line 1815 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyAttrCache *cache = (_PyAttrCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -2599,7 +2599,7 @@
*/
#line 2601 "Python/generated_cases.c.h"
Py_DECREF(owner);
- #line 1850 "Python/bytecodes.c"
+ #line 1849 "Python/bytecodes.c"
if (meth == NULL) goto pop_1_error;
res2 = NULL;
res = meth;
@@ -2610,7 +2610,7 @@
res = PyObject_GetAttr(owner, name);
#line 2612 "Python/generated_cases.c.h"
Py_DECREF(owner);
- #line 1859 "Python/bytecodes.c"
+ #line 1858 "Python/bytecodes.c"
if (res == NULL) goto pop_1_error;
}
#line 2617 "Python/generated_cases.c.h"
@@ -2627,7 +2627,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t index = read_u16(&next_instr[3].cache);
- #line 1868 "Python/bytecodes.c"
+ #line 1867 "Python/bytecodes.c"
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR);
@@ -2655,7 +2655,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t index = read_u16(&next_instr[3].cache);
- #line 1884 "Python/bytecodes.c"
+ #line 1883 "Python/bytecodes.c"
DEOPT_IF(!PyModule_CheckExact(owner), LOAD_ATTR);
PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner)->md_dict;
assert(dict != NULL);
@@ -2683,7 +2683,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t index = read_u16(&next_instr[3].cache);
- #line 1900 "Python/bytecodes.c"
+ #line 1899 "Python/bytecodes.c"
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR);
@@ -2725,7 +2725,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t index = read_u16(&next_instr[3].cache);
- #line 1930 "Python/bytecodes.c"
+ #line 1929 "Python/bytecodes.c"
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR);
@@ -2750,7 +2750,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
PyObject *descr = read_obj(&next_instr[5].cache);
- #line 1943 "Python/bytecodes.c"
+ #line 1942 "Python/bytecodes.c"
DEOPT_IF(!PyType_Check(cls), LOAD_ATTR);
DEOPT_IF(((PyTypeObject *)cls)->tp_version_tag != type_version,
@@ -2776,7 +2776,7 @@
uint32_t type_version = read_u32(&next_instr[1].cache);
uint32_t func_version = read_u32(&next_instr[3].cache);
PyObject *fget = read_obj(&next_instr[5].cache);
- #line 1958 "Python/bytecodes.c"
+ #line 1957 "Python/bytecodes.c"
DEOPT_IF(tstate->interp->eval_frame, LOAD_ATTR);
PyTypeObject *cls = Py_TYPE(owner);
@@ -2808,7 +2808,7 @@
uint32_t type_version = read_u32(&next_instr[1].cache);
uint32_t func_version = read_u32(&next_instr[3].cache);
PyObject *getattribute = read_obj(&next_instr[5].cache);
- #line 1984 "Python/bytecodes.c"
+ #line 1983 "Python/bytecodes.c"
DEOPT_IF(tstate->interp->eval_frame, LOAD_ATTR);
PyTypeObject *cls = Py_TYPE(owner);
DEOPT_IF(cls->tp_version_tag != type_version, LOAD_ATTR);
@@ -2842,7 +2842,7 @@
PyObject *value = stack_pointer[-2];
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t index = read_u16(&next_instr[3].cache);
- #line 2012 "Python/bytecodes.c"
+ #line 2011 "Python/bytecodes.c"
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR);
@@ -2871,7 +2871,7 @@
PyObject *value = stack_pointer[-2];
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t hint = read_u16(&next_instr[3].cache);
- #line 2032 "Python/bytecodes.c"
+ #line 2031 "Python/bytecodes.c"
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR);
@@ -2921,7 +2921,7 @@
PyObject *value = stack_pointer[-2];
uint32_t type_version = read_u32(&next_instr[1].cache);
uint16_t index = read_u16(&next_instr[3].cache);
- #line 2073 "Python/bytecodes.c"
+ #line 2072 "Python/bytecodes.c"
PyTypeObject *tp = Py_TYPE(owner);
assert(type_version != 0);
DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR);
@@ -2943,7 +2943,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2092 "Python/bytecodes.c"
+ #line 2091 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyCompareOpCache *cache = (_PyCompareOpCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -2959,7 +2959,7 @@
#line 2960 "Python/generated_cases.c.h"
Py_DECREF(left);
Py_DECREF(right);
- #line 2105 "Python/bytecodes.c"
+ #line 2104 "Python/bytecodes.c"
if (res == NULL) goto pop_2_error;
if (oparg & 16) {
int res_bool = PyObject_IsTrue(res);
@@ -2978,7 +2978,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2115 "Python/bytecodes.c"
+ #line 2114 "Python/bytecodes.c"
DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP);
DEOPT_IF(!PyFloat_CheckExact(right), COMPARE_OP);
STAT_INC(COMPARE_OP, hit);
@@ -3001,7 +3001,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2130 "Python/bytecodes.c"
+ #line 2129 "Python/bytecodes.c"
DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP);
DEOPT_IF(!PyLong_CheckExact(right), COMPARE_OP);
DEOPT_IF(!_PyLong_IsCompact((PyLongObject *)left), COMPARE_OP);
@@ -3028,7 +3028,7 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *res;
- #line 2149 "Python/bytecodes.c"
+ #line 2148 "Python/bytecodes.c"
DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP);
DEOPT_IF(!PyUnicode_CheckExact(right), COMPARE_OP);
STAT_INC(COMPARE_OP, hit);
@@ -3052,12 +3052,12 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *b;
- #line 2164 "Python/bytecodes.c"
+ #line 2163 "Python/bytecodes.c"
int res = Py_Is(left, right) ^ oparg;
#line 3058 "Python/generated_cases.c.h"
Py_DECREF(left);
Py_DECREF(right);
- #line 2166 "Python/bytecodes.c"
+ #line 2165 "Python/bytecodes.c"
b = res ? Py_True : Py_False;
#line 3063 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -3069,12 +3069,12 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *b;
- #line 2170 "Python/bytecodes.c"
+ #line 2169 "Python/bytecodes.c"
int res = PySequence_Contains(right, left);
#line 3075 "Python/generated_cases.c.h"
Py_DECREF(left);
Py_DECREF(right);
- #line 2172 "Python/bytecodes.c"
+ #line 2171 "Python/bytecodes.c"
if (res < 0) goto pop_2_error;
b = (res ^ oparg) ? Py_True : Py_False;
#line 3081 "Python/generated_cases.c.h"
@@ -3088,12 +3088,12 @@
PyObject *exc_value = stack_pointer[-2];
PyObject *rest;
PyObject *match;
- #line 2177 "Python/bytecodes.c"
+ #line 2176 "Python/bytecodes.c"
if (check_except_star_type_valid(tstate, match_type) < 0) {
#line 3094 "Python/generated_cases.c.h"
Py_DECREF(exc_value);
Py_DECREF(match_type);
- #line 2179 "Python/bytecodes.c"
+ #line 2178 "Python/bytecodes.c"
if (true) goto pop_2_error;
}
@@ -3104,7 +3104,7 @@
#line 3105 "Python/generated_cases.c.h"
Py_DECREF(exc_value);
Py_DECREF(match_type);
- #line 2187 "Python/bytecodes.c"
+ #line 2186 "Python/bytecodes.c"
if (res < 0) goto pop_2_error;
assert((match == NULL) == (rest == NULL));
@@ -3123,19 +3123,19 @@
PyObject *right = stack_pointer[-1];
PyObject *left = stack_pointer[-2];
PyObject *b;
- #line 2198 "Python/bytecodes.c"
+ #line 2197 "Python/bytecodes.c"
assert(PyExceptionInstance_Check(left));
if (check_except_type_valid(tstate, right) < 0) {
#line 3130 "Python/generated_cases.c.h"
Py_DECREF(right);
- #line 2201 "Python/bytecodes.c"
+ #line 2200 "Python/bytecodes.c"
if (true) goto pop_1_error;
}
int res = PyErr_GivenExceptionMatches(left, right);
#line 3137 "Python/generated_cases.c.h"
Py_DECREF(right);
- #line 2206 "Python/bytecodes.c"
+ #line 2205 "Python/bytecodes.c"
b = res ? Py_True : Py_False;
#line 3141 "Python/generated_cases.c.h"
stack_pointer[-1] = b;
@@ -3146,13 +3146,13 @@
PyObject *fromlist = stack_pointer[-1];
PyObject *level = stack_pointer[-2];
PyObject *res;
- #line 2210 "Python/bytecodes.c"
+ #line 2209 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
res = import_name(tstate, frame, name, fromlist, level);
#line 3153 "Python/generated_cases.c.h"
Py_DECREF(level);
Py_DECREF(fromlist);
- #line 2213 "Python/bytecodes.c"
+ #line 2212 "Python/bytecodes.c"
if (res == NULL) goto pop_2_error;
#line 3158 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -3163,7 +3163,7 @@
TARGET(IMPORT_FROM) {
PyObject *from = stack_pointer[-1];
PyObject *res;
- #line 2217 "Python/bytecodes.c"
+ #line 2216 "Python/bytecodes.c"
PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
res = import_from(tstate, from, name);
if (res == NULL) goto error;
@@ -3174,14 +3174,14 @@
}
TARGET(JUMP_FORWARD) {
- #line 2223 "Python/bytecodes.c"
+ #line 2222 "Python/bytecodes.c"
JUMPBY(oparg);
#line 3180 "Python/generated_cases.c.h"
DISPATCH();
}
TARGET(JUMP_BACKWARD) {
- #line 2227 "Python/bytecodes.c"
+ #line 2226 "Python/bytecodes.c"
_Py_CODEUNIT *here = next_instr - 1;
assert(oparg <= INSTR_OFFSET());
JUMPBY(1-oparg);
@@ -3205,7 +3205,7 @@
}
TARGET(ENTER_EXECUTOR) {
- #line 2258 "Python/bytecodes.c"
+ #line 2257 "Python/bytecodes.c"
PyCodeObject *code = _PyFrame_GetCode(frame);
_PyExecutorObject *executor = (_PyExecutorObject *)code->co_executors->executors[oparg&255];
Py_INCREF(executor);
@@ -3220,7 +3220,7 @@
TARGET(POP_JUMP_IF_FALSE) {
PyObject *cond = stack_pointer[-1];
- #line 2270 "Python/bytecodes.c"
+ #line 2269 "Python/bytecodes.c"
assert(PyBool_Check(cond));
JUMPBY(oparg * Py_IsFalse(cond));
#line 3227 "Python/generated_cases.c.h"
@@ -3230,7 +3230,7 @@
TARGET(POP_JUMP_IF_TRUE) {
PyObject *cond = stack_pointer[-1];
- #line 2275 "Python/bytecodes.c"
+ #line 2274 "Python/bytecodes.c"
assert(PyBool_Check(cond));
JUMPBY(oparg * Py_IsTrue(cond));
#line 3237 "Python/generated_cases.c.h"
@@ -3240,11 +3240,11 @@
TARGET(POP_JUMP_IF_NOT_NONE) {
PyObject *value = stack_pointer[-1];
- #line 2280 "Python/bytecodes.c"
+ #line 2279 "Python/bytecodes.c"
if (!Py_IsNone(value)) {
#line 3246 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 2282 "Python/bytecodes.c"
+ #line 2281 "Python/bytecodes.c"
JUMPBY(oparg);
}
#line 3251 "Python/generated_cases.c.h"
@@ -3254,14 +3254,14 @@
TARGET(POP_JUMP_IF_NONE) {
PyObject *value = stack_pointer[-1];
- #line 2287 "Python/bytecodes.c"
+ #line 2286 "Python/bytecodes.c"
if (Py_IsNone(value)) {
JUMPBY(oparg);
}
else {
#line 3263 "Python/generated_cases.c.h"
Py_DECREF(value);
- #line 2292 "Python/bytecodes.c"
+ #line 2291 "Python/bytecodes.c"
}
#line 3267 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -3269,7 +3269,7 @@
}
TARGET(JUMP_BACKWARD_NO_INTERRUPT) {
- #line 2296 "Python/bytecodes.c"
+ #line 2295 "Python/bytecodes.c"
/* This bytecode is used in the `yield from` or `await` loop.
* If there is an interrupt, we want it handled in the innermost
* generator or coroutine, so we deliberately do not check it here.
@@ -3283,7 +3283,7 @@
TARGET(GET_LEN) {
PyObject *obj = stack_pointer[-1];
PyObject *len_o;
- #line 2305 "Python/bytecodes.c"
+ #line 2304 "Python/bytecodes.c"
// PUSH(len(TOS))
Py_ssize_t len_i = PyObject_Length(obj);
if (len_i < 0) goto error;
@@ -3300,7 +3300,7 @@
PyObject *type = stack_pointer[-2];
PyObject *subject = stack_pointer[-3];
PyObject *attrs;
- #line 2313 "Python/bytecodes.c"
+ #line 2312 "Python/bytecodes.c"
// Pop TOS and TOS1. Set TOS to a tuple of attributes on success, or
// None on failure.
assert(PyTuple_CheckExact(names));
@@ -3309,7 +3309,7 @@
Py_DECREF(subject);
Py_DECREF(type);
Py_DECREF(names);
- #line 2318 "Python/bytecodes.c"
+ #line 2317 "Python/bytecodes.c"
if (attrs) {
assert(PyTuple_CheckExact(attrs)); // Success!
}
@@ -3326,7 +3326,7 @@
TARGET(MATCH_MAPPING) {
PyObject *subject = stack_pointer[-1];
PyObject *res;
- #line 2328 "Python/bytecodes.c"
+ #line 2327 "Python/bytecodes.c"
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING;
res = match ? Py_True : Py_False;
#line 3333 "Python/generated_cases.c.h"
@@ -3338,7 +3338,7 @@
TARGET(MATCH_SEQUENCE) {
PyObject *subject = stack_pointer[-1];
PyObject *res;
- #line 2333 "Python/bytecodes.c"
+ #line 2332 "Python/bytecodes.c"
int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE;
res = match ? Py_True : Py_False;
#line 3345 "Python/generated_cases.c.h"
@@ -3351,7 +3351,7 @@
PyObject *keys = stack_pointer[-1];
PyObject *subject = stack_pointer[-2];
PyObject *values_or_none;
- #line 2338 "Python/bytecodes.c"
+ #line 2337 "Python/bytecodes.c"
// On successful match, PUSH(values). Otherwise, PUSH(None).
values_or_none = match_keys(tstate, subject, keys);
if (values_or_none == NULL) goto error;
@@ -3364,12 +3364,12 @@
TARGET(GET_ITER) {
PyObject *iterable = stack_pointer[-1];
PyObject *iter;
- #line 2344 "Python/bytecodes.c"
+ #line 2343 "Python/bytecodes.c"
/* before: [obj]; after [getiter(obj)] */
iter = PyObject_GetIter(iterable);
#line 3371 "Python/generated_cases.c.h"
Py_DECREF(iterable);
- #line 2347 "Python/bytecodes.c"
+ #line 2346 "Python/bytecodes.c"
if (iter == NULL) goto pop_1_error;
#line 3375 "Python/generated_cases.c.h"
stack_pointer[-1] = iter;
@@ -3379,7 +3379,7 @@
TARGET(GET_YIELD_FROM_ITER) {
PyObject *iterable = stack_pointer[-1];
PyObject *iter;
- #line 2351 "Python/bytecodes.c"
+ #line 2350 "Python/bytecodes.c"
/* before: [obj]; after [getiter(obj)] */
if (PyCoro_CheckExact(iterable)) {
/* `iterable` is a coroutine */
@@ -3404,7 +3404,7 @@
}
#line 3406 "Python/generated_cases.c.h"
Py_DECREF(iterable);
- #line 2374 "Python/bytecodes.c"
+ #line 2373 "Python/bytecodes.c"
}
#line 3410 "Python/generated_cases.c.h"
stack_pointer[-1] = iter;
@@ -3416,7 +3416,7 @@
static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
PyObject *iter = stack_pointer[-1];
PyObject *next;
- #line 2392 "Python/bytecodes.c"
+ #line 2391 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyForIterCache *cache = (_PyForIterCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -3456,7 +3456,7 @@
}
TARGET(INSTRUMENTED_FOR_ITER) {
- #line 2426 "Python/bytecodes.c"
+ #line 2425 "Python/bytecodes.c"
_Py_CODEUNIT *here = next_instr-1;
_Py_CODEUNIT *target;
PyObject *iter = TOP();
@@ -3489,7 +3489,7 @@
TARGET(FOR_ITER_LIST) {
PyObject *iter = stack_pointer[-1];
PyObject *next;
- #line 2454 "Python/bytecodes.c"
+ #line 2453 "Python/bytecodes.c"
DEOPT_IF(Py_TYPE(iter) != &PyListIter_Type, FOR_ITER);
_PyListIterObject *it = (_PyListIterObject *)iter;
STAT_INC(FOR_ITER, hit);
@@ -3520,7 +3520,7 @@
TARGET(FOR_ITER_TUPLE) {
PyObject *iter = stack_pointer[-1];
PyObject *next;
- #line 2477 "Python/bytecodes.c"
+ #line 2476 "Python/bytecodes.c"
_PyTupleIterObject *it = (_PyTupleIterObject *)iter;
DEOPT_IF(Py_TYPE(it) != &PyTupleIter_Type, FOR_ITER);
STAT_INC(FOR_ITER, hit);
@@ -3551,7 +3551,7 @@
TARGET(FOR_ITER_RANGE) {
PyObject *iter = stack_pointer[-1];
PyObject *next;
- #line 2500 "Python/bytecodes.c"
+ #line 2499 "Python/bytecodes.c"
_PyRangeIterObject *r = (_PyRangeIterObject *)iter;
DEOPT_IF(Py_TYPE(r) != &PyRangeIter_Type, FOR_ITER);
STAT_INC(FOR_ITER, hit);
@@ -3579,7 +3579,7 @@
TARGET(FOR_ITER_GEN) {
PyObject *iter = stack_pointer[-1];
- #line 2521 "Python/bytecodes.c"
+ #line 2520 "Python/bytecodes.c"
DEOPT_IF(tstate->interp->eval_frame, FOR_ITER);
PyGenObject *gen = (PyGenObject *)iter;
DEOPT_IF(Py_TYPE(gen) != &PyGen_Type, FOR_ITER);
@@ -3602,7 +3602,7 @@
PyObject *mgr = stack_pointer[-1];
PyObject *exit;
PyObject *res;
- #line 2539 "Python/bytecodes.c"
+ #line 2538 "Python/bytecodes.c"
PyObject *enter = _PyObject_LookupSpecial(mgr, &_Py_ID(__aenter__));
if (enter == NULL) {
if (!_PyErr_Occurred(tstate)) {
@@ -3627,7 +3627,7 @@
}
#line 3629 "Python/generated_cases.c.h"
Py_DECREF(mgr);
- #line 2562 "Python/bytecodes.c"
+ #line 2561 "Python/bytecodes.c"
res = _PyObject_CallNoArgs(enter);
Py_DECREF(enter);
if (res == NULL) {
@@ -3645,7 +3645,7 @@
PyObject *mgr = stack_pointer[-1];
PyObject *exit;
PyObject *res;
- #line 2571 "Python/bytecodes.c"
+ #line 2570 "Python/bytecodes.c"
/* pop the context manager, push its __exit__ and the
* value returned from calling its __enter__
*/
@@ -3673,7 +3673,7 @@
}
#line 3675 "Python/generated_cases.c.h"
Py_DECREF(mgr);
- #line 2597 "Python/bytecodes.c"
+ #line 2596 "Python/bytecodes.c"
res = _PyObject_CallNoArgs(enter);
Py_DECREF(enter);
if (res == NULL) {
@@ -3692,7 +3692,7 @@
PyObject *lasti = stack_pointer[-3];
PyObject *exit_func = stack_pointer[-4];
PyObject *res;
- #line 2606 "Python/bytecodes.c"
+ #line 2605 "Python/bytecodes.c"
/* At the top of the stack are 4 values:
- val: TOP = exc_info()
- unused: SECOND = previous exception
@@ -3722,7 +3722,7 @@
TARGET(PUSH_EXC_INFO) {
PyObject *new_exc = stack_pointer[-1];
PyObject *prev_exc;
- #line 2645 "Python/bytecodes.c"
+ #line 2644 "Python/bytecodes.c"
_PyErr_StackItem *exc_info = tstate->exc_info;
if (exc_info->exc_value != NULL) {
prev_exc = exc_info->exc_value;
@@ -3746,7 +3746,7 @@
uint32_t type_version = read_u32(&next_instr[1].cache);
uint32_t keys_version = read_u32(&next_instr[3].cache);
PyObject *descr = read_obj(&next_instr[5].cache);
- #line 2657 "Python/bytecodes.c"
+ #line 2656 "Python/bytecodes.c"
/* Cached method object */
PyTypeObject *self_cls = Py_TYPE(self);
assert(type_version != 0);
@@ -3777,7 +3777,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
PyObject *descr = read_obj(&next_instr[5].cache);
- #line 2676 "Python/bytecodes.c"
+ #line 2675 "Python/bytecodes.c"
PyTypeObject *self_cls = Py_TYPE(self);
DEOPT_IF(self_cls->tp_version_tag != type_version, LOAD_ATTR);
assert(self_cls->tp_dictoffset == 0);
@@ -3801,7 +3801,7 @@
PyObject *res;
uint32_t type_version = read_u32(&next_instr[1].cache);
PyObject *descr = read_obj(&next_instr[5].cache);
- #line 2688 "Python/bytecodes.c"
+ #line 2687 "Python/bytecodes.c"
PyTypeObject *self_cls = Py_TYPE(self);
DEOPT_IF(self_cls->tp_version_tag != type_version, LOAD_ATTR);
Py_ssize_t dictoffset = self_cls->tp_dictoffset;
@@ -3824,7 +3824,7 @@
}
TARGET(KW_NAMES) {
- #line 2704 "Python/bytecodes.c"
+ #line 2703 "Python/bytecodes.c"
assert(kwnames == NULL);
assert(oparg < PyTuple_GET_SIZE(FRAME_CO_CONSTS));
kwnames = GETITEM(FRAME_CO_CONSTS, oparg);
@@ -3833,7 +3833,7 @@
}
TARGET(INSTRUMENTED_CALL) {
- #line 2710 "Python/bytecodes.c"
+ #line 2709 "Python/bytecodes.c"
int is_meth = PEEK(oparg+2) != NULL;
int total_args = oparg + is_meth;
PyObject *function = PEEK(total_args + 1);
@@ -3856,7 +3856,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 2756 "Python/bytecodes.c"
+ #line 2755 "Python/bytecodes.c"
int is_meth = method != NULL;
int total_args = oparg;
if (is_meth) {
@@ -3950,7 +3950,7 @@
TARGET(CALL_BOUND_METHOD_EXACT_ARGS) {
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
- #line 2844 "Python/bytecodes.c"
+ #line 2843 "Python/bytecodes.c"
DEOPT_IF(method != NULL, CALL);
DEOPT_IF(Py_TYPE(callable) != &PyMethod_Type, CALL);
STAT_INC(CALL, hit);
@@ -3969,7 +3969,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
uint32_t func_version = read_u32(&next_instr[1].cache);
- #line 2856 "Python/bytecodes.c"
+ #line 2855 "Python/bytecodes.c"
assert(kwnames == NULL);
DEOPT_IF(tstate->interp->eval_frame, CALL);
int is_meth = method != NULL;
@@ -4003,7 +4003,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
uint32_t func_version = read_u32(&next_instr[1].cache);
- #line 2884 "Python/bytecodes.c"
+ #line 2883 "Python/bytecodes.c"
assert(kwnames == NULL);
DEOPT_IF(tstate->interp->eval_frame, CALL);
int is_meth = method != NULL;
@@ -4047,7 +4047,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *null = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 2922 "Python/bytecodes.c"
+ #line 2921 "Python/bytecodes.c"
assert(kwnames == NULL);
assert(oparg == 1);
DEOPT_IF(null != NULL, CALL);
@@ -4070,7 +4070,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *null = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 2934 "Python/bytecodes.c"
+ #line 2933 "Python/bytecodes.c"
assert(kwnames == NULL);
assert(oparg == 1);
DEOPT_IF(null != NULL, CALL);
@@ -4095,7 +4095,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *null = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 2948 "Python/bytecodes.c"
+ #line 2947 "Python/bytecodes.c"
assert(kwnames == NULL);
assert(oparg == 1);
DEOPT_IF(null != NULL, CALL);
@@ -4119,7 +4119,7 @@
PyObject **args = (stack_pointer - oparg);
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *null = stack_pointer[-(2 + oparg)];
- #line 2962 "Python/bytecodes.c"
+ #line 2961 "Python/bytecodes.c"
/* This instruction does the following:
* 1. Creates the object (by calling ``object.__new__``)
* 2. Pushes a shim frame to the frame stack (to cleanup after ``__init__``)
@@ -4174,7 +4174,7 @@
TARGET(EXIT_INIT_CHECK) {
PyObject *should_be_none = stack_pointer[-1];
- #line 3014 "Python/bytecodes.c"
+ #line 3013 "Python/bytecodes.c"
assert(STACK_LEVEL() == 2);
if (should_be_none != Py_None) {
PyErr_Format(PyExc_TypeError,
@@ -4192,7 +4192,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3024 "Python/bytecodes.c"
+ #line 3023 "Python/bytecodes.c"
int is_meth = method != NULL;
int total_args = oparg;
if (is_meth) {
@@ -4228,7 +4228,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3049 "Python/bytecodes.c"
+ #line 3048 "Python/bytecodes.c"
/* Builtin METH_O functions */
assert(kwnames == NULL);
int is_meth = method != NULL;
@@ -4270,7 +4270,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3080 "Python/bytecodes.c"
+ #line 3079 "Python/bytecodes.c"
/* Builtin METH_FASTCALL functions, without keywords */
assert(kwnames == NULL);
int is_meth = method != NULL;
@@ -4316,7 +4316,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3115 "Python/bytecodes.c"
+ #line 3114 "Python/bytecodes.c"
/* Builtin METH_FASTCALL | METH_KEYWORDS functions */
int is_meth = method != NULL;
int total_args = oparg;
@@ -4362,7 +4362,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3150 "Python/bytecodes.c"
+ #line 3149 "Python/bytecodes.c"
assert(kwnames == NULL);
/* len(o) */
int is_meth = method != NULL;
@@ -4400,7 +4400,7 @@
PyObject *callable = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3177 "Python/bytecodes.c"
+ #line 3176 "Python/bytecodes.c"
assert(kwnames == NULL);
/* isinstance(o, o2) */
int is_meth = method != NULL;
@@ -4439,7 +4439,7 @@
PyObject **args = (stack_pointer - oparg);
PyObject *self = stack_pointer[-(1 + oparg)];
PyObject *method = stack_pointer[-(2 + oparg)];
- #line 3207 "Python/bytecodes.c"
+ #line 3206 "Python/bytecodes.c"
assert(kwnames == NULL);
assert(oparg == 1);
assert(method != NULL);
@@ -4464,7 +4464,7 @@
PyObject **args = (stack_pointer - oparg);
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3227 "Python/bytecodes.c"
+ #line 3226 "Python/bytecodes.c"
assert(kwnames == NULL);
int is_meth = method != NULL;
int total_args = oparg;
@@ -4508,7 +4508,7 @@
PyObject **args = (stack_pointer - oparg);
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3261 "Python/bytecodes.c"
+ #line 3260 "Python/bytecodes.c"
int is_meth = method != NULL;
int total_args = oparg;
if (is_meth) {
@@ -4550,7 +4550,7 @@
PyObject **args = (stack_pointer - oparg);
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3293 "Python/bytecodes.c"
+ #line 3292 "Python/bytecodes.c"
assert(kwnames == NULL);
assert(oparg == 0 || oparg == 1);
int is_meth = method != NULL;
@@ -4592,7 +4592,7 @@
PyObject **args = (stack_pointer - oparg);
PyObject *method = stack_pointer[-(2 + oparg)];
PyObject *res;
- #line 3325 "Python/bytecodes.c"
+ #line 3324 "Python/bytecodes.c"
assert(kwnames == NULL);
int is_meth = method != NULL;
int total_args = oparg;
@@ -4630,7 +4630,7 @@
}
TARGET(INSTRUMENTED_CALL_FUNCTION_EX) {
- #line 3356 "Python/bytecodes.c"
+ #line 3355 "Python/bytecodes.c"
GO_TO_INSTRUCTION(CALL_FUNCTION_EX);
#line 4636 "Python/generated_cases.c.h"
}
@@ -4641,7 +4641,7 @@
PyObject *callargs = stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))];
PyObject *func = stack_pointer[-(2 + ((oparg & 1) ? 1 : 0))];
PyObject *result;
- #line 3360 "Python/bytecodes.c"
+ #line 3359 "Python/bytecodes.c"
// DICT_MERGE is called before this opcode if there are kwargs.
// It converts all dict subtypes in kwargs into regular dicts.
assert(kwargs == NULL || PyDict_CheckExact(kwargs));
@@ -4707,7 +4707,7 @@
Py_DECREF(func);
Py_DECREF(callargs);
Py_XDECREF(kwargs);
- #line 3422 "Python/bytecodes.c"
+ #line 3421 "Python/bytecodes.c"
assert(PEEK(3 + (oparg & 1)) == NULL);
if (result == NULL) { STACK_SHRINK(((oparg & 1) ? 1 : 0)); goto pop_3_error; }
#line 4714 "Python/generated_cases.c.h"
@@ -4721,7 +4721,7 @@
TARGET(MAKE_FUNCTION) {
PyObject *codeobj = stack_pointer[-1];
PyObject *func;
- #line 3428 "Python/bytecodes.c"
+ #line 3427 "Python/bytecodes.c"
PyFunctionObject *func_obj = (PyFunctionObject *)
PyFunction_New(codeobj, GLOBALS());
@@ -4741,7 +4741,7 @@
TARGET(SET_FUNCTION_ATTRIBUTE) {
PyObject *func = stack_pointer[-1];
PyObject *attr = stack_pointer[-2];
- #line 3442 "Python/bytecodes.c"
+ #line 3441 "Python/bytecodes.c"
assert(PyFunction_Check(func));
PyFunctionObject *func_obj = (PyFunctionObject *)func;
switch(oparg) {
@@ -4773,7 +4773,7 @@
}
TARGET(RETURN_GENERATOR) {
- #line 3469 "Python/bytecodes.c"
+ #line 3468 "Python/bytecodes.c"
assert(PyFunction_Check(frame->f_funcobj));
PyFunctionObject *func = (PyFunctionObject *)frame->f_funcobj;
PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func);
@@ -4802,13 +4802,13 @@
PyObject *stop = stack_pointer[-(1 + ((oparg == 3) ? 1 : 0))];
PyObject *start = stack_pointer[-(2 + ((oparg == 3) ? 1 : 0))];
PyObject *slice;
- #line 3492 "Python/bytecodes.c"
+ #line 3491 "Python/bytecodes.c"
slice = PySlice_New(start, stop, step);
#line 4808 "Python/generated_cases.c.h"
Py_DECREF(start);
Py_DECREF(stop);
Py_XDECREF(step);
- #line 3494 "Python/bytecodes.c"
+ #line 3493 "Python/bytecodes.c"
if (slice == NULL) { STACK_SHRINK(((oparg == 3) ? 1 : 0)); goto pop_2_error; }
#line 4814 "Python/generated_cases.c.h"
STACK_SHRINK(((oparg == 3) ? 1 : 0));
@@ -4820,7 +4820,7 @@
TARGET(CONVERT_VALUE) {
PyObject *value = stack_pointer[-1];
PyObject *result;
- #line 3498 "Python/bytecodes.c"
+ #line 3497 "Python/bytecodes.c"
convertion_func_ptr conv_fn;
assert(oparg >= FVC_STR && oparg <= FVC_ASCII);
conv_fn = CONVERSION_FUNCTIONS[oparg];
@@ -4835,7 +4835,7 @@
TARGET(FORMAT_SIMPLE) {
PyObject *value = stack_pointer[-1];
PyObject *res;
- #line 3507 "Python/bytecodes.c"
+ #line 3506 "Python/bytecodes.c"
/* If value is a unicode object, then we know the result
* of format(value) is value itself. */
if (!PyUnicode_CheckExact(value)) {
@@ -4855,7 +4855,7 @@
PyObject *fmt_spec = stack_pointer[-1];
PyObject *value = stack_pointer[-2];
PyObject *res;
- #line 3520 "Python/bytecodes.c"
+ #line 3519 "Python/bytecodes.c"
res = PyObject_Format(value, fmt_spec);
Py_DECREF(value);
Py_DECREF(fmt_spec);
@@ -4869,7 +4869,7 @@
TARGET(COPY) {
PyObject *bottom = stack_pointer[-(1 + (oparg-1))];
PyObject *top;
- #line 3527 "Python/bytecodes.c"
+ #line 3526 "Python/bytecodes.c"
assert(oparg > 0);
top = Py_NewRef(bottom);
#line 4876 "Python/generated_cases.c.h"
@@ -4884,7 +4884,7 @@
PyObject *rhs = stack_pointer[-1];
PyObject *lhs = stack_pointer[-2];
PyObject *res;
- #line 3532 "Python/bytecodes.c"
+ #line 3531 "Python/bytecodes.c"
#if ENABLE_SPECIALIZATION
_PyBinaryOpCache *cache = (_PyBinaryOpCache *)next_instr;
if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) {
@@ -4902,7 +4902,7 @@
#line 4903 "Python/generated_cases.c.h"
Py_DECREF(lhs);
Py_DECREF(rhs);
- #line 3547 "Python/bytecodes.c"
+ #line 3546 "Python/bytecodes.c"
if (res == NULL) goto pop_2_error;
#line 4908 "Python/generated_cases.c.h"
STACK_SHRINK(1);
@@ -4914,7 +4914,7 @@
TARGET(SWAP) {
PyObject *top = stack_pointer[-1];
PyObject *bottom = stack_pointer[-(2 + (oparg-2))];
- #line 3552 "Python/bytecodes.c"
+ #line 3551 "Python/bytecodes.c"
assert(oparg >= 2);
#line 4920 "Python/generated_cases.c.h"
stack_pointer[-1] = bottom;
@@ -4923,7 +4923,7 @@
}
TARGET(INSTRUMENTED_INSTRUCTION) {
- #line 3556 "Python/bytecodes.c"
+ #line 3555 "Python/bytecodes.c"
int next_opcode = _Py_call_instrumentation_instruction(
tstate, frame, next_instr-1);
if (next_opcode < 0) goto error;
@@ -4939,14 +4939,14 @@
}
TARGET(INSTRUMENTED_JUMP_FORWARD) {
- #line 3570 "Python/bytecodes.c"
+ #line 3569 "Python/bytecodes.c"
INSTRUMENTED_JUMP(next_instr-1, next_instr+oparg, PY_MONITORING_EVENT_JUMP);
#line 4945 "Python/generated_cases.c.h"
DISPATCH();
}
TARGET(INSTRUMENTED_JUMP_BACKWARD) {
- #line 3574 "Python/bytecodes.c"
+ #line 3573 "Python/bytecodes.c"
INSTRUMENTED_JUMP(next_instr-1, next_instr+1-oparg, PY_MONITORING_EVENT_JUMP);
#line 4952 "Python/generated_cases.c.h"
CHECK_EVAL_BREAKER();
@@ -4954,7 +4954,7 @@
}
TARGET(INSTRUMENTED_POP_JUMP_IF_TRUE) {
- #line 3579 "Python/bytecodes.c"
+ #line 3578 "Python/bytecodes.c"
PyObject *cond = POP();
assert(PyBool_Check(cond));
_Py_CODEUNIT *here = next_instr - 1;
@@ -4965,7 +4965,7 @@
}
TARGET(INSTRUMENTED_POP_JUMP_IF_FALSE) {
- #line 3587 "Python/bytecodes.c"
+ #line 3586 "Python/bytecodes.c"
PyObject *cond = POP();
assert(PyBool_Check(cond));
_Py_CODEUNIT *here = next_instr - 1;
@@ -4976,7 +4976,7 @@
}
TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) {
- #line 3595 "Python/bytecodes.c"
+ #line 3594 "Python/bytecodes.c"
PyObject *value = POP();
_Py_CODEUNIT *here = next_instr-1;
int offset;
@@ -4993,7 +4993,7 @@
}
TARGET(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) {
- #line 3609 "Python/bytecodes.c"
+ #line 3608 "Python/bytecodes.c"
PyObject *value = POP();
_Py_CODEUNIT *here = next_instr-1;
int offset;
@@ -5010,7 +5010,7 @@
}
TARGET(EXTENDED_ARG) {
- #line 3623 "Python/bytecodes.c"
+ #line 3622 "Python/bytecodes.c"
assert(oparg);
opcode = next_instr->op.code;
oparg = oparg << 8 | next_instr->op.arg;
@@ -5020,14 +5020,14 @@
}
TARGET(CACHE) {
- #line 3631 "Python/bytecodes.c"
+ #line 3630 "Python/bytecodes.c"
assert(0 && "Executing a cache.");
Py_UNREACHABLE();
#line 5027 "Python/generated_cases.c.h"
}
TARGET(RESERVED) {
- #line 3636 "Python/bytecodes.c"
+ #line 3635 "Python/bytecodes.c"
assert(0 && "Executing RESERVED instruction.");
Py_UNREACHABLE();
#line 5034 "Python/generated_cases.c.h"
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 26e474a3efefd..60bf66c8a6bf8 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -834,11 +834,8 @@ _PyErr_PrintEx(PyThreadState *tstate, int set_sys_last_vars)
_PyErr_WriteUnraisableMsg("in audit hook", NULL);
}
if (hook) {
- PyObject* stack[3];
- stack[0] = typ;
- stack[1] = exc;
- stack[2] = tb;
- PyObject *result = _PyObject_FastCall(hook, stack, 3);
+ PyObject* args[3] = {typ, exc, tb};
+ PyObject *result = PyObject_Vectorcall(hook, args, 3, NULL);
if (result == NULL) {
handle_system_exit();
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 0cd8974d19713..723fcdb174ab3 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -268,7 +268,7 @@ sys_audit_tstate(PyThreadState *ts, const char *event,
PyThreadState_LeaveTracing(ts);
}
PyObject* args[2] = {eventName, eventArgs};
- o = _PyObject_FastCallTstate(ts, hook, args, 2);
+ o = _PyObject_VectorcallTstate(ts, hook, args, 2, NULL);
if (canTrace) {
PyThreadState_EnterTracing(ts);
}
1
0