From e35984b6c67f2adf1c12d84c48fdf4f01be020e5 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 11 May 2011 00:05:03 -0400 Subject: Introduce str_slice runtime function This reduces the time to execute the new lib-str tests from 1:40ish to a few seconds and will eventually allow the full lib-sha1 test to run in a reasonable amount of time. XFAIL lib-str in stage0 - it will run very slowly until the next snapshot. --- src/rt/rust_builtin.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/rt/rust_builtin.cpp') diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 297b9df7..bc2c5add 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -226,6 +226,24 @@ str_push_byte(rust_task* task, rust_str* v, size_t byte) return v; } +extern "C" CDECL rust_str* +str_slice(rust_task* task, rust_str* v, size_t begin, size_t end) +{ + size_t len = end - begin; + rust_str *st = + vec_alloc_with_data(task, + len + 1, // +1 to fit at least '\0' + len, + 1, + len ? v->data + begin : NULL); + if (!st) { + task->fail(2); + return NULL; + } + st->data[st->fill++] = '\0'; + return st; +} + extern "C" CDECL char const * str_buf(rust_task *task, rust_str *s) { -- cgit v1.2.3