Author: Antonio Cuni <anto.c...@gmail.com>
Branch: 
Changeset: r65316:07d4ffd55e14
Date: 2013-07-10 14:04 +0200
http://bitbucket.org/pypy/pypy/changeset/07d4ffd55e14/

Log:    fix test_rbytearray.py, which was broken by the improve-str2charp
        branch

diff --git a/rpython/rtyper/lltypesystem/rbytearray.py 
b/rpython/rtyper/lltypesystem/rbytearray.py
--- a/rpython/rtyper/lltypesystem/rbytearray.py
+++ b/rpython/rtyper/lltypesystem/rbytearray.py
@@ -8,13 +8,13 @@
 def mallocbytearray(size):
     return lltype.malloc(BYTEARRAY, size)
 
-copy_bytearray_contents = rstr._new_copy_contents_fun(BYTEARRAY, BYTEARRAY,
-                                                      lltype.Char,
-                                                      'bytearray')
-copy_bytearray_contents_from_str = rstr._new_copy_contents_fun(rstr.STR,
-                                                               BYTEARRAY,
-                                                               lltype.Char,
-                                                               
'bytearray_from_str')
+_, copy_bytearray_contents = rstr._new_copy_contents_fun(BYTEARRAY, BYTEARRAY,
+                                                         lltype.Char,
+                                                         'bytearray')
+_, copy_bytearray_contents_from_str = rstr._new_copy_contents_fun(rstr.STR,
+                                                                  BYTEARRAY,
+                                                                  lltype.Char,
+                                                                  
'bytearray_from_str')
 
 BYTEARRAY.become(lltype.GcStruct('rpy_bytearray',
                  ('chars', lltype.Array(lltype.Char)), adtmeths={
diff --git a/rpython/rtyper/lltypesystem/rstr.py 
b/rpython/rtyper/lltypesystem/rstr.py
--- a/rpython/rtyper/lltypesystem/rstr.py
+++ b/rpython/rtyper/lltypesystem/rstr.py
@@ -49,17 +49,19 @@
 def emptyunicodefun():
     return emptyunicode
 
-def _new_copy_contents_fun(STR_TP, CHAR_TP, name):
-    def _str_ofs(item):
-        return (llmemory.offsetof(STR_TP, 'chars') +
-                llmemory.itemoffsetof(STR_TP.chars, 0) +
+def _new_copy_contents_fun(SRC_TP, DST_TP, CHAR_TP, name):
+    @specialize.arg(0)
+    def _str_ofs(TP, item):
+        return (llmemory.offsetof(TP, 'chars') +
+                llmemory.itemoffsetof(TP.chars, 0) +
                 llmemory.sizeof(CHAR_TP) * item)
 
-    @signature(types.any(), types.int(), returns=types.any())
-    def _get_raw_buf(src, ofs):
-        assert typeOf(src).TO == STR_TP
+    @signature(types.any(), types.any(), types.int(), returns=types.any())
+    @specialize.arg(0)
+    def _get_raw_buf(TP, src, ofs):
+        assert typeOf(src).TO == TP
         assert ofs >= 0
-        return llmemory.cast_ptr_to_adr(src) + _str_ofs(ofs)
+        return llmemory.cast_ptr_to_adr(src) + _str_ofs(TP, ofs)
     _get_raw_buf._always_inline_ = True
 
     @jit.oopspec('stroruni.copy_contents(src, dst, srcstart, dststart, 
length)')
@@ -75,8 +77,8 @@
         # longer than the raw_memcopy().
         assert length >= 0
         # from here, no GC operations can happen
-        src = _get_raw_buf(src, srcstart)
-        dst = _get_raw_buf(dst, dststart)
+        src = _get_raw_buf(SRC_TP, src, srcstart)
+        dst = _get_raw_buf(DST_TP, dst, dststart)
         llmemory.raw_memcopy(src, dst, llmemory.sizeof(CHAR_TP) * length)
         # end of "no GC" section
         keepalive_until_here(src)
@@ -95,7 +97,7 @@
         # xxx Warning: same note as above apply: don't do this at home
         assert length >= 0
         # from here, no GC operations can happen
-        src = _get_raw_buf(src, srcstart)
+        src = _get_raw_buf(SRC_TP, src, srcstart)
         adr = llmemory.cast_ptr_to_adr(ptrdst)
         dstbuf = adr + llmemory.itemoffsetof(typeOf(ptrdst).TO, 0)
         llmemory.raw_memcopy(src, dstbuf, llmemory.sizeof(CHAR_TP) * length)
@@ -106,8 +108,8 @@
 
     return copy_string_to_raw, copy_string_contents
 
-copy_string_to_raw, copy_string_contents = _new_copy_contents_fun(STR, Char, 
'string')
-copy_unicode_to_raw, copy_unicode_contents = _new_copy_contents_fun(UNICODE,
+copy_string_to_raw, copy_string_contents = _new_copy_contents_fun(STR, STR, 
Char, 'string')
+copy_unicode_to_raw, copy_unicode_contents = _new_copy_contents_fun(UNICODE, 
UNICODE,
                                                                     UniChar, 
'unicode')
 
 CONST_STR_CACHE = WeakValueDictionary()
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to