From 9c259c501a619d7e1ca34f5092fbbe4e6c9d40b9 Mon Sep 17 00:00:00 2001 From: Jun Hiroe Date: Wed, 11 Jun 2014 01:00:35 +0900 Subject: Add NOFREE macros --- mrbgems/mruby-string-ext/src/string.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-string-ext/src/string.c') diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 48146944d..9c172081b 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -254,8 +254,8 @@ mrb_str_clear(mrb_state *mrb, mrb_value str) struct RString *s = mrb_str_ptr(str); if (!RSTR_SHARED_P(s) && !RSTR_EMBED_P(s)) { - if (s->flags & MRB_STR_NOFREE) { - s->flags &= ~MRB_STR_NOFREE; + if (RSTR_NOFREE_P(s)) { + RSTR_UNSET_NOFREE_FLAG(s); } else { mrb_free(mrb, s->as.heap.ptr); -- cgit v1.2.3 From f1e15b023655bb0c377fada2e26b8361f702d429 Mon Sep 17 00:00:00 2001 From: ksss Date: Wed, 11 Jun 2014 14:46:52 +0000 Subject: String#clear: use String#replace to simple --- mrbgems/mruby-string-ext/mrblib/string.rb | 14 ++++++++++++++ mrbgems/mruby-string-ext/src/string.c | 32 ------------------------------- 2 files changed, 14 insertions(+), 32 deletions(-) (limited to 'mrbgems/mruby-string-ext/src/string.c') diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb index a08fc0f46..1cfb7e2f5 100644 --- a/mrbgems/mruby-string-ext/mrblib/string.rb +++ b/mrbgems/mruby-string-ext/mrblib/string.rb @@ -1,4 +1,18 @@ class String + + ## + # call-seq: + # string.clear -> string + # + # Makes string empty. + # + # a = "abcde" + # a.clear #=> "" + # + def clear + self.replace("") + end + ## # call-seq: # str.lstrip -> new_str diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 9c172081b..f04f12c4b 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -239,37 +239,6 @@ mrb_str_lines(mrb_state *mrb, mrb_value self) return result; } -/* - * call-seq: - * string.clear -> string - * - * Makes string empty. - * - * a = "abcde" - * a.clear #=> "" - */ -static mrb_value -mrb_str_clear(mrb_state *mrb, mrb_value str) -{ - struct RString *s = mrb_str_ptr(str); - - if (!RSTR_SHARED_P(s) && !RSTR_EMBED_P(s)) { - if (RSTR_NOFREE_P(s)) { - RSTR_UNSET_NOFREE_FLAG(s); - } - else { - mrb_free(mrb, s->as.heap.ptr); - } - s->as.heap.ptr = 0; - s->as.heap.len = 0; - } - RSTR_UNSET_SHARED_FLAG(s); - RSTR_SET_EMBED_FLAG(s); - RSTR_SET_EMBED_LEN(s, 0); - RSTRING_PTR(str)[0] = '\0'; - return str; -} - void mrb_mruby_string_ext_gem_init(mrb_state* mrb) { @@ -287,7 +256,6 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb) mrb_define_method(mrb, s, "oct", mrb_str_oct, MRB_ARGS_NONE()); mrb_define_method(mrb, s, "chr", mrb_str_chr, MRB_ARGS_NONE()); mrb_define_method(mrb, s, "lines", mrb_str_lines, MRB_ARGS_NONE()); - mrb_define_method(mrb, s, "clear", mrb_str_clear, MRB_ARGS_NONE()); } void -- cgit v1.2.3