From e08998be8f2056482567f458938cd584702cb485 Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 12 Apr 2014 12:57:19 +0900 Subject: Delegate irep string free to mrb_gc_free_str --- src/state.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src') diff --git a/src/state.c b/src/state.c index 3dfeed5dc..1e26f49cf 100644 --- a/src/state.c +++ b/src/state.c @@ -134,9 +134,7 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) mrb_free(mrb, irep->iseq); for (i=0; iplen; i++) { if (mrb_type(irep->pool[i]) == MRB_TT_STRING) { - if ((mrb_str_ptr(irep->pool[i])->flags & (MRB_STR_NOFREE|MRB_STR_EMBED)) == 0) { - mrb_free(mrb, RSTRING_PTR(irep->pool[i])); - } + mrb_gc_free_str(mrb, RSTRING(irep->pool[i])); mrb_free(mrb, mrb_obj_ptr(irep->pool[i])); } #ifdef MRB_WORD_BOXING -- cgit v1.2.3 From d305a9dad701d2e21b3ca789820e6a78dc0e7b50 Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 12 Apr 2014 13:04:52 +0900 Subject: mrb_str_dup use sheard string instead of new string --- src/string.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/string.c b/src/string.c index 7ed83e590..51269644c 100644 --- a/src/string.c +++ b/src/string.c @@ -796,10 +796,11 @@ mrb_str_index(mrb_state *mrb, mrb_value str, mrb_value sub, mrb_int offset) mrb_value mrb_str_dup(mrb_state *mrb, mrb_value str) { - /* should return shared string */ struct RString *s = mrb_str_ptr(str); + struct RString *dup = str_new(mrb, 0, 0); - return mrb_str_new(mrb, STR_PTR(s), STR_LEN(s)); + str_with_class(mrb, dup, str); + return str_replace(mrb, dup, s); } static mrb_value -- cgit v1.2.3