summaryrefslogtreecommitdiffhomepage
path: root/src/state.c
diff options
context:
space:
mode:
authorksss <[email protected]>2014-03-02 11:04:04 +0000
committerksss <[email protected]>2014-03-06 13:12:08 +0000
commit4070b5987a76a2d633a99e137035749559e2da59 (patch)
tree0a753936d9fc52112b1e9c8f2e623a0542afc298 /src/state.c
parente40428af7b02870663a6c052496c176c22c5e875 (diff)
downloadmruby-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.c16
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);
}