[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