Author: Antonio Cuni <[email protected]>
Branch: 
Changeset: r57049:eae84b7cc330
Date: 2012-08-31 11:16 +0200
http://bitbucket.org/pypy/pypy/changeset/eae84b7cc330/

Log:    rpython fix: unicode_encode_utf8 has already been annotated when we
        are rtyping .encode('utf-8'), so we need to make sure that the
        annotations are compatible

diff --git a/pypy/rpython/lltypesystem/rstr.py 
b/pypy/rpython/lltypesystem/rstr.py
--- a/pypy/rpython/lltypesystem/rstr.py
+++ b/pypy/rpython/lltypesystem/rstr.py
@@ -199,6 +199,7 @@
         from pypy.rpython.annlowlevel import hlunicode, llstr
         from pypy.rlib.runicode import unicode_encode_utf_8
         s = hlunicode(ll_s)
+        assert s is not None
         bytes = unicode_encode_utf_8(s, len(s), 'strict')
         return llstr(bytes)
 
diff --git a/pypy/rpython/ootypesystem/rstr.py 
b/pypy/rpython/ootypesystem/rstr.py
--- a/pypy/rpython/ootypesystem/rstr.py
+++ b/pypy/rpython/ootypesystem/rstr.py
@@ -109,6 +109,7 @@
         from pypy.rpython.annlowlevel import hlunicode, oostr
         from pypy.rlib.runicode import unicode_encode_utf_8
         s = hlunicode(ll_s)
+        assert s is not None
         bytes = unicode_encode_utf_8(s, len(s), 'strict')
         return oostr(bytes)
 
diff --git a/pypy/rpython/test/test_runicode.py 
b/pypy/rpython/test/test_runicode.py
--- a/pypy/rpython/test/test_runicode.py
+++ b/pypy/rpython/test/test_runicode.py
@@ -106,6 +106,20 @@
 
         assert self.ll_to_string(self.interpret(f, [38])) == f(38)
 
+    def test_utf_8_encoding_annotation(self):
+        from pypy.rlib.runicode import unicode_encode_utf_8
+        def f(n):
+            x = u'&#224;&#232;&#236;' + unichr(n)
+            if x:
+                y = u'&#236;&#242;&#233;'
+            else:
+                y = u'&#242;&#236;&#224;&#224;'
+            # the annotation of y is SomeUnicodeString(can_be_None=False)
+            y = unicode_encode_utf_8(y, len(y), 'strict')
+            return x.encode('utf-8') + y
+
+        assert self.ll_to_string(self.interpret(f, [38])) == f(38)
+
     def test_unicode_encode_error(self):
         def f(x, which):
             if which:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to