]> granicus.if.org Git - python/commitdiff
Fix embarrassing typo and fix constantification of None
authorRaymond Hettinger <python@rcn.com>
Fri, 2 Mar 2007 19:20:46 +0000 (19:20 +0000)
committerRaymond Hettinger <python@rcn.com>
Fri, 2 Mar 2007 19:20:46 +0000 (19:20 +0000)
Lib/test/test_peepholer.py
Python/peephole.c

index 02b04e071fef2f5b29282dd928e814d2aa969dac..c547984daaaf0b36020cd21cde5a25ffccb6fd9b 100644 (file)
@@ -49,6 +49,11 @@ class TestTranforms(unittest.TestCase):
             self.assert_(elem not in asm)
         for elem in ('LOAD_CONST', '(None)'):
             self.assert_(elem in asm)
+        def f():
+            'Adding a docstring made this test fail in Py2.5.0'
+            return None
+        self.assert_('LOAD_CONST' in disassemble(f))
+        self.assert_('LOAD_GLOBAL' not in disassemble(f))
 
     def test_while_one(self):
         # Skip over:  LOAD_CONST trueconst  JUMP_IF_FALSE xx  POP_TOP
index f2fe6cebcfdd3fc573b4b38f15b4ab1058ee8335..71113316bbe7ed544487f07cd0339cf41f79ae2e 100644 (file)
@@ -1,4 +1,4 @@
-/* Peehole optimizations for bytecode compiler. */
+/* Peephole optimizations for bytecode compiler. */
 
 #include "Python.h"
 
@@ -386,13 +386,17 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
                                if (name == NULL  ||  strcmp(name, "None") != 0)
                                        continue;
                                for (j=0 ; j < PyList_GET_SIZE(consts) ; j++) {
-                                       if (PyList_GET_ITEM(consts, j) == Py_None) {
-                                               codestr[i] = LOAD_CONST;
-                                               SETARG(codestr, i, j);
-                                               cumlc = lastlc + 1;
+                                       if (PyList_GET_ITEM(consts, j) == Py_None)
                                                break;
-                                       }
                                }
+                               if (j == PyList_GET_SIZE(consts)) {
+                                       if (PyList_Append(consts, Py_None) == -1)
+                                               goto exitUnchanged;                                        
+                               }
+                               assert(PyList_GET_ITEM(consts, j) == Py_None);
+                               codestr[i] = LOAD_CONST;
+                               SETARG(codestr, i, j);
+                               cumlc = lastlc + 1;
                                break;
 
                                /* Skip over LOAD_CONST trueconst