[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