diff options
| author | mattn <[email protected]> | 2014-06-04 10:20:51 +0900 |
|---|---|---|
| committer | mattn <[email protected]> | 2014-06-04 10:20:51 +0900 |
| commit | 5410b9c46c53cc5f5f59a67aaefcf3d639baa63d (patch) | |
| tree | bd301f6aa400b99e3d6b3414a1272c1067a0eb5e /mrbgems/mruby-string-utf8 | |
| parent | f18771eb4246547643c437572dd646aa21b728e8 (diff) | |
| download | mruby-5410b9c46c53cc5f5f59a67aaefcf3d639baa63d.tar.gz mruby-5410b9c46c53cc5f5f59a67aaefcf3d639baa63d.zip | |
arena save/restore
Diffstat (limited to 'mrbgems/mruby-string-utf8')
| -rw-r--r-- | mrbgems/mruby-string-utf8/src/string.c | 4 |
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; |
