From 7015493efbc2efe6820d65eabad387f3fea4a414 Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Fri, 20 Jun 2014 21:56:03 +0900 Subject: Reduce string creation of `length`, `size`, `empty?` method of `Symbol` extension. --- mrbgems/mruby-symbol-ext/mrblib/symbol.rb | 13 +------------ mrbgems/mruby-symbol-ext/src/symbol.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/mrbgems/mruby-symbol-ext/mrblib/symbol.rb b/mrbgems/mruby-symbol-ext/mrblib/symbol.rb index b2615a760..1e249c281 100644 --- a/mrbgems/mruby-symbol-ext/mrblib/symbol.rb +++ b/mrbgems/mruby-symbol-ext/mrblib/symbol.rb @@ -7,17 +7,6 @@ class Symbol end end - ## - # call-seq: - # sym.length -> integer - # - # Same as sym.to_s.length. - - def length - self.to_s.length - end - alias :size :length - ## # call-seq: # sym.capitalize -> symbol @@ -66,7 +55,7 @@ class Symbol # Returns that _sym_ is :"" or not. def empty? - self.to_s.empty? + self.length == 0 end end diff --git a/mrbgems/mruby-symbol-ext/src/symbol.c b/mrbgems/mruby-symbol-ext/src/symbol.c index 4ed5d83c6..7ca749999 100644 --- a/mrbgems/mruby-symbol-ext/src/symbol.c +++ b/mrbgems/mruby-symbol-ext/src/symbol.c @@ -42,11 +42,27 @@ mrb_sym_all_symbols(mrb_state *mrb, mrb_value self) return ary; } +/* + * call-seq: + * sym.length -> integer + * + * Same as sym.to_s.length. + */ +static mrb_value +mrb_sym_length(mrb_state *mrb, mrb_value self) +{ + mrb_int len; + mrb_sym2name_len(mrb, mrb_symbol(self), &len); + return mrb_fixnum_value(len); +} + void mrb_mruby_symbol_ext_gem_init(mrb_state* mrb) { struct RClass *s = mrb->symbol_class; mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE()); + mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE()); + mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE()); } void -- cgit v1.2.3