summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-string-utf8/src
diff options
context:
space:
mode:
authormattn <[email protected]>2014-06-04 10:20:51 +0900
committermattn <[email protected]>2014-06-04 10:20:51 +0900
commit5410b9c46c53cc5f5f59a67aaefcf3d639baa63d (patch)
treebd301f6aa400b99e3d6b3414a1272c1067a0eb5e /mrbgems/mruby-string-utf8/src
parentf18771eb4246547643c437572dd646aa21b728e8 (diff)
downloadmruby-5410b9c46c53cc5f5f59a67aaefcf3d639baa63d.tar.gz
mruby-5410b9c46c53cc5f5f59a67aaefcf3d639baa63d.zip
arena save/restore
Diffstat (limited to 'mrbgems/mruby-string-utf8/src')
-rw-r--r--mrbgems/mruby-string-utf8/src/string.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/mrbgems/mruby-string-utf8/src/string.c b/mrbgems/mruby-string-utf8/src/string.c
index c8934d241..e47d6a725 100644
--- a/mrbgems/mruby-string-utf8/src/string.c
+++ b/mrbgems/mruby-string-utf8/src/string.c
@@ -695,8 +695,10 @@ mrb_str_chars(mrb_state *mrb, mrb_value self)
return self;
}
while (p < e) {
+ int ai = mrb_gc_arena_save(mrb);
mrb_int len = utf8len((unsigned char*) p);
mrb_ary_push(mrb, result, mrb_str_new(mrb, p, len));
+ mrb_gc_arena_restore(mrb, ai);
p += len;
}
return result;
@@ -725,8 +727,10 @@ mrb_str_codepoints(mrb_state *mrb, mrb_value self)
return self;
}
while (p < e) {
+ int ai = mrb_gc_arena_save(mrb);
mrb_int len = utf8len((unsigned char*) p);
mrb_ary_push(mrb, result, mrb_fixnum_value(utf8code((unsigned char*) p)));
+ mrb_gc_arena_restore(mrb, ai);
p += len;
}
return result;