diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-08-29 22:46:25 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-08-29 22:46:49 +0200 |
| commit | b099b1e3f7fd0956c0fd0be5901eb2ffce0e956e (patch) | |
| tree | f9f139308378da84884cb5f295521f9cccb5d678 /src/rt/rust_builtin.cpp | |
| parent | 14567c5eb05b6dd7ba9706a605c8d3ee8c5d8742 (diff) | |
| download | rust-b099b1e3f7fd0956c0fd0be5901eb2ffce0e956e.tar.gz rust-b099b1e3f7fd0956c0fd0be5901eb2ffce0e956e.zip | |
Make std::istr::push_byte efficient
It used to allocate two (!) heap values per pushed byte. It now goes through a runtime function that simply grows the istr and writes the byte.
Diffstat (limited to 'src/rt/rust_builtin.cpp')
| -rw-r--r-- | src/rt/rust_builtin.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index 049fe71384e..679a04b93d6 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -243,6 +243,15 @@ vec_from_buf_shared(rust_task *task, type_desc *ty, return v; } +extern "C" CDECL void +rust_istr_push(rust_task* task, rust_vec** sp, uint8_t byte) { + size_t fill = (*sp)->fill; + reserve_vec(task, sp, fill + 1); + (*sp)->data[fill-1] = byte; + (*sp)->data[fill] = 0; + (*sp)->fill = fill + 1; +} + extern "C" CDECL rust_str * str_from_cstr(rust_task *task, char *sbuf) { |
