diff options
author | Eric Snow <ericsnowcurrently@gmail.com> | 2021-06-07 18:22:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-07 18:22:26 (GMT) |
commit | 2ab27c4af4ddf7528e1375e77c787c7fbb09b5e6 (patch) | |
tree | d3983e5282f575560cb7449fae4785447fdfff14 /Objects/clinic | |
parent | 001eb520b5757294dc455c900d94b7b153de6cdd (diff) | |
download | cpython-2ab27c4af4ddf7528e1375e77c787c7fbb09b5e6.zip cpython-2ab27c4af4ddf7528e1375e77c787c7fbb09b5e6.tar.gz cpython-2ab27c4af4ddf7528e1375e77c787c7fbb09b5e6.tar.bz2 |
bpo-43693: Un-revert commits 2c1e258 and b2bf2bc. (gh-26577)
These were reverted in gh-26530 (commit 17c4edc) due to refleaks.
* 2c1e258 - Compute deref offsets in compiler (gh-25152)
* b2bf2bc - Add new internal code objects fields: co_fastlocalnames and co_fastlocalkinds. (gh-26388)
This change fixes the refleaks.
https://bugs.python.org/issue43693
Diffstat (limited to 'Objects/clinic')
-rw-r--r-- | Objects/clinic/codeobject.c.h | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/Objects/clinic/codeobject.c.h b/Objects/clinic/codeobject.c.h index 7ffdf07..c1ad09c 100644 --- a/Objects/clinic/codeobject.c.h +++ b/Objects/clinic/codeobject.c.h @@ -373,4 +373,41 @@ skip_optional_kwonly: exit: return return_value; } -/*[clinic end generated code: output=a272b22f63ea002e input=a9049054013a1b77]*/ + +PyDoc_STRVAR(code__varname_from_oparg__doc__, +"_varname_from_oparg($self, /, oparg)\n" +"--\n" +"\n" +"(internal-only) Return the local variable name for the given oparg.\n" +"\n" +"WARNING: this method is for internal use only and may change or go away."); + +#define CODE__VARNAME_FROM_OPARG_METHODDEF \ + {"_varname_from_oparg", (PyCFunction)(void(*)(void))code__varname_from_oparg, METH_FASTCALL|METH_KEYWORDS, code__varname_from_oparg__doc__}, + +static PyObject * +code__varname_from_oparg_impl(PyCodeObject *self, int oparg); + +static PyObject * +code__varname_from_oparg(PyCodeObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + static const char * const _keywords[] = {"oparg", NULL}; + static _PyArg_Parser _parser = {NULL, _keywords, "_varname_from_oparg", 0}; + PyObject *argsbuf[1]; + int oparg; + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); + if (!args) { + goto exit; + } + oparg = _PyLong_AsInt(args[0]); + if (oparg == -1 && PyErr_Occurred()) { + goto exit; + } + return_value = code__varname_from_oparg_impl(self, oparg); + +exit: + return return_value; +} +/*[clinic end generated code: output=ba4c5487e0364ce8 input=a9049054013a1b77]*/ |