[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