diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2021-06-04 17:51:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-04 17:51:05 +0100 |
commit | 17c4edc4e0692fe55e185755ea8a2f5238f3ef08 (patch) | |
tree | 563807f4bbdebbf89b2065e4807cc291c44be2b1 /Python/marshal.c | |
parent | a46c220edc5cf716d0b71eb80ac29ecdb4ebb430 (diff) | |
download | cpython-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.c | 52 |
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); |