This commit is contained in:
Michael Foord 2011-03-15 18:38:41 -04:00
commit 72d4693336
2 changed files with 16 additions and 2 deletions

View File

@ -19,6 +19,7 @@ def disassemble(func):
def dis_single(line):
return disassemble(compile(line, '', 'single'))
class TestTranforms(unittest.TestCase):
def test_unot(self):
@ -294,11 +295,23 @@ class TestTranforms(unittest.TestCase):
self.assertNotIn('BINARY_', asm, e)
self.assertNotIn('BUILD_', asm, e)
class TestBuglets(unittest.TestCase):
def test_bug_11510(self):
# folded constant set optimization was commingled with the tuple
# unpacking optimization which would fail if the set had duplicate
# elements so that the set length was unexpected
def f():
x, y = {1, 1}
return x, y
with self.assertRaises(ValueError):
f()
def test_main(verbose=None):
import sys
from test import support
test_classes = (TestTranforms,)
test_classes = (TestTranforms, TestBuglets)
support.run_unittest(*test_classes)
# verify reference counting

View File

@ -535,7 +535,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
}
if (codestr[i+3] != UNPACK_SEQUENCE ||
!ISBASICBLOCK(blocks,i,6) ||
j != GETARG(codestr, i+3))
j != GETARG(codestr, i+3) ||
opcode == BUILD_SET)
continue;
if (j == 1) {
memset(codestr+i, NOP, 6);