diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/_vec.rs | 2 | ||||
| -rw-r--r-- | src/rt/rust_builtin.cpp | 9 | ||||
| -rw-r--r-- | src/rt/rustrt.def.in | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs index cc8fabca..ab222be9 100644 --- a/src/lib/_vec.rs +++ b/src/lib/_vec.rs @@ -31,6 +31,8 @@ native "rust" mod rustrt { fn vec_print_debug_info[T](vec[T] v); fn vec_from_vbuf[T](vbuf v, uint n_elts) -> vec[T]; + + fn unsafe_vec_to_mut[T](vec[T] v) -> vec[mutable T]; } fn alloc[T](uint n_elts) -> vec[T] { diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 5566835d..a2323898 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -178,6 +178,15 @@ vec_from_vbuf(rust_task *task, type_desc *ty, void *vbuf, size_t n_elts) vbuf); } +extern "C" CDECL rust_vec* +unsafe_vec_to_mut(rust_task *task, type_desc *ty, rust_vec *v) +{ + if (v->ref_count != CONST_REFCOUNT) { + v->ref(); + } + return v; +} + extern "C" CDECL rust_str* str_alloc(rust_task *task, size_t n_bytes) { diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in index e378fa8d..d30c146e 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -33,6 +33,7 @@ str_from_vec str_push_byte str_vec task_sleep +unsafe_vec_to_mut unsupervise upcall_clone_chan upcall_del_chan |