diff options
Diffstat (limited to 'src/rt/rust_builtin.cpp')
| -rw-r--r-- | src/rt/rust_builtin.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
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) { |