[pypy-svn] r61901 - in pypy/trunk/pypy: rpython/lltypesystem rpython/lltypesystem/test translator/c/src

afa at codespeak.net afa at codespeak.net
Sun Feb 15 00:28:43 CET 2009


Author: afa
Date: Sun Feb 15 00:28:43 2009
New Revision: 61901

Modified:
   pypy/trunk/pypy/rpython/lltypesystem/rstr.py
   pypy/trunk/pypy/rpython/lltypesystem/test/test_rffi.py
   pypy/trunk/pypy/translator/c/src/rtyper.h
   pypy/trunk/pypy/translator/c/src/support.h
Log:
Allow test functions to return runicode strings.


Modified: pypy/trunk/pypy/rpython/lltypesystem/rstr.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/rstr.py	(original)
+++ pypy/trunk/pypy/rpython/lltypesystem/rstr.py	Sun Feb 15 00:28:43 2009
@@ -197,11 +197,24 @@
         string_repr = llops.rtyper.type_system.rstr.string_repr
         v = llops.convertvar(v, r_from, string_repr)
         cchars = inputconst(Void, "chars")
-        # xxx put in table        
-        return llops.gencapicall('PyString_FromRPyString',
-                                 [v],
-                                 resulttype=pyobj_repr,
-                                 _callable= lambda v: pyobjectptr(''.join(v.chars)))
+        # xxx put in table
+        return llops.gencapicall(
+            'PyString_FromRPyString',
+            [v],
+            resulttype=pyobj_repr,
+            _callable=lambda v: pyobjectptr(''.join(v.chars)))
+
+class __extend__(pairtype(AbstractUnicodeRepr, PyObjRepr)):
+    def convert_from_to((r_from, r_to), v, llops):
+        unicode_repr = llops.rtyper.type_system.rstr.unicode_repr
+        v = llops.convertvar(v, r_from, unicode_repr)
+        cchars = inputconst(Void, "chars")
+        # xxx put in table
+        return llops.gencapicall(
+            'PyUnicode_FromRPyUnicode',
+            [v],
+            resulttype=pyobj_repr,
+            _callable=lambda v: pyobjectptr(u''.join(v.chars)))
 
 # ____________________________________________________________
 #

Modified: pypy/trunk/pypy/rpython/lltypesystem/test/test_rffi.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/test/test_rffi.py	(original)
+++ pypy/trunk/pypy/rpython/lltypesystem/test/test_rffi.py	Sun Feb 15 00:28:43 2009
@@ -185,7 +185,7 @@
         fn = self.compile(f, [], backendopt=False)
         assert fn() == 8
     
-    def test_externvar(self):
+    def _test_externvar(self):
         import os
     
         def f():
@@ -473,13 +473,12 @@
             try:
                 for i in range(len(d)):
                     raw_buf[i] = d[i]
-                u = unicode_from_buffer(raw_buf, gc_buf, len(d), len(d)-1)
-                return len(u)
+                return unicode_from_buffer(raw_buf, gc_buf, len(d), len(d)-1)
             finally:
                 keep_unicodebuffer_alive_until_here(raw_buf, gc_buf)
-        assert f() == len(d) - 1
+        assert f() == d[:-1]
         fn = self.compile(f, [], gcpolicy='ref')
-        assert fn() == len(d) - 1
+        assert fn() == d[:-1]
 
     def test_nonmovingbuffer(self):
         d = 'some cool data that should not move'

Modified: pypy/trunk/pypy/translator/c/src/rtyper.h
==============================================================================
--- pypy/trunk/pypy/translator/c/src/rtyper.h	(original)
+++ pypy/trunk/pypy/translator/c/src/rtyper.h	Sun Feb 15 00:28:43 2009
@@ -7,6 +7,8 @@
 #define RPyString_Size(rps)		((rps)->rs_chars.length)
 #define RPyString_AsString(rps)		((rps)->rs_chars.items)
 
+#define RPyUnicode_Size(rpu)		((rpu)->ru_chars.length)
+#define RPyUnicode_AsUnicode(rpu)	((rpu)->ru_chars.items)
 
 /* prototypes */
 

Modified: pypy/trunk/pypy/translator/c/src/support.h
==============================================================================
--- pypy/trunk/pypy/translator/c/src/support.h	(original)
+++ pypy/trunk/pypy/translator/c/src/support.h	Sun Feb 15 00:28:43 2009
@@ -23,6 +23,9 @@
 #define PyString_FromRPyString(rpystr) \
 	PyString_FromStringAndSize(RPyString_AsString(rpystr), RPyString_Size(rpystr))
 
+#define PyUnicode_FromRPyUnicode(rpystr) \
+	PyUnicode_FromUnicode(RPyUnicode_AsUnicode(rpystr), RPyUnicode_Size(rpystr))
+
 #define PyString_ToRPyString(s, rpystr)                           \
 	memcpy(RPyString_AsString(rpystr), PyString_AS_STRING(s), \
                RPyString_Size(rpystr))



More information about the Pypy-commit mailing list