[svn:parrot] r48384 - branches/unshared_buffers/src/string/encoding
darbelo at svn.parrot.org
darbelo at svn.parrot.org
Tue Aug 10 21:02:21 UTC 2010
Author: darbelo
Date: Tue Aug 10 21:02:21 2010
New Revision: 48384
URL: https://trac.parrot.org/parrot/changeset/48384
Log:
Make utf8 not depend on str_new.
Modified:
branches/unshared_buffers/src/string/encoding/utf8.c
Modified: branches/unshared_buffers/src/string/encoding/utf8.c
==============================================================================
--- branches/unshared_buffers/src/string/encoding/utf8.c Tue Aug 10 19:51:09 2010 (r48383)
+++ branches/unshared_buffers/src/string/encoding/utf8.c Tue Aug 10 21:02:21 2010 (r48384)
@@ -678,21 +678,26 @@
get_codepoints(PARROT_INTERP, ARGIN(const STRING *src), UINTVAL offset, UINTVAL count)
{
ASSERT_ARGS(get_codepoints)
+ 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;
+ 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;
- if (offset)
- iter.set_position(interp, &iter, offset);
-
- start = iter.bytepos;
-
- if (count)
- iter.set_position(interp, &iter, offset + count);
-
- 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