[svn:parrot] r48385 - branches/unshared_buffers/src/string/encoding

darbelo at svn.parrot.org darbelo at svn.parrot.org
Tue Aug 10 21:02:34 UTC 2010


Author: darbelo
Date: Tue Aug 10 21:02:34 2010
New Revision: 48385
URL: https://trac.parrot.org/parrot/changeset/48385

Log:
Make utf16 not depend on str_new.

Modified:
   branches/unshared_buffers/src/string/encoding/utf16.c

Modified: branches/unshared_buffers/src/string/encoding/utf16.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/utf16.c	Tue Aug 10 21:02:21 2010	(r48384)
+++ branches/unshared_buffers/src/string/encoding/utf16.c	Tue Aug 10 21:02:34 2010	(r48385)
@@ -377,16 +377,26 @@
 get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
 {
     ASSERT_ARGS(get_codepoints)
-    String_iter iter;
-    UINTVAL start;
+    const UINTVAL flags = PObj_get_FLAGS(src) & ~PObj_external_FLAG;
+    STRING * const dst  = Parrot_gc_new_string_header(interp, flags);
+    String_iter    iter;
+    UINTVAL        start, size;
 
     iter_init(interp, src, &iter);
     iter.set_position(interp, &iter, offset);
     start = iter.bytepos;
     iter.set_position(interp, &iter, offset + count);
+    size = iter.bytepos - start;
+
+    Parrot_gc_allocate_string_storage(interp, dst, size);
+    mem_sys_memcopy(Buffer_bufstart(dst), Buffer_bufstart(src) + start, size);
+
+    dst->encoding = src->encoding;
+    dst->charset  = src->charset;
+    dst->strlen   = count;
+    dst->bufused  = size;
 
-    return Parrot_str_new_init(interp, (char *)Buffer_bufstart(src) + start,
-        iter.bytepos - start, src->encoding, src->charset, PObj_get_FLAGS(src));
+    return dst;
 }
 
 


More information about the parrot-commits mailing list