[pypy-svn] r21557 - in pypy/dist/pypy/translator/llvm: . test

rxe at codespeak.net rxe at codespeak.net
Fri Dec 23 17:58:57 CET 2005


Author: rxe
Date: Fri Dec 23 17:58:55 2005
New Revision: 21557

Modified:
   pypy/dist/pypy/translator/llvm/funcnode.py
   pypy/dist/pypy/translator/llvm/test/test_merge_if_blocks.py
Log:
char needs to an ord().  Fix and test.
  


Modified: pypy/dist/pypy/translator/llvm/funcnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/funcnode.py	(original)
+++ pypy/dist/pypy/translator/llvm/funcnode.py	Fri Dec 23 17:58:55 2005
@@ -75,7 +75,7 @@
         traverse(visit, self.graph)
 
     # ______________________________________________________________________
-    # main entry points from genllvm 
+    # main entry points from genllvm    
     def writedecl(self, codewriter): 
         codewriter.declare(self.getdecl())
 
@@ -180,12 +180,20 @@
             for link in block.exits:
                 if link.exitcase is 'default':
                     defaultlink = link
-                    continue 
-                value_labels.append( (link.llexitcase, self.block_to_name[link.target]) )
-            codewriter.switch(condtype, cond, self.block_to_name[defaultlink.target], value_labels)
+                    continue
+
+                exitcase = link.llexitcase 
+                if block.exitswitch.concretetype is lltype.Char:
+                    exitcase = ord(exitcase)
+                value_labels.append( (exitcase,
+                                      self.block_to_name[link.target]) )
+
+            codewriter.switch(condtype, cond,
+                              self.block_to_name[defaultlink.target], value_labels)
 
         else:
-            raise BranchException("exitswitch type '%s' not supported" % block.exitswitch.concretetype)
+            raise BranchException("exitswitch type '%s' not supported" %
+                                  block.exitswitch.concretetype)
 
     def write_block_operations(self, codewriter, block):
         opwriter = OpWriter(self.db, codewriter, self, block)

Modified: pypy/dist/pypy/translator/llvm/test/test_merge_if_blocks.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/test_merge_if_blocks.py	(original)
+++ pypy/dist/pypy/translator/llvm/test/test_merge_if_blocks.py	Fri Dec 23 17:58:55 2005
@@ -23,7 +23,19 @@
         return 2222
     basic  = compile_optimized_function(merge_if_blocks_basic , [int])
     for i in range(-20,20):
-        assert basic(i)  == merge_if_blocks_basic(i)
+        assert basic(i) == merge_if_blocks_basic(i)
+
+def test_merge_if_blocks_chr():
+    def merge_if_blocks_chr(i):
+        c = chr(i)
+        if c == '\x05':
+            return 1005
+        elif c == '!':
+            return 1008
+        return 2222
+    basic  = compile_optimized_function(merge_if_blocks_chr , [int])
+    for i in range(0, 50):
+        assert basic(i) == merge_if_blocks_chr(i)
 
 def test_merge_if_blocks_many():
     def merge_if_blocks_many(i):



More information about the Pypy-commit mailing list