summaryrefslogtreecommitdiff
path: root/Python/peephole.c
diff options
context:
space:
mode:
authorAlexandre Vassalotti <alexandre@peadrop.com>2009-07-21 02:51:58 +0000
committerAlexandre Vassalotti <alexandre@peadrop.com>2009-07-21 02:51:58 +0000
commit4002bcf6d0a51bff1bd8ad8e252b17e4c4856019 (patch)
tree60392cedfe6fd293a4ee45b76a496e60105dd27d /Python/peephole.c
parentea765ad52b9131a8f44b1f5d8c1184bbf62c8db4 (diff)
downloadcpython-4002bcf6d0a51bff1bd8ad8e252b17e4c4856019.tar.gz
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 ........
Diffstat (limited to 'Python/peephole.c')
-rw-r--r--Python/peephole.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/Python/peephole.c b/Python/peephole.c
index 23735b0a31..9163091272 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -330,7 +330,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* 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 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* 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 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* 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 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
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 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
PyMem_Free(blocks);
return code;
+ exitError:
+ code = NULL;
+
exitUnchanged:
if (blocks != NULL)
PyMem_Free(blocks);
@@ -674,6 +677,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
PyMem_Free(addrmap);
if (codestr != NULL)
PyMem_Free(codestr);
- Py_INCREF(code);
+ Py_XINCREF(code);
return code;
}