Author: Armin Rigo <[email protected]>
Branch: stmgc-c7
Changeset: r69898:8a8455c7eddf
Date: 2014-03-12 12:11 +0100
http://bitbucket.org/pypy/pypy/changeset/8a8455c7eddf/
Log: Rewrite rffi.str_from_buffer() in terms of copy_raw_to_string()
rather than directly using raw_memcopy.
diff --git a/rpython/rtyper/lltypesystem/rffi.py
b/rpython/rtyper/lltypesystem/rffi.py
--- a/rpython/rtyper/lltypesystem/rffi.py
+++ b/rpython/rtyper/lltypesystem/rffi.py
@@ -4,7 +4,7 @@
from rpython.rtyper.lltypesystem import lltype, rstr
from rpython.rtyper.lltypesystem import ll2ctypes
from rpython.rtyper.lltypesystem.llmemory import cast_ptr_to_adr
-from rpython.rtyper.lltypesystem.llmemory import itemoffsetof, raw_memcopy
+from rpython.rtyper.lltypesystem.llmemory import itemoffsetof
from rpython.rtyper.llannotation import lltype_to_annotation
from rpython.tool.sourcetools import func_with_new_name
from rpython.rlib.objectmodel import Symbolic
@@ -695,7 +695,9 @@
if strtype is str:
from rpython.rtyper.lltypesystem.rstr import (STR as STRTYPE,
- copy_string_to_raw)
+ copy_string_to_raw,
+ copy_raw_to_string,
+ copy_string_contents)
from rpython.rtyper.annlowlevel import llstr as llstrtype
from rpython.rtyper.annlowlevel import hlstr as hlstrtype
TYPEP = CCHARP
@@ -705,7 +707,9 @@
else:
from rpython.rtyper.lltypesystem.rstr import (
UNICODE as STRTYPE,
- copy_unicode_to_raw as copy_string_to_raw)
+ copy_unicode_to_raw as copy_string_to_raw,
+ copy_raw_to_unicode as copy_raw_to_string,
+ copy_unicode_contents as copy_string_contents)
from rpython.rtyper.annlowlevel import llunicode as llstrtype
from rpython.rtyper.annlowlevel import hlunicode as hlstrtype
TYPEP = CWCHARP
@@ -823,17 +827,10 @@
return hlstrtype(gc_buf)
new_buf = lltype.malloc(STRTYPE, needed_size)
- str_chars_offset = (offsetof(STRTYPE, 'chars') + \
- itemoffsetof(STRTYPE.chars, 0))
if gc_buf:
- src = cast_ptr_to_adr(gc_buf) + str_chars_offset
+ copy_string_contents(gc_buf, new_buf, 0, 0, needed_size)
else:
- src = cast_ptr_to_adr(raw_buf) + itemoffsetof(TYPEP.TO, 0)
- dest = cast_ptr_to_adr(new_buf) + str_chars_offset
- raw_memcopy(src, dest,
- llmemory.sizeof(ll_char_type) * needed_size)
- keepalive_until_here(gc_buf)
- keepalive_until_here(new_buf)
+ copy_raw_to_string(raw_buf, new_buf, 0, needed_size)
return hlstrtype(new_buf)
# (char*, str) -> None
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit