summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-04-12 14:28:52 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-04-12 14:28:52 +0900
commit63eddaa696c60f091a24f59ff81c89e1beb545ac (patch)
tree01b96f210e8be18571abcb693398048f5b4bedc8 /src
parent18ee842bea517cfc8162d3d6ab46797d26f3b116 (diff)
parentfcd6e4a7a444de7b6aaf2f0f38f3dbc043e8d495 (diff)
downloadmruby-63eddaa696c60f091a24f59ff81c89e1beb545ac.tar.gz
mruby-63eddaa696c60f091a24f59ff81c89e1beb545ac.zip
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'src')
-rw-r--r--src/state.c4
-rw-r--r--src/string.c5
2 files changed, 4 insertions, 5 deletions
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; i<irep->plen; 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
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