diff options
author | Raymond Hettinger <python@rcn.com> | 2005-02-10 01:42:32 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2005-02-10 01:42:32 (GMT) |
commit | b615bf06813022dccba98309cdfb77f409c4742f (patch) | |
tree | 54dd12fa702f526f2aa73538dcf654c8b97bae1a /Python/compile.c | |
parent | 4e9907c91478d25161294e9d2cad790eed987928 (diff) | |
download | cpython-b615bf06813022dccba98309cdfb77f409c4742f.zip cpython-b615bf06813022dccba98309cdfb77f409c4742f.tar.gz cpython-b615bf06813022dccba98309cdfb77f409c4742f.tar.bz2 |
Remove the set conversion which didn't work with: [] in (0,)
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 54 |
1 files changed, 1 insertions, 53 deletions
diff --git a/Python/compile.c b/Python/compile.c index f90f82c..c1c2fa9 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -542,53 +542,6 @@ fold_binops_on_constants(unsigned char *codestr, PyObject *consts) return 1; } -/* Replace LOAD_CONST tuple with LOAD_CONST frozenset in the context - of a single-use constant for "in" and "not in" tests. -*/ -int -try_set_conversion(unsigned char *codestr, PyObject *consts) -{ - PyObject *newconst, *constant; - int arg, len_consts; - - /* Pre-conditions */ - assert(PyList_CheckExact(consts)); - assert(codestr[0] == LOAD_CONST); - assert(codestr[3] == COMPARE_OP); - assert(GETARG(codestr, 3) == 6 || GETARG(codestr, 3) == 7); - - /* Attempt to convert constant to a frozenset. Bail-out with no - changes if the tuple contains unhashable values. */ - arg = GETARG(codestr, 0); - constant = PyList_GET_ITEM(consts, arg); - if (constant->ob_type != &PyTuple_Type) - return 0; - newconst = PyObject_CallFunctionObjArgs( - (PyObject *)&PyFrozenSet_Type, constant, NULL); - if (newconst == NULL) { - PyErr_Clear(); - return 0; - } - - /* Append new constant onto consts list or replace existing constant - if there are no other references to it.*/ - if (constant->ob_refcnt == 1) { - PyList_SET_ITEM(consts, arg, newconst); - Py_DECREF(constant); - return 1; - } - len_consts = PyList_GET_SIZE(consts); - if (PyList_Append(consts, newconst)) { - Py_DECREF(newconst); - return 0; - } - Py_DECREF(newconst); - - /* Write new LOAD_CONST newconst on top of LOAD_CONST oldconst */ - SETARG(codestr, 0, len_consts); - return 1; -} - static unsigned int * markblocks(unsigned char *code, int len) { @@ -714,15 +667,10 @@ optimize_code(PyObject *code, PyObject* consts, PyObject *names, PyObject *linen /* not a is b --> a is not b not a in b --> a not in b not a is not b --> a is b - not a not in b --> a in b - - a in c --> a in frozenset(c) - where c is a constant tuple of hashable values + not a not in b --> a in b */ case COMPARE_OP: j = GETARG(codestr, i); - if (lastlc >= 1 && (j == 6 || j == 7) && ISBASICBLOCK(blocks,i-3,6)) - try_set_conversion(&codestr[i-3], consts); if (j < 6 || j > 9 || codestr[i+3] != UNARY_NOT || !ISBASICBLOCK(blocks,i,4)) |