Mercurial > cpython-lru_cache-weakref
diff Python/peephole.c @ 55371:3c4490ad01cf
Merged revisions 73683,73786 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r73683 | georg.brandl | 2009-06-29 10:44:49 -0400 (Mon, 29 Jun 2009) | 1 line
Fix error handling in PyCode_Optimize, by Alexander Schremmer at EuroPython sprint.
........
r73786 | benjamin.peterson | 2009-07-02 18:56:16 -0400 (Thu, 02 Jul 2009) | 1 line
condense with assertRaises
........
| author | Alexandre Vassalotti <alexandre@peadrop.com> |
|---|---|
| date | Tue, 21 Jul 2009 02:51:58 +0000 |
| parents | 3aaf2e065db0 |
| children | 27eaac07c5d6 |
line wrap: on
line diff
--- a/Python/peephole.c Tue Jul 21 00:57:50 2009 +0000 +++ b/Python/peephole.c Tue Jul 21 02:51:58 2009 +0000 @@ -330,7 +330,7 @@ /* Bail out if an exception is set */ if (PyErr_Occurred()) - goto exitUnchanged; + goto exitError; /* Bypass optimization when the lineno table is too complex */ assert(PyBytes_Check(lineno_obj)); @@ -348,7 +348,7 @@ /* Make a modifiable copy of the code string */ codestr = (unsigned char *)PyMem_Malloc(codelen); if (codestr == NULL) - goto exitUnchanged; + goto exitError; codestr = (unsigned char *)memcpy(codestr, PyBytes_AS_STRING(code), codelen); @@ -363,11 +363,11 @@ /* Mapping to new jump targets after NOPs are removed */ addrmap = (int *)PyMem_Malloc(codelen * sizeof(int)); if (addrmap == NULL) - goto exitUnchanged; + goto exitError; blocks = markblocks(codestr, codelen); if (blocks == NULL) - goto exitUnchanged; + goto exitError; assert(PyList_Check(consts)); for (i=0 ; i<codelen ; i += CODESIZE(codestr[i])) { @@ -413,7 +413,7 @@ name = _PyUnicode_AsString(PyTuple_GET_ITEM(names, j)); h = load_global(codestr, i, name, consts); if (h < 0) - goto exitUnchanged; + goto exitError; else if (h == 0) continue; cumlc = lastlc + 1; @@ -667,6 +667,9 @@ PyMem_Free(blocks); return code; + exitError: + code = NULL; + exitUnchanged: if (blocks != NULL) PyMem_Free(blocks); @@ -674,6 +677,6 @@ PyMem_Free(addrmap); if (codestr != NULL) PyMem_Free(codestr); - Py_INCREF(code); + Py_XINCREF(code); return code; }
