[pypy-svn] r37053 - in pypy/dist/pypy/jit/codegen: i386 test

arigo at codespeak.net arigo at codespeak.net
Sat Jan 20 09:35:28 CET 2007


Author: arigo
Date: Sat Jan 20 09:35:25 2007
New Revision: 37053

Modified:
   pypy/dist/pypy/jit/codegen/i386/rgenop.py
   pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
Fix bad code generated for switches that have only a default path and no case.


Modified: pypy/dist/pypy/jit/codegen/i386/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/rgenop.py	(original)
+++ pypy/dist/pypy/jit/codegen/i386/rgenop.py	Sat Jan 20 09:35:25 2007
@@ -838,7 +838,11 @@
         self._reserve(mc)
         default_builder = Builder(self.rgenop, self.inputargs_gv,
                                   self.inputoperands)
-        default_builder.set_coming_from(mc)
+        start = self.nextfreepos
+        end   = self.endfreepos
+        fullmc = self.rgenop.InMemoryCodeBuilder(start, end)
+        default_builder.set_coming_from(fullmc)
+        fullmc.done()
         default_builder.update_defaultcaseaddr_of = self
         default_builder.start_writing()
         return default_builder

Modified: pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/test/rgenop_tests.py	(original)
+++ pypy/dist/pypy/jit/codegen/test/rgenop_tests.py	Sat Jan 20 09:35:25 2007
@@ -984,3 +984,17 @@
 
         res = fn(3)
         assert res == 8
+
+    def test_defaultonly_switch(self):
+        rgenop = self.RGenOp()
+        signed_kind = rgenop.kindToken(lltype.Signed)
+        sigtoken = rgenop.sigToken(FUNC)
+        builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "defaultonly")
+        flexswitch, default_builder = builder.flexswitch(gv_x, [gv_x])
+        default_builder.finish_and_return(sigtoken, gv_x)
+        builder.end()
+
+        fnptr = self.cast(gv_callable, 1)
+
+        res = fnptr(17)
+        assert res == 17



More information about the Pypy-commit mailing list