summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-12-25 09:48:57 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-12-25 09:48:57 +0900
commit48ad07eb41fa9d2f0990ec7addcb2be5a7317659 (patch)
tree3d6094fc219b728f1043011c8a4169bf930428d0
parentbd76b2dea8202907febfb70002c164a0ddadbb39 (diff)
downloadmruby-48ad07eb41fa9d2f0990ec7addcb2be5a7317659.tar.gz
mruby-48ad07eb41fa9d2f0990ec7addcb2be5a7317659.zip
zero copy str_new from static allocate irep
-rw-r--r--src/load.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/load.c b/src/load.c
index 30bd5d8be..247fce687 100644
--- a/src/load.c
+++ b/src/load.c
@@ -98,7 +98,12 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, uint32_t *len, mrb_bool a
tt = *src++; //pool TT
pool_data_len = bin_to_uint16(src); //pool data length
src += sizeof(uint16_t);
- s = mrb_str_new(mrb, (char *)src, pool_data_len);
+ if (alloc) {
+ s = mrb_str_new(mrb, (char *)src, pool_data_len);
+ }
+ else {
+ s = mrb_str_new_static(mrb, (char *)src, pool_data_len);
+ }
src += pool_data_len;
switch (tt) { //pool data
case IREP_TT_FIXNUM: