]> granicus.if.org Git - python/commitdiff
Remove the set conversion which didn't work with: [] in (0,)
authorRaymond Hettinger <python@rcn.com>
Thu, 10 Feb 2005 01:42:32 +0000 (01:42 +0000)
committerRaymond Hettinger <python@rcn.com>
Thu, 10 Feb 2005 01:42:32 +0000 (01:42 +0000)
Python/compile.c

index f90f82c878dc51280911aa6afd777dc4fc04b0fe..c1c2fa9f134eab5850a4c5beab336ac54482d916 100644 (file)
@@ -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))