diff options
| author | ksss <[email protected]> | 2014-03-02 11:04:04 +0000 |
|---|---|---|
| committer | ksss <[email protected]> | 2014-03-06 13:12:08 +0000 |
| commit | 4070b5987a76a2d633a99e137035749559e2da59 (patch) | |
| tree | 0a753936d9fc52112b1e9c8f2e623a0542afc298 /src/state.c | |
| parent | e40428af7b02870663a6c052496c176c22c5e875 (diff) | |
| download | mruby-4070b5987a76a2d633a99e137035749559e2da59.tar.gz mruby-4070b5987a76a2d633a99e137035749559e2da59.zip | |
embed small string
use flags 4 for *this object is embed*
use flags 8~64 for *embed string length*
Diffstat (limited to 'src/state.c')
| -rw-r--r-- | src/state.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/state.c b/src/state.c index 9b7ad1c5a..48e75c817 100644 --- a/src/state.c +++ b/src/state.c @@ -136,7 +136,7 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) for (i=0; i<irep->plen; i++) { if (mrb_type(irep->pool[i]) == MRB_TT_STRING) { if ((mrb_str_ptr(irep->pool[i])->flags & MRB_STR_NOFREE) == 0) { - mrb_free(mrb, mrb_str_ptr(irep->pool[i])->ptr); + mrb_free(mrb, mrb_str_ptr(irep->pool[i])->as.heap.ptr); } mrb_free(mrb, mrb_obj_ptr(irep->pool[i])); } @@ -169,19 +169,19 @@ mrb_str_pool(mrb_state *mrb, mrb_value str) ns->tt = MRB_TT_STRING; ns->c = mrb->string_class; - len = s->len; - ns->len = len; + len = s->as.heap.len; + ns->as.heap.len = len; if (s->flags & MRB_STR_NOFREE) { - ns->ptr = s->ptr; + ns->as.heap.ptr = s->as.heap.ptr; ns->flags = MRB_STR_NOFREE; } else { ns->flags = 0; - ns->ptr = (char *)mrb_malloc(mrb, (size_t)len+1); - if (s->ptr) { - memcpy(ns->ptr, s->ptr, len); + ns->as.heap.ptr = (char *)mrb_malloc(mrb, (size_t)len+1); + if (s->as.heap.ptr) { + memcpy(ns->as.heap.ptr, s->as.heap.ptr, len); } - ns->ptr[len] = '\0'; + ns->as.heap.ptr[len] = '\0'; } return mrb_obj_value(ns); } |
