mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-43693: Compute deref offsets in compiler (gh-25152)
Merges locals and cells into a single array. Saves a pointer in the interpreter and means that we don't need the LOAD_CLOSURE opcode any more https://bugs.python.org/issue43693
This commit is contained in:
parent
35002aa8f6
commit
b2bf2bc1ec
11 changed files with 222 additions and 209 deletions
22
Objects/clinic/codeobject.c.h
generated
22
Objects/clinic/codeobject.c.h
generated
|
@ -375,7 +375,7 @@ exit:
|
|||
}
|
||||
|
||||
PyDoc_STRVAR(code__varname_from_oparg__doc__,
|
||||
"_varname_from_oparg($self, /, oparg, *, cell=False)\n"
|
||||
"_varname_from_oparg($self, /, oparg)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"(internal-only) Return the local variable name for the given oparg.\n"
|
||||
|
@ -386,18 +386,16 @@ PyDoc_STRVAR(code__varname_from_oparg__doc__,
|
|||
{"_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, int cell);
|
||||
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", "cell", NULL};
|
||||
static const char * const _keywords[] = {"oparg", NULL};
|
||||
static _PyArg_Parser _parser = {NULL, _keywords, "_varname_from_oparg", 0};
|
||||
PyObject *argsbuf[2];
|
||||
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
|
||||
PyObject *argsbuf[1];
|
||||
int oparg;
|
||||
int cell = 0;
|
||||
|
||||
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
|
||||
if (!args) {
|
||||
|
@ -407,17 +405,9 @@ code__varname_from_oparg(PyCodeObject *self, PyObject *const *args, Py_ssize_t n
|
|||
if (oparg == -1 && PyErr_Occurred()) {
|
||||
goto exit;
|
||||
}
|
||||
if (!noptargs) {
|
||||
goto skip_optional_kwonly;
|
||||
}
|
||||
cell = PyObject_IsTrue(args[1]);
|
||||
if (cell < 0) {
|
||||
goto exit;
|
||||
}
|
||||
skip_optional_kwonly:
|
||||
return_value = code__varname_from_oparg_impl(self, oparg, cell);
|
||||
return_value = code__varname_from_oparg_impl(self, oparg);
|
||||
|
||||
exit:
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=43f4eef80d584fe0 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=ba4c5487e0364ce8 input=a9049054013a1b77]*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue