aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/marshal.c
diff options
context:
space:
mode:
authorPablo Galindo <Pablogsal@gmail.com>2021-06-04 17:51:05 +0100
committerGitHub <noreply@github.com>2021-06-04 17:51:05 +0100
commit17c4edc4e0692fe55e185755ea8a2f5238f3ef08 (patch)
tree563807f4bbdebbf89b2065e4807cc291c44be2b1 /Python/marshal.c
parenta46c220edc5cf716d0b71eb80ac29ecdb4ebb430 (diff)
downloadcpython-17c4edc4e0692fe55e185755ea8a2f5238f3ef08.tar.gz
cpython-17c4edc4e0692fe55e185755ea8a2f5238f3ef08.zip
bpo-43693: Revert commits 2c1e2583fdc4db6b43d163239ea42b0e8394171f and b2bf2bc1ece673d387341e06c8d3c2bc6e259747 (GH-26530)
* Revert "bpo-43693: Compute deref offsets in compiler (gh-25152)" This reverts commit b2bf2bc1ece673d387341e06c8d3c2bc6e259747. * Revert "bpo-43693: Add new internal code objects fields: co_fastlocalnames and co_fastlocalkinds. (gh-26388)" This reverts commit 2c1e2583fdc4db6b43d163239ea42b0e8394171f. These two commits are breaking the refleak buildbots.
Diffstat (limited to 'Python/marshal.c')
-rw-r--r--Python/marshal.c52
1 files changed, 22 insertions, 30 deletions
diff --git a/Python/marshal.c b/Python/marshal.c
index 80517b3d65d..52bf2a51aaa 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -518,8 +518,9 @@ w_complex_object(PyObject *v, char flag, WFILE *p)
w_object(co->co_code, p);
w_object(co->co_consts, p);
w_object(co->co_names, p);
- w_object(co->co_localsplusnames, p);
- w_string(co->co_localspluskinds, co->co_nlocalsplus, p);
+ w_object(co->co_varnames, p);
+ w_object(co->co_freevars, p);
+ w_object(co->co_cellvars, p);
w_object(co->co_filename, p);
w_object(co->co_name, p);
w_long(co->co_firstlineno, p);
@@ -1305,8 +1306,9 @@ r_object(RFILE *p)
PyObject *code = NULL;
PyObject *consts = NULL;
PyObject *names = NULL;
- PyObject *localsplusnames = NULL;
- _PyLocalsPlusKinds localspluskinds = NULL;
+ PyObject *varnames = NULL;
+ PyObject *freevars = NULL;
+ PyObject *cellvars = NULL;
PyObject *filename = NULL;
PyObject *name = NULL;
int firstlineno;
@@ -1345,22 +1347,16 @@ r_object(RFILE *p)
names = r_object(p);
if (names == NULL)
goto code_error;
- localsplusnames = r_object(p);
- if (localsplusnames == NULL)
+ varnames = r_object(p);
+ if (varnames == NULL)
+ goto code_error;
+ Py_ssize_t nlocals = PyTuple_GET_SIZE(varnames);
+ freevars = r_object(p);
+ if (freevars == NULL)
+ goto code_error;
+ cellvars = r_object(p);
+ if (cellvars == NULL)
goto code_error;
-
- assert(PyTuple_GET_SIZE(localsplusnames) < INT_MAX);
- int nlocalsplus = (int)PyTuple_GET_SIZE(localsplusnames);
- if (nlocalsplus) {
- if (_PyCode_InitLocalsPlusKinds(nlocalsplus,
- &localspluskinds) < 0) {
- goto code_error;
- }
- for (int i = 0; i < nlocalsplus; i++) {
- localspluskinds[i] = r_byte(p);
- }
- }
-
filename = r_object(p);
if (filename == NULL)
goto code_error;
@@ -1379,8 +1375,7 @@ r_object(RFILE *p)
if (PySys_Audit("code.__new__", "OOOiiiiii",
code, filename, name, argcount, posonlyargcount,
- kwonlyargcount, nlocalsplus, stacksize,
- flags) < 0) {
+ kwonlyargcount, nlocals, stacksize, flags) < 0) {
goto code_error;
}
@@ -1396,8 +1391,9 @@ r_object(RFILE *p)
.consts = consts,
.names = names,
- .localsplusnames = localsplusnames,
- .localspluskinds = localspluskinds,
+ .varnames = varnames,
+ .cellvars = cellvars,
+ .freevars = freevars,
.argcount = argcount,
.posonlyargcount = posonlyargcount,
@@ -1407,26 +1403,22 @@ r_object(RFILE *p)
.exceptiontable = exceptiontable,
};
-
if (_PyCode_Validate(&con) < 0) {
goto code_error;
}
-
v = (PyObject *)_PyCode_New(&con);
if (v == NULL) {
goto code_error;
}
-
- localspluskinds = NULL; // This keeps it from getting freed below.
-
v = r_ref_insert(v, idx, flag, p);
code_error:
Py_XDECREF(code);
Py_XDECREF(consts);
Py_XDECREF(names);
- Py_XDECREF(localsplusnames);
- _PyCode_ClearLocalsPlusKinds(localspluskinds);
+ Py_XDECREF(varnames);
+ Py_XDECREF(freevars);
+ Py_XDECREF(cellvars);
Py_XDECREF(filename);
Py_XDECREF(name);
Py_XDECREF(linetable);