diff options
author | Christian Heimes <christian@python.org> | 2022-01-27 19:32:12 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-27 19:32:12 (GMT) |
commit | 26b0482393a313e3bda364a35e7417e9db52c1c4 (patch) | |
tree | 6b82196461a27af8d54c68e1573f4c0788f8c38a | |
parent | 247480a21cb165efdacc346a2d589dfc27e18283 (diff) | |
download | cpython-26b0482393a313e3bda364a35e7417e9db52c1c4.zip cpython-26b0482393a313e3bda364a35e7417e9db52c1c4.tar.gz cpython-26b0482393a313e3bda364a35e7417e9db52c1c4.tar.bz2 |
bpo-46476: Simplify and fix _PyStaticCode_Dealloc (GH-30965)
-rw-r--r-- | Include/internal/pycore_code.h | 2 | ||||
-rw-r--r-- | Objects/codeobject.c | 13 | ||||
-rw-r--r-- | Tools/scripts/deepfreeze.py | 2 |
3 files changed, 10 insertions, 7 deletions
diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 884a91f..bbf7a06 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -277,7 +277,7 @@ void _Py_Specialize_BinaryOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr, void _Py_Specialize_CompareOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr, SpecializedCacheEntry *cache); /* Deallocator function for static codeobjects used in deepfreeze.py */ -void _PyStaticCode_Dealloc(PyCodeObject *co, _Py_CODEUNIT *firstinstr); +void _PyStaticCode_Dealloc(PyCodeObject *co); #ifdef Py_STATS diff --git a/Objects/codeobject.c b/Objects/codeobject.c index f983d66..bb8ffa7 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -1908,16 +1908,19 @@ _PyCode_ConstantKey(PyObject *op) } void -_PyStaticCode_Dealloc(PyCodeObject *co, _Py_CODEUNIT *firstinstr) +_PyStaticCode_Dealloc(PyCodeObject *co) { - PyMem_Free(co->co_quickened); - co->co_quickened = NULL; + if (co->co_quickened) { + PyMem_Free(co->co_quickened); + co->co_quickened = NULL; + _Py_QuickenedCount--; + } + co->co_warmup = QUICKENING_INITIAL_WARMUP_VALUE; PyMem_Free(co->co_extra); co->co_extra = NULL; - co->co_firstinstr = firstinstr; + co->co_firstinstr = (_Py_CODEUNIT *)PyBytes_AS_STRING(co->co_code); if (co->co_weakreflist != NULL) { PyObject_ClearWeakRefs((PyObject *)co); co->co_weakreflist = NULL; } - co->co_warmup = QUICKENING_INITIAL_WARMUP_VALUE; } diff --git a/Tools/scripts/deepfreeze.py b/Tools/scripts/deepfreeze.py index 7884939..db44ba8 100644 --- a/Tools/scripts/deepfreeze.py +++ b/Tools/scripts/deepfreeze.py @@ -278,7 +278,7 @@ class Printer: self.write(f".co_varnames = {co_varnames},") self.write(f".co_cellvars = {co_cellvars},") self.write(f".co_freevars = {co_freevars},") - self.deallocs.append(f"_PyStaticCode_Dealloc(&{name}, (_Py_CODEUNIT *) {removesuffix(co_code, '.ob_base.ob_base')}.ob_sval);") + self.deallocs.append(f"_PyStaticCode_Dealloc(&{name});") return f"& {name}.ob_base" def generate_tuple(self, name: str, t: Tuple[object, ...]) -> str: |