diff options
author | Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> | 2022-06-24 17:55:18 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-24 17:55:18 (GMT) |
commit | 50a5ab2c0bf7bd10d85e80c9f71a7b7245a0682a (patch) | |
tree | 7a1db90f15efc86854a72de9172aad4f4a28b173 | |
parent | a91ffcf3fa15ce3884f620c799566aa734412f9d (diff) | |
download | cpython-50a5ab2c0bf7bd10d85e80c9f71a7b7245a0682a.zip cpython-50a5ab2c0bf7bd10d85e80c9f71a7b7245a0682a.tar.gz cpython-50a5ab2c0bf7bd10d85e80c9f71a7b7245a0682a.tar.bz2 |
gh-93382: Sync up `co_code` changes with 3.11 (GH-94227)
Sync up co_code changes with 3.11 commit 852b4d4bcd12b0b6839a015a262ce976b134f6f3.
-rw-r--r-- | Include/cpython/code.h | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2022-05-31-16-36-30.gh-issue-93382.Jf6gAj.rst | 3 | ||||
-rw-r--r-- | Objects/codeobject.c | 2 | ||||
-rw-r--r-- | Tools/scripts/deepfreeze.py | 1 |
4 files changed, 5 insertions, 3 deletions
diff --git a/Include/cpython/code.h b/Include/cpython/code.h index ebc0df9..595cd9e 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -90,7 +90,7 @@ typedef uint16_t _Py_CODEUNIT; PyObject *co_qualname; /* unicode (qualname, for reference) */ \ PyObject *co_linetable; /* bytes object that holds location info */ \ PyObject *co_weakreflist; /* to support weakrefs to code objects */ \ - void *_co_code; /* cached co_code object/attribute */ \ + PyObject *_co_code; /* cached co_code object/attribute */ \ int _co_firsttraceable; /* index of first traceable instruction */ \ char *_co_linearray; /* array of line offsets */ \ /* Scratch space for extra data relating to the code object. \ diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-31-16-36-30.gh-issue-93382.Jf6gAj.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-31-16-36-30.gh-issue-93382.Jf6gAj.rst index 04b9e8b..1fe821e 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2022-05-31-16-36-30.gh-issue-93382.Jf6gAj.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2022-05-31-16-36-30.gh-issue-93382.Jf6gAj.rst @@ -1 +1,2 @@ -Speed up the :c:func:`PyCode_GetCode` function which also improves accessing the :attr:`~types.CodeType.co_code` attribute in Python. +Cache the result of :c:func:`PyCode_GetCode` function to restore the O(1) +lookup of the :attr:`~types.CodeType.co_code` attribute. diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 707de11..c38c51b 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -1440,7 +1440,7 @@ _PyCode_GetCode(PyCodeObject *co) } deopt_code((_Py_CODEUNIT *)PyBytes_AS_STRING(code), Py_SIZE(co)); assert(co->_co_code == NULL); - co->_co_code = (void *)Py_NewRef(code); + co->_co_code = Py_NewRef(code); return code; } diff --git a/Tools/scripts/deepfreeze.py b/Tools/scripts/deepfreeze.py index a46cf6c..f9fd4e3 100644 --- a/Tools/scripts/deepfreeze.py +++ b/Tools/scripts/deepfreeze.py @@ -274,6 +274,7 @@ class Printer: self.write(f".co_name = {co_name},") self.write(f".co_qualname = {co_qualname},") self.write(f".co_linetable = {co_linetable},") + self.write(f"._co_code = NULL,") self.write("._co_linearray = NULL,") self.write(f".co_code_adaptive = {co_code_adaptive},") for i, op in enumerate(code.co_code[::2]): |